hippo-memory 1.60.0 → 1.61.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/README.md +1 -1
- package/dist/ablation.js +9 -27
- package/dist/agent-memories/apply.js +4 -1
- package/dist/agent-memories/claude-code.js +1 -1
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/gemini.js +1 -1
- package/dist/agent-memories/legacy.js +1 -1
- package/dist/agent-memories/source.js +1 -1
- package/dist/agent-memories/sync.js +8 -3
- package/dist/ambient-store.d.ts +14 -0
- package/dist/ambient-store.js +90 -0
- package/dist/ambient.d.ts +23 -0
- package/dist/ambient.js +72 -50
- package/dist/api/assemble.d.ts +93 -0
- package/dist/api/assemble.js +152 -0
- package/dist/api/audit.d.ts +17 -0
- package/dist/api/audit.js +23 -0
- package/dist/api/auth.d.ts +79 -0
- package/dist/api/auth.js +178 -0
- package/dist/api/context-types.d.ts +105 -0
- package/dist/api/context-types.js +3 -0
- package/dist/api/context.d.ts +31 -0
- package/dist/api/context.js +705 -0
- package/dist/api/dormant.d.ts +30 -0
- package/dist/api/dormant.js +140 -0
- package/dist/api/drill-down.d.ts +84 -0
- package/dist/api/drill-down.js +123 -0
- package/dist/api/forget.d.ts +57 -0
- package/dist/api/forget.js +87 -0
- package/dist/api/goals.d.ts +18 -0
- package/dist/api/goals.js +33 -0
- package/dist/api/learn.d.ts +31 -0
- package/dist/api/learn.js +88 -0
- package/dist/api/outcome.d.ts +61 -0
- package/dist/api/outcome.js +66 -0
- package/dist/api/promote.d.ts +54 -0
- package/dist/api/promote.js +203 -0
- package/dist/api/quarantine.d.ts +24 -0
- package/dist/api/quarantine.js +121 -0
- package/dist/api/recall-types.d.ts +390 -0
- package/dist/api/recall-types.js +3 -0
- package/dist/api/recall.d.ts +36 -0
- package/dist/api/recall.js +634 -0
- package/dist/api/remember.d.ts +35 -0
- package/dist/api/remember.js +43 -0
- package/dist/api/sleep.d.ts +136 -0
- package/dist/api/sleep.js +271 -0
- package/dist/api/tokens.d.ts +26 -0
- package/dist/api/tokens.js +60 -0
- package/dist/api/types.d.ts +56 -0
- package/dist/api/types.js +38 -0
- package/dist/api.d.ts +20 -1262
- package/dist/api.js +25 -2727
- package/dist/audit.d.ts +3 -0
- package/dist/audit.js +6 -3
- package/dist/auth.d.ts +45 -4
- package/dist/auth.js +125 -48
- package/dist/autolearn.js +2 -2
- package/dist/capture/command.d.ts +33 -0
- package/dist/capture/command.js +264 -0
- package/dist/capture/compact.d.ts +44 -0
- package/dist/capture/compact.js +354 -0
- package/dist/capture/extract.d.ts +21 -0
- package/dist/capture/extract.js +464 -0
- package/dist/capture/transcript.d.ts +40 -0
- package/dist/capture/transcript.js +193 -0
- package/dist/capture-error.js +2 -1
- package/dist/churn-git.js +4 -2
- package/dist/cli/audit.d.ts +3 -0
- package/dist/cli/audit.js +159 -0
- package/dist/cli/auth.d.ts +2 -0
- package/dist/cli/auth.js +171 -0
- package/dist/cli/briefs.d.ts +4 -0
- package/dist/cli/briefs.js +435 -0
- package/dist/cli/card.d.ts +3 -0
- package/dist/cli/card.js +333 -0
- package/dist/cli/context.d.ts +15 -0
- package/dist/cli/context.js +366 -0
- package/dist/cli/continuity.d.ts +6 -0
- package/dist/cli/continuity.js +445 -0
- package/dist/cli/curate.d.ts +19 -0
- package/dist/cli/curate.js +555 -0
- package/dist/cli/dag.d.ts +5 -0
- package/dist/cli/dag.js +177 -0
- package/dist/cli/decisions.d.ts +4 -0
- package/dist/cli/decisions.js +528 -0
- package/dist/cli/eval.d.ts +5 -0
- package/dist/cli/eval.js +213 -0
- package/dist/cli/explain.d.ts +4 -0
- package/dist/cli/explain.js +150 -0
- package/dist/cli/goals.d.ts +2 -0
- package/dist/cli/goals.js +196 -0
- package/dist/cli/hook-blocks.d.ts +18 -0
- package/dist/cli/hook-blocks.js +233 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.js +305 -0
- package/dist/cli/maintenance.d.ts +4 -0
- package/dist/cli/maintenance.js +179 -0
- package/dist/cli/playbooks.d.ts +4 -0
- package/dist/cli/playbooks.js +556 -0
- package/dist/cli/projects.js +1 -1
- package/dist/cli/recall.d.ts +7 -0
- package/dist/cli/recall.js +597 -0
- package/dist/cli/remember.d.ts +5 -0
- package/dist/cli/remember.js +442 -0
- package/dist/cli/serve.d.ts +5 -0
- package/dist/cli/serve.js +40 -0
- package/dist/cli/session-hooks.d.ts +29 -0
- package/dist/cli/session-hooks.js +637 -0
- package/dist/cli/setup.d.ts +4 -0
- package/dist/cli/setup.js +376 -0
- package/dist/cli/shared.d.ts +15 -19
- package/dist/cli/shared.js +50 -341
- package/dist/cli/slack.d.ts +2 -0
- package/dist/cli/slack.js +171 -0
- package/dist/cli/status.d.ts +18 -0
- package/dist/cli/status.js +400 -0
- package/dist/cli/transfer.d.ts +10 -0
- package/dist/cli/transfer.js +438 -0
- package/dist/cli/usage.d.ts +85 -0
- package/dist/cli/usage.js +741 -0
- package/dist/cli.d.ts +71 -120
- package/dist/cli.js +170 -8469
- package/dist/client.js +15 -8
- package/dist/compaction-record.js +6 -4
- package/dist/connectors/github/backfill.js +94 -87
- package/dist/connectors/github/cli-impl.js +4 -3
- package/dist/connectors/github/dlq.js +67 -54
- package/dist/connectors/github/ingest.js +34 -35
- package/dist/connectors/github/tenant-routing.js +3 -2
- package/dist/connectors/github/webhook.js +135 -216
- package/dist/connectors/slack/dlq.js +49 -61
- package/dist/connectors/slack/ingest.js +55 -48
- package/dist/connectors/slack/tenant-routing.js +4 -3
- package/dist/connectors/slack/webhook.js +72 -74
- package/dist/consolidate/conflicts.d.ts +10 -0
- package/dist/consolidate/conflicts.js +178 -0
- package/dist/consolidate/decay.d.ts +12 -0
- package/dist/consolidate/decay.js +145 -0
- package/dist/consolidate/llm-passes.d.ts +3 -0
- package/dist/consolidate/llm-passes.js +141 -0
- package/dist/consolidate/merge.d.ts +7 -0
- package/dist/consolidate/merge.js +251 -0
- package/dist/consolidate/physics-pass.d.ts +3 -0
- package/dist/consolidate/physics-pass.js +60 -0
- package/dist/consolidate/run.d.ts +69 -0
- package/dist/consolidate/run.js +76 -0
- package/dist/consolidate/sleep.d.ts +18 -0
- package/dist/consolidate/sleep.js +209 -0
- package/dist/consolidate/traces.d.ts +4 -0
- package/dist/consolidate/traces.js +178 -0
- package/dist/context-auto.js +7 -11
- package/dist/context-render.d.ts +1 -1
- package/dist/context-render.js +1 -1
- package/dist/customer-notes.d.ts +3 -0
- package/dist/customer-notes.js +6 -4
- package/dist/dag.js +6 -5
- package/dist/dashboard-actions.d.ts +20 -0
- package/dist/dashboard-actions.js +88 -0
- package/dist/dashboard-params.d.ts +45 -0
- package/dist/dashboard-params.js +127 -0
- package/dist/dashboard-queries.d.ts +15 -0
- package/dist/dashboard-queries.js +355 -0
- package/dist/dashboard-snapshot.d.ts +138 -0
- package/dist/dashboard-snapshot.js +308 -0
- package/dist/dashboard-types.d.ts +163 -0
- package/dist/dashboard-types.js +3 -0
- package/dist/dashboard.d.ts +6 -7
- package/dist/dashboard.js +228 -202
- package/dist/db/busy.d.ts +5 -0
- package/dist/db/busy.js +24 -0
- package/dist/db/continuity.d.ts +5 -0
- package/dist/db/continuity.js +145 -0
- package/dist/db/meta.d.ts +8 -0
- package/dist/db/meta.js +35 -0
- package/dist/db/migrate.d.ts +9 -0
- package/dist/db/migrate.js +138 -0
- package/dist/db/migrations/index.d.ts +5 -0
- package/dist/db/migrations/index.js +109 -0
- package/dist/db/migrations/types.d.ts +14 -0
- package/dist/db/migrations/types.js +2 -0
- package/dist/db/migrations/v01.d.ts +3 -0
- package/dist/db/migrations/v01.js +38 -0
- package/dist/db/migrations/v02.d.ts +3 -0
- package/dist/db/migrations/v02.js +21 -0
- package/dist/db/migrations/v03.d.ts +3 -0
- package/dist/db/migrations/v03.js +22 -0
- package/dist/db/migrations/v04.d.ts +3 -0
- package/dist/db/migrations/v04.js +28 -0
- package/dist/db/migrations/v05.d.ts +3 -0
- package/dist/db/migrations/v05.js +21 -0
- package/dist/db/migrations/v06.d.ts +3 -0
- package/dist/db/migrations/v06.js +25 -0
- package/dist/db/migrations/v07.d.ts +3 -0
- package/dist/db/migrations/v07.js +13 -0
- package/dist/db/migrations/v08.d.ts +3 -0
- package/dist/db/migrations/v08.js +8 -0
- package/dist/db/migrations/v09.d.ts +3 -0
- package/dist/db/migrations/v09.js +13 -0
- package/dist/db/migrations/v10.d.ts +3 -0
- package/dist/db/migrations/v10.js +17 -0
- package/dist/db/migrations/v11.d.ts +3 -0
- package/dist/db/migrations/v11.js +15 -0
- package/dist/db/migrations/v12.d.ts +3 -0
- package/dist/db/migrations/v12.js +11 -0
- package/dist/db/migrations/v13.d.ts +3 -0
- package/dist/db/migrations/v13.js +15 -0
- package/dist/db/migrations/v14.d.ts +3 -0
- package/dist/db/migrations/v14.js +66 -0
- package/dist/db/migrations/v15.d.ts +3 -0
- package/dist/db/migrations/v15.js +42 -0
- package/dist/db/migrations/v16.d.ts +3 -0
- package/dist/db/migrations/v16.js +61 -0
- package/dist/db/migrations/v17.d.ts +3 -0
- package/dist/db/migrations/v17.js +46 -0
- package/dist/db/migrations/v18.d.ts +3 -0
- package/dist/db/migrations/v18.js +60 -0
- package/dist/db/migrations/v19.d.ts +3 -0
- package/dist/db/migrations/v19.js +28 -0
- package/dist/db/migrations/v20.d.ts +3 -0
- package/dist/db/migrations/v20.js +42 -0
- package/dist/db/migrations/v21.d.ts +3 -0
- package/dist/db/migrations/v21.js +16 -0
- package/dist/db/migrations/v22.d.ts +3 -0
- package/dist/db/migrations/v22.js +82 -0
- package/dist/db/migrations/v23.d.ts +3 -0
- package/dist/db/migrations/v23.js +48 -0
- package/dist/db/migrations/v24.d.ts +3 -0
- package/dist/db/migrations/v24.js +72 -0
- package/dist/db/migrations/v25.d.ts +3 -0
- package/dist/db/migrations/v25.js +46 -0
- package/dist/db/migrations/v26.d.ts +3 -0
- package/dist/db/migrations/v26.js +23 -0
- package/dist/db/migrations/v27.d.ts +3 -0
- package/dist/db/migrations/v27.js +57 -0
- package/dist/db/migrations/v28.d.ts +3 -0
- package/dist/db/migrations/v28.js +38 -0
- package/dist/db/migrations/v29.d.ts +3 -0
- package/dist/db/migrations/v29.js +78 -0
- package/dist/db/migrations/v30.d.ts +3 -0
- package/dist/db/migrations/v30.js +92 -0
- package/dist/db/migrations/v31.d.ts +3 -0
- package/dist/db/migrations/v31.js +74 -0
- package/dist/db/migrations/v32.d.ts +3 -0
- package/dist/db/migrations/v32.js +102 -0
- package/dist/db/migrations/v33.d.ts +3 -0
- package/dist/db/migrations/v33.js +104 -0
- package/dist/db/migrations/v34.d.ts +3 -0
- package/dist/db/migrations/v34.js +93 -0
- package/dist/db/migrations/v35.d.ts +3 -0
- package/dist/db/migrations/v35.js +98 -0
- package/dist/db/migrations/v36.d.ts +3 -0
- package/dist/db/migrations/v36.js +98 -0
- package/dist/db/migrations/v37.d.ts +3 -0
- package/dist/db/migrations/v37.js +219 -0
- package/dist/db/migrations/v38.d.ts +3 -0
- package/dist/db/migrations/v38.js +277 -0
- package/dist/db/migrations/v39.d.ts +3 -0
- package/dist/db/migrations/v39.js +59 -0
- package/dist/db/migrations/v40.d.ts +3 -0
- package/dist/db/migrations/v40.js +74 -0
- package/dist/db/migrations/v41.d.ts +3 -0
- package/dist/db/migrations/v41.js +43 -0
- package/dist/db/migrations/v42.d.ts +3 -0
- package/dist/db/migrations/v42.js +41 -0
- package/dist/db/migrations/v43.d.ts +3 -0
- package/dist/db/migrations/v43.js +67 -0
- package/dist/db/migrations/v44.d.ts +3 -0
- package/dist/db/migrations/v44.js +28 -0
- package/dist/db/migrations/v45.d.ts +3 -0
- package/dist/db/migrations/v45.js +30 -0
- package/dist/db/migrations/v46.d.ts +3 -0
- package/dist/db/migrations/v46.js +25 -0
- package/dist/db/migrations/v47.d.ts +3 -0
- package/dist/db/migrations/v47.js +17 -0
- package/dist/db/migrations/v48.d.ts +3 -0
- package/dist/db/migrations/v48.js +10 -0
- package/dist/db/migrations/v49.d.ts +3 -0
- package/dist/db/migrations/v49.js +31 -0
- package/dist/db/migrations/v50.d.ts +3 -0
- package/dist/db/migrations/v50.js +67 -0
- package/dist/db/migrations/v51.d.ts +3 -0
- package/dist/db/migrations/v51.js +14 -0
- package/dist/db/migrations/v52.d.ts +3 -0
- package/dist/db/migrations/v52.js +7 -0
- package/dist/db/open.d.ts +23 -0
- package/dist/db/open.js +146 -0
- package/dist/db/sqlite.d.ts +21 -0
- package/dist/db/sqlite.js +8 -0
- package/dist/db/tables.d.ts +7 -0
- package/dist/db/tables.js +38 -0
- package/dist/db.d.ts +6 -46
- package/dist/db.js +5 -3049
- package/dist/decisions.d.ts +4 -1
- package/dist/decisions.js +9 -7
- package/dist/dedupe.js +3 -2
- package/dist/delivery-recorder.js +4 -1
- package/dist/doctor.js +3 -3
- package/dist/embedding-provider.d.ts +1 -1
- package/dist/embedding-provider.js +4 -3
- package/dist/embeddings.d.ts +9 -52
- package/dist/embeddings.js +43 -297
- package/dist/env.d.ts +75 -0
- package/dist/env.js +119 -0
- package/dist/eval-suite.js +1 -1
- package/dist/eval.js +2 -2
- package/dist/extract.js +1 -1
- package/dist/gated-write.js +3 -1
- package/dist/goals.d.ts +3 -1
- package/dist/goals.js +18 -0
- package/dist/graph/read.d.ts +73 -0
- package/dist/graph/read.js +325 -0
- package/dist/graph/rows.d.ts +45 -0
- package/dist/graph/rows.js +51 -0
- package/dist/graph/types.d.ts +83 -0
- package/dist/graph/types.js +11 -0
- package/dist/graph/write.d.ts +93 -0
- package/dist/{graph.js → graph/write.js} +6 -384
- package/dist/graph-extract.js +2 -1
- package/dist/graph-recall.d.ts +1 -1
- package/dist/graph-recall.js +2 -2
- package/dist/graph-stream.js +1 -1
- package/dist/graph-view.d.ts +1 -1
- package/dist/graph-view.js +1 -1
- package/dist/half-life-migration.d.ts +1 -1
- package/dist/half-life-migration.js +2 -1
- package/dist/hooks/codex-session.d.ts +8 -0
- package/dist/hooks/codex-session.js +76 -0
- package/dist/hooks/codex-wrapper.d.ts +55 -0
- package/dist/hooks/codex-wrapper.js +288 -0
- package/dist/hooks/json-hooks.d.ts +63 -0
- package/dist/hooks/json-hooks.js +356 -0
- package/dist/hooks/opencode.d.ts +50 -0
- package/dist/hooks/opencode.js +202 -0
- package/dist/hooks/shared.d.ts +54 -0
- package/dist/hooks/shared.js +77 -0
- package/dist/http-retry.d.ts +2 -0
- package/dist/http-retry.js +4 -3
- package/dist/http-util.d.ts +3 -0
- package/dist/http-util.js +10 -0
- package/dist/{importers.d.ts → importers/core.d.ts} +13 -17
- package/dist/importers/core.js +141 -0
- package/dist/importers/markdown-parse.d.ts +41 -0
- package/dist/importers/markdown-parse.js +132 -0
- package/dist/importers/markdown.d.ts +3 -0
- package/dist/importers/markdown.js +92 -0
- package/dist/importers/sources.d.ts +7 -0
- package/dist/importers/sources.js +229 -0
- package/dist/importers/vault.d.ts +11 -0
- package/dist/importers/vault.js +352 -0
- package/dist/incidents.d.ts +3 -0
- package/dist/incidents.js +7 -5
- package/dist/index.d.ts +25 -6
- package/dist/index.js +23 -6
- package/dist/invalidation.js +2 -1
- package/dist/judgment.js +2 -1
- package/dist/keyset.d.ts +13 -0
- package/dist/keyset.js +8 -0
- package/dist/local-embedding.d.ts +13 -0
- package/dist/local-embedding.js +165 -0
- package/dist/log.d.ts +7 -0
- package/dist/log.js +19 -1
- package/dist/mcp/admin-tools.d.ts +8 -0
- package/dist/mcp/admin-tools.js +116 -0
- package/dist/mcp/format.d.ts +27 -0
- package/dist/mcp/format.js +135 -0
- package/dist/mcp/memory-tools.d.ts +5 -0
- package/dist/mcp/memory-tools.js +83 -0
- package/dist/mcp/protocol.d.ts +83 -0
- package/dist/mcp/protocol.js +55 -0
- package/dist/mcp/recall-tools.d.ts +6 -0
- package/dist/mcp/recall-tools.js +320 -0
- package/dist/mcp/request.d.ts +10 -0
- package/dist/mcp/request.js +163 -0
- package/dist/mcp/server.d.ts +4 -75
- package/dist/mcp/server.js +7 -1190
- package/dist/mcp/session-state.d.ts +11 -0
- package/dist/mcp/session-state.js +28 -0
- package/dist/mcp/stdio.d.ts +8 -0
- package/dist/mcp/stdio.js +79 -0
- package/dist/mcp/tools.d.ts +11 -0
- package/dist/mcp/tools.js +247 -0
- package/dist/memory.d.ts +3 -0
- package/dist/memory.js +27 -1
- package/dist/multihop.d.ts +1 -1
- package/dist/multihop.js +2 -1
- package/dist/owner-validation.js +2 -1
- package/dist/physics-state.js +10 -7
- package/dist/policies.d.ts +3 -0
- package/dist/policies.js +8 -6
- package/dist/postinstall.js +3 -2
- package/dist/predictions/planning-fallacy.d.ts +100 -0
- package/dist/predictions/planning-fallacy.js +190 -0
- package/dist/{predictions.d.ts → predictions/store.d.ts} +7 -102
- package/dist/predictions/store.js +434 -0
- package/dist/processes.d.ts +3 -0
- package/dist/processes.js +7 -5
- package/dist/project-briefs.d.ts +3 -0
- package/dist/project-briefs.js +7 -5
- package/dist/project-identity.js +3 -2
- package/dist/project-merge.js +3 -1
- package/dist/quarantine.d.ts +2 -1
- package/dist/quarantine.js +8 -5
- package/dist/raw-archive.js +1 -1
- package/dist/recall-history.js +3 -2
- package/dist/recall-pipeline.d.ts +2 -2
- package/dist/recall-pipeline.js +16 -8
- package/dist/recall-scope.js +1 -1
- package/dist/recall-trace.d.ts +1 -1
- package/dist/refine-llm.js +2 -1
- package/dist/reject-flow.js +6 -1
- package/dist/rerankers/clef.js +6 -5
- package/dist/rerankers/jev.d.ts +1 -1
- package/dist/rerankers/jev.js +4 -4
- package/dist/rerankers/llm.d.ts +4 -2
- package/dist/rerankers/llm.js +58 -38
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/salience.js +1 -1
- package/dist/scheduler.d.ts +1 -0
- package/dist/scheduler.js +26 -4
- package/dist/scope.js +4 -3
- package/dist/search/as-of.d.ts +10 -0
- package/dist/search/as-of.js +22 -0
- package/dist/search/bm25-search.d.ts +14 -0
- package/dist/search/bm25-search.js +43 -0
- package/dist/search/bm25.d.ts +15 -0
- package/dist/search/bm25.js +54 -0
- package/dist/search/boosts.d.ts +54 -0
- package/dist/search/boosts.js +94 -0
- package/dist/search/breakdown.d.ts +7 -0
- package/dist/search/breakdown.js +20 -0
- package/dist/search/explain.d.ts +25 -0
- package/dist/search/explain.js +31 -0
- package/dist/search/finalize.d.ts +8 -0
- package/dist/search/finalize.js +52 -0
- package/dist/search/fusion.d.ts +27 -0
- package/dist/search/fusion.js +42 -0
- package/dist/search/hybrid-score.d.ts +20 -0
- package/dist/search/hybrid-score.js +73 -0
- package/dist/search/hybrid.d.ts +46 -0
- package/dist/search/hybrid.js +64 -0
- package/dist/search/physics-search.d.ts +29 -0
- package/dist/search/physics-search.js +162 -0
- package/dist/search/rerank.d.ts +10 -0
- package/dist/search/rerank.js +72 -0
- package/dist/search/temporal.d.ts +15 -0
- package/dist/search/temporal.js +45 -0
- package/dist/search/types.d.ts +91 -0
- package/dist/search/types.js +2 -0
- package/dist/search/vector.d.ts +30 -0
- package/dist/search/vector.js +71 -0
- package/dist/secret-detect.d.ts +2 -0
- package/dist/secret-detect.js +2 -1
- package/dist/server/auth.d.ts +52 -0
- package/dist/server/auth.js +221 -0
- package/dist/server/client-ip.d.ts +25 -0
- package/dist/server/client-ip.js +92 -0
- package/dist/server/cursor.d.ts +23 -0
- package/dist/server/cursor.js +58 -0
- package/dist/server/lifecycle.d.ts +7 -0
- package/dist/server/lifecycle.js +29 -0
- package/dist/server/mcp-http.d.ts +5 -0
- package/dist/server/mcp-http.js +199 -0
- package/dist/server/request.d.ts +33 -0
- package/dist/server/request.js +103 -0
- package/dist/server/routes/admin.d.ts +9 -0
- package/dist/server/routes/admin.js +158 -0
- package/dist/server/routes/customer-notes.d.ts +7 -0
- package/dist/server/routes/customer-notes.js +112 -0
- package/dist/server/routes/decisions.d.ts +7 -0
- package/dist/server/routes/decisions.js +133 -0
- package/dist/server/routes/incidents.d.ts +7 -0
- package/dist/server/routes/incidents.js +126 -0
- package/dist/server/routes/memories.d.ts +10 -0
- package/dist/server/routes/memories.js +179 -0
- package/dist/server/routes/policies.d.ts +8 -0
- package/dist/server/routes/policies.js +151 -0
- package/dist/server/routes/predictions.d.ts +7 -0
- package/dist/server/routes/predictions.js +164 -0
- package/dist/server/routes/processes.d.ts +7 -0
- package/dist/server/routes/processes.js +161 -0
- package/dist/server/routes/project-briefs.d.ts +8 -0
- package/dist/server/routes/project-briefs.js +136 -0
- package/dist/server/routes/recall.d.ts +8 -0
- package/dist/server/routes/recall.js +340 -0
- package/dist/server/routes/skills.d.ts +8 -0
- package/dist/server/routes/skills.js +150 -0
- package/dist/server/types.d.ts +56 -0
- package/dist/server/types.js +2 -0
- package/dist/server/validation.d.ts +14 -0
- package/dist/server/validation.js +91 -0
- package/dist/server.d.ts +7 -61
- package/dist/server.js +69 -2362
- package/dist/session-digest.d.ts +1 -1
- package/dist/session-digest.js +9 -2
- package/dist/shared.d.ts +3 -1
- package/dist/shared.js +26 -22
- package/dist/skills.d.ts +3 -0
- package/dist/skills.js +7 -5
- package/dist/stdin.js +2 -2
- package/dist/store/audit-event.d.ts +19 -0
- package/dist/store/audit-event.js +33 -0
- package/dist/store/candidates.d.ts +42 -0
- package/dist/store/candidates.js +152 -0
- package/dist/store/conflicts.d.ts +44 -0
- package/dist/store/conflicts.js +444 -0
- package/dist/store/delete-and-batch.d.ts +63 -0
- package/dist/store/delete-and-batch.js +310 -0
- package/dist/store/entry-reads.d.ts +92 -0
- package/dist/store/entry-reads.js +255 -0
- package/dist/store/entry-row.d.ts +67 -0
- package/dist/store/entry-row.js +208 -0
- package/dist/store/entry-writes.d.ts +46 -0
- package/dist/store/entry-writes.js +148 -0
- package/dist/store/handoffs.d.ts +26 -0
- package/dist/store/handoffs.js +184 -0
- package/dist/store/index-and-stats.d.ts +52 -0
- package/dist/store/index-and-stats.js +214 -0
- package/dist/store/markdown.d.ts +10 -0
- package/dist/store/markdown.js +108 -0
- package/dist/store/mirrors.d.ts +49 -0
- package/dist/store/mirrors.js +312 -0
- package/dist/store/open.d.ts +15 -0
- package/dist/store/open.js +223 -0
- package/dist/store/rows.d.ts +178 -0
- package/dist/store/rows.js +158 -0
- package/dist/store/search-rows.d.ts +86 -0
- package/dist/store/search-rows.js +254 -0
- package/dist/store/sessions.d.ts +83 -0
- package/dist/store/sessions.js +272 -0
- package/dist/store/summaries.d.ts +94 -0
- package/dist/store/summaries.js +377 -0
- package/dist/store/tenant-lookup.d.ts +12 -0
- package/dist/store/tenant-lookup.js +16 -0
- package/dist/store-cards.js +2 -1
- package/dist/summary-dirty.d.ts +4 -0
- package/dist/summary-dirty.js +32 -0
- package/dist/support-bundle.js +4 -3
- package/dist/tenant.js +2 -2
- package/dist/tokenize.d.ts +2 -0
- package/dist/tokenize.js +16 -0
- package/dist/transcript-tail.d.ts +7 -0
- package/dist/transcript-tail.js +48 -0
- package/dist/vector-store.d.ts +27 -0
- package/dist/vector-store.js +210 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/dist/working-memory.js +1 -1
- package/dist/yaml.js +36 -11
- package/dist-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- package/dist-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- package/dist-ui/assets/index-DPN7cP19.js +33 -0
- package/dist-ui/assets/index-dFloKRVr.css +1 -0
- package/dist-ui/index.html +3 -25
- 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 +1 -1
- package/dist/capture.d.ts +0 -155
- package/dist/capture.js +0 -1295
- package/dist/consolidate.d.ts +0 -58
- package/dist/consolidate.js +0 -1124
- package/dist/graph.d.ts +0 -245
- package/dist/hooks.d.ts +0 -208
- package/dist/hooks.js +0 -1076
- package/dist/importers.js +0 -900
- package/dist/predictions.js +0 -620
- package/dist/search.d.ts +0 -320
- package/dist/search.js +0 -970
- package/dist/store.d.ts +0 -776
- package/dist/store.js +0 -3473
- package/dist-ui/assets/d3-BiWEKnn4.js +0 -1
- package/dist-ui/assets/index-BhT8RvO6.js +0 -61
- package/dist-ui/assets/index-RoXXJ5dq.css +0 -1
- package/dist-ui/assets/three-BDgTxR1l.js +0 -4112
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// Text the MCP recall and context tools print, and what each printed piece costs the token budget.
|
|
2
|
+
import { confidenceLabel } from '../memory.js';
|
|
3
|
+
import { formatHandoffEvidenceLine } from '../handoff.js';
|
|
4
|
+
import { printedTokens } from '../context-render.js';
|
|
5
|
+
import { estimateTokens } from '../token-ledger.js';
|
|
6
|
+
// ── Format helpers ──
|
|
7
|
+
function handoffLines(h) {
|
|
8
|
+
const lines = [`- Summary: ${h.summary}`];
|
|
9
|
+
if (h.nextAction)
|
|
10
|
+
lines.push(`- Next action: ${h.nextAction}`);
|
|
11
|
+
if ((h.artifacts ?? []).length > 0)
|
|
12
|
+
lines.push(`- Artifacts: ${(h.artifacts ?? []).join(', ')}`);
|
|
13
|
+
if (h.outcome)
|
|
14
|
+
lines.push(`- Outcome: ${h.outcome}`);
|
|
15
|
+
if (h.targetRuntime)
|
|
16
|
+
lines.push(`- Target runtime: ${h.targetRuntime}`);
|
|
17
|
+
if (h.cardId)
|
|
18
|
+
lines.push(`- Card: ${h.cardId}`);
|
|
19
|
+
if ((h.constraints ?? []).length > 0)
|
|
20
|
+
lines.push(`- Constraints: ${(h.constraints ?? []).join(', ')}`);
|
|
21
|
+
if (h.evidence)
|
|
22
|
+
lines.push(`- Evidence: ${formatHandoffEvidenceLine(h.evidence)}`);
|
|
23
|
+
return lines;
|
|
24
|
+
}
|
|
25
|
+
function trailLines(events) {
|
|
26
|
+
return events.map((e) => {
|
|
27
|
+
const preview = e.content.length > 200 ? e.content.slice(0, 200) + '…' : e.content;
|
|
28
|
+
return `- [${e.event_type}] ${preview}`;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function formatContinuityBlock(block) {
|
|
32
|
+
const lines = ['## Continuity'];
|
|
33
|
+
if (block.activeSnapshot) {
|
|
34
|
+
lines.push('');
|
|
35
|
+
lines.push('### Active Task Snapshot');
|
|
36
|
+
lines.push(`- Task: ${block.activeSnapshot.task}`);
|
|
37
|
+
lines.push(`- Summary: ${block.activeSnapshot.summary}`);
|
|
38
|
+
lines.push(`- Next: ${block.activeSnapshot.next_step}`);
|
|
39
|
+
}
|
|
40
|
+
if (block.sessionHandoff) {
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push('### Session Handoff');
|
|
43
|
+
lines.push(...handoffLines(block.sessionHandoff));
|
|
44
|
+
}
|
|
45
|
+
if (block.recentSessionEvents.length > 0) {
|
|
46
|
+
lines.push('');
|
|
47
|
+
lines.push('### Recent Session Trail');
|
|
48
|
+
lines.push(...trailLines(block.recentSessionEvents));
|
|
49
|
+
}
|
|
50
|
+
if (lines.length === 1) {
|
|
51
|
+
lines.push('');
|
|
52
|
+
lines.push('(no active task snapshot, handoff, or recent events for this tenant)');
|
|
53
|
+
}
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
}
|
|
56
|
+
const NO_MEMORIES = 'No relevant memories found.';
|
|
57
|
+
function memoriesHeading(count) {
|
|
58
|
+
return `Found ${count} memories:\n`;
|
|
59
|
+
}
|
|
60
|
+
function formatMemory(r) {
|
|
61
|
+
const conf = confidenceLabel(r.entry).text;
|
|
62
|
+
const tags = r.entry.tags.length > 0 ? ` tags: ${r.entry.tags.join(', ')}` : '';
|
|
63
|
+
return `[${conf}]${tags} (strength=${r.entry.strength.toFixed(2)})\n${r.entry.content}\n`;
|
|
64
|
+
}
|
|
65
|
+
export function formatMemories(results) {
|
|
66
|
+
if (results.length === 0)
|
|
67
|
+
return NO_MEMORIES;
|
|
68
|
+
return [memoriesHeading(results.length), ...results.map(formatMemory)].join('\n');
|
|
69
|
+
}
|
|
70
|
+
/** What a memory costs the budget: the text formatMemories prints for it. */
|
|
71
|
+
export const memoryCost = (r) => printedTokens(formatMemory(r));
|
|
72
|
+
// The widest heading or the empty-list line, whichever costs more, so either prints inside the budget.
|
|
73
|
+
export function memoriesReserve(budget) {
|
|
74
|
+
return Math.max(printedTokens(memoriesHeading(budget)), estimateTokens(NO_MEMORIES));
|
|
75
|
+
}
|
|
76
|
+
export function snapshotPiece(s) {
|
|
77
|
+
return [
|
|
78
|
+
'## Active Task Snapshot',
|
|
79
|
+
`- Task: ${s.task}`,
|
|
80
|
+
`- Status: ${s.status}`,
|
|
81
|
+
`- Updated: ${s.updated_at}`,
|
|
82
|
+
'',
|
|
83
|
+
'### Summary',
|
|
84
|
+
s.summary,
|
|
85
|
+
'',
|
|
86
|
+
'### Next step',
|
|
87
|
+
s.next_step,
|
|
88
|
+
'',
|
|
89
|
+
'',
|
|
90
|
+
].join('\n');
|
|
91
|
+
}
|
|
92
|
+
export function handoffPiece(h) {
|
|
93
|
+
return ['## Session Handoff', ...handoffLines(h), '', ''].join('\n');
|
|
94
|
+
}
|
|
95
|
+
export function trailPiece(events) {
|
|
96
|
+
return ['## Recent Session Trail', ...trailLines(events), '', ''].join('\n');
|
|
97
|
+
}
|
|
98
|
+
// Sections print ahead of the memories in hippo_context, so getContext pays for each as printed before any memory.
|
|
99
|
+
export const contextCost = {
|
|
100
|
+
entry: memoryCost,
|
|
101
|
+
fixed: (budget) => memoriesReserve(budget),
|
|
102
|
+
snapshot: (s) => estimateTokens(snapshotPiece(s)),
|
|
103
|
+
handoff: (h) => estimateTokens(handoffPiece(h)),
|
|
104
|
+
trail: (events) => estimateTokens(trailPiece(events)),
|
|
105
|
+
};
|
|
106
|
+
// Rows the ranked list already shows drop out of this section, so pricing every row bounds what it prints.
|
|
107
|
+
export function tailSection(rows) {
|
|
108
|
+
if (rows.length === 0)
|
|
109
|
+
return '';
|
|
110
|
+
const lines = ['', '## Fresh tail / substituted summaries'];
|
|
111
|
+
for (const r of rows) {
|
|
112
|
+
const tag = r.isSummary ? '[summary]' : '[tail]';
|
|
113
|
+
const head = r.content.length > 200 ? r.content.slice(0, 200) + '…' : r.content;
|
|
114
|
+
if (r.isSummary && r.substitutedFor && r.substitutedFor.length > 0) {
|
|
115
|
+
lines.push(`- ${tag} ${r.id} (covers ${r.substitutedFor.length} rows): ${head}`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
lines.push(`- ${tag} ${r.id}: ${head}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return '\n' + lines.join('\n');
|
|
122
|
+
}
|
|
123
|
+
// J3.2: the hint depends on the query alone, so api.retrieve's copy is the one shown; JSON.stringify fences the phrase.
|
|
124
|
+
export function planningSection(r) {
|
|
125
|
+
if (r.planningFallacyHint) {
|
|
126
|
+
const h = r.planningFallacyHint;
|
|
127
|
+
return `## Planning fallacy hint\nClass: ${h.classTag}\n${h.baserateSummary}\n(detected: ${JSON.stringify(h.detectedPhrase)})\n\n---\n\n`;
|
|
128
|
+
}
|
|
129
|
+
if (r.planningFallacyWatching) {
|
|
130
|
+
const w = r.planningFallacyWatching;
|
|
131
|
+
return `## Planning fallacy watch\nReason: ${w.reason}\n${w.suggestion}\n(detected: ${JSON.stringify(w.detectedPhrase)})\n\n---\n\n`;
|
|
132
|
+
}
|
|
133
|
+
return '';
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ToolCall } from './protocol.js';
|
|
2
|
+
export declare function runRememberTool({ args, ctx, hippoRoot, config, tenantId }: ToolCall): string;
|
|
3
|
+
export declare function runOutcomeTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
|
4
|
+
export declare function runLearnTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
|
5
|
+
//# sourceMappingURL=memory-tools.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// Write-side tool handlers: hippo_remember, hippo_outcome and hippo_learn.
|
|
2
|
+
import { log } from '../log.js';
|
|
3
|
+
import { readEntry } from '../store/entry-reads.js';
|
|
4
|
+
import { countCreatedSinceLastSleep } from '../store/index-and-stats.js';
|
|
5
|
+
import { consolidate } from '../consolidate/sleep.js';
|
|
6
|
+
import { resolveTenantId } from '../tenant.js';
|
|
7
|
+
import { remember as apiRemember, outcome as apiOutcome, learn as apiLearn, MCP_LEARN } from '../api.js';
|
|
8
|
+
import { mcpActor } from './protocol.js';
|
|
9
|
+
import { lastRecalledIds, autoSleepInFlight, resolveClientKey } from './session-state.js';
|
|
10
|
+
export function runRememberTool({ args, ctx, hippoRoot, config, tenantId }) {
|
|
11
|
+
const text = String(args.text || '');
|
|
12
|
+
if (!text)
|
|
13
|
+
return 'No text provided.';
|
|
14
|
+
const tags = [];
|
|
15
|
+
if (args.error)
|
|
16
|
+
tags.push('error');
|
|
17
|
+
if (args.tag)
|
|
18
|
+
tags.push(String(args.tag));
|
|
19
|
+
// Route through api.ts so audit_log captures the caller identity
|
|
20
|
+
// uniformly with CLI/REST: the auth-resolved ctx.actor under HTTP-MCP,
|
|
21
|
+
// 'mcp' for stdio (no ctx). api.ts.remember writes the memory + audit
|
|
22
|
+
// row in one transaction-friendly path; we re-read the entry to surface
|
|
23
|
+
// the half-life used in the MCP human-readable response.
|
|
24
|
+
const apiCtx = {
|
|
25
|
+
hippoRoot,
|
|
26
|
+
tenantId,
|
|
27
|
+
actor: mcpActor(ctx),
|
|
28
|
+
};
|
|
29
|
+
const result = apiRemember(apiCtx, {
|
|
30
|
+
content: text,
|
|
31
|
+
tags,
|
|
32
|
+
});
|
|
33
|
+
const entry = readEntry(hippoRoot, result.id, tenantId);
|
|
34
|
+
// Auto-sleep: one run per store at a time, triggered by what arrived since the last one.
|
|
35
|
+
// Consolidation is host-wide, so only the host tenant's writes may start it.
|
|
36
|
+
if (config.autoSleep.enabled &&
|
|
37
|
+
tenantId === resolveTenantId({}) &&
|
|
38
|
+
!autoSleepInFlight.has(hippoRoot) &&
|
|
39
|
+
countCreatedSinceLastSleep(hippoRoot, tenantId) >= config.autoSleep.threshold) {
|
|
40
|
+
autoSleepInFlight.add(hippoRoot);
|
|
41
|
+
// Fire-and-forget (never block the response); an unhandled rejection would kill the server, so log it.
|
|
42
|
+
consolidate(hippoRoot)
|
|
43
|
+
.catch((err) => {
|
|
44
|
+
log.error(`auto-sleep consolidate failed (tenant ${tenantId}): ${err instanceof Error ? err.message : String(err)}`);
|
|
45
|
+
})
|
|
46
|
+
.finally(() => autoSleepInFlight.delete(hippoRoot));
|
|
47
|
+
}
|
|
48
|
+
const halfLife = entry?.half_life_days ?? config.defaultHalfLifeDays;
|
|
49
|
+
const tagStr = entry?.tags.join(', ') || tags.join(', ') || 'none';
|
|
50
|
+
const warnings = (result.warnings ?? []).map((w) => `\nWarning: ${w}`).join('');
|
|
51
|
+
return `Remembered [${result.id}] (half-life: ${halfLife}d, tags: ${tagStr})${warnings}`;
|
|
52
|
+
}
|
|
53
|
+
export function runOutcomeTool({ args, ctx, hippoRoot, tenantId }) {
|
|
54
|
+
const good = Boolean(args.good);
|
|
55
|
+
const clientKey = resolveClientKey(ctx);
|
|
56
|
+
const ids = lastRecalledIds.get(clientKey) ?? [];
|
|
57
|
+
if (ids.length === 0)
|
|
58
|
+
return 'No recent recalls to apply outcome to.';
|
|
59
|
+
// Route through src/api.ts so audit_log captures the caller identity
|
|
60
|
+
// (auth-resolved ctx.actor under HTTP-MCP, 'mcp' for stdio) and tenant
|
|
61
|
+
// scoping is enforced uniformly (same surface as recall/remember).
|
|
62
|
+
// outcome() also handles cross-tenant id skip silently.
|
|
63
|
+
const apiCtx = {
|
|
64
|
+
hippoRoot,
|
|
65
|
+
tenantId,
|
|
66
|
+
actor: mcpActor(ctx),
|
|
67
|
+
};
|
|
68
|
+
const { applied } = apiOutcome(apiCtx, ids, good);
|
|
69
|
+
return `Applied ${good ? 'positive' : 'negative'} outcome to ${applied} memories`;
|
|
70
|
+
}
|
|
71
|
+
export function runLearnTool({ args, ctx, hippoRoot, tenantId }) {
|
|
72
|
+
const days = Number(args.days) || 7;
|
|
73
|
+
const result = apiLearn({ hippoRoot, tenantId, actor: mcpActor(ctx) }, { repoPath: process.cwd(), days, profile: MCP_LEARN });
|
|
74
|
+
if (result.status === 'not-a-repo')
|
|
75
|
+
return 'No git history found.';
|
|
76
|
+
if (result.status === 'no-commits')
|
|
77
|
+
return 'No fix/revert/bug commits found in the specified period.';
|
|
78
|
+
const { added, skipped, rejected, lowInfo } = result;
|
|
79
|
+
const rejectedSuffix = rejected > 0 ? `, ${rejected} rejected values skipped` : '';
|
|
80
|
+
const lowInfoSuffix = lowInfo > 0 ? `, ${lowInfo} low-information subjects dropped` : '';
|
|
81
|
+
return `Git learn: ${added} new, ${skipped} duplicates skipped${rejectedSuffix}${lowInfoSuffix} (scanned ${days} days)`;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=memory-tools.js.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { loadConfig } from '../config.js';
|
|
2
|
+
import type { Actor as ApiActor } from '../api.js';
|
|
3
|
+
import { type ResolveProjectIdentityOpts } from '../project-identity.js';
|
|
4
|
+
/** Same bounded walk as the CLI (ends at home, so HIPPO_HOME wins over ~/.hippo); cwd/opts are the test seam. */
|
|
5
|
+
export declare function findHippoRoot(cwd?: string, opts?: ResolveProjectIdentityOpts): string | null;
|
|
6
|
+
interface McpRequest {
|
|
7
|
+
jsonrpc: '2.0';
|
|
8
|
+
id: number | string;
|
|
9
|
+
method: string;
|
|
10
|
+
params?: Record<string, JsonValue>;
|
|
11
|
+
}
|
|
12
|
+
interface McpResponse {
|
|
13
|
+
jsonrpc: '2.0';
|
|
14
|
+
id: number | string | null;
|
|
15
|
+
result?: unknown;
|
|
16
|
+
error?: {
|
|
17
|
+
code: number;
|
|
18
|
+
message: string;
|
|
19
|
+
data?: {
|
|
20
|
+
requestId: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** JSON-RPC reply for a request that threw: typed API errors keep their text; anything else is logged and answered generically. */
|
|
25
|
+
export declare function mcpErrorResponse<E>(id: McpResponse['id'], err: E, requestId?: string): McpResponse;
|
|
26
|
+
export type { McpRequest, McpResponse };
|
|
27
|
+
/**
|
|
28
|
+
* Optional execution context threaded from a non-stdio transport. When the
|
|
29
|
+
* HTTP transport in src/server.ts calls handleMcpRequest, it knows the
|
|
30
|
+
* server's bound hippoRoot and the auth-resolved tenantId/actor. Passing
|
|
31
|
+
* those through here lets executeTool skip the findHippoRoot() walk and
|
|
32
|
+
* the env-based resolveTenantId({}) fallback — both of which would
|
|
33
|
+
* otherwise produce the wrong store and the wrong tenant for HTTP callers.
|
|
34
|
+
*
|
|
35
|
+
* Stdio callers pass nothing; behavior stays unchanged for that path.
|
|
36
|
+
*/
|
|
37
|
+
export interface McpContext {
|
|
38
|
+
hippoRoot: string;
|
|
39
|
+
tenantId: string;
|
|
40
|
+
actor: string;
|
|
41
|
+
/**
|
|
42
|
+
* The caller's role from the HTTP transport's auth. Absent for stdio, which
|
|
43
|
+
* is the local operator and runs as admin. Tools must use this rather than
|
|
44
|
+
* assuming admin, or a member key over HTTP-MCP would act as admin.
|
|
45
|
+
*/
|
|
46
|
+
role?: 'admin' | 'member';
|
|
47
|
+
/** EI2: scope grants for the HTTP-MCP caller's key. Absent for stdio (admin, needs none). */
|
|
48
|
+
scopes?: readonly string[];
|
|
49
|
+
viaAuthResolver?: true;
|
|
50
|
+
/** Set by the HTTP transport for the host's operator; a context without a role is in-process and implies it. */
|
|
51
|
+
hostAdmin?: true;
|
|
52
|
+
/**
|
|
53
|
+
* Per-client key for state isolation under HTTP-MCP. For stdio: 'stdio-${pid}'
|
|
54
|
+
* (one process = one client). For HTTP-SSE / HTTP MCP: hash(bearer + remoteAddr)
|
|
55
|
+
* built by src/server.ts when constructing McpContext for the request.
|
|
56
|
+
* Optional for backwards compatibility; defaults to `${tenantId}:default`.
|
|
57
|
+
*/
|
|
58
|
+
clientKey?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The api-layer actor for a tool call. Stdio (no ctx) is the local operator
|
|
62
|
+
* and runs as admin; over HTTP the transport's authenticated role is used, so
|
|
63
|
+
* a member key never acts as admin through MCP.
|
|
64
|
+
*/
|
|
65
|
+
export declare function mcpActor(ctx: McpContext | undefined): ApiActor;
|
|
66
|
+
export type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
67
|
+
[key: string]: JsonValue;
|
|
68
|
+
};
|
|
69
|
+
export declare function isJsonString(v: JsonValue | undefined): v is string;
|
|
70
|
+
export declare function isJsonBoolean(v: JsonValue | undefined): v is boolean;
|
|
71
|
+
export declare function isJsonObjectRecord(v: JsonValue | undefined): v is {
|
|
72
|
+
[key: string]: JsonValue;
|
|
73
|
+
};
|
|
74
|
+
/** One tool call after the store, config and tenant are resolved; every handler reads the same four. */
|
|
75
|
+
export interface ToolCall {
|
|
76
|
+
args: Record<string, JsonValue>;
|
|
77
|
+
ctx?: McpContext;
|
|
78
|
+
hippoRoot: string;
|
|
79
|
+
config: ReturnType<typeof loadConfig>;
|
|
80
|
+
tenantId: string;
|
|
81
|
+
}
|
|
82
|
+
export type ToolHandler = (call: ToolCall) => string | Promise<string>;
|
|
83
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// MCP wire types, the caller context, and the JSON predicates every tool handler narrows its arguments with.
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
4
|
+
import { INTERNAL_ERROR_MESSAGE, mapApiError } from '../http-util.js';
|
|
5
|
+
import { log } from '../log.js';
|
|
6
|
+
import { getGlobalRoot } from '../shared.js';
|
|
7
|
+
import { findHippoStoreDir } from '../project-identity.js';
|
|
8
|
+
import { isSqliteBusy, STORE_BUSY_MESSAGE } from '../db.js';
|
|
9
|
+
// ── Find hippo root ──
|
|
10
|
+
/** Same bounded walk as the CLI (ends at home, so HIPPO_HOME wins over ~/.hippo); cwd/opts are the test seam. */
|
|
11
|
+
export function findHippoRoot(cwd = process.cwd(), opts) {
|
|
12
|
+
const local = findHippoStoreDir(cwd, opts);
|
|
13
|
+
if (local !== null)
|
|
14
|
+
return local;
|
|
15
|
+
// Global fallback (respects $HIPPO_HOME / $XDG_DATA_HOME)
|
|
16
|
+
const global = getGlobalRoot();
|
|
17
|
+
return fs.existsSync(global) ? global : null;
|
|
18
|
+
}
|
|
19
|
+
/** JSON-RPC reply for a request that threw: typed API errors keep their text; anything else is logged and answered generically. */
|
|
20
|
+
export function mcpErrorResponse(id, err, requestId = randomUUID()) {
|
|
21
|
+
if (isSqliteBusy(err))
|
|
22
|
+
return { jsonrpc: '2.0', id, error: { code: -32603, message: STORE_BUSY_MESSAGE } };
|
|
23
|
+
const { status, message } = mapApiError(err);
|
|
24
|
+
if (status !== 500)
|
|
25
|
+
return { jsonrpc: '2.0', id, error: { code: -32603, message } };
|
|
26
|
+
log.error(`mcp request failed: ${err instanceof Error ? err.message : String(err)}`, { requestId });
|
|
27
|
+
return {
|
|
28
|
+
jsonrpc: '2.0',
|
|
29
|
+
id,
|
|
30
|
+
error: { code: -32603, message: `${INTERNAL_ERROR_MESSAGE} (request id ${requestId})`, data: { requestId } },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The api-layer actor for a tool call. Stdio (no ctx) is the local operator
|
|
35
|
+
* and runs as admin; over HTTP the transport's authenticated role is used, so
|
|
36
|
+
* a member key never acts as admin through MCP.
|
|
37
|
+
*/
|
|
38
|
+
export function mcpActor(ctx) {
|
|
39
|
+
const actor = { subject: ctx?.actor ?? 'mcp', role: ctx?.role ?? 'admin', scopes: ctx?.scopes };
|
|
40
|
+
if (ctx?.viaAuthResolver)
|
|
41
|
+
actor.viaAuthResolver = true;
|
|
42
|
+
if (ctx?.role === undefined || ctx.hostAdmin)
|
|
43
|
+
actor.hostAdmin = true;
|
|
44
|
+
return actor;
|
|
45
|
+
}
|
|
46
|
+
export function isJsonString(v) {
|
|
47
|
+
return typeof v === 'string';
|
|
48
|
+
}
|
|
49
|
+
export function isJsonBoolean(v) {
|
|
50
|
+
return typeof v === 'boolean';
|
|
51
|
+
}
|
|
52
|
+
export function isJsonObjectRecord(v) {
|
|
53
|
+
return v !== undefined && v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ToolCall } from './protocol.js';
|
|
2
|
+
export declare function runRecallTool(call: ToolCall): Promise<string>;
|
|
3
|
+
export declare function runAssembleTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
|
4
|
+
export declare function runDrillTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
|
5
|
+
export declare function runContextTool({ args, ctx, hippoRoot, config, tenantId }: ToolCall): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=recall-tools.d.ts.map
|