Repository navigation
chore(desktop): bump oasf lock to 0.2.0 from crates.io - #1
Merged
Merged
Conversation
Rework the heavier pages onto the shared layout primitives: the sync page drops its form/dialog stack for the lean two-pane flow, home and compression pages are simplified, manager/settings get layout touch-ups, the standalone skill-prune-panel is removed, and skills queries are reworked.
Drop the old whitelisted docs workflow and stale architecture drafts so the repo ignore rules stay maintainable. Co-authored-by: Cursor <cursoragent@cursor.com>
Register the new providers and share ConversationState parsing so Amazon Q CLI and Kiro CLI SQLite sessions import consistently. Co-authored-by: Cursor <cursoragent@cursor.com>
Load VS Code chatSessions for Copilot, expand OpenCode and Antigravity coverage, and align smaller provider loaders with the shared scanning patterns. Co-authored-by: Cursor <cursoragent@cursor.com>
Apply rustfmt across the CLI and core backend while keeping session mutation, scan state, and config removal behavior unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
Move the skills-only range picker into a shared time-range section so stats, skills, and manager views reuse one stored custom range. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the progress-bar breakdowns with richer composition charts and ranking controls so the stats page surfaces trends more clearly. Co-authored-by: Cursor <cursoragent@cursor.com>
Consolidate manager navigation by folding overview stats plus compression and sync lists into tabbed result panels instead of separate routes. Co-authored-by: Cursor <cursoragent@cursor.com>
Update readiness queries, minor UI polish, and the web invariant script to match the consolidated manager navigation. Co-authored-by: Cursor <cursoragent@cursor.com>
New table caches per-phase readiness state keyed by (phase, workspace_key), with signature + timestamps to support snapshot reads and incremental reconcile decisions. Fixes the cost-amplification root cause where every GET /readiness recomputed all phases.
Add ReadinessCache (snapshot/record), per-phase signature functions, and decide_reconcile which returns Noop/Incremental/Full based on trigger + drift. Startup/WorkspaceChange never return Full; Manual/Retry may when cold, heavily drifted, or past the 7-day periodic window. Readiness struct gains reconcile_required/reconcile_reason/last_full_at/last_incremental_at fields. 5 new tests cover cold-start, record-then-stable, startup-never-full, manual-cold-full, and signature non-emptiness.
get_readiness now reads from ReadinessCache::snapshot (O(1)) instead of full
uncached assess. reconcile_readiness uses decide_reconcile and only accepts
{workspace, trigger} — focus/priority are gone. run_worker adds per-phase
timeout (30s via channel) and total budget watchdog (120s) that force-fails
the operation, clearing active_operation_id so polling stops. Manual/Retry
preempts running Steady operations by marking them Superseded. Adds 5 API
tests covering phase ordering, close-on-empty, manual preemption, force_fail,
and trigger default.
… guesswork
Reads reconcile_required/reconcile_reason from backend snapshot instead of
guessing via localStorage. Manual refresh sends {trigger:'manual'} and the
backend decides full vs incremental based on signature drift. Removes the
first-run banner module (no longer needed). Polling interval 1500ms -> 2000ms.
Pre-existing failure: skills-page.test.tsx (13 tests) broken at HEAD c36889b,
unrelated to readiness.
…ification - skills/server.rs:1723 SkillsState test initializer missing analysis_operations field (added 8/5 2928d8b, test not updated) - api/tests.rs readiness reconcile tests: old {focus,priority} contract -> new {trigger:'manual'} per tiered reconcile design - skills-page.test.tsx queries mock: add useCurrentSkillAnalysis, useSkillAnalysisOperation + complete mutation shapes (reset/variables) CLI lib: 108 passed. skills-page failures 13 -> 5 (remaining are jsdom layout gaps: recharts getBoundingClientRect + scrollIntoView, pre-existing and unrelated to readiness).
Codex export was silently dropping Block::ToolCall and Block::ToolResult (function_call/function_call_output are separate response_items, not message content). OpenCode export mapped ToolCall to plain text via the catch-all. Both now emit the provider-native tool structure so tool history survives cross-provider migration. - codex/write.rs: add codex_tool_response_items, emit it in the rollout loop - opencode/write.rs: add Block::ToolCall case to block_to_opencode_part - codex/tests.rs: cover both function_call and function_call_output shapes
…ool-call export Milestone 1 (e646d40) added native function_call/function_call_output export for codex and native tool-part export for opencode, but the export_fidelity declarations still reported tool_call and tool_result as Downgraded. export_report reads these declarations to issue MappingIssue warnings, so the report was lying: it warned 'tool_call exported as downgraded' when the export is actually native and preserved. codex: tool_call/tool_result Downgraded -> Preserved opencode: tool_call/tool_result Downgraded -> Preserved
…Call When a single event contains both Block::ToolCall and Block::ToolResult (e.g. cline/droid messages with paired tool_use+tool_result blocks), the event should be classified as Observation (result is present), not Action. claude/kimi/opencode/gemini/openclaw already checked ToolResult first; cline and droid checked ToolCall first, producing inconsistent EventKind assignment for the same semantic content across providers. Swapped the check order in cline and droid to match the majority.
opencode import produces Block::Patch from native "patch" parts, but the export path fell through to the _ wildcard and rendered the diff as plain text — breaking the round-trip. Added an explicit Block::Patch case in block_to_opencode_part that reconstructs the native patch part shape (type, files[], text, summary, hash). Also corrected the export fidelity declaration from Downgraded to Preserved.
Replace redundant _ in Role match arm with explicit Role::Other.
…ravity/windsurf Same bug as cline/droid (fixed in 4de6860): when a single event contains both Block::ToolCall and Block::ToolResult, the kind should be Observation (result present), not Action. These 5 providers checked ToolCall first. windsurf was especially broken — it hardcoded Action whenever any tool existed, ignoring whether the result was present. Updated pi test assertion: Action → Observation (the test fixture has both toolCall and toolResult in one event, so Observation is correct).
… copilot, cursor - tre: downgrade tool_call/tool_result from Preserved to Unsupported (mapper only produces Text + Other, never tool blocks) - copilot: declare tool_call=Preserved and thinking=Preserved in import_fidelity (VS Code path produces these blocks); derive EventKind::Action when ToolCall present (consistent with unified priority scheme) - cursor: add missing import_fidelity (Text/Thinking/ToolCall/ToolResult all preserved) and export_fidelity (text-only bubble export downgrades all structured block types) Co-Authored-By: claude-opus
Augment uses generic_json mapper which produces Text/Thinking/ToolCall/ ToolResult blocks, but capabilities() left import_fidelity at default (unknown). Declare preserved fidelity for the four produced block types. Co-Authored-By: claude-opus
…mpressed export_block_fidelity was reading fidelity.text instead of fidelity.compressed for Block::Compressed, silently suppressing the correct downgraded/normalized fidelity warning that providers (codex, kimi, opencode, etc.) declare for compressed segments. Now correctly emits the fidelity disposition for compressed content. Co-Authored-By: claude-opus
… import read_session_export_file now calls validate_session_schema before returning, rejecting sessions whose schema.name or schema.version differ from the OASF revision memorph was built against. Prevents silent field-level incompatibility if a future oasf bump changes Schema::default(). +2 tests: rejects mismatch, accepts correct schema. 727 pass.
Two new parameterized tests covering all 23 providers: 1. all_providers_declare_consistent_fidelity: verifies export=false providers don't claim meaningful export fidelity, and export=true providers declare all 9 export_fidelity fields. 2. export_report_matches_declared_fidelity_for_all_exporters: feeds a canonical Session containing every Block type through export_report for each export-capable provider, verifying the emitted issues exactly match the declared export_fidelity dispositions. These guards prevent silent drift between declared fidelity and actual export behavior. 729 pass.
- README.md, README_zh.md, README_en.md: add Provider Support Matrix showing all 23 providers × import/export/manage-resume capabilities. - All three READMEs: add OASF Compatibility section explaining schema version, import/export coverage, and fidelity model. - rust/crates/memorph/CHANGELOG.md: new file documenting 0.1.32 changes (schema validation, fidelity guards, prior fidelity corrections). - .gitignore: whitelist rust/crates/**/CHANGELOG.md.
…re for round-trip
DeepSeek export previously wrote item_json with a generic {source, blocks}
shape that the import parser (blocks_from_message) could not match. This
caused ToolCall/ToolResult blocks to degrade to text on memorph→DeepSeek
→memorph round-trip.
deepseek_item_json now emits the keys the import parser expects:
- ToolCall: tool_name, call_id, arguments
- ToolResult: output, tool_use_id, is_error
- fallback: source/event_id/event_kind/event_role (no tool keys)
Added round-trip test proving both block types survive export→import.
…l_result After the item_json round-trip fix, DeepSeek export now preserves ToolCall/ToolResult structure. The export_fidelity declaration was still Downgraded, understating the actual capability.
Claude: full export→JSONL→import round-trip proving ToolCall (tool_use) and ToolResult (tool_result) block structure survives intact. Codex: full export→rollout JSONL→import round-trip proving function_call/function_call_output items preserve ToolCall/ToolResult. Both tests verify text blocks survive alongside tool blocks. Covers the 'native fixture-based end-to-end round-trip' gap identified in the OASF compatibility audit for the two most important providers.
…ck events When an event contains both Text and ToolCall/ToolResult blocks, deepseek_message_content previously returned the full visible text blob (including stringified tool representations like '[Tool use: shell...]'). On reimport, blocks_from_message would then push a Text block containing the tool text, polluting the round-tripped session. Now content only includes Text/Thinking block text when the event has tool blocks, keeping the content column clean for structured item_json to carry the tool data without duplication.
Refresh the catalog and reopen the consolidated skill so users keep context while its canonical path is being resolved. Co-authored-by: Cursor <cursoragent@cursor.com>
Follow-up batch across three areas: - web/sessions: collapse per-block chain-of-thought chips into a single "Chain of thought" header tag (getEventHeaderTags) with matching block tag styling, plus tests and session-detail wiring. - agent_environment: fall back to the cursor CLI bundled inside Cursor.app (Contents/Resources/app/bin) when PATH lookup fails, covered by a unit test. - skills: add installation_targets helper deriving scoped catalog installation targets (used_by/scope/workspace) from active installations.
…lize dialog padding
- widen SessionBlockTag.type with the synthetic chain header chip - narrow WorkspaceSwitchDialog pick-mode value via mode discrimination - allow titleAs h3 in SectionHeading - skills-page tests: polyfill scrollIntoView, add installation_targets fixtures, align heatmap drill with the renamed Analyze tab, and await async catalog page size before asserting pagination
Port the grey-canvas layering model: white top zone centered, muted canvas spanning the viewport, cards floating on it with hairline borders at 50% plus a subtle shadow. - AppShell: two-segment flex layout, canvas on main, header rule dropped in favor of the color boundary - PanelCard and Card: unified border-border/50 + shadow-xs language, dark mode keeps full white/10 borders - Home: hero loses its decorative rules and negative offset, session card adopts the shared surface, hover lightens on canvas - Session detail: event cards share the unified surface - Sessions list: table-fixed with explicit column widths and truncated workspace paths so all columns fit the card
DialogContent gains a panel variant that drops default padding and gap and offsets the close button; full-height dialogs switch to it instead of repeating flex/padding overrides. Also drop a stale installations destructure in AgentInstallationSection left over from the installationTargets rename.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cargo.lock-only update: oasf 0.1.3 → 0.2.0 (registry source). No code changes.