hippo-memory 1.71.0 → 2.0.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 +7 -5
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +11 -26
- package/dist/agent-memories/claude-code.js +1 -1
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/sync.js +8 -6
- package/dist/api/assemble.js +3 -2
- package/dist/api/audit.d.ts +30 -2
- package/dist/api/audit.js +48 -7
- package/dist/api/auth.d.ts +11 -9
- package/dist/api/auth.js +39 -40
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +7 -3
- package/dist/api/availability.js +2 -3
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-auto.js +4 -2
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +15 -29
- package/dist/api/context.js +29 -18
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/api/dormant.js +4 -2
- package/dist/api/drill-down.js +3 -2
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +7 -3
- package/dist/api/forget.js +24 -14
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.js +2 -1
- package/dist/api/index.d.ts +4 -2
- package/dist/api/index.js +4 -2
- package/dist/api/instruction-detect.js +5 -1
- package/dist/api/learn.d.ts +5 -1
- package/dist/api/learn.js +71 -44
- package/dist/api/ledger-db.d.ts +2 -6
- package/dist/api/ledger-db.js +4 -36
- package/dist/api/memories.d.ts +21 -1
- package/dist/api/memories.js +51 -1
- package/dist/api/objects.d.ts +1 -1
- package/dist/api/objects.js +2 -1
- package/dist/api/outcome.d.ts +5 -5
- package/dist/api/outcome.js +17 -16
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +3 -1
- package/dist/api/predictions.js +8 -1
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +3 -3
- package/dist/api/promote.js +26 -28
- package/dist/api/prompt-hook.d.ts +17 -2
- package/dist/api/prompt-hook.js +45 -4
- package/dist/api/quarantine.js +2 -1
- package/dist/api/recall-cli.d.ts +3 -0
- package/dist/api/recall-cli.js +13 -4
- package/dist/api/recall-core.js +10 -5
- package/dist/api/recall-pipeline.js +23 -24
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +3 -1
- package/dist/api/recall.d.ts +0 -3
- package/dist/api/recall.js +51 -73
- package/dist/api/remember-local.d.ts +5 -2
- package/dist/api/remember-local.js +15 -7
- package/dist/api/remember.d.ts +7 -3
- package/dist/api/remember.js +19 -16
- package/dist/api/session-end.d.ts +46 -0
- package/dist/api/session-end.js +131 -0
- package/dist/api/sleep-run.d.ts +1 -1
- package/dist/api/sleep-run.js +16 -11
- package/dist/api/sleep.js +4 -3
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.js +2 -2
- package/dist/api/types.d.ts +3 -7
- package/dist/api/types.js +6 -1
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.js +36 -95
- package/dist/capture/compact.js +10 -5
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +29 -426
- package/dist/capture/compaction-spool.d.ts +7 -7
- package/dist/capture/compaction-spool.js +60 -51
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.js +4 -3
- package/dist/capture/session-end-caller.js +3 -2
- package/dist/capture/session-worker.js +22 -10
- package/dist/capture/transcript.d.ts +2 -1
- package/dist/capture/transcript.js +6 -3
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/audit-prune.d.ts +0 -25
- package/dist/cli/audit-prune.js +1 -27
- package/dist/cli/audit.js +20 -20
- package/dist/cli/auth.d.ts +1 -1
- package/dist/cli/auth.js +16 -17
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +37 -292
- package/dist/cli/card.js +41 -33
- package/dist/cli/client.d.ts +6 -2
- package/dist/cli/client.js +37 -21
- package/dist/cli/compact-resume-payload.js +1 -1
- package/dist/cli/context.d.ts +1 -1
- package/dist/cli/context.js +13 -13
- package/dist/cli/continuity.d.ts +1 -1
- package/dist/cli/continuity.js +36 -39
- package/dist/cli/curate.d.ts +2 -2
- package/dist/cli/curate.js +32 -36
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +23 -8
- package/dist/cli/decisions.d.ts +0 -2
- package/dist/cli/decisions.js +7 -285
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +12 -13
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +21 -25
- package/dist/cli/flag-values.js +16 -6
- package/dist/cli/flags.d.ts +0 -289
- package/dist/cli/flags.js +3 -138
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +6 -6
- package/dist/cli/hook-runtime.js +9 -36
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +28 -19
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +11 -3
- package/dist/cli/last-sleep.js +1 -1
- package/dist/cli/maintenance.d.ts +3 -3
- package/dist/cli/maintenance.js +29 -30
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.d.ts +2 -2
- package/dist/cli/object-verbs.js +4 -4
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +126 -290
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +174 -0
- package/dist/cli/print.js +2 -1
- package/dist/cli/projects.js +30 -22
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +6 -5
- package/dist/cli/recall.js +13 -7
- package/dist/cli/refine-llm.js +18 -17
- package/dist/cli/remember.js +17 -17
- package/dist/cli/scheduler.js +2 -1
- package/dist/cli/serve.js +11 -6
- package/dist/cli/session-hooks.d.ts +1 -5
- package/dist/cli/session-hooks.js +89 -168
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +17 -10
- package/dist/cli/shared.d.ts +2 -6
- package/dist/cli/shared.js +9 -29
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.js +6 -37
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +32 -35
- package/dist/cli/transfer.d.ts +3 -3
- package/dist/cli/transfer.js +64 -43
- package/dist/cli/usage.d.ts +1 -80
- package/dist/cli/usage.js +2 -696
- package/dist/cli/verb-row.d.ts +34 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +234 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +236 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +257 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +314 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -272
- package/dist/cli.js +24 -315
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +39 -4
- package/dist/connectors/github/backfill.js +12 -3
- package/dist/connectors/github/deletion.js +2 -1
- package/dist/connectors/github/dlq.js +31 -73
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +5 -29
- package/dist/connectors/github/tenant-routing.js +2 -1
- package/dist/connectors/github/webhook.d.ts +2 -1
- package/dist/connectors/github/webhook.js +35 -2
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +29 -0
- package/dist/connectors/slack/deletion.js +2 -1
- package/dist/connectors/slack/dlq.js +49 -71
- package/dist/connectors/slack/ingest.d.ts +2 -6
- package/dist/connectors/slack/ingest.js +4 -28
- package/dist/connectors/slack/tenant-routing.js +2 -1
- package/dist/connectors/slack/webhook.d.ts +2 -1
- package/dist/connectors/slack/webhook.js +2 -1
- package/dist/consolidate/conflicts.js +2 -2
- package/dist/consolidate/dag.js +29 -18
- package/dist/consolidate/dedupe.d.ts +7 -0
- package/dist/consolidate/dedupe.js +6 -4
- package/dist/consolidate/llm-passes.js +45 -19
- package/dist/consolidate/memory-value.js +3 -2
- package/dist/consolidate/merge.js +8 -8
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +26 -6
- package/dist/consolidate/replay.js +11 -4
- package/dist/consolidate/sleep.js +9 -6
- package/dist/consolidate/traces.js +5 -5
- package/dist/core/ablation.d.ts +10 -0
- package/dist/core/ablation.js +12 -0
- package/dist/{sharing/scope.d.ts → core/active-scope.d.ts} +1 -1
- package/dist/{sharing/scope.js → core/active-scope.js} +1 -1
- package/dist/core/ambient.d.ts +4 -0
- package/dist/core/ambient.js +39 -18
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/card.js +3 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.js +22 -18
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/{store → core}/markdown.d.ts +1 -1
- package/dist/{store → core}/markdown.js +4 -4
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory.d.ts +14 -8
- package/dist/core/memory.js +35 -23
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +1 -1
- package/dist/core/physics.d.ts +3 -1
- package/dist/core/physics.js +23 -18
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +3 -0
- package/dist/core/project-identity.js +12 -2
- package/dist/{store → core}/recall-scope.d.ts +1 -10
- package/dist/{store → core}/recall-scope.js +2 -19
- package/dist/core/search-types.d.ts +1 -1
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +5 -5
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.js +1 -3
- package/dist/dashboard/dashboard.js +16 -5
- package/dist/db/busy.d.ts +2 -7
- package/dist/db/busy.js +21 -26
- package/dist/db/connect.d.ts +2 -2
- package/dist/db/connect.js +7 -7
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +14 -7
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v14.js +1 -0
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +0 -2
- package/dist/db/open.js +6 -10
- package/dist/db/physics-state.d.ts +0 -4
- package/dist/db/physics-state.js +7 -33
- package/dist/db/request-stores.d.ts +1 -0
- package/dist/db/request-stores.js +2 -1
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.js +19 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +18 -15
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/{store/embeddings → embeddings}/provider.d.ts +5 -2
- package/dist/{store/embeddings → embeddings}/provider.js +19 -25
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/store-kit.d.ts +37 -0
- package/dist/entry/store-kit.js +25 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-suite.js +17 -11
- package/dist/eval/eval.js +1 -1
- package/dist/eval/judgment.js +12 -5
- package/dist/graph/extract.js +3 -3
- package/dist/graph/recall.js +1 -1
- package/dist/graph/view.js +13 -5
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +2 -1
- package/dist/hooks/json-hooks.js +10 -4
- package/dist/hooks/opencode.js +8 -5
- package/dist/hooks/shared.d.ts +0 -6
- package/dist/hooks/shared.js +4 -15
- package/dist/importers/core.js +4 -4
- package/dist/importers/sources.js +5 -4
- package/dist/importers/vault.d.ts +1 -1
- package/dist/importers/vault.js +25 -23
- package/dist/index.d.ts +5 -4
- package/dist/index.js +4 -3
- package/dist/learn/autolearn.d.ts +15 -3
- package/dist/learn/autolearn.js +38 -16
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +7 -5
- package/dist/learn/forward-claim-detector.js +4 -2
- package/dist/learn/invalidation.d.ts +2 -1
- package/dist/learn/invalidation.js +18 -9
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +27 -48
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.d.ts +1 -1
- package/dist/mcp/memory-tools.js +8 -9
- package/dist/mcp/protocol.d.ts +11 -7
- package/dist/mcp/protocol.js +25 -12
- package/dist/mcp/recall-tools.js +12 -9
- package/dist/mcp/request.js +22 -20
- package/dist/mcp/stdio.js +37 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +44 -21
- package/dist/objects/customer-notes.d.ts +2 -2
- package/dist/objects/decisions.d.ts +2 -2
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +2 -2
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +2 -2
- package/dist/objects/policies.js +2 -1
- package/dist/objects/processes.d.ts +2 -2
- package/dist/objects/project-briefs.d.ts +2 -2
- package/dist/objects/project-briefs.js +2 -3
- package/dist/objects/skills.d.ts +2 -2
- package/dist/postinstall.js +1 -1
- package/dist/rerankers/clef.js +3 -6
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +71 -98
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +2 -4
- package/dist/rerankers/outage-warning.d.ts +3 -1
- package/dist/rerankers/outage-warning.js +5 -3
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.js +1 -1
- package/dist/search/embed-memories.d.ts +12 -0
- package/dist/search/embed-memories.js +389 -0
- package/dist/search/engine.d.ts +8 -0
- package/dist/search/engine.js +10 -0
- package/dist/search/goal-boost.d.ts +1 -1
- package/dist/search/goal-boost.js +6 -3
- package/dist/search/hybrid.d.ts +9 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +22 -15
- package/dist/search/rerank.js +1 -1
- package/dist/search/vector.d.ts +8 -6
- package/dist/search/vector.js +14 -17
- package/dist/server/auth.d.ts +3 -1
- package/dist/server/auth.js +24 -15
- package/dist/server/boot.d.ts +2 -1
- package/dist/server/boot.js +34 -84
- package/dist/server/client-ip.d.ts +9 -6
- package/dist/server/client-ip.js +36 -17
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +1 -0
- package/dist/server/defaults.js +1 -0
- package/dist/server/mcp-http.js +16 -11
- package/dist/server/request.js +7 -2
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -133
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +13 -21
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +1 -2
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +2 -4
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +2 -5
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +19 -40
- package/dist/server/routes/object-routes.d.ts +6 -6
- package/dist/server/routes/object-routes.js +4 -7
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +2 -4
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +9 -13
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +1 -2
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +2 -4
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +6 -10
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +2 -4
- package/dist/server/server-detect.d.ts +7 -1
- package/dist/server/server-detect.js +36 -11
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +17 -11
- package/dist/server/tls.d.ts +7 -2
- package/dist/server/tls.js +17 -5
- package/dist/server/types.d.ts +29 -12
- package/dist/server/validation.d.ts +1 -2
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +4 -40
- package/dist/server.js +3 -29
- package/dist/sharing/global-store.d.ts +4 -5
- package/dist/sharing/global-store.js +8 -13
- package/dist/sharing/global-sync.js +38 -45
- package/dist/sharing/project-merge.d.ts +7 -14
- package/dist/sharing/project-merge.js +57 -121
- package/dist/sharing/search-both.js +10 -3
- package/dist/sharing/share.d.ts +2 -0
- package/dist/sharing/share.js +39 -38
- package/dist/store/ambient.js +7 -7
- package/dist/store/audit-event.d.ts +1 -1
- package/dist/store/audit.d.ts +0 -16
- package/dist/store/audit.js +4 -55
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +7 -3
- package/dist/store/candidates.d.ts +3 -2
- package/dist/store/candidates.js +59 -30
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/cards.js +6 -5
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +418 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +7 -1
- package/dist/store/conflicts.js +13 -9
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +33 -0
- package/dist/store/connectors/event-log.d.ts +13 -0
- package/dist/store/connectors/event-log.js +24 -0
- package/dist/store/connectors/github.d.ts +7 -9
- package/dist/store/connectors/github.js +35 -60
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +24 -57
- package/dist/store/dashboard-reads.js +8 -6
- package/dist/store/delete-and-batch.d.ts +6 -0
- package/dist/store/delete-and-batch.js +40 -6
- package/dist/store/delivery-recorder.d.ts +12 -5
- package/dist/store/delivery-recorder.js +13 -11
- package/dist/store/descendant-page.js +8 -4
- package/dist/store/dormant.d.ts +1 -1
- package/dist/store/dormant.js +10 -4
- package/dist/store/embeddings/index.d.ts +2 -12
- package/dist/store/embeddings/index.js +5 -374
- package/dist/store/entry-reads.d.ts +35 -4
- package/dist/store/entry-reads.js +86 -19
- package/dist/store/entry-row.js +9 -2
- package/dist/store/entry-writes.d.ts +15 -12
- package/dist/store/entry-writes.js +54 -22
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.js +22 -19
- package/dist/store/graph-reads.js +9 -6
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -6
- package/dist/store/graph-writes.js +48 -71
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +10 -4
- package/dist/store/handoffs.js +10 -9
- package/dist/store/index-and-stats.js +2 -2
- package/dist/store/index.d.ts +2 -2
- package/dist/store/index.js +1 -1
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.js +19 -10
- package/dist/store/open.d.ts +2 -5
- package/dist/store/open.js +42 -54
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/port.d.ts +68 -6
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +1 -2
- package/dist/store/predictions.js +3 -6
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/store/quality-repair.js +1 -1
- package/dist/store/quarantine.js +2 -1
- package/dist/store/recall-trace.d.ts +2 -0
- package/dist/store/recall-trace.js +20 -3
- package/dist/store/rejected-values.js +16 -10
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +0 -17
- package/dist/store/rejection.js +1 -21
- package/dist/store/rows.js +2 -2
- package/dist/store/rule-sql.d.ts +11 -0
- package/dist/store/rule-sql.js +31 -6
- package/dist/store/search-rows.d.ts +5 -5
- package/dist/store/search-rows.js +18 -16
- package/dist/store/sessions.js +4 -2
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +4 -7
- package/dist/store/sqlite/connector-writes-group.js +6 -4
- package/dist/store/sqlite/entry-writes-group.d.ts +3 -3
- package/dist/store/sqlite/entry-writes-group.js +3 -3
- package/dist/store/sqlite/error-codec.js +4 -3
- package/dist/store/sqlite/executor.js +10 -4
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +11 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/last-recall-group.d.ts +13 -0
- package/dist/store/sqlite/last-recall-group.js +57 -0
- package/dist/store/sqlite/local.d.ts +0 -17
- package/dist/store/sqlite/local.js +0 -31
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +60 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +15 -7
- package/dist/store/sqlite/store.d.ts +1 -8
- package/dist/store/sqlite/store.js +13 -22
- package/dist/store/summaries.d.ts +10 -3
- package/dist/store/summaries.js +54 -11
- package/dist/store/token-ledger-rows.js +3 -2
- package/dist/store/token-ledger.d.ts +0 -7
- package/dist/store/token-ledger.js +0 -35
- package/dist/store/vector-index.js +8 -4
- package/dist/support-bundle.js +2 -3
- package/dist/trust/reject-flow.js +2 -2
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +6 -1
- package/dist/util/anthropic-messages.js +26 -7
- package/dist/util/atomic-write.d.ts +5 -2
- package/dist/util/atomic-write.js +12 -8
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +12 -2
- package/dist/util/env.js +12 -2
- package/dist/util/format.d.ts +5 -0
- package/dist/util/format.js +10 -0
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +6 -0
- package/dist/util/http-retry.js +43 -5
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +4 -0
- package/dist/util/log.js +9 -0
- package/dist/util/request-scope.d.ts +9 -3
- package/dist/util/request-scope.js +18 -9
- package/dist/util/secret-detect.js +6 -1
- package/dist/util/spawn-argv.d.ts +9 -0
- package/dist/util/spawn-argv.js +57 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +1 -1
- package/dist/util/version.js +1 -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 +4 -2
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -175
- /package/dist/{cli → api}/correction-latency.d.ts +0 -0
- /package/dist/{cli → api}/correction-latency.js +0 -0
- /package/dist/{cli → api}/provenance-coverage.d.ts +0 -0
- /package/dist/{cli → api}/provenance-coverage.js +0 -0
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
- /package/dist/{store → util}/yaml.d.ts +0 -0
- /package/dist/{store → util}/yaml.js +0 -0
package/dist/cli/client.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { fetchWithRetry } from '../util/http-retry.js';
|
|
4
4
|
import { readCappedJson } from '../util/capped-json.js';
|
|
5
5
|
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
6
|
+
import { isObjectLike } from '../core/capture-contract.js';
|
|
6
7
|
/** A write the local server has not answered in this long is stuck; the caller treats it as delivery-unknown. */
|
|
7
8
|
const SERVER_TIMEOUT_MS = 30_000;
|
|
8
9
|
/** Five tries at the server's 1 s Retry-After keeps the roughly 5 s wait the CLI had before the server answered busy with 503. */
|
|
@@ -13,7 +14,8 @@ const MAX_REPLY_BYTES = 1024 * 1024;
|
|
|
13
14
|
function isStoreBusy(res) {
|
|
14
15
|
return res.status === 503 && res.headers.has('retry-after');
|
|
15
16
|
}
|
|
16
|
-
/** Replaying is safe because each routed write commits in one transaction and anything after it is best-effort, so a busy 503 means
|
|
17
|
+
/** Replaying is safe because each routed write commits in one transaction and anything after it is best-effort, so a busy 503 means
|
|
18
|
+
* nothing landed; a sleep is safe too, as a re-run finishes a partial one. */
|
|
17
19
|
function sendWrite(url, init) {
|
|
18
20
|
return fetchWithRetry(url, init, { timeoutMs: SERVER_TIMEOUT_MS, attempts: STORE_BUSY_ATTEMPTS, retryOn: isStoreBusy });
|
|
19
21
|
}
|
|
@@ -25,8 +27,7 @@ function buildHeaders(apiKey, withBody) {
|
|
|
25
27
|
headers['authorization'] = `Bearer ${apiKey}`;
|
|
26
28
|
return headers;
|
|
27
29
|
}
|
|
28
|
-
/** An error the server answered with, not one the transport raised
|
|
29
|
-
* and a server message quotes the caller's own id or content back verbatim. */
|
|
30
|
+
/** An error the server answered with, not one the transport raised, so the transport classifier can skip it by class. */
|
|
30
31
|
export class HttpResponseError extends Error {
|
|
31
32
|
status;
|
|
32
33
|
constructor(message, status) {
|
|
@@ -50,10 +51,25 @@ async function throwForStatus(res) {
|
|
|
50
51
|
}
|
|
51
52
|
throw new HttpResponseError(message, res.status);
|
|
52
53
|
}
|
|
53
|
-
/** A 2xx reply
|
|
54
|
-
|
|
54
|
+
/** A 2xx reply that is not the JSON object the route promises: another process may now own the pidfile's port. */
|
|
55
|
+
export class MalformedReplyError extends Error {
|
|
56
|
+
route;
|
|
57
|
+
constructor(route, detail) {
|
|
58
|
+
super(`the hippo server's reply to ${route} was not the expected JSON object (${detail})`);
|
|
59
|
+
this.route = route;
|
|
60
|
+
this.name = 'MalformedReplyError';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** A 2xx reply's body, read under the cap; it must be a JSON object, and `guard` narrows it further where the shape is known. */
|
|
64
|
+
async function readReply(res, route, guard) {
|
|
65
|
+
const body = await readCappedJson(res, MAX_REPLY_BYTES);
|
|
66
|
+
if (!isJsonObject(body))
|
|
67
|
+
throw new MalformedReplyError(route, body === null ? 'null' : Array.isArray(body) ? 'array' : 'a scalar');
|
|
68
|
+
if (guard && !guard(body))
|
|
69
|
+
throw new MalformedReplyError(route, 'unexpected fields');
|
|
70
|
+
const reply = body;
|
|
55
71
|
// SAFETY: the reply comes from hippo's own server, whose route returns this api result as JSON.
|
|
56
|
-
return
|
|
72
|
+
return reply;
|
|
57
73
|
}
|
|
58
74
|
export async function remember(serverUrl, apiKey, opts) {
|
|
59
75
|
const res = await sendWrite(`${serverUrl}/v1/memories`, {
|
|
@@ -63,7 +79,7 @@ export async function remember(serverUrl, apiKey, opts) {
|
|
|
63
79
|
});
|
|
64
80
|
if (!res.ok)
|
|
65
81
|
await throwForStatus(res);
|
|
66
|
-
return readReply(res);
|
|
82
|
+
return readReply(res, 'POST /v1/memories');
|
|
67
83
|
}
|
|
68
84
|
export async function forget(serverUrl, apiKey, id) {
|
|
69
85
|
const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}`, {
|
|
@@ -72,7 +88,7 @@ export async function forget(serverUrl, apiKey, id) {
|
|
|
72
88
|
});
|
|
73
89
|
if (!res.ok)
|
|
74
90
|
await throwForStatus(res);
|
|
75
|
-
return readReply(res);
|
|
91
|
+
return readReply(res, 'DELETE /v1/memories/:id', (b) => isJsonString(b.id));
|
|
76
92
|
}
|
|
77
93
|
export async function promote(serverUrl, apiKey, id) {
|
|
78
94
|
const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}/promote`, {
|
|
@@ -81,7 +97,7 @@ export async function promote(serverUrl, apiKey, id) {
|
|
|
81
97
|
});
|
|
82
98
|
if (!res.ok)
|
|
83
99
|
await throwForStatus(res);
|
|
84
|
-
return readReply(res);
|
|
100
|
+
return readReply(res, 'POST /v1/memories/:id/promote', (b) => isJsonString(b.sourceId) && isJsonString(b.globalId));
|
|
85
101
|
}
|
|
86
102
|
export async function archiveRaw(serverUrl, apiKey, id, reason) {
|
|
87
103
|
const res = await sendWrite(`${serverUrl}/v1/memories/${encodeURIComponent(id)}/archive`, {
|
|
@@ -91,31 +107,31 @@ export async function archiveRaw(serverUrl, apiKey, id, reason) {
|
|
|
91
107
|
});
|
|
92
108
|
if (!res.ok)
|
|
93
109
|
await throwForStatus(res);
|
|
94
|
-
return readReply(res);
|
|
110
|
+
return readReply(res, 'POST /v1/memories/:id/archive', (b) => isJsonString(b.archivedAt));
|
|
95
111
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
112
|
+
/** The syscall code Node puts on a system error itself (`http` errors) or on the `cause` of a fetch `TypeError`; '' when there is none. */
|
|
113
|
+
function transportCode(err) {
|
|
114
|
+
if ('code' in err)
|
|
115
|
+
return String(err.code);
|
|
116
|
+
// Node's fetch attaches the syscall code (ECONNREFUSED, ECONNRESET) on a non-null object `cause`.
|
|
117
|
+
const cause = err.cause;
|
|
118
|
+
return isObjectLike(cause) && 'code' in cause ? String(cause.code) : '';
|
|
100
119
|
}
|
|
101
120
|
export function classifyTransportFailure(err) {
|
|
102
121
|
// The server answered, so the transport worked, whatever the message says.
|
|
103
122
|
if (err instanceof HttpResponseError)
|
|
104
123
|
return 'none';
|
|
105
|
-
const
|
|
106
|
-
const code = hasObjectCause(err) ? err.cause.code : undefined;
|
|
124
|
+
const code = transportCode(err);
|
|
107
125
|
// Connect-phase failures: no request bytes ever left the client, so a stale
|
|
108
126
|
// pidfile can be healed and the call replayed on the direct path.
|
|
109
127
|
if (code === 'ECONNREFUSED' || code === 'ENOTFOUND' || code === 'EAI_AGAIN')
|
|
110
128
|
return 'never-sent';
|
|
111
|
-
|
|
112
|
-
return 'never-sent';
|
|
113
|
-
// The socket died mid-exchange. Node fetch surfaces this as a bare
|
|
114
|
-
// 'fetch failed' with the syscall code on the cause, so check both shapes.
|
|
129
|
+
// The socket died mid-exchange.
|
|
115
130
|
if (code === 'ECONNRESET' || code === 'ECONNABORTED' || code === 'EPIPE' || code === 'UND_ERR_SOCKET') {
|
|
116
131
|
return 'delivery-unknown';
|
|
117
132
|
}
|
|
118
|
-
|
|
133
|
+
// Fetch rejects every network failure as a TypeError, with a cause only when the syscall is known, so no code means the conservative answer.
|
|
134
|
+
if (err instanceof TypeError)
|
|
119
135
|
return 'delivery-unknown';
|
|
120
136
|
// The request was sent and the server went quiet, so it may have committed.
|
|
121
137
|
if (err.name === 'TimeoutError')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// The payload gate for `hippo compact-resume`.
|
|
2
|
-
import { isSubagentPayload } from '../
|
|
2
|
+
import { isSubagentPayload } from '../util/hook-payload.js';
|
|
3
3
|
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
4
4
|
/** Fail-closed read of the SessionStart payload: only a manual run or a main-session `source: 'compact'` payload may print. */
|
|
5
5
|
export function readCompactResumePayload(stdinText, stdinTimedOut) {
|
package/dist/cli/context.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleContext({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
2
|
+
export declare function handleContext({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/cli/context.js
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
// The `hippo context` verb, which the per-prompt hook also runs; main() loads it lazily from the command table.
|
|
2
|
-
import { isSubagentPayload } from '../
|
|
2
|
+
import { isSubagentPayload } from '../util/hook-payload.js';
|
|
3
3
|
import { estimateTokens } from '../util/token-text.js';
|
|
4
4
|
import { autoDetectContext } from '../api/context-auto.js';
|
|
5
|
-
import { detectScope } from '../
|
|
5
|
+
import { detectScope } from '../core/active-scope.js';
|
|
6
6
|
import { bookLedgerTurn } from '../api/ledger-db.js';
|
|
7
7
|
import { readHookStdin } from './stdin.js';
|
|
8
8
|
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
9
9
|
import * as api from '../api/index.js';
|
|
10
10
|
import { DEFAULT_CONTEXT_BUDGET } from '../api/context.js';
|
|
11
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
12
11
|
import { cliApiContext } from './api-context.js';
|
|
13
12
|
import { renderAmbientSummary } from '../core/ambient.js';
|
|
14
13
|
import { contextBlockLines, contextCost, crossProjectLines, settleTokens } from '../api/context-render.js';
|
|
15
|
-
import { additionalContextOutput, flushDeliveryRecorder, hasContextData, sessionStartEnvelope, toRenderItems, } from '../api/prompt-hook.js';
|
|
14
|
+
import { additionalContextOutput, flushDeliveryRecorder, hasContextData, startDeliveryRecorder, sessionStartEnvelope, toRenderItems, } from '../api/prompt-hook.js';
|
|
16
15
|
import { parseLimitFlag, parseCountFlag, parseBudgetFlag, flagIsTrue } from './flag-values.js';
|
|
17
16
|
import { requireInit } from './shared.js';
|
|
18
17
|
import { printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
|
|
19
|
-
import { hostSessionId, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout
|
|
20
|
-
async function cmdContext(hippoRoot, args, flags, stdinText) {
|
|
21
|
-
const rec = startDeliveryRecorder(hippoRoot,
|
|
18
|
+
import { hostSessionId, hookStoreRoot, hookRuntime, payloadCwdRoot, runHookWithStores, inPilotHoldout } from './hook-runtime.js';
|
|
19
|
+
async function cmdContext(hippoRoot, tenantId, args, flags, stdinText) {
|
|
20
|
+
const rec = startDeliveryRecorder(cliApiContext(hippoRoot, tenantId), {
|
|
21
|
+
stdinText, runtime: hookRuntime(flags), eventType: flagIsTrue(flags, 'pinned-only') ? undefined : 'context', envSessionId: hostSessionId(),
|
|
22
|
+
});
|
|
22
23
|
// No try/finally: a render throw keeps its own exit code and writes no event.
|
|
23
|
-
await renderContext(hippoRoot, args, flags, stdinText, rec);
|
|
24
|
+
await renderContext(hippoRoot, tenantId, args, flags, stdinText, rec);
|
|
24
25
|
flushDeliveryRecorder(rec);
|
|
25
26
|
}
|
|
26
27
|
/** The hook payload's session id and raw prompt; a malformed or empty payload yields neither. */
|
|
@@ -43,7 +44,7 @@ function readHookPayload(stdinText) {
|
|
|
43
44
|
}
|
|
44
45
|
return { sessionId, prompt };
|
|
45
46
|
}
|
|
46
|
-
async function renderContext(hippoRoot, args, flags, stdinText, rec) {
|
|
47
|
+
async function renderContext(hippoRoot, resolvedTenant, args, flags, stdinText, rec) {
|
|
47
48
|
// --pinned-only fires on every prompt, even where no local .hippo exists, so it skips requireInit
|
|
48
49
|
// and api.getContext falls back to global-only.
|
|
49
50
|
const pinnedOnly = flagIsTrue(flags, 'pinned-only');
|
|
@@ -53,8 +54,7 @@ async function renderContext(hippoRoot, args, flags, stdinText, rec) {
|
|
|
53
54
|
const session = resolveContextSession(stdinText);
|
|
54
55
|
const { currentSessionId, ledgerSessionId, payloadSessionId } = session;
|
|
55
56
|
// The pilot arm is booked at the first hook call whatever the flags, so the holdout sees no budget or content branch.
|
|
56
|
-
|
|
57
|
-
if (inPilotHoldout(hippoRoot, resolvedTenant, currentSessionId, payloadSessionId !== undefined)) {
|
|
57
|
+
if (inPilotHoldout(hippoRoot, resolvedTenant, currentSessionId, { write: payloadSessionId !== undefined })) {
|
|
58
58
|
rec?.disabled();
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
@@ -199,10 +199,10 @@ function printCrossProjectSection(items) {
|
|
|
199
199
|
for (const line of crossProjectLines(items))
|
|
200
200
|
console.log(line);
|
|
201
201
|
}
|
|
202
|
-
export async function handleContext({ hippoRoot, args, flags }) {
|
|
202
|
+
export async function handleContext({ hippoRoot, tenantId, args, flags }) {
|
|
203
203
|
// Bounded, not a TTY guard: the hot stdin path and a manual run share this one command.
|
|
204
204
|
const { text: stdinText } = await readHookStdin();
|
|
205
205
|
const root = payloadCwdRoot(hippoRoot, stdinText, hookRuntime(flags));
|
|
206
|
-
await runHookWithStores(() => cmdContext(hookStoreRoot(root), args, flags, stdinText));
|
|
206
|
+
await runHookWithStores(() => cmdContext(hookStoreRoot(root), tenantId, args, flags, stdinText));
|
|
207
207
|
}
|
|
208
208
|
//# sourceMappingURL=context.js.map
|
package/dist/cli/continuity.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ export declare function handleSnapshot({ hippoRoot, tenantId, args, flags }: Com
|
|
|
3
3
|
export declare function handleSession({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
4
4
|
export declare function handleHandoff({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
5
5
|
export declare function handleCurrent({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
6
|
-
export declare function handleWm({ hippoRoot, args, flags }: CommandContext): void;
|
|
6
|
+
export declare function handleWm({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
7
7
|
//# sourceMappingURL=continuity.d.ts.map
|
package/dist/cli/continuity.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
// Where-you-left-off verbs: snapshot, session, handoff, current and working memory.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { snapshotSave as apiSnapshotSave, snapshotClear as apiSnapshotClear, snapshotLoad, sessionEventAppend, sessionEventList, continuityLatest, handoffStampOutcome, handoffSave, handoffLatest as apiHandoffLatest, handoffById, workingMemoryPush, workingMemoryRead, workingMemoryClear, workingMemoryFlush, } from '../api/continuity.js';
|
|
3
|
+
import { cliApiContext } from './api-context.js';
|
|
4
4
|
import { isHandoffOutcome, formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
5
|
-
import { wmPush, wmRead, wmClear, wmFlush } from '../store/working-memory.js';
|
|
6
5
|
import { collectHandoffEvidence } from '../capture/handoff-evidence.js';
|
|
7
6
|
import { printError } from './output.js';
|
|
8
7
|
import { requireInit } from './shared.js';
|
|
9
8
|
import { printActiveTaskSnapshot, printSessionEvents, printHandoff } from './print.js';
|
|
10
|
-
import { boolFlag, isStringFlag } from './flag-values.js';
|
|
9
|
+
import { boolFlag, isStringFlag, numberFlag } from './flag-values.js';
|
|
11
10
|
import { CliExit } from './exit.js';
|
|
12
11
|
const ISO_DATETIME_CHARS = 19;
|
|
13
12
|
function snapshotSave(hippoRoot, tenantId, flags) {
|
|
@@ -19,7 +18,7 @@ function snapshotSave(hippoRoot, tenantId, flags) {
|
|
|
19
18
|
printError('Usage: hippo snapshot save --task <task> --summary <summary> --next-step <step> [--source <source>] [--session <session-id>]');
|
|
20
19
|
throw new CliExit(1);
|
|
21
20
|
}
|
|
22
|
-
const snapshot =
|
|
21
|
+
const snapshot = apiSnapshotSave(cliApiContext(hippoRoot, tenantId), {
|
|
23
22
|
task,
|
|
24
23
|
summary,
|
|
25
24
|
next_step: nextStep,
|
|
@@ -34,7 +33,7 @@ function snapshotSave(hippoRoot, tenantId, flags) {
|
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
35
|
function snapshotClear(hippoRoot, tenantId, flags) {
|
|
37
|
-
const cleared =
|
|
36
|
+
const cleared = apiSnapshotClear(cliApiContext(hippoRoot, tenantId), String(flags['status'] ?? 'cleared'));
|
|
38
37
|
if (!cleared) {
|
|
39
38
|
console.log('No active task snapshot to clear.');
|
|
40
39
|
return;
|
|
@@ -42,7 +41,7 @@ function snapshotClear(hippoRoot, tenantId, flags) {
|
|
|
42
41
|
console.log('Cleared active task snapshot.');
|
|
43
42
|
}
|
|
44
43
|
function snapshotShow(hippoRoot, tenantId, flags) {
|
|
45
|
-
const snapshot =
|
|
44
|
+
const snapshot = snapshotLoad(cliApiContext(hippoRoot, tenantId));
|
|
46
45
|
if (!snapshot) {
|
|
47
46
|
if (flags['json']) {
|
|
48
47
|
console.log(JSON.stringify({ snapshot: null }));
|
|
@@ -77,7 +76,7 @@ function sessionLog(hippoRoot, tenantId, s, flags) {
|
|
|
77
76
|
printError('Usage: hippo session log --id <session-id> --content <text> [--type <type>] [--task <task>] [--source <source>]');
|
|
78
77
|
throw new CliExit(1);
|
|
79
78
|
}
|
|
80
|
-
const event =
|
|
79
|
+
const event = sessionEventAppend(cliApiContext(hippoRoot, tenantId), {
|
|
81
80
|
session_id: s.sessionId,
|
|
82
81
|
task: s.task || null,
|
|
83
82
|
event_type: eventType || 'note',
|
|
@@ -89,7 +88,7 @@ function sessionLog(hippoRoot, tenantId, s, flags) {
|
|
|
89
88
|
console.log(` Type: ${event.event_type}`);
|
|
90
89
|
}
|
|
91
90
|
function sessionShow(hippoRoot, tenantId, s, flags) {
|
|
92
|
-
const events =
|
|
91
|
+
const events = sessionEventList(cliApiContext(hippoRoot, tenantId), {
|
|
93
92
|
session_id: s.sessionId || undefined,
|
|
94
93
|
task: s.task || undefined,
|
|
95
94
|
limit: s.limit,
|
|
@@ -101,9 +100,8 @@ function sessionShow(hippoRoot, tenantId, s, flags) {
|
|
|
101
100
|
printSessionEvents(events);
|
|
102
101
|
}
|
|
103
102
|
function sessionLatest(hippoRoot, tenantId, s, flags) {
|
|
104
|
-
const snapshot =
|
|
105
|
-
|
|
106
|
-
session_id: s.sessionId || snapshot?.session_id || undefined,
|
|
103
|
+
const { snapshot, events } = continuityLatest(cliApiContext(hippoRoot, tenantId), {
|
|
104
|
+
sessionId: s.sessionId,
|
|
107
105
|
limit: s.limit,
|
|
108
106
|
});
|
|
109
107
|
if (flags['json']) {
|
|
@@ -135,7 +133,7 @@ function sessionComplete(hippoRoot, tenantId, s, flags) {
|
|
|
135
133
|
const metadata = { ended_at: new Date().toISOString() };
|
|
136
134
|
if (summary)
|
|
137
135
|
metadata.summary = summary;
|
|
138
|
-
const event =
|
|
136
|
+
const event = sessionEventAppend(cliApiContext(hippoRoot, tenantId), {
|
|
139
137
|
session_id: sessionId,
|
|
140
138
|
task: task || null,
|
|
141
139
|
event_type: 'session_complete',
|
|
@@ -144,7 +142,7 @@ function sessionComplete(hippoRoot, tenantId, s, flags) {
|
|
|
144
142
|
metadata,
|
|
145
143
|
});
|
|
146
144
|
console.log(`Completed session ${event.session_id} with outcome=${outcome} (event #${event.id})`);
|
|
147
|
-
const stamped =
|
|
145
|
+
const stamped = handoffStampOutcome(cliApiContext(hippoRoot, tenantId), sessionId, outcome);
|
|
148
146
|
if (stamped > 0) {
|
|
149
147
|
console.log(`Stamped outcome on handoff for session ${sessionId}`);
|
|
150
148
|
}
|
|
@@ -154,7 +152,7 @@ export function handleSession({ hippoRoot, tenantId, args, flags }) {
|
|
|
154
152
|
const subcommand = args[0] ?? 'show';
|
|
155
153
|
const sessionId = String(flags['id'] ?? flags['session'] ?? '').trim();
|
|
156
154
|
const task = String(flags['task'] ?? '').trim();
|
|
157
|
-
const limit = Math.max(1,
|
|
155
|
+
const limit = Math.max(1, numberFlag(flags, 'limit') || 8);
|
|
158
156
|
const s = { sessionId, task, limit };
|
|
159
157
|
if (subcommand === 'log')
|
|
160
158
|
return sessionLog(hippoRoot, tenantId, s, flags);
|
|
@@ -170,7 +168,7 @@ export function handleSession({ hippoRoot, tenantId, args, flags }) {
|
|
|
170
168
|
throw new CliExit(1);
|
|
171
169
|
}
|
|
172
170
|
function sessionResume(hippoRoot, tenantId, sessionId) {
|
|
173
|
-
const handoff =
|
|
171
|
+
const handoff = apiHandoffLatest(cliApiContext(hippoRoot, tenantId), sessionId || undefined);
|
|
174
172
|
if (!handoff) {
|
|
175
173
|
console.log('No handoff to resume from.');
|
|
176
174
|
return;
|
|
@@ -217,10 +215,13 @@ function sessionResume(hippoRoot, tenantId, sessionId) {
|
|
|
217
215
|
function flagList(value) {
|
|
218
216
|
return Array.isArray(value) ? value : (isStringFlag(value) ? [value] : []);
|
|
219
217
|
}
|
|
218
|
+
const HANDOFF_CREATE_USAGE = 'Usage: hippo handoff create --summary "..." [--next "..."] [--session <id>] [--task <id>] [--artifact <path>...] ' +
|
|
219
|
+
'[--constraint <text>...] [--outcome <success|failure|partial>] [--target-runtime <name>] [--card-id <id>] ' +
|
|
220
|
+
'[--tests <pass|fail|unknown>]';
|
|
220
221
|
function handoffCreate(hippoRoot, tenantId, flags) {
|
|
221
222
|
const summary = String(flags['summary'] ?? '').trim();
|
|
222
223
|
if (!summary) {
|
|
223
|
-
printError(
|
|
224
|
+
printError(HANDOFF_CREATE_USAGE);
|
|
224
225
|
throw new CliExit(1);
|
|
225
226
|
}
|
|
226
227
|
const outcomeRaw = flags['outcome'];
|
|
@@ -244,7 +245,7 @@ function handoffCreate(hippoRoot, tenantId, flags) {
|
|
|
244
245
|
const cardId = String(flags['card-id'] ?? '').trim() || undefined;
|
|
245
246
|
const testStatus = String(flags['tests'] ?? '').trim();
|
|
246
247
|
const evidence = collectHandoffEvidence(process.cwd(), testStatus === 'pass' || testStatus === 'fail' ? testStatus : 'unknown');
|
|
247
|
-
const handoff =
|
|
248
|
+
const handoff = handoffSave(cliApiContext(hippoRoot, tenantId), {
|
|
248
249
|
version: 1,
|
|
249
250
|
sessionId,
|
|
250
251
|
repoRoot: process.cwd(),
|
|
@@ -283,7 +284,7 @@ function printCreatedHandoff(handoff) {
|
|
|
283
284
|
}
|
|
284
285
|
function handoffLatest(hippoRoot, tenantId, flags) {
|
|
285
286
|
const sessionId = String(flags['session'] ?? flags['id'] ?? '').trim() || undefined;
|
|
286
|
-
const handoff =
|
|
287
|
+
const handoff = apiHandoffLatest(cliApiContext(hippoRoot, tenantId), sessionId);
|
|
287
288
|
if (!handoff) {
|
|
288
289
|
if (flags['json']) {
|
|
289
290
|
console.log(JSON.stringify({ handoff: null }));
|
|
@@ -310,7 +311,7 @@ function handoffShow(hippoRoot, tenantId, args, flags) {
|
|
|
310
311
|
printError(`Invalid handoff ID: ${idArg}`);
|
|
311
312
|
throw new CliExit(1);
|
|
312
313
|
}
|
|
313
|
-
const handoff =
|
|
314
|
+
const handoff = handoffById(cliApiContext(hippoRoot, tenantId), handoffId);
|
|
314
315
|
if (!handoff) {
|
|
315
316
|
if (flags['json']) {
|
|
316
317
|
console.log(JSON.stringify({ handoff: null }));
|
|
@@ -363,12 +364,7 @@ function printCurrentState(snapshot, events) {
|
|
|
363
364
|
}
|
|
364
365
|
function currentShow(hippoRoot, tenantId, flags) {
|
|
365
366
|
const asJson = boolFlag(flags, 'json');
|
|
366
|
-
const snapshot =
|
|
367
|
-
const sessionId = snapshot?.session_id ?? undefined;
|
|
368
|
-
const events = listSessionEvents(hippoRoot, tenantId, {
|
|
369
|
-
session_id: sessionId,
|
|
370
|
-
limit: 5,
|
|
371
|
-
});
|
|
367
|
+
const { snapshot, events } = continuityLatest(cliApiContext(hippoRoot, tenantId), { limit: 5 });
|
|
372
368
|
if (asJson) {
|
|
373
369
|
console.log(JSON.stringify({
|
|
374
370
|
snapshot: snapshot ?? null,
|
|
@@ -397,54 +393,55 @@ export function handleCurrent({ hippoRoot, tenantId, args, flags }) {
|
|
|
397
393
|
throw new CliExit(1);
|
|
398
394
|
}
|
|
399
395
|
// Working Memory
|
|
400
|
-
export function handleWm({ hippoRoot, args, flags }) {
|
|
396
|
+
export function handleWm({ hippoRoot, tenantId, args, flags }) {
|
|
401
397
|
requireInit(hippoRoot);
|
|
402
398
|
const subcommand = args[0] ?? '';
|
|
403
399
|
if (subcommand === 'push')
|
|
404
|
-
return wmPushCmd(hippoRoot, flags);
|
|
400
|
+
return wmPushCmd(hippoRoot, tenantId, flags);
|
|
405
401
|
if (subcommand === 'read')
|
|
406
|
-
return wmReadCmd(hippoRoot, flags);
|
|
402
|
+
return wmReadCmd(hippoRoot, tenantId, flags);
|
|
407
403
|
if (subcommand === 'clear') {
|
|
408
404
|
const scope = flags['scope'] ? String(flags['scope']).trim() : undefined;
|
|
409
405
|
const sessionId = flags['session'] ? String(flags['session']).trim() : undefined;
|
|
410
|
-
const count =
|
|
406
|
+
const count = workingMemoryClear(cliApiContext(hippoRoot, tenantId), { scope, sessionId });
|
|
411
407
|
console.log(`Cleared ${count} working memory entries.`);
|
|
412
408
|
return;
|
|
413
409
|
}
|
|
414
410
|
if (subcommand === 'flush') {
|
|
415
411
|
const scope = flags['scope'] ? String(flags['scope']).trim() : undefined;
|
|
416
412
|
const sessionId = flags['session'] ? String(flags['session']).trim() : undefined;
|
|
417
|
-
const count =
|
|
413
|
+
const count = workingMemoryFlush(cliApiContext(hippoRoot, tenantId), { scope, sessionId });
|
|
418
414
|
console.log(`Flushed ${count} working memory entries.`);
|
|
419
415
|
return;
|
|
420
416
|
}
|
|
421
417
|
printError('Usage: hippo wm <push|read|clear|flush>');
|
|
422
418
|
throw new CliExit(1);
|
|
423
419
|
}
|
|
424
|
-
|
|
420
|
+
const WM_DEFAULT_IMPORTANCE = 0.5;
|
|
421
|
+
function wmPushCmd(hippoRoot, tenantId, flags) {
|
|
425
422
|
const scope = String(flags['scope'] ?? 'default').trim();
|
|
426
423
|
const content = String(flags['content'] ?? '').trim();
|
|
427
|
-
const importance =
|
|
424
|
+
const importance = numberFlag(flags, 'importance') ?? WM_DEFAULT_IMPORTANCE;
|
|
428
425
|
const sessionId = flags['session'] ? String(flags['session']).trim() : undefined;
|
|
429
426
|
const taskId = flags['task'] ? String(flags['task']).trim() : undefined;
|
|
430
427
|
if (!content) {
|
|
431
428
|
printError('Usage: hippo wm push --scope <scope> --content "..." [--importance 0.8] [--session <id>] [--task <id>]');
|
|
432
429
|
throw new CliExit(1);
|
|
433
430
|
}
|
|
434
|
-
const id =
|
|
431
|
+
const id = workingMemoryPush(cliApiContext(hippoRoot, tenantId), {
|
|
435
432
|
scope,
|
|
436
433
|
content,
|
|
437
|
-
importance
|
|
434
|
+
importance,
|
|
438
435
|
sessionId,
|
|
439
436
|
taskId,
|
|
440
437
|
});
|
|
441
|
-
console.log(`Pushed working memory #${id} (scope=${scope}, importance=${
|
|
438
|
+
console.log(`Pushed working memory #${id} (scope=${scope}, importance=${importance})`);
|
|
442
439
|
}
|
|
443
|
-
function wmReadCmd(hippoRoot, flags) {
|
|
440
|
+
function wmReadCmd(hippoRoot, tenantId, flags) {
|
|
444
441
|
const scope = flags['scope'] ? String(flags['scope']).trim() : undefined;
|
|
445
442
|
const sessionId = flags['session'] ? String(flags['session']).trim() : undefined;
|
|
446
|
-
const limit =
|
|
447
|
-
const items =
|
|
443
|
+
const limit = numberFlag(flags, 'limit') || 20;
|
|
444
|
+
const items = workingMemoryRead(cliApiContext(hippoRoot, tenantId), { scope, sessionId, limit });
|
|
448
445
|
if (flags['json']) {
|
|
449
446
|
console.log(JSON.stringify({ items }, null, 2));
|
|
450
447
|
return;
|
package/dist/cli/curate.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type CommandContext } from './flag-values.js';
|
|
2
|
-
export declare function handleOutcome({ hippoRoot, tenantId, flags }: CommandContext): void
|
|
3
|
-
export declare function handleConflicts({ hippoRoot, flags }: CommandContext): void;
|
|
2
|
+
export declare function handleOutcome({ hippoRoot, tenantId, flags }: CommandContext): Promise<void>;
|
|
3
|
+
export declare function handleConflicts({ hippoRoot, tenantId, flags }: CommandContext): void;
|
|
4
4
|
export declare function handleResolve({ hippoRoot, tenantId, args, flags }: CommandContext): Promise<void>;
|
|
5
5
|
export declare function handleReject({ hippoRoot, tenantId, args, flags }: CommandContext): void;
|
|
6
6
|
export declare function handleRejections({ hippoRoot, tenantId, flags }: CommandContext): void;
|