hippo-memory 2.0.0 → 2.1.0
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/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -16,27 +16,28 @@ import { cmdPreCompact, cmdPostCompact } from '../capture/compact.js';
|
|
|
16
16
|
import { transcriptWorkingState } from '../capture/working-state.js';
|
|
17
17
|
import { collectHandoffEvidence } from '../capture/handoff-evidence.js';
|
|
18
18
|
import { copilotTranscriptFor, SESSION_ID_RE } from '../capture/copilot-transcript.js';
|
|
19
|
-
import { loadTurnPosition, runSessionWorker, saveTurnPosition, turnsAfter } from '../capture/session-worker.js';
|
|
20
|
-
import { isStringValue, readSessionEnd, readVscodeStop } from '../core/capture-contract.js';
|
|
19
|
+
import { loadTurnPosition, runSessionWorker, saveTurnPosition, turnsAfter, } from '../capture/session-worker.js';
|
|
20
|
+
import { isStringValue, readSessionEnd, readVscodeStop, } from '../core/capture-contract.js';
|
|
21
21
|
import { loadConfig } from '../core/config.js';
|
|
22
|
-
import { autoSleepDue } from '../api/auto-sleep.js';
|
|
22
|
+
import { autoSleepDue } from '../api/sleep/auto-sleep.js';
|
|
23
23
|
import { COMPACTION_DB_WAIT_MS } from '../core/compaction-timing.js';
|
|
24
24
|
import { compactResumeBlock, sessionEndWork as runSessionEnd } from '../api/session-end.js';
|
|
25
25
|
import { normaliseHookPayload, readHookStdin, readStdinBounded } from './stdin.js';
|
|
26
|
-
import { errorMessage, log } from '../util/log.js';
|
|
26
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
27
27
|
import { cmdShimArgs } from '../util/spawn-argv.js';
|
|
28
28
|
import { bookLedgerTurn } from '../api/ledger-db.js';
|
|
29
29
|
import { flushDeliveryRecorder, startDeliveryRecorder, startToolFailureRecorder } from '../api/prompt-hook.js';
|
|
30
30
|
import { printError } from './output.js';
|
|
31
31
|
import { cmdLastSleep } from './last-sleep.js';
|
|
32
32
|
import { readCompactResumePayload } from './compact-resume-payload.js';
|
|
33
|
-
import { cliApiContext } from './api-context.js';
|
|
34
|
-
import { boolFlag, flagIsTrue, stringFlag } from './flag-values.js';
|
|
33
|
+
import { cliApiContext, cliLedgerReach } from './api-context.js';
|
|
34
|
+
import { boolFlag, flagIsTrue, stringFlag, stringFlagOrExit, } from './flag-values.js';
|
|
35
35
|
import { logSessionEndImport, appendSessionEndCloseLog, reportSessionEndFailure, resetHookInjection, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout, hostSessionId, } from './hook-runtime.js';
|
|
36
|
-
import { CliExit } from './exit.js';
|
|
37
|
-
/** SessionStart(compact) injector: prints the task snapshot and session trail lost to compaction; no pinned memories
|
|
38
|
-
* Every path exits 0: a malformed payload or store read failure degrades to empty
|
|
39
|
-
|
|
36
|
+
import { CliExit, fail } from './exit.js';
|
|
37
|
+
/** SessionStart(compact) injector: prints the task snapshot and session trail lost to compaction; no pinned memories
|
|
38
|
+
* (UserPromptSubmit re-injects them). Every path exits 0: a malformed payload or store read failure degrades to empty
|
|
39
|
+
* stdout, never a throw. */
|
|
40
|
+
async function cmdCompactResume(hippoRoot, tenantId, stdinText, stdinTimedOut) {
|
|
40
41
|
let rec = null;
|
|
41
42
|
try {
|
|
42
43
|
// Gate on the non-exiting isInitialized check first: the store reads below call initStore, which would
|
|
@@ -53,25 +54,27 @@ function cmdCompactResume(hippoRoot, tenantId, stdinText, stdinTimedOut) {
|
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
56
|
// A compaction follows a prompt or SessionStart that booked the arm, so this only reads it.
|
|
56
|
-
if (!suppressOutput && payloadSessionId !== null &&
|
|
57
|
+
if (!suppressOutput && payloadSessionId !== null &&
|
|
58
|
+
inPilotHoldout(hippoRoot, tenantId, payloadSessionId, { write: false })) {
|
|
57
59
|
suppressOutput = true;
|
|
58
60
|
rec?.disabled();
|
|
59
61
|
}
|
|
60
62
|
if (!suppressOutput)
|
|
61
|
-
restoreCompactSnapshot(hippoRoot, tenantId, payloadSessionId, rec);
|
|
63
|
+
await restoreCompactSnapshot(hippoRoot, tenantId, payloadSessionId, rec);
|
|
62
64
|
}
|
|
63
65
|
catch (err) {
|
|
64
66
|
if (err instanceof CliExit)
|
|
65
67
|
throw err;
|
|
66
|
-
// Empty stdout on any store error, never a crashed SessionStart; the reason goes to stderr, which the model never
|
|
67
|
-
|
|
68
|
+
// Empty stdout on any store error, never a crashed SessionStart; the reason goes to stderr, which the model never
|
|
69
|
+
// sees.
|
|
70
|
+
log.warn(`hippo compact-resume: skipped: ${errorMessage(err)}`, errorFields(err));
|
|
68
71
|
}
|
|
69
72
|
// A no-op when the token ledger's handle already wrote the row; exit would drop it otherwise.
|
|
70
73
|
flushDeliveryRecorder(rec);
|
|
71
74
|
throw new CliExit(0);
|
|
72
75
|
}
|
|
73
|
-
function restoreCompactSnapshot(hippoRoot, tenantId, payloadSessionId, rec) {
|
|
74
|
-
const text = compactResumeBlock(cliApiContext(hippoRoot, tenantId), payloadSessionId);
|
|
76
|
+
async function restoreCompactSnapshot(hippoRoot, tenantId, payloadSessionId, rec) {
|
|
77
|
+
const text = await compactResumeBlock(cliApiContext(hippoRoot, tenantId), payloadSessionId);
|
|
75
78
|
if (text === null)
|
|
76
79
|
return;
|
|
77
80
|
// Printed in one write so the ledger books exactly the text the model is handed.
|
|
@@ -79,21 +82,29 @@ function restoreCompactSnapshot(hippoRoot, tenantId, payloadSessionId, rec) {
|
|
|
79
82
|
rec?.delivered({ state: 'sent', emittedText: `${text}\n` });
|
|
80
83
|
bookLedgerTurn(hippoRoot, {
|
|
81
84
|
uses: [{
|
|
82
|
-
tenantId,
|
|
85
|
+
tenantId,
|
|
86
|
+
sessionId: payloadSessionId,
|
|
87
|
+
surface: 'compact_resume',
|
|
88
|
+
event: 'inject',
|
|
89
|
+
items: 1,
|
|
90
|
+
tokens: estimateTokens(text),
|
|
83
91
|
}],
|
|
84
92
|
delivery: (write) => flushDeliveryRecorder(rec, write),
|
|
85
|
-
});
|
|
93
|
+
}, cliLedgerReach(hippoRoot));
|
|
86
94
|
}
|
|
87
|
-
/** SessionEnd entry: TUI teardown kills children still running, so read stdin inline, spawn a detached child that runs
|
|
88
|
-
* The child logs to a file that the next SessionStart reads via `hippo last-sleep`. */
|
|
95
|
+
/** SessionEnd entry: TUI teardown kills children still running, so read stdin inline, spawn a detached child that runs
|
|
96
|
+
* sleep then capture, and exit. The child logs to a file that the next SessionStart reads via `hippo last-sleep`. */
|
|
89
97
|
export async function handleSessionEnd({ hippoRoot, tenantId, flags }) {
|
|
90
98
|
const runtime = hookRuntime(flags);
|
|
91
99
|
const turn = flagIsTrue(flags, 'turn');
|
|
92
|
-
// Copilot's hook command carries no path, since one quoted into it would need escaping for each shell; the log goes
|
|
93
|
-
|
|
100
|
+
// Copilot's hook command carries no path, since one quoted into it would need escaping for each shell; the log goes
|
|
101
|
+
// where the hook table used to point.
|
|
102
|
+
const logFile = stringFlag(flags, 'log-file') ??
|
|
103
|
+
(runtime === 'copilot' ? resolveJsonHookPaths('copilot').logFile : null);
|
|
94
104
|
// Bounded read: extracts transcript_path + session_id for the detached worker's argv.
|
|
95
105
|
const raw = await readStdinBounded();
|
|
96
|
-
// Read before normalising: the Copilot CLI's agentStop shares this hook line, and camelCase keys would pass as VS
|
|
106
|
+
// Read before normalising: the Copilot CLI's agentStop shares this hook line, and camelCase keys would pass as VS
|
|
107
|
+
// Code's.
|
|
97
108
|
const stop = turn ? vscodeStopInput(raw) : null;
|
|
98
109
|
if (turn && !stop)
|
|
99
110
|
return;
|
|
@@ -103,11 +114,12 @@ export async function handleSessionEnd({ hippoRoot, tenantId, flags }) {
|
|
|
103
114
|
const input = stop ?? sessionEndInput(stdinText, raw.timedOut, runtime);
|
|
104
115
|
// Only a host payload ends a session: a manual run and a reply's end (turn mode) are not boundaries.
|
|
105
116
|
const rec = !turn && input !== null && !input.manual
|
|
106
|
-
?
|
|
117
|
+
? startSessionEndRecorder(root, tenantId, stdinText, runtime)
|
|
107
118
|
: null;
|
|
108
119
|
const sessionId = input?.sessionId ?? null;
|
|
109
|
-
// Resolved here because only this process saw the payload; the worker captures just the path it is handed.
|
|
110
|
-
//
|
|
120
|
+
// Resolved here because only this process saw the payload; the worker captures just the path it is handed. Always a
|
|
121
|
+
// hook, so never scan: an empty stdin here is not a manual run. The Copilot CLI's sessionEnd names no transcript, so
|
|
122
|
+
// its log is found by id.
|
|
111
123
|
const named = input?.transcriptPath ?? null;
|
|
112
124
|
const transcriptPath = (named !== null && fs.existsSync(named) ? named : null)
|
|
113
125
|
?? (runtime === 'copilot' && sessionId ? copilotTranscriptFor(sessionId) : null);
|
|
@@ -116,7 +128,7 @@ export async function handleSessionEnd({ hippoRoot, tenantId, flags }) {
|
|
|
116
128
|
spawnSessionEndWorker(sessionEndWorkerArgs(worker));
|
|
117
129
|
}
|
|
118
130
|
catch (err) {
|
|
119
|
-
log.debug(`session-end: the worker did not spawn, running inline: ${errorMessage(err)}
|
|
131
|
+
log.debug(`session-end: the worker did not spawn, running inline: ${errorMessage(err)}`, errorFields(err));
|
|
120
132
|
// Inline is the last resort, handed what the child's argv would have carried.
|
|
121
133
|
try {
|
|
122
134
|
await cmdSessionEndWorker(root, tenantId, inlineWorkerFlags(flags, worker));
|
|
@@ -129,7 +141,16 @@ export async function handleSessionEnd({ hippoRoot, tenantId, flags }) {
|
|
|
129
141
|
// After the spawn, so a locked store delays only the row; the hook's short lock wait bounds it.
|
|
130
142
|
await runHookWithStores(() => flushDeliveryRecorder(rec));
|
|
131
143
|
}
|
|
132
|
-
|
|
144
|
+
function startSessionEndRecorder(root, tenantId, stdinText, runtime) {
|
|
145
|
+
return startDeliveryRecorder(cliApiContext(hookStoreRoot(root), tenantId), {
|
|
146
|
+
stdinText,
|
|
147
|
+
runtime,
|
|
148
|
+
eventType: 'session-end',
|
|
149
|
+
envSessionId: hostSessionId(),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** What the session-end payload named; null for one hippo refuses or one that never arrived, and the worker then runs
|
|
153
|
+
* with neither value. */
|
|
133
154
|
function sessionEndInput(stdinText, timedOut, runtime) {
|
|
134
155
|
const receipt = readSessionEnd(stdinText, timedOut, runtime);
|
|
135
156
|
if (receipt.status === 'received')
|
|
@@ -150,7 +171,8 @@ function sessionEndWorkerArgs(o) {
|
|
|
150
171
|
workerArgs.push('--turn');
|
|
151
172
|
return workerArgs;
|
|
152
173
|
}
|
|
153
|
-
/** The flags the detached worker would parse from its argv, so the inline run sees what the child would have; the
|
|
174
|
+
/** The flags the detached worker would parse from its argv, so the inline run sees what the child would have; the
|
|
175
|
+
* hook's own flags fill the gaps. */
|
|
154
176
|
function inlineWorkerFlags(flags, w) {
|
|
155
177
|
const out = {};
|
|
156
178
|
const keep = (name, value) => {
|
|
@@ -180,10 +202,12 @@ function spawnSessionEndWorker(workerArgs) {
|
|
|
180
202
|
child.on('error', (err) => log.warn(`hippo session-end: the worker did not start: ${errorMessage(err)}`));
|
|
181
203
|
child.unref();
|
|
182
204
|
}
|
|
183
|
-
/** The input of a VS Code Stop payload with a session id that can name the lock file; null makes turn mode a silent
|
|
205
|
+
/** The input of a VS Code Stop payload with a session id that can name the lock file; null makes turn mode a silent
|
|
206
|
+
* no-op. */
|
|
184
207
|
function vscodeStopInput(raw) {
|
|
185
208
|
const receipt = readVscodeStop(raw.text, raw.timedOut);
|
|
186
|
-
return receipt.status === 'received' && receipt.input.sessionId !== null &&
|
|
209
|
+
return receipt.status === 'received' && receipt.input.sessionId !== null &&
|
|
210
|
+
SESSION_ID_RE.test(receipt.input.sessionId) ? receipt.input : null;
|
|
187
211
|
}
|
|
188
212
|
async function cmdSessionEndWorker(hippoRoot, tenantId, flags) {
|
|
189
213
|
const sessionId = flags['session-id'];
|
|
@@ -203,7 +227,10 @@ function sessionEndWork(hippoRoot, tenantId, flags, mode) {
|
|
|
203
227
|
sessionId,
|
|
204
228
|
transcriptPath,
|
|
205
229
|
contextFor: (root) => cliApiContext(root, tenantId),
|
|
206
|
-
storeRoot: () =>
|
|
230
|
+
storeRoot: () => {
|
|
231
|
+
const root = hookStoreRoot(hippoRoot);
|
|
232
|
+
return isInitialized(root) ? root : null;
|
|
233
|
+
},
|
|
207
234
|
log: (line, opts) => appendSessionEndCloseLog(logFile, line, opts),
|
|
208
235
|
sleep: () => (mode === 'turn' && sessionId
|
|
209
236
|
? sleepIfDue(hippoRoot, tenantId, flags, logFile, transcriptPath, sessionId)
|
|
@@ -211,8 +238,9 @@ function sessionEndWork(hippoRoot, tenantId, flags, mode) {
|
|
|
211
238
|
readScan: (log) => (transcriptPath ? readSessionScan(transcriptPath, log) : null),
|
|
212
239
|
capture: (store, scan) => {
|
|
213
240
|
const capture = (turns) => captureEndedSession(hippoRoot, tenantId, store, flags, transcriptPath, turns);
|
|
214
|
-
if (mode === 'turn')
|
|
241
|
+
if (mode === 'turn') {
|
|
215
242
|
captureNewTurns(transcriptPath, sessionId, scan, capture, (line) => appendSessionEndCloseLog(logFile, line));
|
|
243
|
+
}
|
|
216
244
|
else
|
|
217
245
|
capture(scan?.turns);
|
|
218
246
|
},
|
|
@@ -241,7 +269,8 @@ async function sleepProjectStore(hippoRoot, tenantId, flags, closeLogFile, trans
|
|
|
241
269
|
logSessionEndImport(closeLogFile, transcriptPath);
|
|
242
270
|
}
|
|
243
271
|
}
|
|
244
|
-
/** A close after every reply sleeps only at the MCP server's auto-sleep threshold; each line starts the log afresh, as
|
|
272
|
+
/** A close after every reply sleeps only at the MCP server's auto-sleep threshold; each line starts the log afresh, as
|
|
273
|
+
* a sleep does. */
|
|
245
274
|
async function sleepIfDue(hippoRoot, tenantId, flags, closeLogFile, transcriptPath, sessionId) {
|
|
246
275
|
if (!isInitialized(hippoRoot))
|
|
247
276
|
return sleepProjectStore(hippoRoot, tenantId, flags, closeLogFile, transcriptPath);
|
|
@@ -329,7 +358,7 @@ export function handleCodexRun({ hippoRoot, tenantId, args }) {
|
|
|
329
358
|
cmdLastSleep(hippoRoot, { path: metadata.logFile }, 'terminal');
|
|
330
359
|
}
|
|
331
360
|
catch (err) {
|
|
332
|
-
log.debug(`codex run: the last sleep summary was not shown: ${errorMessage(err)}
|
|
361
|
+
log.debug(`codex run: the last sleep summary was not shown: ${errorMessage(err)}`, errorFields(err));
|
|
333
362
|
}
|
|
334
363
|
const child = spawnRealCodex(metadata.realCodexPath, args, process.cwd());
|
|
335
364
|
child.on('error', (err) => {
|
|
@@ -369,10 +398,11 @@ async function launchCodexSessionEndWorker(hippoRoot, tenantId, historyPath, sta
|
|
|
369
398
|
});
|
|
370
399
|
}
|
|
371
400
|
catch (inlineErr) {
|
|
372
|
-
log.debug(`codex run: the inline session-end failed: ${errorMessage(inlineErr)}
|
|
401
|
+
log.debug(`codex run: the inline session-end failed: ${errorMessage(inlineErr)}`, errorFields(inlineErr));
|
|
373
402
|
}
|
|
374
403
|
}
|
|
375
|
-
/** Resolves true once the detached worker is running, false when the spawn fails, whether it throws or reports
|
|
404
|
+
/** Resolves true once the detached worker is running, false when the spawn fails, whether it throws or reports
|
|
405
|
+
* later. */
|
|
376
406
|
function detachedWorkerStarted(workerArgs) {
|
|
377
407
|
return new Promise((resolve) => {
|
|
378
408
|
const failed = (reason) => {
|
|
@@ -437,8 +467,8 @@ function captureCodexTranscript(hippoRoot, tenantId, store, flags, logFile) {
|
|
|
437
467
|
try {
|
|
438
468
|
const codexHome = stringFlag(flags, 'codex-home') ?? resolveCodexWrapperPaths().codexHome;
|
|
439
469
|
const historyPath = stringFlag(flags, 'history-path') ?? path.join(codexHome, 'history.jsonl');
|
|
440
|
-
const startOffsetBytes = parseInt(
|
|
441
|
-
const startedAtMs = parseInt(
|
|
470
|
+
const startOffsetBytes = parseInt(stringFlag(flags, 'start-offset') ?? '', 10) || 0;
|
|
471
|
+
const startedAtMs = parseInt(stringFlag(flags, 'started-at') ?? '', 10) || Date.now();
|
|
442
472
|
const transcriptPath = resolveCodexSessionTranscript({
|
|
443
473
|
codexHome,
|
|
444
474
|
historyPath,
|
|
@@ -499,8 +529,8 @@ export async function handlePreCompact({ hippoRoot, tenantId, flags }) {
|
|
|
499
529
|
});
|
|
500
530
|
}
|
|
501
531
|
export async function handlePostCompact({ hippoRoot, flags }) {
|
|
502
|
-
// PostCompact hook: saves the compaction summary and its memories, then prints one plain line, because Claude Code
|
|
503
|
-
// stdout as-is. Always exits 0.
|
|
532
|
+
// PostCompact hook: saves the compaction summary and its memories, then prints one plain line, because Claude Code
|
|
533
|
+
// shows this hook's stdout as-is. Always exits 0.
|
|
504
534
|
const { text, timedOut } = await readHookStdin();
|
|
505
535
|
const logFlag = flags['log-file'];
|
|
506
536
|
const store = hookStoreRoot(hippoRoot);
|
|
@@ -510,7 +540,10 @@ export async function handlePostCompact({ hippoRoot, flags }) {
|
|
|
510
540
|
logFile: logFlag === true || logFlag === false || Array.isArray(logFlag) ? undefined : logFlag,
|
|
511
541
|
// Passed in, since src/capture/ importing the sync would close an import cycle.
|
|
512
542
|
afterSave: (transcriptPath, cwd, log) => {
|
|
513
|
-
const report = importSessionFolder(store, transcriptPath, cwd, {
|
|
543
|
+
const report = importSessionFolder(store, transcriptPath, cwd, {
|
|
544
|
+
machine: currentMachine(),
|
|
545
|
+
busyWaitMs: COMPACTION_DB_WAIT_MS,
|
|
546
|
+
});
|
|
514
547
|
const summary = summaryLine(report);
|
|
515
548
|
if (summary !== null)
|
|
516
549
|
log(summary);
|
|
@@ -531,7 +564,11 @@ export async function handleCaptureError({ hippoRoot, tenantId, flags }) {
|
|
|
531
564
|
if (isInitialized(root) && payload) {
|
|
532
565
|
// SAFETY: JSON.parse returns a JSON value by definition.
|
|
533
566
|
const failure = JSON.parse(payload);
|
|
534
|
-
const rec = startToolFailureRecorder(cliApiContext(root, tenantId), {
|
|
567
|
+
const rec = startToolFailureRecorder(cliApiContext(root, tenantId), {
|
|
568
|
+
stdinText: text,
|
|
569
|
+
runtime: hookRuntime(flags),
|
|
570
|
+
envSessionId: hostSessionId(),
|
|
571
|
+
});
|
|
535
572
|
await runHookWithStores(() => {
|
|
536
573
|
try {
|
|
537
574
|
return captureToolFailure(root, tenantId, failure, (id) => rec?.logged(id));
|
|
@@ -544,14 +581,14 @@ export async function handleCaptureError({ hippoRoot, tenantId, flags }) {
|
|
|
544
581
|
}
|
|
545
582
|
catch (err) {
|
|
546
583
|
// A malformed payload or store error must never fail the agent's tool call, so it is reported and dropped.
|
|
547
|
-
log.warn(`failure capture skipped: ${errorMessage(err)}
|
|
584
|
+
log.warn(`failure capture skipped: ${errorMessage(err)}`, errorFields(err));
|
|
548
585
|
}
|
|
549
586
|
}
|
|
550
587
|
export async function handleCompactResume({ hippoRoot, tenantId }) {
|
|
551
588
|
const { text: stdinText, timedOut: stdinTimedOut } = await readHookStdin();
|
|
552
|
-
await runHookWithStores(() => {
|
|
589
|
+
await runHookWithStores(async () => {
|
|
553
590
|
resetHookInjection(hippoRoot, tenantId, stdinText, 'compact');
|
|
554
|
-
cmdCompactResume(hookStoreRoot(hippoRoot), tenantId, stdinText, stdinTimedOut);
|
|
591
|
+
await cmdCompactResume(hookStoreRoot(hippoRoot), tenantId, stdinText, stdinTimedOut);
|
|
555
592
|
});
|
|
556
593
|
}
|
|
557
594
|
export async function handleCapture({ hippoRoot, tenantId, flags }) {
|
|
@@ -563,19 +600,19 @@ export async function handleCapture({ hippoRoot, tenantId, flags }) {
|
|
|
563
600
|
}
|
|
564
601
|
else if (flags['file']) {
|
|
565
602
|
captureSource = 'file';
|
|
566
|
-
captureFile =
|
|
603
|
+
captureFile = stringFlagOrExit(flags, 'file');
|
|
567
604
|
}
|
|
568
605
|
else if (flags['last-session']) {
|
|
569
606
|
captureSource = 'last-session';
|
|
570
607
|
}
|
|
571
608
|
if (flags['transcript']) {
|
|
572
|
-
transcriptPath =
|
|
609
|
+
transcriptPath = stringFlagOrExit(flags, 'transcript');
|
|
573
610
|
if (!captureSource)
|
|
574
611
|
captureSource = 'last-session';
|
|
575
612
|
}
|
|
576
613
|
if (!captureSource) {
|
|
577
|
-
|
|
578
|
-
|
|
614
|
+
fail('Usage: hippo capture --stdin|--file <path>|--last-session [--transcript <path>] [--log-file <path>] ' +
|
|
615
|
+
'[--dry-run] [--global]');
|
|
579
616
|
}
|
|
580
617
|
// Bounded, and only when last-session has no explicit path: the
|
|
581
618
|
// --stdin source keeps its own blocking read in src/capture/ by design.
|
package/dist/cli/setup.js
CHANGED
|
@@ -3,7 +3,7 @@ import { MINUTE_MS } from '../util/time.js';
|
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import { execFileSync } from 'child_process';
|
|
6
|
-
import { installJsonHooks, uninstallJsonHooks, checkUninstallable, copilotHookEvents, resolveJsonHookPaths } from '../hooks/json-hooks.js';
|
|
6
|
+
import { installJsonHooks, uninstallJsonHooks, checkUninstallable, copilotHookEvents, resolveJsonHookPaths, } from '../hooks/json-hooks.js';
|
|
7
7
|
import { detectInstalledTools } from '../hooks/shared.js';
|
|
8
8
|
import { ensureCodexWrapperInstalled, installCodexWrapper, detectRealCodexPath, uninstallCodexWrapper, } from '../hooks/codex-wrapper.js';
|
|
9
9
|
import { installOpencodePlugin, uninstallOpencodePlugin, resolveOpencodePluginPath } from '../hooks/opencode.js';
|
|
@@ -23,7 +23,7 @@ import { installCodexMemoryHooks, setupDailySchedule, warnClaudeSettingsUnusable
|
|
|
23
23
|
import { repairQualityOnceAt } from './quality-repair-once.js';
|
|
24
24
|
import { HOOK_MARKERS, HOOKS, hippoBlock, withoutHookBlock } from '../hooks/hook-blocks.js';
|
|
25
25
|
import { escapeRegex } from '../util/escape.js';
|
|
26
|
-
import {
|
|
26
|
+
import { fail } from './exit.js';
|
|
27
27
|
// Hook install/uninstall
|
|
28
28
|
export function handleHook({ args }) {
|
|
29
29
|
const subcommand = args[0];
|
|
@@ -34,8 +34,7 @@ export function handleHook({ args }) {
|
|
|
34
34
|
return hookInstall(target);
|
|
35
35
|
if (subcommand === 'uninstall')
|
|
36
36
|
return hookUninstall(target);
|
|
37
|
-
|
|
38
|
-
throw new CliExit(1);
|
|
37
|
+
fail('Usage: hippo hook <install|uninstall|list> [target]');
|
|
39
38
|
}
|
|
40
39
|
// Cursor has no init row, so the AGENTS.md block is usually another agent's, and Cursor reads that one as it is.
|
|
41
40
|
function othersBlock(target, text) {
|
|
@@ -46,7 +45,8 @@ function hookList() {
|
|
|
46
45
|
for (const [name, hook] of Object.entries(HOOKS)) {
|
|
47
46
|
console.log(` ${name.padEnd(15)} -> ${hook.file} (${hook.description})`);
|
|
48
47
|
}
|
|
49
|
-
console.log(` ${'copilot'.padEnd(15)} -> $COPILOT_HOME or ~/.copilot, and each VS Code User folder
|
|
48
|
+
console.log(` ${'copilot'.padEnd(15)} -> $COPILOT_HOME or ~/.copilot, and each VS Code User folder ` +
|
|
49
|
+
'(GitHub Copilot: hooks, MCP server and instructions)');
|
|
50
50
|
console.log('\nUsage: hippo hook install <name>');
|
|
51
51
|
console.log(' hippo hook uninstall <name>');
|
|
52
52
|
}
|
|
@@ -56,8 +56,7 @@ function hookInstall(target) {
|
|
|
56
56
|
return printCopilotInstall(installCopilot(), '');
|
|
57
57
|
if (!target || !HOOKS[target]) {
|
|
58
58
|
printError(`Unknown hook target: ${target ?? '(none)'}`);
|
|
59
|
-
|
|
60
|
-
throw new CliExit(1);
|
|
59
|
+
fail(` Available: ${[...Object.keys(HOOKS), 'copilot'].join(', ')}`);
|
|
61
60
|
}
|
|
62
61
|
const hook = HOOKS[target];
|
|
63
62
|
patchAgentFile(hook, target);
|
|
@@ -103,8 +102,8 @@ function patchAgentFile(hook, target) {
|
|
|
103
102
|
}
|
|
104
103
|
}
|
|
105
104
|
else {
|
|
106
|
-
// Do not create an agent-instructions file (CLAUDE.md, AGENTS.md, etc.) in directories without one, to avoid
|
|
107
|
-
// the settings.json hook below is still installed for claude-code.
|
|
105
|
+
// Do not create an agent-instructions file (CLAUDE.md, AGENTS.md, etc.) in directories without one, to avoid
|
|
106
|
+
// polluting cwd; the settings.json hook below is still installed for claude-code.
|
|
108
107
|
console.log(`${hook.file} not found in ${process.cwd()} — skipping agent-instructions patch.`);
|
|
109
108
|
console.log(` Create ${hook.file} and re-run \`hippo hook install ${target}\` if you want the agent prompt.`);
|
|
110
109
|
}
|
|
@@ -155,7 +154,8 @@ function installOpencodeHook() {
|
|
|
155
154
|
console.log(`Removed legacy Claude Code-style hooks block from opencode.json — opencode can now launch`);
|
|
156
155
|
}
|
|
157
156
|
if (result.jsonRepairFailed) {
|
|
158
|
-
console.log(`WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed.
|
|
157
|
+
console.log(`WARNING: opencode.json is unparseable; legacy hooks block could not be auto-removed. ` +
|
|
158
|
+
`Fix the file manually.`);
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
const addByHand = (host) => `add this under "${host.key}" by hand: ${copilotMcpSnippet(host)}`;
|
|
@@ -163,20 +163,24 @@ const MCP_MERGE_LINES = {
|
|
|
163
163
|
added: (file) => `Added the "hippo" MCP server -> ${file}`,
|
|
164
164
|
present: (file) => `The "hippo" MCP server is already in ${file}`,
|
|
165
165
|
'user-owned': (file) => `Left the "hippo" MCP server in ${file} as it is: hippo did not write it`,
|
|
166
|
-
unreadable: (file, host) => `WARNING: ${file} has comments or is not a JSON object hippo can merge into, so it was left unchanged;
|
|
166
|
+
unreadable: (file, host) => `WARNING: ${file} has comments or is not a JSON object hippo can merge into, so it was left unchanged; ` +
|
|
167
|
+
addByHand(host),
|
|
167
168
|
};
|
|
168
169
|
const mcpFailureLine = (file, failure, fix) => `WARNING: hippo could not use ${file} (${failure.failed}), so it was left unchanged; ${fix}`;
|
|
169
|
-
const unclosedLine = (file) => `WARNING: ${file} has ${HOOK_MARKERS.start} with no ${HOOK_MARKERS.end}, so hippo left it unchanged;
|
|
170
|
+
const unclosedLine = (file) => `WARNING: ${file} has ${HOOK_MARKERS.start} with no ${HOOK_MARKERS.end}, so hippo left it unchanged; ` +
|
|
171
|
+
'fix the markers by hand';
|
|
170
172
|
const INSTRUCTIONS_INSTALL_LINES = {
|
|
171
173
|
written: (file) => `Wrote the hippo block -> ${file}`,
|
|
172
174
|
present: (file) => `The hippo block is already in ${file}`,
|
|
173
|
-
kept: (file) => `Kept the hippo block in ${file} as it is: it is not the Copilot text hippo wrote,
|
|
175
|
+
kept: (file) => `Kept the hippo block in ${file} as it is: it is not the Copilot text hippo wrote, ` +
|
|
176
|
+
`so it was edited or is another agent's`,
|
|
174
177
|
unclosed: unclosedLine,
|
|
175
178
|
};
|
|
176
179
|
const INSTRUCTIONS_REMOVE_LINES = {
|
|
177
180
|
removed: (file) => `Removed the hippo block from ${file}`,
|
|
178
181
|
absent: () => '',
|
|
179
|
-
kept: (file) => `Left the hippo block in ${file}: it is not the Copilot text hippo wrote.
|
|
182
|
+
kept: (file) => `Left the hippo block in ${file}: it is not the Copilot text hippo wrote. ` +
|
|
183
|
+
'Delete it by hand if no agent needs it.',
|
|
180
184
|
unclosed: unclosedLine,
|
|
181
185
|
};
|
|
182
186
|
const VSCODE_INSTRUCTIONS_INSTALL_LINES = {
|
|
@@ -189,8 +193,8 @@ const VSCODE_INSTRUCTIONS_REMOVE_LINES = {
|
|
|
189
193
|
absent: () => '',
|
|
190
194
|
kept: (file) => `Left ${file}: it is not the text hippo wrote. Delete it by hand if no agent needs it.`,
|
|
191
195
|
};
|
|
192
|
-
const VSCODE_HOOKS_LINE = 'VS Code: hooks need VS Code 1.109.3 or later with chat.useHooks on (the default);
|
|
193
|
-
'instructions file only.';
|
|
196
|
+
const VSCODE_HOOKS_LINE = 'VS Code: hooks need VS Code 1.109.3 or later with chat.useHooks on (the default); ' +
|
|
197
|
+
'older versions get the MCP server and the instructions file only.';
|
|
194
198
|
function mcpInstallLine(file, mcp, host) {
|
|
195
199
|
return isMcpFailure(mcp) ? mcpFailureLine(file, mcp, addByHand(host)) : MCP_MERGE_LINES[mcp](file, host);
|
|
196
200
|
}
|
|
@@ -201,12 +205,15 @@ function printVscodeInstall(result, indent) {
|
|
|
201
205
|
if (paths.profiles.length > 0) {
|
|
202
206
|
const names = paths.profiles.map((dir) => path.basename(dir)).join(', ');
|
|
203
207
|
console.log(`${indent}Found VS Code profiles (${names}) under ${path.join(paths.userDir, 'profiles')}: ` +
|
|
204
|
-
'hippo set up the default profile only; copy the "hippo" server and prompts/hippo.instructions.md
|
|
208
|
+
'hippo set up the default profile only; copy the "hippo" server and prompts/hippo.instructions.md ' +
|
|
209
|
+
'into a profile to use hippo there.');
|
|
205
210
|
}
|
|
206
211
|
}
|
|
207
212
|
function printCopilotInstall(result, indent) {
|
|
208
213
|
const { paths } = result;
|
|
209
|
-
const hooks = result.hooks
|
|
214
|
+
const hooks = result.hooks
|
|
215
|
+
? `Installed hippo's Copilot hooks (${copilotHookEvents().join(', ')}) ->`
|
|
216
|
+
: "hippo's Copilot hooks are already in";
|
|
210
217
|
console.log(`${indent}${hooks} ${paths.hooks}`);
|
|
211
218
|
if (result.mcp === null || result.instructions === null) {
|
|
212
219
|
console.log(`${indent}No Copilot CLI files in ${path.dirname(paths.mcpConfig)}, ` +
|
|
@@ -257,8 +264,7 @@ function hookUninstall(target) {
|
|
|
257
264
|
if (target === 'copilot')
|
|
258
265
|
return printCopilotUninstall(uninstallCopilot());
|
|
259
266
|
if (!target || !HOOKS[target]) {
|
|
260
|
-
|
|
261
|
-
throw new CliExit(1);
|
|
267
|
+
fail(`Unknown hook target: ${target ?? '(none)'}`);
|
|
262
268
|
}
|
|
263
269
|
unpatchAgentFile(HOOKS[target], target);
|
|
264
270
|
// For Claude Code, also strip its SessionEnd/SessionStart entries.
|
|
@@ -271,7 +277,8 @@ function hookUninstall(target) {
|
|
|
271
277
|
}
|
|
272
278
|
}
|
|
273
279
|
else if (target === 'opencode') {
|
|
274
|
-
// opencode uses a TS plugin; uninstall removes the plugin file and also runs the legacy-hooks migration, so remove
|
|
280
|
+
// opencode uses a TS plugin; uninstall removes the plugin file and also runs the legacy-hooks migration, so remove
|
|
281
|
+
// leaves opencode launchable.
|
|
275
282
|
if (uninstallOpencodePlugin()) {
|
|
276
283
|
console.log(`Removed hippo opencode plugin (and any legacy hooks block from opencode.json)`);
|
|
277
284
|
}
|
|
@@ -318,7 +325,9 @@ function removeLegacyCursorRules() {
|
|
|
318
325
|
writeFileAtomic(legacy, left + '\n');
|
|
319
326
|
else
|
|
320
327
|
fs.unlinkSync(legacy);
|
|
321
|
-
console.log(left
|
|
328
|
+
console.log(left
|
|
329
|
+
? 'Removed the old Hippo hook from .cursorrules'
|
|
330
|
+
: 'Deleted .cursorrules, which held only the old Hippo hook');
|
|
322
331
|
}
|
|
323
332
|
}
|
|
324
333
|
function setupDetectedTools(tools, forceAll, dryRun) {
|
|
@@ -383,15 +392,19 @@ function setupCopilot(dryRun) {
|
|
|
383
392
|
if (!dryRun)
|
|
384
393
|
return printCopilotInstall(installCopilot(), indent);
|
|
385
394
|
const { hooks, mcpConfig, instructions, vscode } = copilotPaths();
|
|
386
|
-
const cliFiles = isCopilotCliPresent()
|
|
395
|
+
const cliFiles = isCopilotCliPresent()
|
|
396
|
+
? `, the MCP server in ${mcpConfig} and the hippo block in ${instructions}`
|
|
397
|
+
: '';
|
|
387
398
|
console.log(`[dry-run] would install hooks in ${hooks}${cliFiles}`);
|
|
388
|
-
for (const dir of vscode)
|
|
399
|
+
for (const dir of vscode) {
|
|
389
400
|
console.log(`[dry-run] would add the MCP server to ${dir.mcpConfig} and write ${dir.instructions}`);
|
|
401
|
+
}
|
|
390
402
|
}
|
|
391
403
|
function setupJsonTool(tool, dryRun) {
|
|
392
404
|
if (tool.name === 'copilot')
|
|
393
405
|
return setupCopilot(dryRun);
|
|
394
|
-
// SAFETY: detectInstalledTools gives kind 'json-hook' only to claude-code and copilot (hooks/shared.ts), and copilot
|
|
406
|
+
// SAFETY: detectInstalledTools gives kind 'json-hook' only to claude-code and copilot (hooks/shared.ts), and copilot
|
|
407
|
+
// returned above.
|
|
395
408
|
const target = tool.name;
|
|
396
409
|
if (dryRun) {
|
|
397
410
|
// Resolve the real settings path so the filename is right for each tool
|
|
@@ -433,8 +446,9 @@ function setupJsonTool(tool, dryRun) {
|
|
|
433
446
|
}
|
|
434
447
|
function setupWrapperTool(tool, dryRun) {
|
|
435
448
|
if (dryRun) {
|
|
436
|
-
if (tool.name === 'codex')
|
|
449
|
+
if (tool.name === 'codex') {
|
|
437
450
|
console.log(`[dry-run] would install Codex memory hooks in ${resolveJsonHookPaths('codex').settings}`);
|
|
451
|
+
}
|
|
438
452
|
console.log(`[dry-run] would wrap the detected ${tool.name} launcher in place`);
|
|
439
453
|
return;
|
|
440
454
|
}
|
|
@@ -478,12 +492,15 @@ function setupPluginTool(tool, dryRun) {
|
|
|
478
492
|
console.log(` ${tool.name.padEnd(14)} ${bits.join(', ')} -> ${result.pluginPath}`);
|
|
479
493
|
}
|
|
480
494
|
}
|
|
481
|
-
// Three times the 10 minutes POST /v1/sleep allows a consolidation, so a slow real sleep fits and a hung child cannot
|
|
495
|
+
// Three times the 10 minutes POST /v1/sleep allows a consolidation, so a slow real sleep fits and a hung child cannot
|
|
496
|
+
// stall every later workspace.
|
|
482
497
|
const DAILY_STEP_TIMEOUT_MS = 30 * MINUTE_MS;
|
|
483
|
-
/** Why a child step failed; a child killed at the deadline says so, since its own message is only the spawn error
|
|
498
|
+
/** Why a child step failed; a child killed at the deadline says so, since its own message is only the spawn error
|
|
499
|
+
* code. */
|
|
484
500
|
function dailyStepFailure(err, timeoutMs) {
|
|
485
|
-
if (err instanceof Error && 'code' in err && err.code === 'ETIMEDOUT')
|
|
501
|
+
if (err instanceof Error && 'code' in err && err.code === 'ETIMEDOUT') {
|
|
486
502
|
return `timed out after ${timeoutMs} ms and was stopped`;
|
|
503
|
+
}
|
|
487
504
|
return errorMessage(err);
|
|
488
505
|
}
|
|
489
506
|
export async function handleDailyRunner({ tenantId }) {
|
|
@@ -491,8 +508,9 @@ export async function handleDailyRunner({ tenantId }) {
|
|
|
491
508
|
// No workspace sleep ever opens the global store, yet hooks in folders without a store compact into it.
|
|
492
509
|
if (isInitialized(globalRoot)) {
|
|
493
510
|
const finished = replayCompactionsAt(globalRoot, (message) => log.warn(`compaction replay: ${message}`));
|
|
494
|
-
if (finished > 0)
|
|
511
|
+
if (finished > 0) {
|
|
495
512
|
console.log(`Finished saving ${finished} compaction${finished === 1 ? '' : 's'} left over in the global store.`);
|
|
513
|
+
}
|
|
496
514
|
await repairQualityOnceAt(globalRoot, tenantId);
|
|
497
515
|
}
|
|
498
516
|
printAgentImport(importUserMemories(globalRoot, { machine: currentMachine() }), '');
|
|
@@ -501,7 +519,8 @@ export async function handleDailyRunner({ tenantId }) {
|
|
|
501
519
|
console.log('No registered Hippo workspaces found. Run `hippo init` inside a project first.');
|
|
502
520
|
return;
|
|
503
521
|
}
|
|
504
|
-
|
|
522
|
+
const plural = workspaces.length === 1 ? '' : 's';
|
|
523
|
+
console.log(`Running daily maintenance across ${workspaces.length} registered workspace${plural}...`);
|
|
505
524
|
let processed = 0;
|
|
506
525
|
let failed = 0;
|
|
507
526
|
const timeout = envDailyStepTimeoutMs() ?? DAILY_STEP_TIMEOUT_MS;
|
|
@@ -519,7 +538,10 @@ export async function handleDailyRunner({ tenantId }) {
|
|
|
519
538
|
catch (err) {
|
|
520
539
|
failed++;
|
|
521
540
|
const action = args.join(' ');
|
|
522
|
-
log.error(`daily-runner failed in ${cwd} during \`${action}\`: ${dailyStepFailure(err, timeout)}`, {
|
|
541
|
+
log.error(`daily-runner failed in ${cwd} during \`${action}\`: ${dailyStepFailure(err, timeout)}`, {
|
|
542
|
+
workspace: cwd,
|
|
543
|
+
...errorFields(err),
|
|
544
|
+
});
|
|
523
545
|
}
|
|
524
546
|
});
|
|
525
547
|
console.log(`Daily maintenance complete: ${processed} workspace${processed === 1 ? '' : 's'} processed, ` +
|
package/dist/cli/shared.d.ts
CHANGED
|
@@ -7,7 +7,9 @@ export declare function runChurnStaleForRepo(hippoRoot: string, tenantId: string
|
|
|
7
7
|
root: string;
|
|
8
8
|
result: ChurnStaleResult;
|
|
9
9
|
}[];
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Run an HTTP-routed command if a `hippo serve` is detected: true if it ran, false on no server or a stale pidfile
|
|
12
|
+
* (removed if it names the dead server).
|
|
11
13
|
* With HIPPO_REQUIRE_SERVER set both fallbacks throw; a stale pidfile must self-heal, not crash. */
|
|
12
14
|
export declare function runViaServerIfAvailable(hippoRoot: string, httpFn: (info: ServerInfo, apiKey: string | undefined) => Promise<void>): Promise<boolean>;
|
|
13
15
|
/** True, after one line, on a shared store: this account's commits and agent notes are not its members' memories. */
|