@selesai/code 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.js +1 -1
- package/dist/core/system-prompt.d.ts +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/usage-totals.d.ts +2 -0
- package/dist/core/usage-totals.js +10 -0
- package/dist/extensions/ascii.txt +9 -0
- package/dist/extensions/package.json +1 -2
- package/dist/extensions/pi-hermes-memory/CHANGELOG.md +371 -0
- package/dist/extensions/pi-hermes-memory/LICENSE +21 -0
- package/dist/extensions/pi-hermes-memory/README.md +643 -0
- package/dist/extensions/pi-hermes-memory/docs/0.1/TASKS.md +197 -0
- package/dist/extensions/pi-hermes-memory/docs/0.2/PLAN.md +290 -0
- package/dist/extensions/pi-hermes-memory/docs/0.2/TASKS.md +134 -0
- package/dist/extensions/pi-hermes-memory/docs/0.2/TEST-PLAN.md +216 -0
- package/dist/extensions/pi-hermes-memory/docs/0.3/PLAN.md +330 -0
- package/dist/extensions/pi-hermes-memory/docs/0.3/TASKS.md +125 -0
- package/dist/extensions/pi-hermes-memory/docs/0.4/PLAN.md +160 -0
- package/dist/extensions/pi-hermes-memory/docs/0.4/TASKS.md +113 -0
- package/dist/extensions/pi-hermes-memory/docs/0.6/CHANGELOG.md +57 -0
- package/dist/extensions/pi-hermes-memory/docs/0.6/PLAN.md +202 -0
- package/dist/extensions/pi-hermes-memory/docs/0.6/TASKS.md +144 -0
- package/dist/extensions/pi-hermes-memory/docs/0.7/PLAN.md +349 -0
- package/dist/extensions/pi-hermes-memory/docs/0.7/TASKS.md +110 -0
- package/dist/extensions/pi-hermes-memory/docs/PUBLISHING.md +149 -0
- package/dist/extensions/pi-hermes-memory/docs/ROADMAP.md +468 -0
- package/dist/extensions/pi-hermes-memory/docs/images/memory-architecture.svg +1 -0
- package/dist/extensions/pi-hermes-memory/docs/images/pi-logo.svg +22 -0
- package/dist/extensions/pi-hermes-memory/docs/images/pi_memory.png +0 -0
- package/dist/extensions/pi-hermes-memory/docs/images/pi_memory.svg +19 -0
- package/dist/extensions/pi-hermes-memory/docs/images/security-flow.svg +1 -0
- package/dist/extensions/pi-hermes-memory/docs/images/session-lifecycle.svg +1 -0
- package/dist/extensions/pi-hermes-memory/docs/images/source-architecture.svg +1 -0
- package/dist/extensions/pi-hermes-memory/docs/mermaid/memory-architecture.mmd +49 -0
- package/dist/extensions/pi-hermes-memory/docs/mermaid/security-flow.mmd +40 -0
- package/dist/extensions/pi-hermes-memory/docs/mermaid/session-lifecycle.mmd +56 -0
- package/dist/extensions/pi-hermes-memory/docs/mermaid/source-architecture.mmd +54 -0
- package/dist/extensions/pi-hermes-memory/package-lock.json +3799 -0
- package/dist/extensions/pi-hermes-memory/package.json +66 -0
- package/dist/extensions/pi-hermes-memory/scripts/check-min-sdk.mjs +99 -0
- package/dist/extensions/pi-hermes-memory/scripts/ensure-dev.mjs +57 -0
- package/dist/extensions/pi-hermes-memory/src/auto-consolidation-warning.ts +6 -0
- package/dist/extensions/pi-hermes-memory/src/config.ts +178 -0
- package/dist/extensions/pi-hermes-memory/src/constants.ts +424 -0
- package/dist/extensions/pi-hermes-memory/src/extension-root-migration.ts +639 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/auto-consolidate.ts +401 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +297 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/child-process-watchdog.mjs +90 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/correction-detector.ts +300 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/index-sessions.ts +86 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/insights.ts +78 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/interview.ts +37 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/learn-memory.ts +186 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/message-parts.ts +27 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/pi-child-process.ts +485 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/preview-context.ts +105 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +506 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +145 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/session-flush.ts +151 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/session-live-index.ts +94 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/skills-command.ts +1334 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/standing-pin.ts +111 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/switch-project.ts +75 -0
- package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +266 -0
- package/dist/extensions/pi-hermes-memory/src/index.ts +378 -0
- package/dist/extensions/pi-hermes-memory/src/lifecycle-timing.ts +54 -0
- package/dist/extensions/pi-hermes-memory/src/paths.ts +61 -0
- package/dist/extensions/pi-hermes-memory/src/project-context.ts +13 -0
- package/dist/extensions/pi-hermes-memory/src/project-memory-migration.ts +93 -0
- package/dist/extensions/pi-hermes-memory/src/project.ts +157 -0
- package/dist/extensions/pi-hermes-memory/src/prompt-context.ts +55 -0
- package/dist/extensions/pi-hermes-memory/src/store/atomic-lock-coordinator.ts +375 -0
- package/dist/extensions/pi-hermes-memory/src/store/canonical-storage-path.ts +54 -0
- package/dist/extensions/pi-hermes-memory/src/store/content-scanner.ts +101 -0
- package/dist/extensions/pi-hermes-memory/src/store/db.ts +1180 -0
- package/dist/extensions/pi-hermes-memory/src/store/fts-query.ts +101 -0
- package/dist/extensions/pi-hermes-memory/src/store/markdown-mutation-lock.ts +38 -0
- package/dist/extensions/pi-hermes-memory/src/store/memory-lookup.ts +24 -0
- package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +1191 -0
- package/dist/extensions/pi-hermes-memory/src/store/recovery-maintenance.ts +66 -0
- package/dist/extensions/pi-hermes-memory/src/store/schema.ts +118 -0
- package/dist/extensions/pi-hermes-memory/src/store/session-anchor-search.ts +472 -0
- package/dist/extensions/pi-hermes-memory/src/store/session-indexer.ts +511 -0
- package/dist/extensions/pi-hermes-memory/src/store/session-parser.ts +213 -0
- package/dist/extensions/pi-hermes-memory/src/store/session-search.ts +234 -0
- package/dist/extensions/pi-hermes-memory/src/store/skill-store.ts +950 -0
- package/dist/extensions/pi-hermes-memory/src/store/skill-utils.ts +133 -0
- package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +1002 -0
- package/dist/extensions/pi-hermes-memory/src/store/sqlite-native.ts +241 -0
- package/dist/extensions/pi-hermes-memory/src/store/standing-instructions.ts +247 -0
- package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +95 -0
- package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +469 -0
- package/dist/extensions/pi-hermes-memory/src/tools/session-search-tool.ts +246 -0
- package/dist/extensions/pi-hermes-memory/src/tools/shared-output-view.ts +170 -0
- package/dist/extensions/pi-hermes-memory/src/tools/skill-tool.ts +333 -0
- package/dist/extensions/pi-hermes-memory/src/tools/tool-result-views.ts +105 -0
- package/dist/extensions/pi-hermes-memory/src/types.ts +214 -0
- package/dist/extensions/pi-hermes-memory/tests/config.test.ts +434 -0
- package/dist/extensions/pi-hermes-memory/tests/extension-root-migration.test.ts +368 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/auto-consolidate.test.ts +984 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/background-review.test.ts +950 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/correction-detector.test.ts +671 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/insights.test.ts +157 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/interview.test.ts +127 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/pi-child-process.test.ts +905 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/preview-context.test.ts +152 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/prompt-context.test.ts +166 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/resources-discover.test.ts +71 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +614 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +192 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-flush.test.ts +677 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/session-live-index.test.ts +225 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/skills-command.test.ts +827 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/standing-pin.test.ts +134 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/sync-markdown-memories.test.ts +491 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/system-prompt.test.ts +199 -0
- package/dist/extensions/pi-hermes-memory/tests/handlers/thinking-max.test.ts +64 -0
- package/dist/extensions/pi-hermes-memory/tests/index.test.ts +30 -0
- package/dist/extensions/pi-hermes-memory/tests/integration/flow.test.ts +126 -0
- package/dist/extensions/pi-hermes-memory/tests/lifecycle-timing.test.ts +76 -0
- package/dist/extensions/pi-hermes-memory/tests/paths.test.ts +23 -0
- package/dist/extensions/pi-hermes-memory/tests/project-memory-migration.test.ts +80 -0
- package/dist/extensions/pi-hermes-memory/tests/project-rebinding.test.ts +115 -0
- package/dist/extensions/pi-hermes-memory/tests/project.test.ts +120 -0
- package/dist/extensions/pi-hermes-memory/tests/run-all-timeout.test.ts +107 -0
- package/dist/extensions/pi-hermes-memory/tests/run-all.sh +45 -0
- package/dist/extensions/pi-hermes-memory/tests/store/atomic-lock-coordinator.test.ts +381 -0
- package/dist/extensions/pi-hermes-memory/tests/store/content-scanner.test.ts +388 -0
- package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +1046 -0
- package/dist/extensions/pi-hermes-memory/tests/store/markdown-mutation-lock.test.ts +34 -0
- package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +2150 -0
- package/dist/extensions/pi-hermes-memory/tests/store/recovery-maintenance.test.ts +170 -0
- package/dist/extensions/pi-hermes-memory/tests/store/session-anchor-search.test.ts +210 -0
- package/dist/extensions/pi-hermes-memory/tests/store/session-indexer.test.ts +643 -0
- package/dist/extensions/pi-hermes-memory/tests/store/session-parser.test.ts +282 -0
- package/dist/extensions/pi-hermes-memory/tests/store/session-search.test.ts +287 -0
- package/dist/extensions/pi-hermes-memory/tests/store/skill-store.test.ts +678 -0
- package/dist/extensions/pi-hermes-memory/tests/store/skill-utils.test.ts +21 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-lazy-load.test.ts +78 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +543 -0
- package/dist/extensions/pi-hermes-memory/tests/store/sqlite-native.test.ts +164 -0
- package/dist/extensions/pi-hermes-memory/tests/store/standing-instructions.test.ts +171 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +84 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/memory-tool.test.ts +709 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/session-search-tool.test.ts +345 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/shared-output-view.test.ts +362 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/skill-tool.test.ts +478 -0
- package/dist/extensions/pi-hermes-memory/tests/tools/tool-result-renderer-wiring.test.ts +40 -0
- package/dist/extensions/pi-hermes-memory/tsconfig.json +19 -0
- package/dist/extensions/pi-subagents/.oxlintrc.json +43 -0
- package/dist/extensions/pi-subagents/AGENTS.md +5 -0
- package/dist/extensions/pi-subagents/CHANGELOG.md +157 -0
- package/dist/extensions/pi-subagents/README.md +12 -6
- package/dist/extensions/pi-subagents/VISION.md +81 -0
- package/dist/extensions/pi-subagents/agents/claude-code-writer.md +15 -0
- package/dist/extensions/pi-subagents/agents/claude-code.md +15 -0
- package/dist/extensions/pi-subagents/agents/codex-exec-writer.md +15 -0
- package/dist/extensions/pi-subagents/agents/codex-exec.md +15 -0
- package/dist/extensions/pi-subagents/agents/cursor-agent-writer.md +14 -0
- package/dist/extensions/pi-subagents/agents/cursor-agent.md +14 -0
- package/dist/extensions/pi-subagents/agents/reviewer.md +1 -3
- package/dist/extensions/pi-subagents/docs/agents.md +488 -0
- package/dist/extensions/pi-subagents/docs/configuration.md +46 -9
- package/dist/extensions/pi-subagents/docs/extension-api.md +42 -3
- package/dist/extensions/pi-subagents/docs/models.md +27 -4
- package/dist/extensions/pi-subagents/docs/observability.md +10 -9
- package/dist/extensions/pi-subagents/docs/tool-reference.md +102 -6
- package/dist/extensions/pi-subagents/docs/workflows.md +135 -0
- package/dist/extensions/pi-subagents/package-lock.json +389 -2
- package/dist/extensions/pi-subagents/package.json +3 -1
- package/dist/extensions/pi-subagents/prompts/review-loop.md +2 -2
- package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +3 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +7 -3
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +26 -5
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +41 -22
- package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +4 -4
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +9 -2
- package/dist/extensions/pi-subagents/src/agents/agents.ts +322 -75
- package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +6 -0
- package/dist/extensions/pi-subagents/src/agents/runtime-agent-events.ts +70 -0
- package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +27 -20
- package/dist/extensions/pi-subagents/src/api/agents.ts +10 -5
- package/dist/extensions/pi-subagents/src/api/background-work.ts +5 -1
- package/dist/extensions/pi-subagents/src/api/delegation.ts +0 -7
- package/dist/extensions/pi-subagents/src/api/preflight.ts +34 -12
- package/dist/extensions/pi-subagents/src/extension/config.ts +70 -0
- package/dist/extensions/pi-subagents/src/extension/doctor.ts +3 -3
- package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -3
- package/dist/extensions/pi-subagents/src/extension/index.ts +83 -30
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +44 -15
- package/dist/extensions/pi-subagents/src/extension/rpc.ts +55 -19
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +41 -15
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +28 -31
- package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -1
- package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -10
- package/dist/extensions/pi-subagents/src/inspectors/herdr/session-roots-codec.ts +42 -0
- package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +51 -3
- package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +2 -0
- package/dist/extensions/pi-subagents/src/profiles/profiles.ts +5 -6
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +77 -10
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +176 -53
- package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +19 -12
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +29 -27
- package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +20 -3
- package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +23 -261
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +73 -7
- package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +8 -3
- package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +74 -8
- package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +37 -21
- package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +8 -8
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +184 -9
- package/dist/extensions/pi-subagents/src/runs/background/result-delivery-ownership.ts +45 -0
- package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +28 -14
- package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +38 -15
- package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +50 -13
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +93 -8
- package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +10 -4
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +4 -14
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +549 -377
- package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +58 -10
- package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +26 -1
- package/dist/extensions/pi-subagents/src/runs/background/wait-config.ts +23 -9
- package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +9 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +2 -2
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +204 -129
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +9 -0
- package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +23 -1
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +773 -311
- package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +140 -115
- package/dist/extensions/pi-subagents/src/runs/shared/abort-recovery.ts +119 -0
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +463 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +19 -4
- package/dist/extensions/pi-subagents/src/runs/shared/child-launch-plan.ts +151 -0
- package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +21 -7
- package/dist/extensions/pi-subagents/src/runs/shared/claude-code-adapter.ts +129 -0
- package/dist/extensions/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
- package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +89 -0
- package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +5 -4
- package/dist/extensions/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +3 -3
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-contract.ts +167 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +122 -0
- package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +348 -55
- package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +5 -5
- package/dist/extensions/pi-subagents/src/runs/shared/host-step-status.ts +230 -0
- package/dist/extensions/pi-subagents/src/runs/shared/lane-metadata.ts +105 -0
- package/dist/extensions/pi-subagents/src/runs/shared/launch-cwd.ts +16 -0
- package/dist/extensions/pi-subagents/src/runs/shared/long-running-guard.ts +2 -1
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-config-sources.ts +422 -0
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +221 -158
- package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +197 -0
- package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +69 -7
- package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +47 -6
- package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +7 -2
- package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +9 -3
- package/dist/extensions/pi-subagents/src/runs/shared/nested-render.ts +9 -5
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +419 -7
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +15 -1
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +81 -8
- package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +13 -0
- package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +21 -1
- package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +44 -4
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +98 -13
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +847 -0
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +18 -0
- package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +46 -0
- package/dist/extensions/pi-subagents/src/shared/extension-context.ts +24 -0
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +21 -0
- package/dist/extensions/pi-subagents/src/shared/formatters.ts +18 -3
- package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +5 -1
- package/dist/extensions/pi-subagents/src/shared/pruned-fork.ts +450 -0
- package/dist/extensions/pi-subagents/src/shared/session-file-trust.ts +19 -0
- package/dist/extensions/pi-subagents/src/shared/session-tokens.ts +14 -3
- package/dist/extensions/pi-subagents/src/shared/settings.ts +19 -105
- package/dist/extensions/pi-subagents/src/shared/shortcuts.ts +17 -0
- package/dist/extensions/pi-subagents/src/shared/types.ts +359 -40
- package/dist/extensions/pi-subagents/src/shared/utils.ts +41 -84
- package/dist/extensions/pi-subagents/src/shared/workflow-child-permit.ts +116 -0
- package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -9
- package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +0 -4
- package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +1 -2
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +378 -88
- package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +22 -11
- package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +3 -0
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +147 -79
- package/dist/extensions/pi-subagents/src/tui/fleet-transcript.ts +11 -5
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +39 -18
- package/dist/extensions/pi-subagents/src/tui/render.ts +369 -46
- package/dist/extensions/pi-subagents/src/watchdog/turn-delta.ts +1 -1
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +6 -3
- package/dist/extensions/pi-subagents/src/workflows/host-command.ts +230 -0
- package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +740 -58
- package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +121 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +270 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +195 -6
- package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +246 -0
- package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1114 -260
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +34 -0
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +150 -3
- package/dist/extensions/pi-subagents/test/integration/claude-code-smoke.test.ts +52 -0
- package/dist/extensions/pi-subagents/test/integration/claude-code-writer-smoke.test.ts +55 -0
- package/dist/extensions/pi-subagents/test/integration/codex-exec-smoke.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/integration/codex-exec-writer-smoke.test.ts +57 -0
- package/dist/extensions/pi-subagents/test/integration/cursor-agent-smoke.test.ts +59 -0
- package/dist/extensions/pi-subagents/test/integration/cursor-agent-writer-smoke.test.ts +62 -0
- package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +57 -1
- package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +20 -0
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +4 -3
- package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +54 -4
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +482 -4
- package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +157 -9
- package/dist/extensions/pi-subagents/test/integration/session-tokens.test.ts +5 -5
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1508 -291
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +423 -1
- package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/support/cursor-smoke-inputs.ts +51 -0
- package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
- package/dist/extensions/pi-subagents/test/support/mock-pi.ts +5 -5
- package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +6 -6
- package/dist/extensions/pi-subagents/test/unit/abort-recovery.test.ts +152 -0
- package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +48 -0
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +184 -6
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +66 -6
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +77 -0
- package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +18 -0
- package/dist/extensions/pi-subagents/test/unit/anti-slop-oxlint.test.ts +86 -0
- package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +101 -1
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +121 -0
- package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +28 -0
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +14 -7
- package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +190 -0
- package/dist/extensions/pi-subagents/test/unit/async-status-snapshot.test.ts +42 -0
- package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +8 -4
- package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +23 -0
- package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +78 -1
- package/dist/extensions/pi-subagents/test/unit/child-launch-plan.test.ts +94 -0
- package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/child-session-name.test.ts +50 -0
- package/dist/extensions/pi-subagents/test/unit/claude-code-adapter.test.ts +245 -0
- package/dist/extensions/pi-subagents/test/unit/codex-exec-adapter.test.ts +192 -0
- package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +150 -0
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/cursor-agent-adapter.test.ts +259 -0
- package/dist/extensions/pi-subagents/test/unit/cursor-smoke-inputs.test.ts +77 -0
- package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +1 -4
- package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/extension-context.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +223 -0
- package/dist/extensions/pi-subagents/test/unit/fast-mode-extension.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +208 -2
- package/dist/extensions/pi-subagents/test/unit/fleet-transcript.test.ts +29 -1
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +110 -1
- package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +10 -0
- package/dist/extensions/pi-subagents/test/unit/formatters.test.ts +14 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +18 -9
- package/dist/extensions/pi-subagents/test/unit/herdr-session-roots-codec.test.ts +63 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-shell-command.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +132 -0
- package/dist/extensions/pi-subagents/test/unit/host-command.test.ts +156 -0
- package/dist/extensions/pi-subagents/test/unit/host-step-status.test.ts +98 -0
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +178 -26
- package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +2 -1
- package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +138 -0
- package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +91 -0
- package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +72 -7
- package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +20 -2
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +129 -1
- package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +4 -0
- package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +358 -0
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +574 -21
- package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +109 -1
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +71 -1
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +7 -7
- package/dist/extensions/pi-subagents/test/unit/pruned-fork.test.ts +214 -0
- package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +29 -8
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +53 -0
- package/dist/extensions/pi-subagents/test/unit/result-delivery-ownership.test.ts +34 -0
- package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +101 -3
- package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +10 -8
- package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +71 -1
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +41 -7
- package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +136 -2
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +137 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +33 -12
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +504 -1
- package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +12 -1
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +3 -5
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +5 -6
- package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +0 -8
- package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +5 -0
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +157 -2
- package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +63 -4
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +27 -23
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +44 -0
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +7 -5
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +106 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +484 -9
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +38 -4
- package/dist/extensions/pi-subagents/test/unit/workflow-preflight.test.ts +155 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +318 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-resume-hint.test.ts +365 -0
- package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +349 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +2 -7
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/effect/index.ts +13 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/effect/rules/no-service-constructor-imports.ts +52 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/index.ts +41 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-chained-type-assertions.ts +77 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-conditional-empty-object-spread.ts +49 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-known-value-widening.ts +247 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-module-mocking.ts +91 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-object-parameters.ts +126 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-reflect-apply.ts +28 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-reflect-get.ts +28 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-runtime-typeof.ts +67 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-shape-in-symbol-names.ts +39 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-parameters.ts +83 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-returns.ts +115 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-type-aliases.ts +72 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unsafe-dictionary-type.ts +134 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-widen-then-assert.ts +366 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/require-safety-comment-for-type-assertion.ts +62 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/dictionary-types.ts +502 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/lexical-type-parameters.ts +60 -0
- package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/reflect-method.ts +35 -0
- package/dist/extensions/pi-tool-display/tests/capabilities.test.ts +1 -1
- package/dist/extensions/pi-tool-display/tests/settings-inspector.test.ts +2 -2
- package/dist/extensions/pi-tool-display/tests/tool-overrides-mcp.test.ts +1 -1
- package/dist/extensions/pi-zentui/extensions/zentui/format.ts +2 -1
- package/dist/extensions/pi-zentui/test/format.test.ts +15 -1
- package/dist/modes/interactive/components/footer.js +2 -2
- package/dist/modes/interactive/interactive-mode.js +11 -11
- package/dist/skills/workflow/SKILL.md +65 -50
- package/package.json +112 -110
- package/dist/extensions/enable-readonly-tools.test.ts +0 -63
- package/dist/extensions/enable-readonly-tools.ts +0 -24
- package/dist/extensions/model-prompt-injector/config.json +0 -16
- package/dist/extensions/model-prompt-injector/index.test.ts +0 -102
- package/dist/extensions/model-prompt-injector/index.ts +0 -148
- package/dist/extensions/pi-subagents/src/runs/shared/turn-budget.ts +0 -98
- package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +0 -250
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# v0.4 Plan: SQLite FTS5 Session Search + Hybrid Memory
|
|
2
|
+
|
|
3
|
+
## Problem
|
|
4
|
+
|
|
5
|
+
The current memory architecture has two scaling bottlenecks:
|
|
6
|
+
|
|
7
|
+
1. **Memory capacity**: MEMORY.md is capped at 2,200 chars. Power users accumulate knowledge faster than consolidation can manage. Important facts get pruned.
|
|
8
|
+
2. **No session history search**: Past conversations are stored as JSONL files in `~/.selesai/agent/sessions/<project>/`, but there's no way to search them. When the agent needs context from a previous session, it's gone forever.
|
|
9
|
+
|
|
10
|
+
## Solution: Hybrid Memory Architecture
|
|
11
|
+
|
|
12
|
+
### Core memory (always injected, unchanged)
|
|
13
|
+
- `MEMORY.md` — 5,000 chars (up from 2,200)
|
|
14
|
+
- `USER.md` — 5,000 chars (up from 1,375)
|
|
15
|
+
- Still injected into every session via `<memory-context>` tags
|
|
16
|
+
- Still human-readable, still editable
|
|
17
|
+
|
|
18
|
+
### Extended memory (SQLite, searchable on demand)
|
|
19
|
+
- `~/.selesai/agent/memory/sessions.db`
|
|
20
|
+
- `memories` table — unlimited entries, searchable via FTS5
|
|
21
|
+
- Agent uses `memory_search` tool to query when it needs context
|
|
22
|
+
- Not automatically injected — agent must explicitly search
|
|
23
|
+
|
|
24
|
+
### Session history (SQLite, searchable on demand)
|
|
25
|
+
- Same `sessions.db` file
|
|
26
|
+
- `sessions` + `messages` tables — all past conversations indexed
|
|
27
|
+
- `session_fts` FTS5 index — full-text search across all sessions
|
|
28
|
+
- Agent uses `session_search` tool to find relevant past context
|
|
29
|
+
|
|
30
|
+
## Architecture
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Session starts
|
|
34
|
+
↓
|
|
35
|
+
┌─────────────────────────────────────────────────┐
|
|
36
|
+
│ System Prompt (always injected) │
|
|
37
|
+
│ ┌─────────────────────────────────────────────┐ │
|
|
38
|
+
│ │ <memory-context> │ │
|
|
39
|
+
│ │ MEMORY (your personal notes) [5,000 chars] │ │
|
|
40
|
+
│ │ ═══ END MEMORY ═══ │ │
|
|
41
|
+
│ │ </memory-context> │ │
|
|
42
|
+
│ │ <memory-context> │ │
|
|
43
|
+
│ │ USER PROFILE [5,000 chars] │ │
|
|
44
|
+
│ │ ═══ END MEMORY ═══ │ │
|
|
45
|
+
│ │ </memory-context> │ │
|
|
46
|
+
│ │ <memory-context> │ │
|
|
47
|
+
│ │ PROJECT MEMORY [5,000 chars] │ │
|
|
48
|
+
│ │ ═══ END MEMORY ═══ │ │
|
|
49
|
+
│ │ </memory-context> │ │
|
|
50
|
+
│ └─────────────────────────────────────────────┘ │
|
|
51
|
+
└─────────────────────────────────────────────────┘
|
|
52
|
+
|
|
53
|
+
Agent has access to tools:
|
|
54
|
+
memory_search("prisma migration")
|
|
55
|
+
→ Searches memories table (global + project)
|
|
56
|
+
→ Returns top-10 relevant entries
|
|
57
|
+
|
|
58
|
+
session_search("how we fixed the test hang")
|
|
59
|
+
→ Searches session history via FTS5
|
|
60
|
+
→ Returns relevant conversation snippets
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Data Model
|
|
64
|
+
|
|
65
|
+
```sql
|
|
66
|
+
-- Session metadata
|
|
67
|
+
CREATE TABLE sessions (
|
|
68
|
+
id TEXT PRIMARY KEY, -- UUID from JSONL
|
|
69
|
+
project TEXT NOT NULL, -- decoded cwd path
|
|
70
|
+
started_at TEXT NOT NULL, -- ISO timestamp
|
|
71
|
+
ended_at TEXT, -- ISO timestamp (null if still running)
|
|
72
|
+
message_count INTEGER DEFAULT 0
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
-- All messages from all sessions
|
|
76
|
+
CREATE TABLE messages (
|
|
77
|
+
id TEXT PRIMARY KEY, -- message ID from JSONL
|
|
78
|
+
session_id TEXT NOT NULL REFERENCES sessions(id),
|
|
79
|
+
role TEXT NOT NULL, -- 'user', 'assistant', 'system'
|
|
80
|
+
content TEXT NOT NULL, -- extracted text content
|
|
81
|
+
timestamp TEXT NOT NULL, -- ISO timestamp
|
|
82
|
+
tool_calls TEXT -- JSON array of tool call names (for assistant messages)
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
-- FTS5 index for full-text search across messages
|
|
86
|
+
CREATE VIRTUAL TABLE message_fts USING fts5(
|
|
87
|
+
content,
|
|
88
|
+
content='messages',
|
|
89
|
+
content_rowid='rowid'
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
-- Extended memory entries (beyond MEMORY.md limit)
|
|
93
|
+
CREATE TABLE memories (
|
|
94
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
95
|
+
project TEXT, -- NULL for global, project name for project-specific
|
|
96
|
+
target TEXT NOT NULL, -- 'memory' or 'user'
|
|
97
|
+
content TEXT NOT NULL,
|
|
98
|
+
created DATE NOT NULL,
|
|
99
|
+
last_referenced DATE NOT NULL
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
-- FTS5 index for memory search
|
|
103
|
+
CREATE VIRTUAL TABLE memory_fts USING fts5(
|
|
104
|
+
content,
|
|
105
|
+
content='memories',
|
|
106
|
+
content_rowid='id'
|
|
107
|
+
);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Key Design Decisions
|
|
111
|
+
|
|
112
|
+
### 1. Session indexing is lazy (on session end)
|
|
113
|
+
- Don't parse JSONL files on every startup
|
|
114
|
+
- Index a session when `session_shutdown` fires
|
|
115
|
+
- Bulk import existing sessions via `/memory-index-sessions` command
|
|
116
|
+
|
|
117
|
+
### 2. FTS5 for both memories and sessions
|
|
118
|
+
- Keyword search is sufficient for v0.4
|
|
119
|
+
- Embeddings deferred to v0.5+ if search quality isn't enough
|
|
120
|
+
- `better-sqlite3` includes FTS5 by default
|
|
121
|
+
|
|
122
|
+
### 3. Single DB file
|
|
123
|
+
- `~/.selesai/agent/memory/sessions.db` stores everything
|
|
124
|
+
- Memories + sessions + FTS indices in one file
|
|
125
|
+
- Simple backup (copy one file), simple cleanup
|
|
126
|
+
|
|
127
|
+
### 4. Agent-driven search
|
|
128
|
+
- `memory_search` and `session_search` are LLM tools
|
|
129
|
+
- Agent decides when to search (not automatic)
|
|
130
|
+
- Avoids injecting irrelevant context into every session
|
|
131
|
+
|
|
132
|
+
### 5. Char limit increase to 5,000
|
|
133
|
+
- MEMORY.md: 2,200 → 5,000 chars
|
|
134
|
+
- USER.md: 1,375 → 5,000 chars
|
|
135
|
+
- Project MEMORY.md: 2,200 → 5,000 chars
|
|
136
|
+
- More room for core memories before consolidation kicks in
|
|
137
|
+
|
|
138
|
+
## Dependencies
|
|
139
|
+
|
|
140
|
+
| Package | Purpose | Size |
|
|
141
|
+
|---|---|---|
|
|
142
|
+
| `better-sqlite3` | SQLite with FTS5 | ~1MB native addon |
|
|
143
|
+
|
|
144
|
+
## Risks
|
|
145
|
+
|
|
146
|
+
| Risk | Mitigation |
|
|
147
|
+
|---|---|
|
|
148
|
+
| `better-sqlite3` is a native C++ addon | Standard for dev tools; CI has build tools |
|
|
149
|
+
| FTS5 search quality | Start with keyword search, add embeddings later if needed |
|
|
150
|
+
| Session JSONL format changes | Parse defensively, skip unknown message types |
|
|
151
|
+
| Large session history (1000+ sessions) | FTS5 handles this well; add pagination to results |
|
|
152
|
+
| DB corruption | Atomic writes, WAL mode, backup before migrations |
|
|
153
|
+
|
|
154
|
+
## Success Criteria
|
|
155
|
+
|
|
156
|
+
1. `session_search("prisma migration")` returns relevant conversation snippets from past sessions
|
|
157
|
+
2. `memory_search("auth setup")` returns relevant entries from extended memory store
|
|
158
|
+
3. MEMORY.md limit raised to 5,000 chars without breaking existing functionality
|
|
159
|
+
4. Existing session files indexed without data loss
|
|
160
|
+
5. All tests pass, zero regressions
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# v0.4 Tasks: SQLite FTS5 Session Search + Hybrid Memory
|
|
2
|
+
|
|
3
|
+
## Status Legend
|
|
4
|
+
- `[ ]` Not started
|
|
5
|
+
- `[~]` In progress
|
|
6
|
+
- `[x]` Done
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Epic 1: SQLite Foundation ✅
|
|
11
|
+
|
|
12
|
+
### Task 1.1: Install better-sqlite3 and create DB module
|
|
13
|
+
- [x] Install `better-sqlite3` + `@types/better-sqlite3`
|
|
14
|
+
- [x] Create `src/store/db.ts` — DatabaseManager class
|
|
15
|
+
- [x] Create `tests/store/db.test.ts` — 14 tests passing
|
|
16
|
+
|
|
17
|
+
### Task 1.2: Create schema and migrations
|
|
18
|
+
- [x] Define schema in `src/store/schema.ts`
|
|
19
|
+
- [x] Add triggers to keep FTS index in sync
|
|
20
|
+
- [x] Test: schema creates cleanly on fresh DB, idempotent on existing DB
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Epic 2: Session History Indexing ✅
|
|
25
|
+
|
|
26
|
+
### Task 2.1: JSONL parser
|
|
27
|
+
- [x] Create `src/store/session-parser.ts`
|
|
28
|
+
- [x] Create `tests/store/session-parser.test.ts` — 14 tests passing
|
|
29
|
+
|
|
30
|
+
### Task 2.2: Session indexer
|
|
31
|
+
- [x] Create `src/store/session-indexer.ts`
|
|
32
|
+
- [x] Create `tests/store/session-indexer.test.ts` — 12 tests passing
|
|
33
|
+
|
|
34
|
+
### Task 2.3: /memory-index-sessions command
|
|
35
|
+
- [x] Create `src/handlers/index-sessions.ts`
|
|
36
|
+
- [x] Wire into `src/index.ts`
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Epic 3: Session Search ✅
|
|
41
|
+
|
|
42
|
+
### Task 3.1: Session search store
|
|
43
|
+
- [x] Create `src/store/session-search.ts` — FTS5 search
|
|
44
|
+
- [x] Create `tests/store/session-search.test.ts` — 11 tests passing
|
|
45
|
+
|
|
46
|
+
### Task 3.2: session_search tool
|
|
47
|
+
- [x] Create `src/tools/session-search-tool.ts`
|
|
48
|
+
- [x] Register in `src/index.ts`
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Epic 4: Extended Memory Store ✅
|
|
53
|
+
|
|
54
|
+
### Task 4.1: SQLite memory store
|
|
55
|
+
- [x] Create `src/store/sqlite-memory-store.ts`
|
|
56
|
+
- [x] Create `tests/store/sqlite-memory-store.test.ts` — 19 tests passing
|
|
57
|
+
|
|
58
|
+
### Task 4.2: memory_search tool
|
|
59
|
+
- [x] Create `src/tools/memory-search-tool.ts`
|
|
60
|
+
- [x] Register in `src/index.ts`
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Epic 5: Char Limit Increase ✅
|
|
65
|
+
|
|
66
|
+
### Task 5.1: Update defaults
|
|
67
|
+
- [x] Update `src/constants.ts` — 5000 defaults
|
|
68
|
+
- [x] Update `src/types.ts` — updated comments
|
|
69
|
+
- [x] Update README configuration table
|
|
70
|
+
|
|
71
|
+
### Task 5.2: Update tests
|
|
72
|
+
- [x] Updated all tests that depend on char limits
|
|
73
|
+
- [x] Verified consolidation still works at new limits
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Epic 6: Integration & Polish ✅
|
|
78
|
+
|
|
79
|
+
### Task 6.1: Wire everything into index.ts
|
|
80
|
+
- [x] Initialize DatabaseManager on extension load
|
|
81
|
+
- [x] Register `session_search` and `memory_search` tools
|
|
82
|
+
- [x] Register `/memory-index-sessions` command
|
|
83
|
+
- [x] Auto-index session on `session_shutdown` event
|
|
84
|
+
|
|
85
|
+
### Task 6.2: Add session indexing to background review
|
|
86
|
+
- [x] Auto-index on session_shutdown (indexes most recent session)
|
|
87
|
+
|
|
88
|
+
### Task 6.3: Update README
|
|
89
|
+
- [x] Added session history search and extended memory sections
|
|
90
|
+
- [x] Updated char limits: 2200/1375 → 5000
|
|
91
|
+
- [x] Updated configuration table and JSON example
|
|
92
|
+
- [x] Updated Where Data Lives with sessions.db
|
|
93
|
+
- [x] Updated Known Limitations
|
|
94
|
+
|
|
95
|
+
### Task 6.4: Version bump & release
|
|
96
|
+
- [x] Bump version to `0.4.0`
|
|
97
|
+
- [x] Run full test suite — 272 tests passing
|
|
98
|
+
- [x] Publish to npm
|
|
99
|
+
- [x] Create GitHub release
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Summary
|
|
104
|
+
|
|
105
|
+
| Epic | Files Created | Tests |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| 1. SQLite Foundation | db.ts, schema.ts | 14 |
|
|
108
|
+
| 2. Session Indexing | session-parser.ts, session-indexer.ts, index-sessions.ts | 26 |
|
|
109
|
+
| 3. Session Search | session-search.ts, session-search-tool.ts | 11 |
|
|
110
|
+
| 4. Extended Memory | sqlite-memory-store.ts, memory-search-tool.ts | 19 |
|
|
111
|
+
| 5. Char Limits | constants.ts, types.ts | — |
|
|
112
|
+
| 6. Integration | index.ts, README.md, learn-memory-tool skill | — |
|
|
113
|
+
| **Total** | **12 new files** | **272 tests** |
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# v0.6.6 Changelog
|
|
2
|
+
|
|
3
|
+
## Bug Fixes
|
|
4
|
+
|
|
5
|
+
### Fix legacy SQLite upgrade error: `no such column: category`
|
|
6
|
+
|
|
7
|
+
Some users upgrading from older versions had an existing `sessions.db` with a legacy
|
|
8
|
+
`memories` table that did not include v0.6 failure-memory columns. During schema init,
|
|
9
|
+
creating `idx_memories_category` failed and `/memory-index-sessions` crashed with:
|
|
10
|
+
|
|
11
|
+
`❌ Session indexing failed: no such column: category`
|
|
12
|
+
|
|
13
|
+
Fix:
|
|
14
|
+
|
|
15
|
+
- Added automatic legacy schema migration in `DatabaseManager`
|
|
16
|
+
- Detects missing `memories` columns and adds them idempotently:
|
|
17
|
+
- `category`
|
|
18
|
+
- `failure_reason`
|
|
19
|
+
- `tool_state`
|
|
20
|
+
- `corrected_to`
|
|
21
|
+
- Retries schema initialization after migration
|
|
22
|
+
- Added regression test: `should migrate legacy memories table without category column`
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# v0.6.5 Changelog
|
|
27
|
+
|
|
28
|
+
## Bug Fixes
|
|
29
|
+
|
|
30
|
+
### Auto-review no longer blocks interactive chat (#10)
|
|
31
|
+
|
|
32
|
+
The background auto-review was `await`ing `pi.exec()` inside the `turn_end` handler, which
|
|
33
|
+
blocked the chat from responding while the review subprocess ran. Fixed by making the
|
|
34
|
+
review subprocess fire-and-forget — the turn_end handler returns immediately, and the
|
|
35
|
+
subprocess completes asynchronously.
|
|
36
|
+
|
|
37
|
+
- `pi.exec()` is no longer awaited — handler returns immediately
|
|
38
|
+
- `reviewInProgress` guard resets in `.then()` / `.catch()` callbacks
|
|
39
|
+
- Overlapping reviews are still prevented by the guard
|
|
40
|
+
- Notifications are delivered via `.then()` callback once the subprocess completes
|
|
41
|
+
|
|
42
|
+
### Auto-review failures on Windows no longer show errors (#9)
|
|
43
|
+
|
|
44
|
+
On Windows git-bash, `pi exec` subprocesses could exit with code 1 producing
|
|
45
|
+
`[hermes] auto-review failed (exit=1): unknown error` messages every few turns. Fixed by
|
|
46
|
+
making auto-review truly best-effort — non-zero exit codes and spawn errors are silently
|
|
47
|
+
ignored.
|
|
48
|
+
|
|
49
|
+
- Suppressed error notifications for non-zero exit codes
|
|
50
|
+
- Suppressed error notifications for subprocess failures (timeout, signal, spawn)
|
|
51
|
+
- The next review cycle will retry automatically
|
|
52
|
+
|
|
53
|
+
### Crash safety
|
|
54
|
+
|
|
55
|
+
- Snapshot-building code (`getBranch()`, message parsing) is wrapped in a minimal try/catch
|
|
56
|
+
to handle expired sessions gracefully
|
|
57
|
+
- Early return resets `reviewInProgress` guard to unblock future reviews
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# v0.5 Plan: Failure Memory + Categories + Provenance
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Track **failures, corrections, and insights** as first-class memories with full provenance and category labels. Learn from failures like humans do.
|
|
6
|
+
|
|
7
|
+
## Motivation
|
|
8
|
+
|
|
9
|
+
From X/Twitter feedback:
|
|
10
|
+
> "Memory gets much more useful when it stores failures, not just conversations. I'd want every recalled session to carry provenance: source, timestamp, tool state, and whether the old answer survived contact with reality."
|
|
11
|
+
|
|
12
|
+
## Key Features
|
|
13
|
+
|
|
14
|
+
### 1. Memory Categories
|
|
15
|
+
|
|
16
|
+
Add category labels to differentiate memory types:
|
|
17
|
+
|
|
18
|
+
| Category | What It Is | Example |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| `failure` | What didn't work | "Tried localStorage for tokens — XSS risk" |
|
|
21
|
+
| `correction` | User corrected the agent | "Use pnpm, not npm" |
|
|
22
|
+
| `insight` | Learning from experience | "Auth0 SDK handles refresh tokens automatically" |
|
|
23
|
+
| `preference` | User preference | "Prefers dark theme" |
|
|
24
|
+
| `convention` | Project convention | "Monorepo uses turborepo" |
|
|
25
|
+
| `tool-quirk` | Tool-specific knowledge | "CI needs --frozen-lockfile" |
|
|
26
|
+
|
|
27
|
+
### 2. Failure Memory Structure
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
interface FailureMemory {
|
|
31
|
+
category: 'failure' | 'correction' | 'insight' | 'preference' | 'convention' | 'tool-quirk';
|
|
32
|
+
content: string; // What was tried / what happened
|
|
33
|
+
failure_reason?: string; // Why it failed (for failures)
|
|
34
|
+
tool_state?: string; // Relevant tool state (error message, output)
|
|
35
|
+
corrected_to?: string; // What worked instead (if known)
|
|
36
|
+
project: string; // Which project
|
|
37
|
+
session_id?: string; // Which session
|
|
38
|
+
timestamp: string; // When it happened
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 3. Auto-Detect Failures
|
|
43
|
+
|
|
44
|
+
Detect failures from:
|
|
45
|
+
- **Explicit corrections**: "that didn't work", "use X instead", "no, do it this way"
|
|
46
|
+
- **Error messages**: stderr output, test failures, build errors
|
|
47
|
+
- **Agent retries**: When the agent tries multiple approaches
|
|
48
|
+
- **User feedback**: "this is wrong", "that's not right"
|
|
49
|
+
|
|
50
|
+
### 4. Failure Injection into System Prompt
|
|
51
|
+
|
|
52
|
+
Inject relevant recent failures into the system prompt at session start:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
<memory-context>
|
|
56
|
+
RECENT FAILURES & LESSONS (learn from these):
|
|
57
|
+
• [failure] Tried: localStorage for JWT tokens — Failed: XSS vulnerability
|
|
58
|
+
→ Corrected to: httpOnly cookies with SameSite=Strict
|
|
59
|
+
• [correction] Use pnpm, not npm (corrected 2 days ago)
|
|
60
|
+
• [insight] Auth0 SDK handles refresh tokens automatically — no manual implementation needed
|
|
61
|
+
═══ END MEMORY ═══
|
|
62
|
+
</memory-context>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Injection rules:**
|
|
66
|
+
- Only inject failures from last 7 days
|
|
67
|
+
- Only inject failures relevant to current project (or global)
|
|
68
|
+
- Max 5 failure entries to avoid prompt bloat
|
|
69
|
+
- Separate `<memory-context>` block from regular memory
|
|
70
|
+
|
|
71
|
+
### 5. Search with Categories
|
|
72
|
+
|
|
73
|
+
Update `memory_search` tool to support category filtering:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
memory_search("auth", category: "failure") → Past auth failures
|
|
77
|
+
memory_search("deploy", category: "convention") → Deploy conventions
|
|
78
|
+
memory_search("typescript", category: "tool-quirk") → TS tool quirks
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 6. Store Failures in SQLite
|
|
82
|
+
|
|
83
|
+
Failures stored in `memories` table with `target: 'failure'`:
|
|
84
|
+
|
|
85
|
+
```sql
|
|
86
|
+
-- New target type
|
|
87
|
+
target TEXT CHECK (target IN ('memory', 'user', 'failure'))
|
|
88
|
+
|
|
89
|
+
-- Content stored as JSON with category
|
|
90
|
+
{
|
|
91
|
+
"category": "failure",
|
|
92
|
+
"content": "Tried localStorage for JWT tokens",
|
|
93
|
+
"failure_reason": "XSS vulnerability - tokens accessible via JS",
|
|
94
|
+
"tool_state": "Error: Token exposed in browser console",
|
|
95
|
+
"corrected_to": "httpOnly cookies with SameSite=Strict",
|
|
96
|
+
"project": "my-app",
|
|
97
|
+
"timestamp": "2026-05-03T10:30:00Z"
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 7. Update Background Review Prompt
|
|
102
|
+
|
|
103
|
+
Enhance the background review prompt to extract failures:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
Review this conversation and extract:
|
|
107
|
+
|
|
108
|
+
1. FAILURES: What was tried but didn't work?
|
|
109
|
+
- What was attempted
|
|
110
|
+
- Why it failed
|
|
111
|
+
- What error occurred
|
|
112
|
+
- What worked instead (if found)
|
|
113
|
+
|
|
114
|
+
2. CORRECTIONS: Did the user correct the agent?
|
|
115
|
+
- What was wrong
|
|
116
|
+
- What is correct
|
|
117
|
+
|
|
118
|
+
3. INSIGHTS: What was learned?
|
|
119
|
+
- New knowledge about tools, APIs, patterns
|
|
120
|
+
- Project-specific learnings
|
|
121
|
+
|
|
122
|
+
4. CONVENTIONS: Any project conventions discovered?
|
|
123
|
+
- Coding style, naming, patterns
|
|
124
|
+
- Tool preferences
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Architecture Changes
|
|
128
|
+
|
|
129
|
+
### Memory Store (`src/store/memory-store.ts`)
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// Add to MemoryStore class
|
|
133
|
+
addFailure(content: string, options: {
|
|
134
|
+
category: MemoryCategory;
|
|
135
|
+
failureReason?: string;
|
|
136
|
+
toolState?: string;
|
|
137
|
+
correctedTo?: string;
|
|
138
|
+
}): void;
|
|
139
|
+
|
|
140
|
+
getFailureEntries(): string[]; // Returns recent failures for injection
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### SQLite Memory Store (`src/store/sqlite-memory-store.ts`)
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// Update searchMemories to support category filter
|
|
147
|
+
searchMemories(db, query, { project, target, category, limit })
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Memory Search Tool (`src/tools/memory-search-tool.ts`)
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// Add category parameter
|
|
154
|
+
category: Type.Optional(StringEnum([
|
|
155
|
+
'failure', 'correction', 'insight', 'preference', 'convention', 'tool-quirk'
|
|
156
|
+
] as const, { description: 'Filter by memory category.' }))
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Background Review (`src/handlers/background-review.ts`)
|
|
160
|
+
|
|
161
|
+
- Extract failures during review
|
|
162
|
+
- Store with category labels
|
|
163
|
+
- Include failure context in review prompt
|
|
164
|
+
|
|
165
|
+
### Correction Detector (`src/handlers/correction-detector.ts`)
|
|
166
|
+
|
|
167
|
+
- Extract failure context when correction detected
|
|
168
|
+
- Store what was wrong + what is correct
|
|
169
|
+
|
|
170
|
+
### System Prompt Injection (`src/index.ts`)
|
|
171
|
+
|
|
172
|
+
- Add separate `<memory-context>` block for failures
|
|
173
|
+
- Inject only recent (7 days) and relevant (project match)
|
|
174
|
+
- Max 5 entries
|
|
175
|
+
|
|
176
|
+
## Files to Change
|
|
177
|
+
|
|
178
|
+
| File | Change |
|
|
179
|
+
|---|---|
|
|
180
|
+
| `src/types.ts` | Add `MemoryCategory` type |
|
|
181
|
+
| `src/constants.ts` | Update review prompt for failure extraction |
|
|
182
|
+
| `src/store/memory-store.ts` | Add `addFailure()`, `getFailureEntries()` |
|
|
183
|
+
| `src/store/sqlite-memory-store.ts` | Add category support to search |
|
|
184
|
+
| `src/tools/memory-search-tool.ts` | Add category parameter |
|
|
185
|
+
| `src/handlers/background-review.ts` | Extract failures during review |
|
|
186
|
+
| `src/handlers/correction-detector.ts` | Store failure context on corrections |
|
|
187
|
+
| `src/index.ts` | Inject failure memories into system prompt |
|
|
188
|
+
| `tests/store/memory-store.test.ts` | Test failure storage |
|
|
189
|
+
| `tests/store/sqlite-memory-store.test.ts` | Test category search |
|
|
190
|
+
| `tests/tools/memory-search-tool.test.ts` | Test category parameter |
|
|
191
|
+
|
|
192
|
+
## Complexity Assessment
|
|
193
|
+
|
|
194
|
+
- **Effort**: Medium (2-3 hours)
|
|
195
|
+
- **Risk**: Low (additive, no breaking changes)
|
|
196
|
+
- **Tests**: ~15 new tests
|
|
197
|
+
|
|
198
|
+
## Migration
|
|
199
|
+
|
|
200
|
+
- Existing memories get `category: null` (no migration needed)
|
|
201
|
+
- New memories get category assigned
|
|
202
|
+
- Search works with or without category filter
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# v0.5 Tasks: Failure Memory + Categories + Provenance
|
|
2
|
+
|
|
3
|
+
## Status Legend
|
|
4
|
+
- `[ ]` Not started
|
|
5
|
+
- `[~]` In progress
|
|
6
|
+
- `[x]` Done
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Epic 1: Category Types & Schema
|
|
11
|
+
|
|
12
|
+
### Task 1.1: Add MemoryCategory type
|
|
13
|
+
- [ ] Add `MemoryCategory` type to `src/types.ts`
|
|
14
|
+
- [ ] Categories: `failure`, `correction`, `insight`, `preference`, `convention`, `tool-quirk`
|
|
15
|
+
|
|
16
|
+
### Task 1.2: Update SQLite schema
|
|
17
|
+
- [ ] Update `src/store/schema.ts` — add `category` column to memories table
|
|
18
|
+
- [ ] Add index on category for faster filtering
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Epic 2: Failure Memory Store
|
|
23
|
+
|
|
24
|
+
### Task 2.1: Update MemoryStore
|
|
25
|
+
- [ ] Add `addFailure()` method to `src/store/memory-store.ts`
|
|
26
|
+
- [ ] Store failures in MEMORY.md with category metadata
|
|
27
|
+
- [ ] Add `getFailureEntries()` to retrieve recent failures (last 7 days)
|
|
28
|
+
- [ ] Update `formatForSystemPrompt()` to include failure section
|
|
29
|
+
|
|
30
|
+
### Task 2.2: Update SQLite Memory Store
|
|
31
|
+
- [ ] Add category support to `src/store/sqlite-memory-store.ts`
|
|
32
|
+
- [ ] Update `addMemory()` to accept category
|
|
33
|
+
- [ ] Update `searchMemories()` to filter by category
|
|
34
|
+
- [ ] Add `getRecentFailures()` method
|
|
35
|
+
|
|
36
|
+
### Task 2.3: Tests
|
|
37
|
+
- [ ] Test `addFailure()` in `tests/store/memory-store.test.ts`
|
|
38
|
+
- [ ] Test category filtering in `tests/store/sqlite-memory-store.test.ts`
|
|
39
|
+
- [ ] Test `getRecentFailures()` returns only last 7 days
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Epic 3: Failure Detection
|
|
44
|
+
|
|
45
|
+
### Task 3.1: Update Correction Detector
|
|
46
|
+
- [ ] Update `src/handlers/correction-detector.ts`
|
|
47
|
+
- [ ] Extract failure context when correction detected
|
|
48
|
+
- [ ] Store: what was wrong, what is correct, category
|
|
49
|
+
|
|
50
|
+
### Task 3.2: Update Background Review Prompt
|
|
51
|
+
- [ ] Update `src/constants.ts` — enhance `CONSOLIDATION_PROMPT`
|
|
52
|
+
- [ ] Add failure extraction instructions
|
|
53
|
+
- [ ] Prompt to categorize findings (failure, correction, insight, etc.)
|
|
54
|
+
|
|
55
|
+
### Task 3.3: Auto-Detect Failures in Conversation
|
|
56
|
+
- [ ] Add failure pattern detection in `src/handlers/background-review.ts`
|
|
57
|
+
- [ ] Detect: "that didn't work", "use X instead", error messages
|
|
58
|
+
- [ ] Store failures with `tool_state` (error output)
|
|
59
|
+
|
|
60
|
+
### Task 3.4: Tests
|
|
61
|
+
- [ ] Test failure detection in `tests/handlers/correction-detector.test.ts`
|
|
62
|
+
- [ ] Test failure extraction in `tests/handlers/background-review.test.ts`
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Epic 4: Failure Injection
|
|
67
|
+
|
|
68
|
+
### Task 4.1: Update System Prompt Injection
|
|
69
|
+
- [ ] Update `src/index.ts` — add failure memory block
|
|
70
|
+
- [ ] Separate `<memory-context>` block for failures
|
|
71
|
+
- [ ] Only inject recent (7 days) and relevant (project match)
|
|
72
|
+
- [ ] Max 5 failure entries
|
|
73
|
+
|
|
74
|
+
### Task 4.2: Failure Injection Format
|
|
75
|
+
- [ ] Format:
|
|
76
|
+
```
|
|
77
|
+
RECENT FAILURES & LESSONS (learn from these):
|
|
78
|
+
• [failure] Tried: X — Failed: Y → Corrected to: Z
|
|
79
|
+
• [correction] Use X, not Y (corrected N days ago)
|
|
80
|
+
• [insight] Learned: X
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Task 4.3: Tests
|
|
84
|
+
- [ ] Test failure injection in `tests/handlers/system-prompt.test.ts`
|
|
85
|
+
- [ ] Test: only recent failures injected
|
|
86
|
+
- [ ] Test: max 5 entries enforced
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Epic 5: Search with Categories
|
|
91
|
+
|
|
92
|
+
### Task 5.1: Update Memory Search Tool
|
|
93
|
+
- [ ] Update `src/tools/memory-search-tool.ts`
|
|
94
|
+
- [ ] Add `category` parameter using `StringEnum`
|
|
95
|
+
- [ ] Categories: `failure`, `correction`, `insight`, `preference`, `convention`, `tool-quirk`
|
|
96
|
+
|
|
97
|
+
### Task 5.2: Update Search Implementation
|
|
98
|
+
- [ ] Update `src/store/sqlite-memory-store.ts` — `searchMemories()`
|
|
99
|
+
- [ ] Filter by category when provided
|
|
100
|
+
- [ ] Include category in search results
|
|
101
|
+
|
|
102
|
+
### Task 5.3: Tests
|
|
103
|
+
- [ ] Test category search in `tests/store/sqlite-memory-store.test.ts`
|
|
104
|
+
- [ ] Test: `memory_search("auth", category: "failure")` returns failures only
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Epic 6: Integration & Polish
|
|
109
|
+
|
|
110
|
+
### Task 6.1: Wire Everything Together
|
|
111
|
+
- [ ] Update `src/index.ts` — ensure all components work together
|
|
112
|
+
- [ ] Test end-to-end flow: detect → store → inject → search
|
|
113
|
+
|
|
114
|
+
### Task 6.2: Update README
|
|
115
|
+
- [ ] Add "Learning from Failures" section
|
|
116
|
+
- [ ] Document categories and how they work
|
|
117
|
+
- [ ] Add examples of failure memory
|
|
118
|
+
|
|
119
|
+
### Task 6.3: Version Bump
|
|
120
|
+
- [ ] Bump to `0.5.5`
|
|
121
|
+
- [ ] Run full test suite
|
|
122
|
+
- [ ] Publish to npm
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Summary
|
|
127
|
+
|
|
128
|
+
| Epic | Files Changed | Tests |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| 1. Category Types | types.ts, schema.ts | 2 |
|
|
131
|
+
| 2. Failure Store | memory-store.ts, sqlite-memory-store.ts | 6 |
|
|
132
|
+
| 3. Failure Detection | correction-detector.ts, background-review.ts, constants.ts | 4 |
|
|
133
|
+
| 4. Failure Injection | index.ts | 3 |
|
|
134
|
+
| 5. Category Search | memory-search-tool.ts, sqlite-memory-store.ts | 3 |
|
|
135
|
+
| 6. Integration | index.ts, README.md | — |
|
|
136
|
+
| **Total** | **8 files** | **~18 tests** |
|
|
137
|
+
|
|
138
|
+
## Implementation Order
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
Epic 1 (Types) → Epic 2 (Store) → Epic 3 (Detection) → Epic 4 (Injection) → Epic 5 (Search) → Epic 6 (Polish)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Each epic builds on the previous one. Epics 3-5 can be done in parallel after Epic 2.
|