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
package/dist/graph/stream.js
CHANGED
|
@@ -9,7 +9,10 @@ export const DEFAULT_GRAPH_SEED_COUNT = 10;
|
|
|
9
9
|
/** Recommended RRF weight for the graph stream — a CLI-only convenience default. The
|
|
10
10
|
* library `graphStream.weight` option stays REQUIRED (opt-in is explicit). */
|
|
11
11
|
export const DEFAULT_GRAPH_STREAM_WEIGHT = 0.5;
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Pick the top `seedCount` candidates by best lexical rank (lowest position across BM25 and dense), strength =
|
|
14
|
+
* 1/(bestRank + 1). Pure.
|
|
15
|
+
*/
|
|
13
16
|
export function selectGraphSeeds(bm25Ranked, cosineRanked, seedCount) {
|
|
14
17
|
if (seedCount <= 0)
|
|
15
18
|
return [];
|
|
@@ -29,7 +32,8 @@ export function selectGraphSeeds(bm25Ranked, cosineRanked, seedCount) {
|
|
|
29
32
|
.slice(0, seedCount)
|
|
30
33
|
.map(([index, best]) => ({ index, strength: 1 / (best + 1) }));
|
|
31
34
|
}
|
|
32
|
-
// Pass 1: take the STRONGEST reaching-seed strength per new neighbour across ALL relations at this depth before
|
|
35
|
+
// Pass 1: take the STRONGEST reaching-seed strength per new neighbour across ALL relations at this depth before
|
|
36
|
+
// committing any to `visited`;
|
|
33
37
|
// marking mid-loop would lock a node to whichever relation SQLite returned first and drop a stronger seed's later edge.
|
|
34
38
|
function bestStrengthAtDepth(rels, frontierSet, visited, frontierStrength, originStrength) {
|
|
35
39
|
const bestStrengthThisDepth = new Map();
|
|
@@ -91,8 +95,12 @@ function reachedEntityScores(root, tenantId, seedIds, originStrength, options) {
|
|
|
91
95
|
}
|
|
92
96
|
return reachedScore;
|
|
93
97
|
}
|
|
94
|
-
/**
|
|
95
|
-
*
|
|
98
|
+
/**
|
|
99
|
+
* Accumulate per-entryIndex graph-proximity scores from ONE store's graph into `graphScore`; only seeds whose entities
|
|
100
|
+
* live in THIS store are expanded.
|
|
101
|
+
* A neighbour's score = originSeedStrength x decay^(graph distance); the seed strength is carried unchanged along each
|
|
102
|
+
* BFS path.
|
|
103
|
+
*/
|
|
96
104
|
function accumulateForRoot(root, seeds, entries, options) {
|
|
97
105
|
const { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId } = options;
|
|
98
106
|
if (seeds.length === 0)
|
|
@@ -107,7 +115,8 @@ function accumulateForRoot(root, seeds, entries, options) {
|
|
|
107
115
|
const seedEntities = loadEntitiesByMemoryId(root, tenantId, [...strengthByMemId.keys()]);
|
|
108
116
|
if (seedEntities.length === 0)
|
|
109
117
|
return;
|
|
110
|
-
// entityId -> origin seed strength. Seeds load by memory id so memoryId is non-null here; the guard keeps the widened
|
|
118
|
+
// entityId -> origin seed strength. Seeds load by memory id so memoryId is non-null here; the guard keeps the widened
|
|
119
|
+
// (string | null) type honest.
|
|
111
120
|
const originStrength = new Map();
|
|
112
121
|
for (const e of seedEntities) {
|
|
113
122
|
if (e.memoryId === null)
|
|
@@ -132,8 +141,12 @@ function accumulateForRoot(root, seeds, entries, options) {
|
|
|
132
141
|
graphScore.set(idx, Math.max(graphScore.get(idx) ?? 0, score));
|
|
133
142
|
}
|
|
134
143
|
}
|
|
135
|
-
/**
|
|
136
|
-
*
|
|
144
|
+
/**
|
|
145
|
+
* Produce the graph-retrieval ranked list: `entries[]` indices by graph proximity (desc) to the lexical `seeds`; absent
|
|
146
|
+
* indices fall to rrfFuse absentRank.
|
|
147
|
+
* Returns `[]` when there are no seeds/entries, the graph is empty, or nothing reached is in-pool, so the caller skips
|
|
148
|
+
* the 3rd fusion list.
|
|
149
|
+
*/
|
|
137
150
|
export function graphRankStream(entries, seeds, opts) {
|
|
138
151
|
if (seeds.length === 0 || entries.length === 0)
|
|
139
152
|
return [];
|
|
@@ -148,10 +161,19 @@ export function graphRankStream(entries, seeds, opts) {
|
|
|
148
161
|
? [opts.hippoRoot, opts.globalRoot]
|
|
149
162
|
: [opts.hippoRoot];
|
|
150
163
|
for (const root of roots) {
|
|
151
|
-
accumulateForRoot(root, seeds, entries, {
|
|
164
|
+
accumulateForRoot(root, seeds, entries, {
|
|
165
|
+
memIdToIndex,
|
|
166
|
+
graphScore,
|
|
167
|
+
hops,
|
|
168
|
+
decay,
|
|
169
|
+
maxNeighbors,
|
|
170
|
+
tenantId: opts.tenantId,
|
|
171
|
+
});
|
|
152
172
|
}
|
|
153
|
-
// Seed-exclusion guard: graphScore is keyed by entryIndex across roots but each root's visited-set is per-root, so a
|
|
154
|
-
//
|
|
173
|
+
// Seed-exclusion guard: graphScore is keyed by entryIndex across roots but each root's visited-set is per-root, so a
|
|
174
|
+
// seed in one store
|
|
175
|
+
// could score as a neighbour in the other; drop every seed index so "seeds are never graph-scored" holds across
|
|
176
|
+
// roots.
|
|
155
177
|
for (const s of seeds)
|
|
156
178
|
graphScore.delete(s.index);
|
|
157
179
|
if (graphScore.size === 0)
|
package/dist/graph/view.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so
|
|
3
|
+
* `scripts/check-graph-writes.mjs` stays green).
|
|
2
4
|
* Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
|
|
3
5
|
import type { GraphRows } from '../store/port.js';
|
|
4
6
|
import type { EntityType, RelationType } from '../store/graph-rows.js';
|
|
@@ -21,7 +23,9 @@ export interface GraphModel {
|
|
|
21
23
|
}
|
|
22
24
|
/** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
|
|
23
25
|
export declare const DEFAULT_VIEW_LIMIT = 500;
|
|
24
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop
|
|
28
|
+
* neighbours.
|
|
25
29
|
* Dangling edges (an endpoint outside the node set) are always dropped. */
|
|
26
30
|
export declare function buildGraphModel(hippoRoot: string, tenantId: string, opts?: {
|
|
27
31
|
entity?: string;
|
|
@@ -30,7 +34,9 @@ export declare function buildGraphModel(hippoRoot: string, tenantId: string, opt
|
|
|
30
34
|
}): GraphModel;
|
|
31
35
|
/** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
|
|
32
36
|
export declare function graphModelOf({ entities, relations, truncated }: GraphRows): GraphModel;
|
|
33
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so
|
|
39
|
+
* one model gives the same positions.
|
|
34
40
|
* Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
|
|
35
41
|
export declare function layoutGraph(model: GraphModel, opts?: {
|
|
36
42
|
width?: number;
|
|
@@ -42,9 +48,16 @@ export declare function layoutGraph(model: GraphModel, opts?: {
|
|
|
42
48
|
}>;
|
|
43
49
|
/** HTML-escape for SVG text / title / markup content (XSS guard). */
|
|
44
50
|
export declare function escapeHtml(s: string): string;
|
|
45
|
-
/**
|
|
46
|
-
*
|
|
51
|
+
/**
|
|
52
|
+
* Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic
|
|
53
|
+
* positions.
|
|
54
|
+
* The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an
|
|
55
|
+
* entity name cannot break out.
|
|
56
|
+
*/
|
|
47
57
|
export declare function renderGraphHtml(model: GraphModel): string;
|
|
48
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions,
|
|
60
|
+
* `edges[]` linking them by id.
|
|
61
|
+
*/
|
|
49
62
|
export declare function renderGraphCanvas(model: GraphModel): string;
|
|
50
63
|
//# sourceMappingURL=view.d.ts.map
|
package/dist/graph/view.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Graph observability and visualization, READ-ONLY over the entity/relation graph (no writes, so
|
|
3
|
+
* `scripts/check-graph-writes.mjs` stays green).
|
|
2
4
|
* Shared by `hippo graph show|view` and the HTTP `GET /v1/graph` route, which all build the same `GraphModel`. */
|
|
3
5
|
import { withGraphReadSnapshot } from '../store/graph-reads.js';
|
|
4
6
|
import { graphViewRows } from '../store/graph-view-rows.js';
|
|
@@ -6,7 +8,9 @@ const DEFAULT_LAYOUT_ITERATIONS = 300;
|
|
|
6
8
|
const NODE_LABEL_MAX_CHARS = 22;
|
|
7
9
|
/** Default bound for the CLI viewer / show so an unbounded set is never laid out. */
|
|
8
10
|
export const DEFAULT_VIEW_LIMIT = 500;
|
|
9
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Build the view-model (reads only); with `opts.entity`, a focus subgraph of the entities named so plus their 1-hop
|
|
13
|
+
* neighbours.
|
|
10
14
|
* Dangling edges (an endpoint outside the node set) are always dropped. */
|
|
11
15
|
export function buildGraphModel(hippoRoot, tenantId, opts = {}) {
|
|
12
16
|
const limit = opts.limit ?? DEFAULT_VIEW_LIMIT;
|
|
@@ -94,7 +98,9 @@ function applyDisplacement(nodes, pos, disp, temp, width, height) {
|
|
|
94
98
|
p.y = Math.max(20, Math.min(height - 20, ny));
|
|
95
99
|
});
|
|
96
100
|
}
|
|
97
|
-
/**
|
|
101
|
+
/**
|
|
102
|
+
* Deterministic Fruchterman-Reingold-style force layout: seeded circular init, fixed iterations, no `Math.random`, so
|
|
103
|
+
* one model gives the same positions.
|
|
98
104
|
* Non-finite coordinates are clamped to the viewport centre and all positions to the bounds. */
|
|
99
105
|
export function layoutGraph(model, opts = {}) {
|
|
100
106
|
const width = opts.width ?? LAYOUT_W;
|
|
@@ -143,25 +149,36 @@ const CLIENT_JS = [
|
|
|
143
149
|
" var vb=svg.getAttribute('viewBox').split(' ').map(Number);",
|
|
144
150
|
" var view={x:vb[0],y:vb[1],w:vb[2],h:vb[3]};",
|
|
145
151
|
" function apply(){svg.setAttribute('viewBox',view.x+' '+view.y+' '+view.w+' '+view.h);}",
|
|
146
|
-
|
|
147
|
-
|
|
152
|
+
' var panning=false,sx=0,sy=0;',
|
|
153
|
+
' ' +
|
|
154
|
+
"svg.addEventListener('mousedown',function(e){" +
|
|
155
|
+
"if(e.target.closest('.node'))return;panning=true;sx=e.clientX;sy=e.clientY;});",
|
|
148
156
|
" window.addEventListener('mouseup',function(){panning=false;});",
|
|
149
157
|
" window.addEventListener('mousemove',function(e){if(!panning)return;var r=svg.getBoundingClientRect();var " +
|
|
150
158
|
"k=view.w/r.width;view.x-=(e.clientX-sx)*k;view.y-=(e.clientY-sy)*k;sx=e.clientX;sy=e.clientY;apply();});",
|
|
151
|
-
" svg.addEventListener('wheel',function(e){e.preventDefault();var r=svg.getBoundingClientRect();var
|
|
152
|
-
"
|
|
153
|
-
|
|
159
|
+
" svg.addEventListener('wheel',function(e){e.preventDefault();var r=svg.getBoundingClientRect();var " +
|
|
160
|
+
"mx=view.x+(e.clientX-r.left)/r.width*view.w;var " +
|
|
161
|
+
'my=view.y+(e.clientY-r.top)/r.height*view.h;var ' +
|
|
162
|
+
'f=e.deltaY<0?0.9:1.1;view.x=mx-(mx-view.x)*f;view.y=my-(my-view.y)*f;' +
|
|
163
|
+
'view.w*=f;view.h*=f;apply();},{passive:false});',
|
|
154
164
|
" var data={};try{data=JSON.parse(document.getElementById('graph-data').textContent);}",
|
|
155
165
|
" catch(e){console.error('hippo graph: embedded model is not valid JSON',e);}",
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
166
|
+
' var ' +
|
|
167
|
+
'adj={};(data.edges||[]).forEach(function(e){' +
|
|
168
|
+
'(adj[e.from]=adj[e.from]||[]).push(e.to);(adj[e.to]=adj[e.to]||[]).push(e.from);});',
|
|
169
|
+
' var active=null;',
|
|
170
|
+
' ' +
|
|
171
|
+
"document.querySelectorAll('.node').forEach(function(g){" +
|
|
172
|
+
"g.addEventListener('click',function(ev){ev.stopPropagation();var " +
|
|
159
173
|
"id=g.getAttribute('data-id');if(active===id){clearHi();active=null;return;}active=id;highlight(id);});});",
|
|
160
174
|
" svg.addEventListener('click',function(){clearHi();active=null;});",
|
|
161
|
-
|
|
175
|
+
' function ' +
|
|
176
|
+
"clearHi(){svg.classList.remove('focused');" +
|
|
177
|
+
"document.querySelectorAll('.hi').forEach(function(el){el.classList.remove('hi');});}",
|
|
162
178
|
" function highlight(id){clearHi();svg.classList.add('focused');var " +
|
|
163
179
|
"keep={};keep[id]=1;(adj[id]||[]).forEach(function(n){keep[n]=1;});document.querySelectorAll('.node').forEach(" +
|
|
164
|
-
"function(g){if(keep[g.getAttribute('data-id')])g.classList.add('hi');
|
|
180
|
+
"function(g){if(keep[g.getAttribute('data-id')])g.classList.add('hi');" +
|
|
181
|
+
"});document.querySelectorAll('.edge').forEach(" +
|
|
165
182
|
"function(l){if(l.getAttribute('data-from')===id||l.getAttribute('data-to')===id)l.classList.add('hi');});}",
|
|
166
183
|
"})();",
|
|
167
184
|
].join("\n");
|
|
@@ -222,8 +239,12 @@ function renderLegend(model) {
|
|
|
222
239
|
.map((t) => `<span style="color:${nodeColor(t)}">●</span> ${escapeHtml(t)}`)
|
|
223
240
|
.join(' ');
|
|
224
241
|
}
|
|
225
|
-
/**
|
|
226
|
-
*
|
|
242
|
+
/**
|
|
243
|
+
* Render the model as a self-contained, offline interactive HTML node-link diagram with server-side deterministic
|
|
244
|
+
* positions.
|
|
245
|
+
* The model is inlined as `<script type="application/json">` with `<`, `>`, `&` unicode-escaped so a `</script>` in an
|
|
246
|
+
* entity name cannot break out.
|
|
247
|
+
*/
|
|
227
248
|
export function renderGraphHtml(model) {
|
|
228
249
|
const pos = layoutGraph(model);
|
|
229
250
|
const edgeSvg = renderEdgeSvg(model, pos);
|
|
@@ -238,7 +259,8 @@ export function renderGraphHtml(model) {
|
|
|
238
259
|
'<style>' + STYLE + '</style></head><body>',
|
|
239
260
|
`<div class="legend"><b>hippo graph</b> · ${model.nodes.length} entities · ${model.edges.length} relations` +
|
|
240
261
|
(model.truncated ? ' · <b style="color:#f59e0b">truncated</b>' : '') +
|
|
241
|
-
`<br>${legend}<br><span style="color:#64748b">drag to pan
|
|
262
|
+
`<br>${legend}<br><span style="color:#64748b">drag to pan ` +
|
|
263
|
+
`· scroll to zoom · click a node to focus</span></div>`,
|
|
242
264
|
`<svg id="g" viewBox="0 0 ${LAYOUT_W} ${LAYOUT_H}" preserveAspectRatio="xMidYMid meet">`,
|
|
243
265
|
`<g id="edges">${edgeSvg}</g><g id="nodes">${nodeSvg}</g>`,
|
|
244
266
|
'</svg>',
|
|
@@ -247,7 +269,10 @@ export function renderGraphHtml(model) {
|
|
|
247
269
|
'</body></html>',
|
|
248
270
|
].join('\n');
|
|
249
271
|
}
|
|
250
|
-
/**
|
|
272
|
+
/**
|
|
273
|
+
* Render the model as a JSON Canvas (jsoncanvas.org) document: `text` nodes at the same deterministic layout positions,
|
|
274
|
+
* `edges[]` linking them by id.
|
|
275
|
+
*/
|
|
251
276
|
export function renderGraphCanvas(model) {
|
|
252
277
|
const pos = layoutGraph(model, { width: 2400, height: 1600 });
|
|
253
278
|
const nodes = model.nodes.map((node) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { isJsonString } from '../util/json.js';
|
|
4
|
-
import { errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
5
5
|
function collectFiles(dir) {
|
|
6
6
|
if (!fs.existsSync(dir))
|
|
7
7
|
return [];
|
|
@@ -44,7 +44,7 @@ function readCodexSessionIdsFromHistoryDelta(historyPath, startOffsetBytes) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
catch (err) {
|
|
47
|
-
log.warn(`codex history ${historyPath}: skipped a malformed JSONL line (${errorMessage(err)})
|
|
47
|
+
log.warn(`codex history ${historyPath}: skipped a malformed JSONL line (${errorMessage(err)})`, errorFields(err));
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
return ordered;
|
|
@@ -25,9 +25,11 @@ export interface CodexWrapperMetadata {
|
|
|
25
25
|
installMode: 'same-path' | 'cmd-shim';
|
|
26
26
|
logFile: string;
|
|
27
27
|
installedAt: string;
|
|
28
|
+
/** The hippo CLI the user opted in; absent in metadata written before this field. */
|
|
29
|
+
hippoCliPath?: string;
|
|
28
30
|
}
|
|
29
31
|
export interface EnsureCodexWrapperResult {
|
|
30
|
-
status: 'installed' | 'already-installed' | 'not-found' | 'source-checkout';
|
|
32
|
+
status: 'installed' | 'already-installed' | 'not-found' | 'source-checkout' | 'other-install';
|
|
31
33
|
metadataPath?: string;
|
|
32
34
|
realCodexPath?: string;
|
|
33
35
|
commandPath?: string;
|
|
@@ -2,7 +2,7 @@ import { envPath } from '../util/env.js';
|
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { PACKAGE_ROOT } from '../core/package-root.js';
|
|
5
|
-
import { errorMessage, log } from '../util/log.js';
|
|
5
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
6
6
|
import { HIPPO_CODEX_WRAPPER_MARKER, ensureDir } from './shared.js';
|
|
7
7
|
import { homeDir, codexHomeDir } from '../util/agent-homes.js';
|
|
8
8
|
import { isJsonString } from '../util/json.js';
|
|
@@ -161,7 +161,7 @@ function writeExecutableFile(filePath, content) {
|
|
|
161
161
|
}
|
|
162
162
|
catch (err) {
|
|
163
163
|
// The mode bit means nothing on Windows; elsewhere a wrapper that is not executable breaks `codex`, so say so.
|
|
164
|
-
log.warn(`could not mark ${filePath} executable: ${errorMessage(err)}
|
|
164
|
+
log.warn(`could not mark ${filePath} executable: ${errorMessage(err)}`, errorFields(err));
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
export function installCodexWrapper(realCodexPath) {
|
|
@@ -196,6 +196,7 @@ export function installCodexWrapper(realCodexPath) {
|
|
|
196
196
|
installMode: plan.installMode,
|
|
197
197
|
logFile: paths.logFile,
|
|
198
198
|
installedAt: new Date().toISOString(),
|
|
199
|
+
hippoCliPath: resolveHippoCliPath(),
|
|
199
200
|
};
|
|
200
201
|
writeFileAtomic(paths.metadataPath, JSON.stringify(metadata, null, 2) + '\n');
|
|
201
202
|
return installResult(paths.metadataPath, metadata);
|
|
@@ -275,11 +276,15 @@ export function isCodexWrapperInstalled() {
|
|
|
275
276
|
* reads as binary hijacking to security scanners.
|
|
276
277
|
*/
|
|
277
278
|
export function repairCodexWrapperIfInstalled(hippoCliPath = resolveHippoCliPath()) {
|
|
278
|
-
|
|
279
|
+
const metadata = readCodexWrapperMetadata();
|
|
280
|
+
if (metadata === null) {
|
|
279
281
|
return { status: 'not-found' };
|
|
280
282
|
}
|
|
283
|
+
// Only the CLI the user opted in may re-point their launcher, not an npx cache or a project dependency.
|
|
284
|
+
if (isJsonString(metadata.hippoCliPath) && !pathEquals(metadata.hippoCliPath, hippoCliPath)) {
|
|
285
|
+
return { status: 'other-install' };
|
|
286
|
+
}
|
|
281
287
|
// A checkout's own `npm install` or CLI would point the user's launcher at a folder that may be deleted.
|
|
282
|
-
// SHORTCUT: any node_modules copy (npx cache, a project dependency) still repairs; record the opted-in CLI path in the metadata to close that.
|
|
283
288
|
const packageDir = path.dirname(path.dirname(hippoCliPath));
|
|
284
289
|
if (path.basename(path.dirname(packageDir)).toLowerCase() !== 'node_modules') {
|
|
285
290
|
return { status: 'source-checkout' };
|
package/dist/hooks/copilot.d.ts
CHANGED
|
@@ -30,19 +30,30 @@ export type McpMergeStatus = 'added' | 'present' | 'user-owned' | 'unreadable';
|
|
|
30
30
|
export type McpRemoveStatus = 'removed' | 'absent' | 'user-owned' | 'unreadable';
|
|
31
31
|
/** Removes the "hippo" key only when hippo wrote it. */
|
|
32
32
|
export declare function removeMcpServer(file: string, host?: McpHost): McpRemoveStatus;
|
|
33
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* A filesystem error on an MCP config file (EACCES, EISDIR, EBUSY), kept as its own message so setup can report it and
|
|
35
|
+
* go on.
|
|
36
|
+
*/
|
|
34
37
|
export interface McpFailure {
|
|
35
38
|
readonly failed: string;
|
|
36
39
|
}
|
|
37
40
|
export declare function isMcpFailure(status: string | McpFailure): status is McpFailure;
|
|
38
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* `kept`: a hippo block that is not the Copilot text (edited, or another agent's in a shared file); `unclosed`: a start
|
|
43
|
+
* marker with no end.
|
|
44
|
+
*/
|
|
39
45
|
export type InstructionsInstallStatus = 'written' | 'present' | 'kept' | 'unclosed';
|
|
40
46
|
export type InstructionsRemoveStatus = 'removed' | 'absent' | 'kept' | 'unclosed';
|
|
41
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* Splices out only hippo's own Copilot block and keeps every other byte; a file left with nothing but whitespace goes.
|
|
49
|
+
*/
|
|
42
50
|
export declare function removeInstructionsBlock(file: string): InstructionsRemoveStatus;
|
|
43
51
|
/** `kept`: the file is there but is not the text hippo writes, so the user edited it or it is someone else's. */
|
|
44
52
|
export type VscodeInstructionsInstallStatus = 'written' | 'present' | 'kept';
|
|
45
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* The file is hippo's alone, so it is written whole; an earlier hippo text is upgraded, and any other text already
|
|
55
|
+
* there stays.
|
|
56
|
+
*/
|
|
46
57
|
export declare function ensureVscodeInstructions(file: string): VscodeInstructionsInstallStatus;
|
|
47
58
|
export type VscodeInstructionsRemoveStatus = 'removed' | 'absent' | 'kept';
|
|
48
59
|
/** Deletes the file only when it still holds exactly what a hippo release wrote. */
|
|
@@ -61,7 +72,10 @@ export interface CopilotInstallResult {
|
|
|
61
72
|
readonly instructions: InstructionsInstallStatus | null;
|
|
62
73
|
readonly vscode: readonly VscodeInstallResult[];
|
|
63
74
|
}
|
|
64
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* The CLI's folder holds more than the hooks folder setup makes for VS Code, so a rerun on a VS Code-only machine still
|
|
77
|
+
* finds no CLI.
|
|
78
|
+
*/
|
|
65
79
|
export declare function isCopilotCliPresent(home?: string): boolean;
|
|
66
80
|
export declare function installCopilot(): CopilotInstallResult;
|
|
67
81
|
export interface VscodeUninstallResult {
|
package/dist/hooks/copilot.js
CHANGED
|
@@ -24,7 +24,10 @@ for a failure. Leave out secrets and personal details.
|
|
|
24
24
|
The installed hooks load pinned memories when a session starts and capture
|
|
25
25
|
the session as you work, so there is nothing to run before you finish.
|
|
26
26
|
`.trim();
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Every Copilot text a release has written, so install upgrades an old block and uninstall still removes it; add the
|
|
29
|
+
* old text when the text changes.
|
|
30
|
+
*/
|
|
28
31
|
const SHIPPED_COPILOT_INSTRUCTIONS = [
|
|
29
32
|
COPILOT_INSTRUCTIONS,
|
|
30
33
|
`
|
|
@@ -53,7 +56,11 @@ function profileDirs(userDir) {
|
|
|
53
56
|
const dir = path.join(userDir, 'profiles');
|
|
54
57
|
if (!fs.existsSync(dir))
|
|
55
58
|
return [];
|
|
56
|
-
return fs
|
|
59
|
+
return fs
|
|
60
|
+
.readdirSync(dir, { withFileTypes: true })
|
|
61
|
+
.filter((e) => e.isDirectory())
|
|
62
|
+
.map((e) => path.join(dir, e.name))
|
|
63
|
+
.sort();
|
|
57
64
|
}
|
|
58
65
|
export function copilotPaths() {
|
|
59
66
|
const home = copilotHomeDir();
|
|
@@ -74,22 +81,31 @@ function hippoCommand() {
|
|
|
74
81
|
return process.platform === 'win32' ? 'hippo.cmd' : 'hippo';
|
|
75
82
|
}
|
|
76
83
|
/** The Copilot CLI's mcp-config.json keeps servers under "mcpServers", each with an env and a tool list. */
|
|
77
|
-
export const COPILOT_CLI_MCP = {
|
|
84
|
+
export const COPILOT_CLI_MCP = {
|
|
85
|
+
key: 'mcpServers',
|
|
86
|
+
server: () => ({ type: 'local', command: hippoCommand(), args: ['mcp'], env: {}, tools: ['*'] }),
|
|
87
|
+
};
|
|
78
88
|
/** VS Code's mcp.json keeps stdio servers under "servers"; it has no "mcpServers" key. */
|
|
79
|
-
export const VSCODE_MCP = {
|
|
89
|
+
export const VSCODE_MCP = {
|
|
90
|
+
key: 'servers',
|
|
91
|
+
server: () => ({ type: 'stdio', command: hippoCommand(), args: ['mcp'] }),
|
|
92
|
+
};
|
|
80
93
|
/** Only a server hippo wrote counts as hippo's: another command, other args, or
|
|
81
94
|
* any key or value setup does not write (an env you added) makes it the user's. */
|
|
82
95
|
function isHipposServer(entry, host) {
|
|
83
96
|
if (!isJsonObjectLiteral(entry) || !('command' in entry) || !('args' in entry))
|
|
84
97
|
return false;
|
|
85
98
|
const ours = host.server();
|
|
86
|
-
return Object.entries(entry).every(([key, value]) =>
|
|
99
|
+
return Object.entries(entry).every(([key, value]) => key === 'command' ? value === 'hippo' || value === 'hippo.cmd' : isDeepStrictEqual(value, ours[key]));
|
|
87
100
|
}
|
|
88
101
|
/** What to paste under the host's key when hippo cannot edit the file itself. */
|
|
89
102
|
export function copilotMcpSnippet(host = COPILOT_CLI_MCP) {
|
|
90
103
|
return `"${MCP_KEY}": ${JSON.stringify(host.server())}`;
|
|
91
104
|
}
|
|
92
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Null for a file with comments, one that is not JSON, or one whose shape a merge would overwrite; a missing file reads
|
|
107
|
+
* as empty.
|
|
108
|
+
*/
|
|
93
109
|
function readMcpConfig(file, host) {
|
|
94
110
|
let config = {};
|
|
95
111
|
if (fs.existsSync(file)) {
|
|
@@ -97,7 +113,8 @@ function readMcpConfig(file, host) {
|
|
|
97
113
|
config = readJsonFile(file);
|
|
98
114
|
}
|
|
99
115
|
catch (err) {
|
|
100
|
-
// Only a parse failure means the text is not JSON hippo can merge; EACCES or EISDIR is thrown with its own
|
|
116
|
+
// Only a parse failure means the text is not JSON hippo can merge; EACCES or EISDIR is thrown with its own
|
|
117
|
+
// message.
|
|
101
118
|
if (!(err instanceof SyntaxError))
|
|
102
119
|
throw err;
|
|
103
120
|
// An empty file is a new one with no servers yet, not one with comments.
|
|
@@ -112,7 +129,10 @@ function readMcpConfig(file, host) {
|
|
|
112
129
|
const servers = config[host.key];
|
|
113
130
|
return isJsonObjectLiteral(servers) ? { config, servers } : null;
|
|
114
131
|
}
|
|
115
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Adds hippo's server and keeps every other key; a file hippo cannot parse, or a "hippo" key it did not write, stays as
|
|
134
|
+
* it is.
|
|
135
|
+
*/
|
|
116
136
|
function mergeMcpServer(file, host = COPILOT_CLI_MCP) {
|
|
117
137
|
const read = readMcpConfig(file, host);
|
|
118
138
|
if (read === null)
|
|
@@ -148,7 +168,10 @@ export function isMcpFailure(status) {
|
|
|
148
168
|
function hasErrnoCode(err) {
|
|
149
169
|
return 'code' in err && typeof err.code === 'string';
|
|
150
170
|
}
|
|
151
|
-
/**
|
|
171
|
+
/**
|
|
172
|
+
* One MCP config step; a filesystem error comes back as a failure, so the hooks file and the instructions still
|
|
173
|
+
* install.
|
|
174
|
+
*/
|
|
152
175
|
function mcpStep(step) {
|
|
153
176
|
try {
|
|
154
177
|
return step();
|
|
@@ -162,7 +185,9 @@ function mcpStep(step) {
|
|
|
162
185
|
function isCopilotBlock(inner) {
|
|
163
186
|
return SHIPPED_COPILOT_INSTRUCTIONS.includes(inner);
|
|
164
187
|
}
|
|
165
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* Replaces only the text between the markers, in the file's own line ending, or appends a block after the user's text.
|
|
190
|
+
*/
|
|
166
191
|
function withCopilotBlock(text, found) {
|
|
167
192
|
if (found !== null) {
|
|
168
193
|
const { start, end, eol } = found;
|
|
@@ -173,7 +198,10 @@ function withCopilotBlock(text, found) {
|
|
|
173
198
|
return block;
|
|
174
199
|
return `${text}${text.endsWith('\n') ? '\n' : '\n\n'}${block}`;
|
|
175
200
|
}
|
|
176
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* Creates the file when missing; any block but hippo's own Copilot one, and a start marker with no end, leave the file
|
|
203
|
+
* as it is.
|
|
204
|
+
*/
|
|
177
205
|
function ensureInstructionsBlock(file) {
|
|
178
206
|
const old = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '';
|
|
179
207
|
const found = hippoBlock(old);
|
|
@@ -187,7 +215,10 @@ function ensureInstructionsBlock(file) {
|
|
|
187
215
|
writeFileAtomic(file, next);
|
|
188
216
|
return 'written';
|
|
189
217
|
}
|
|
190
|
-
/**
|
|
218
|
+
/**
|
|
219
|
+
* `text` without the block and its markers, plus the line break after the end marker, else the one before the start
|
|
220
|
+
* marker.
|
|
221
|
+
*/
|
|
191
222
|
function withoutCopilotBlock(text, found) {
|
|
192
223
|
const from = found.start - HOOK_MARKERS.start.length;
|
|
193
224
|
const to = found.end + HOOK_MARKERS.end.length;
|
|
@@ -195,7 +226,9 @@ function withoutCopilotBlock(text, found) {
|
|
|
195
226
|
const before = after > 0 ? 0 : text.endsWith('\r\n', from) ? 2 : text.endsWith('\n', from) ? 1 : 0;
|
|
196
227
|
return text.slice(0, from - before) + text.slice(to + after);
|
|
197
228
|
}
|
|
198
|
-
/**
|
|
229
|
+
/**
|
|
230
|
+
* Splices out only hippo's own Copilot block and keeps every other byte; a file left with nothing but whitespace goes.
|
|
231
|
+
*/
|
|
199
232
|
export function removeInstructionsBlock(file) {
|
|
200
233
|
if (!fs.existsSync(file))
|
|
201
234
|
return 'absent';
|
|
@@ -212,7 +245,10 @@ export function removeInstructionsBlock(file) {
|
|
|
212
245
|
writeFileAtomic(file, left);
|
|
213
246
|
return 'removed';
|
|
214
247
|
}
|
|
215
|
-
/**
|
|
248
|
+
/**
|
|
249
|
+
* The file is hippo's alone, so it is written whole; an earlier hippo text is upgraded, and any other text already
|
|
250
|
+
* there stays.
|
|
251
|
+
*/
|
|
216
252
|
export function ensureVscodeInstructions(file) {
|
|
217
253
|
if (fs.existsSync(file)) {
|
|
218
254
|
const old = fs.readFileSync(file, 'utf8');
|
|
@@ -233,7 +269,10 @@ export function removeVscodeInstructions(file) {
|
|
|
233
269
|
fs.rmSync(file);
|
|
234
270
|
return 'removed';
|
|
235
271
|
}
|
|
236
|
-
/**
|
|
272
|
+
/**
|
|
273
|
+
* The CLI's folder holds more than the hooks folder setup makes for VS Code, so a rerun on a VS Code-only machine still
|
|
274
|
+
* finds no CLI.
|
|
275
|
+
*/
|
|
237
276
|
export function isCopilotCliPresent(home = copilotHomeDir()) {
|
|
238
277
|
if (fs.statSync(home, { throwIfNoEntry: false })?.isDirectory() !== true)
|
|
239
278
|
return false;
|
|
@@ -11,7 +11,10 @@ export interface HookTable {
|
|
|
11
11
|
[agent: string]: HookSpec;
|
|
12
12
|
}
|
|
13
13
|
export declare const HOOKS: HookTable;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited
|
|
16
|
+
* block.
|
|
17
|
+
*/
|
|
15
18
|
export declare function hippoBlock(text: string): {
|
|
16
19
|
start: number;
|
|
17
20
|
end: number;
|
|
@@ -108,7 +108,8 @@ hippo capture --stdin <<< '<decisions, errors, lessons: 2-5 bullets>'
|
|
|
108
108
|
'opencode': { file: 'AGENTS.md', description: 'OpenCode', content: agentsBlock('task', { recall: true }) },
|
|
109
109
|
'pi': { file: 'AGENTS.md', description: 'Pi', content: agentsBlock('session', { footer: PI_FOOTER }) },
|
|
110
110
|
};
|
|
111
|
-
// sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash
|
|
111
|
+
// sha256 of each trimmed block an earlier hippo wrote, so init refreshes only blocks nobody edited. Add the old hash
|
|
112
|
+
// when a block changes.
|
|
112
113
|
const SHIPPED_HOOK_HASHES = new Map([
|
|
113
114
|
['c04e48f2896a4fee9ae98f8f832e2d26a3910269df3beb5bcd6baee3cd9db68e', 'claude-code'],
|
|
114
115
|
['e6b12bd8983c032e5ca8e95a97aeff4178a5a05026d10acad5b2e1b25d5656dd', 'claude-code'],
|
|
@@ -131,7 +132,10 @@ const SHIPPED_HOOK_HASHES = new Map([
|
|
|
131
132
|
['37767b355e18beac726b05b9e2b898dab8c6135fd7b98f3aa52edc734d5dd283', 'pi'],
|
|
132
133
|
['6e85a5cccb3cfeaa9a080713754936db730f96376f94cc9a9888a746149c7268', 'pi'],
|
|
133
134
|
]);
|
|
134
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* The first hippo block in `text` and the agent whose current or shipped text it is; `owner` is undefined for an edited
|
|
137
|
+
* block.
|
|
138
|
+
*/
|
|
135
139
|
export function hippoBlock(text) {
|
|
136
140
|
const at = text.indexOf(HOOK_MARKERS.start);
|
|
137
141
|
const start = at + HOOK_MARKERS.start.length;
|
|
@@ -141,7 +145,8 @@ export function hippoBlock(text) {
|
|
|
141
145
|
// git autocrlf checks these files out with CRLF: match as LF, write back in the file's own ending.
|
|
142
146
|
const raw = text.slice(start, end);
|
|
143
147
|
const inner = raw.replace(/\r\n/g, '\n').trim();
|
|
144
|
-
const owner = Object.keys(HOOKS).find((k) => HOOKS[k].content === inner) ??
|
|
148
|
+
const owner = Object.keys(HOOKS).find((k) => HOOKS[k].content === inner) ??
|
|
149
|
+
SHIPPED_HOOK_HASHES.get(createHash('sha256').update(inner).digest('hex'));
|
|
145
150
|
return { start, end, eol: raw.includes('\r\n') ? '\r\n' : '\n', inner, owner };
|
|
146
151
|
}
|
|
147
152
|
/** `text` with every hippo block and its markers removed, trimmed. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
/** Hook install/uninstall for AI coding tools. Claude Code gets a JSON `hooks` block in settings.json; older forms are
|
|
2
|
-
* OpenCode rejects the JSON-hook schema (no `hooks` key), so it gets a TS plugin
|
|
1
|
+
/** Hook install/uninstall for AI coding tools. Claude Code gets a JSON `hooks` block in settings.json; older forms are
|
|
2
|
+
* migrated automatically. OpenCode rejects the JSON-hook schema (no `hooks` key), so it gets a TS plugin
|
|
3
|
+
* (OPENCODE_PLUGIN_SOURCE); see installCodexHooks, installCopilotHooks. */
|
|
3
4
|
import { type JsonHookTarget } from './shared.js';
|
|
4
5
|
import { type JsonValue } from '../util/json.js';
|
|
5
6
|
/** A target's hook settings file, the log its SessionEnd hook writes, and the tool's display name. */
|
|
@@ -32,11 +33,14 @@ export interface InstallResult {
|
|
|
32
33
|
export declare function resolveJsonHookPaths(target: JsonHookTarget): JsonHookPaths;
|
|
33
34
|
/** The events in hippo's Copilot hooks file, in file order, for setup to name. */
|
|
34
35
|
export declare function copilotHookEvents(): string[];
|
|
35
|
-
/** Adds hippo's hooks to `target`'s settings file and migrates older hippo entries; a file that is not JSON stays
|
|
36
|
+
/** Adds hippo's hooks to `target`'s settings file and migrates older hippo entries; a file that is not JSON stays
|
|
37
|
+
* untouched. */
|
|
36
38
|
export declare function installJsonHooks(target: JsonHookTarget): InstallResult;
|
|
37
|
-
/** Swaps the file in with one rename, so a crash mid-write cannot leave a truncated settings.json that Claude Code
|
|
39
|
+
/** Swaps the file in with one rename, so a crash mid-write cannot leave a truncated settings.json that Claude Code
|
|
40
|
+
* cannot parse. */
|
|
38
41
|
export declare function writeSettingsFile(file: string, settings: JsonValue): void;
|
|
39
|
-
/** Removes hippo's own hook handlers from `target`'s settings file and keeps every other handler; true when the file
|
|
42
|
+
/** Removes hippo's own hook handlers from `target`'s settings file and keeps every other handler; true when the file
|
|
43
|
+
* changed. */
|
|
40
44
|
export declare function uninstallJsonHooks(target: JsonHookTarget): boolean;
|
|
41
45
|
/** Whether uninstall can edit settings.json; `invalidJson` marks a file that exists
|
|
42
46
|
* but is not JSON hippo can edit, which `uninstallJsonHooks` reports only as false. */
|