hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
package/dist/api/tokens.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
// Token-use and failure reports.
|
|
2
2
|
import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
|
|
3
|
-
import {
|
|
4
|
-
import { failureLogSummary, tokenUseSummary } from '../store/usage-reports.js';
|
|
5
|
-
import { errorMessage, log } from '../util/log.js';
|
|
3
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
6
4
|
import { DAY_MS } from '../util/time.js';
|
|
7
|
-
/** Records memory text handed to an agent in the token ledger. Best-effort: never throws, since a ledger failure must
|
|
5
|
+
/** Records memory text handed to an agent in the token ledger. Best-effort: never throws, since a ledger failure must
|
|
6
|
+
* not fail the recall or context call. */
|
|
8
7
|
export async function recordTokens(ctx, surface, use) {
|
|
9
8
|
try {
|
|
10
|
-
await
|
|
9
|
+
await ctx.store.recordTokens({
|
|
11
10
|
tenantId: ctx.tenantId,
|
|
12
11
|
sessionId: use.sessionId ?? null,
|
|
13
12
|
surface,
|
|
@@ -18,17 +17,17 @@ export async function recordTokens(ctx, surface, use) {
|
|
|
18
17
|
}
|
|
19
18
|
catch (err) {
|
|
20
19
|
rethrowIfSqliteBlocked(err);
|
|
21
|
-
log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${errorMessage(err)}
|
|
20
|
+
log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${errorMessage(err)}`, errorFields(err));
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
|
-
/** Token ledger totals for the tenant over the last `days` days (default 30): tokens sent, skipped as unchanged and
|
|
25
|
-
* per surface, with session counts and mean tokens per session. */
|
|
23
|
+
/** Token ledger totals for the tenant over the last `days` days (default 30): tokens sent, skipped as unchanged and
|
|
24
|
+
* re-read, per surface, with session counts and mean tokens per session. */
|
|
26
25
|
export function tokenSummary(ctx, opts = {}) {
|
|
27
|
-
return
|
|
26
|
+
return ctx.store.reports.tokenUse(ctx.tenantId, reportWindowStart(opts.days));
|
|
28
27
|
}
|
|
29
28
|
/** Failed tool calls by outcome, and repeats across sessions, over the last `days` days (default 30). */
|
|
30
29
|
export function failureSummary(ctx, opts = {}) {
|
|
31
|
-
return
|
|
30
|
+
return ctx.store.reports.failures(ctx.tenantId, reportWindowStart(opts.days));
|
|
32
31
|
}
|
|
33
32
|
function reportWindowStart(days) {
|
|
34
33
|
const span = days !== undefined && Number.isFinite(days) && days > 0 ? days : 30;
|
package/dist/api/types.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { BadRequestError } from '../core/api-errors.js';
|
|
2
|
-
import type
|
|
3
|
-
|
|
2
|
+
import { type HippoStore, type StoreGroup, type StoreWith } from '../store/index.js';
|
|
3
|
+
import type { HippoConfig } from '../core/config.js';
|
|
4
|
+
import type { StoreReach } from '../store/port.js';
|
|
5
|
+
/** Actor identity + role for a Context: the audit-log subject (pass `ctx.actor.subject` to audit helpers) and the role
|
|
6
|
+
* for admin gating.
|
|
4
7
|
* Role checks happen at the request boundary (e.g. /v1/sleep), except in authCreate and authRevoke (ForbiddenError). */
|
|
5
8
|
export interface Actor {
|
|
6
9
|
/** 'cli' | 'localhost:cli' | 'api_key:<key_id>' | 'mcp' | 'connector:slack' | 'connector:github' */
|
|
@@ -10,7 +13,8 @@ export interface Actor {
|
|
|
10
13
|
scopes?: readonly string[];
|
|
11
14
|
/** An auth resolver vouched for this caller, so its admin role stops at its own tenant. */
|
|
12
15
|
viaAuthResolver?: true;
|
|
13
|
-
/** The host's operator (CLI, stdio MCP, keyless loopback
|
|
16
|
+
/** The host's operator (CLI, stdio MCP, keyless loopback set to
|
|
17
|
+
* admin, host-tenant admin key): may act beyond its tenant. */
|
|
14
18
|
hostAdmin?: true;
|
|
15
19
|
owner?: string;
|
|
16
20
|
}
|
|
@@ -19,25 +23,36 @@ export interface Context {
|
|
|
19
23
|
tenantId: string;
|
|
20
24
|
actor: Actor;
|
|
21
25
|
store?: HippoStore;
|
|
26
|
+
/** Set by a composition root. Absent, the api reads one project and no global store, as for an integrator's store. */
|
|
27
|
+
reach?: StoreReach;
|
|
28
|
+
/** Set by a composition root per command or request; absent, the api reads the store's config.json. */
|
|
29
|
+
config?: HippoConfig;
|
|
22
30
|
}
|
|
23
31
|
export type HippoDbContext = Context & {
|
|
24
32
|
store?: undefined;
|
|
25
33
|
};
|
|
26
|
-
|
|
34
|
+
/** A Context whose store a composition root already built; every
|
|
35
|
+
* api function that reads or writes the store takes this. */
|
|
36
|
+
export type StoreContext = Context & {
|
|
27
37
|
readonly store: HippoStore;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
};
|
|
39
|
+
/** A Context whose store a gate proved holds `G`; the api function reads `ctx.store.<group>` directly. */
|
|
40
|
+
export type ContextWith<G extends StoreGroup> = Context & {
|
|
41
|
+
readonly store: StoreWith<G>;
|
|
42
|
+
};
|
|
43
|
+
/** `ctx` itself once its store proves every group, so a gate hands a handler the type with no copy; throws
|
|
44
|
+
* StoreNotPortedError for the first missing one. */
|
|
45
|
+
export declare function narrowContext<G extends StoreGroup>(ctx: StoreContext, ...groups: readonly [G, ...G[]]): ContextWith<G>;
|
|
46
|
+
/** Builds process-local Actor values (admin and host admin) for CLI and CLI-run connector Contexts; Bearer-authed
|
|
47
|
+
* callers build Actor from the api_keys row instead. */
|
|
34
48
|
export declare function adminActor(subject: string): Actor;
|
|
35
49
|
/** Throws unless the caller is the host's operator: `action` reaches past the caller's tenant. */
|
|
36
50
|
export declare function requireHostAdmin(ctx: Context, action: string): void;
|
|
37
51
|
/** The per-person key: an unowned key gets its own bucket by key id rather than sharing one. */
|
|
38
52
|
export declare function ownerOrSubject(actor: Actor): string;
|
|
39
|
-
/** Thrown by `api.recall` on a contract violation; the stable `code` lets callers discriminate without parsing the
|
|
40
|
-
* 'fresh_tail_requires_session_id' (needs HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1) or
|
|
53
|
+
/** Thrown by `api.recall` on a contract violation; the stable `code` lets callers discriminate without parsing the
|
|
54
|
+
* message. 'fresh_tail_requires_session_id' (needs HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1) or
|
|
55
|
+
* 'invalid_scorer_window' (0 would hit an uncapped fallback). */
|
|
41
56
|
export declare class RecallContractError extends BadRequestError {
|
|
42
57
|
readonly code: 'fresh_tail_requires_session_id' | 'invalid_scorer_window';
|
|
43
58
|
constructor(code: 'fresh_tail_requires_session_id' | 'invalid_scorer_window', message: string);
|
package/dist/api/types.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
// Request context (caller identity and tenant) shared by every API module, plus the recall contract error.
|
|
2
2
|
import { BadRequestError, ForbiddenError } from '../core/api-errors.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { narrowStore } from '../store/index.js';
|
|
4
|
+
/** `ctx` itself once its store proves every group, so a gate hands a handler the type with no copy; throws
|
|
5
|
+
* StoreNotPortedError for the first missing one. */
|
|
6
|
+
export function narrowContext(ctx, ...groups) {
|
|
7
|
+
narrowStore(ctx.store, ...groups);
|
|
8
|
+
// SAFETY: narrowStore above proved every group on ctx.store.
|
|
9
|
+
return ctx;
|
|
10
|
+
}
|
|
11
|
+
/** Builds process-local Actor values (admin and host admin) for CLI and CLI-run connector Contexts; Bearer-authed
|
|
12
|
+
* callers build Actor from the api_keys row instead. */
|
|
5
13
|
export function adminActor(subject) {
|
|
6
14
|
return { subject, role: 'admin', hostAdmin: true };
|
|
7
15
|
}
|
|
@@ -14,8 +22,9 @@ export function requireHostAdmin(ctx, action) {
|
|
|
14
22
|
export function ownerOrSubject(actor) {
|
|
15
23
|
return actor.owner ?? actor.subject;
|
|
16
24
|
}
|
|
17
|
-
/** Thrown by `api.recall` on a contract violation; the stable `code` lets callers discriminate without parsing the
|
|
18
|
-
* 'fresh_tail_requires_session_id' (needs HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1) or
|
|
25
|
+
/** Thrown by `api.recall` on a contract violation; the stable `code` lets callers discriminate without parsing the
|
|
26
|
+
* message. 'fresh_tail_requires_session_id' (needs HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1) or
|
|
27
|
+
* 'invalid_scorer_window' (0 would hit an uncapped fallback). */
|
|
19
28
|
export class RecallContractError extends BadRequestError {
|
|
20
29
|
code;
|
|
21
30
|
constructor(code, message) {
|
|
@@ -2,11 +2,17 @@ import { type Context } from '../api/types.js';
|
|
|
2
2
|
import { type CallerProject } from '../api/prompt-hook.js';
|
|
3
3
|
import type { ContinuityKey } from '../store/sessions.js';
|
|
4
4
|
import { type WorkingState } from './working-state.js';
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* Checks the ids, then binds the session to the caller's owner (a ConflictError when another owner holds it). Returns
|
|
7
|
+
* the key the call's rows go under.
|
|
8
|
+
*/
|
|
6
9
|
export declare function bindCaller(ctx: Context, sessionId: string, project: CallerProject): ContinuityKey;
|
|
7
10
|
/** Read only: the session's first prompt booked its arm, and a holdout session gets nothing from hippo. */
|
|
8
11
|
export declare function callerInHoldout(ctx: Context, sessionId: string): boolean;
|
|
9
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Refuses a field past the cap a transcript read gives, naming it; scrubbed again, since the caller's scrub is not
|
|
14
|
+
* trusted, then cut back to the cap.
|
|
15
|
+
*/
|
|
10
16
|
export declare function checkedWorkingState(state: WorkingState | null): WorkingState | null;
|
|
11
17
|
export declare function assertTrigger(trigger: string | null): void;
|
|
12
18
|
export declare function assertRequestId(requestId: string): void;
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
// The checks every caller call shares: ids, project, the session's owner and the pilot arm, all from the request, never
|
|
1
|
+
// The checks every caller call shares: ids, project, the session's owner and the pilot arm, all from the request, never
|
|
2
|
+
// the server's env or folder.
|
|
2
3
|
import { BadRequestError } from '../core/api-errors.js';
|
|
3
4
|
import { ownerOrSubject } from '../api/types.js';
|
|
4
5
|
import { MAX_ID_LEN } from '../util/limits.js';
|
|
5
6
|
import { sessionPilotArm } from '../api/pilot-arm.js';
|
|
7
|
+
import { ledgerReachOf } from '../api/ledger-db.js';
|
|
6
8
|
import { assertCallerIds } from '../api/prompt-hook.js';
|
|
7
9
|
import { assertCallerProject, projectNames } from '../core/project-identity.js';
|
|
8
10
|
import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
9
|
-
import { bindSessionOwner } from '../api/session-owners.js';
|
|
11
|
+
import { bindSessionOwner } from '../api/auth/session-owners.js';
|
|
10
12
|
import { fitWorkingState, WORKING_STATE_CAPS } from './working-state.js';
|
|
11
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Checks the ids, then binds the session to the caller's owner (a ConflictError when another owner holds it). Returns
|
|
15
|
+
* the key the call's rows go under.
|
|
16
|
+
*/
|
|
12
17
|
export function bindCaller(ctx, sessionId, project) {
|
|
13
18
|
assertCallerIds(sessionId, project);
|
|
14
19
|
if (sessionId.trim() === '')
|
|
@@ -20,9 +25,13 @@ export function bindCaller(ctx, sessionId, project) {
|
|
|
20
25
|
}
|
|
21
26
|
/** Read only: the session's first prompt booked its arm, and a holdout session gets nothing from hippo. */
|
|
22
27
|
export function callerInHoldout(ctx, sessionId) {
|
|
23
|
-
|
|
28
|
+
const reach = ledgerReachOf(ctx, true);
|
|
29
|
+
return sessionPilotArm(ctx.hippoRoot, ctx.tenantId, sessionId, false, { reach, ownTenantOnly: true }) === 'holdout';
|
|
24
30
|
}
|
|
25
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Refuses a field past the cap a transcript read gives, naming it; scrubbed again, since the caller's scrub is not
|
|
33
|
+
* trusted, then cut back to the cap.
|
|
34
|
+
*/
|
|
26
35
|
export function checkedWorkingState(state) {
|
|
27
36
|
if (state === null)
|
|
28
37
|
return null;
|
|
@@ -35,8 +44,9 @@ export function checkedWorkingState(state) {
|
|
|
35
44
|
return fitWorkingState({ task: scrub(state.task), summary: scrub(state.summary), next_step: scrub(state.next_step) });
|
|
36
45
|
}
|
|
37
46
|
export function assertTrigger(trigger) {
|
|
38
|
-
if (trigger !== null && trigger.length > MAX_ID_LEN)
|
|
47
|
+
if (trigger !== null && trigger.length > MAX_ID_LEN) {
|
|
39
48
|
throw new BadRequestError(`trigger: at most ${MAX_ID_LEN} characters`);
|
|
49
|
+
}
|
|
40
50
|
}
|
|
41
51
|
export function assertRequestId(requestId) {
|
|
42
52
|
if (requestId.trim() === '')
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { CaptureErrorOutcome } from '../store/failure-log.js';
|
|
2
2
|
import type { JsonValue } from '../util/json.js';
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws.
|
|
5
|
+
*/
|
|
4
6
|
export declare function captureToolFailure(hippoRoot: string, tenantId: string, payload: JsonValue, onLogged?: (failureId: number | null) => void): CaptureErrorOutcome;
|
|
5
7
|
/** Who sent a failure from another machine: the audit actor and the project its lesson and repeat check belong to. */
|
|
6
8
|
export interface LessonCaller {
|
|
@@ -7,7 +7,9 @@ import { loadContentsWithTag } from '../store/entry-reads.js';
|
|
|
7
7
|
import { loadConfig } from '../core/config.js';
|
|
8
8
|
import { recordFailureAt } from '../store/failure-log-at.js';
|
|
9
9
|
import { failureHash, failureSignature, lessonFromFailure, payloadString, } from './failure-reading.js';
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws.
|
|
12
|
+
*/
|
|
11
13
|
export function captureToolFailure(hippoRoot, tenantId, payload, onLogged) {
|
|
12
14
|
const lesson = lessonFromFailure(payload);
|
|
13
15
|
let outcome = 'store-failed';
|
|
@@ -40,9 +40,14 @@ const HEREDOC = new RegExp(String.raw `^\s*(?:cd\s+(?<cd>'[^']*'|"[^"]*"|[^\s'"&
|
|
|
40
40
|
String.raw `(?<body>[\s\S]*?)\r?\n\s*\k<tag>\s*$`);
|
|
41
41
|
/** The script a shell argv runs, for the shells Codex checks for an apply_patch heredoc. */
|
|
42
42
|
function shellScript(argv) {
|
|
43
|
-
const exe = path
|
|
44
|
-
|
|
43
|
+
const exe = path
|
|
44
|
+
.basename(argv[0] ?? '')
|
|
45
|
+
.toLowerCase()
|
|
46
|
+
.replace(/\.exe$/, '');
|
|
47
|
+
const isPosixShell = exe === 'bash' || exe === 'zsh' || exe === 'sh';
|
|
48
|
+
if (isPosixShell && argv.length === 3 && (argv[1] === '-lc' || argv[1] === '-c')) {
|
|
45
49
|
return argv[2];
|
|
50
|
+
}
|
|
46
51
|
if (exe === 'pwsh' || exe === 'powershell') {
|
|
47
52
|
const rest = argv.slice(1).filter((a) => a.toLowerCase() !== '-noprofile');
|
|
48
53
|
if (rest.length === 2 && rest[0].toLowerCase() === '-command')
|
|
@@ -12,12 +12,14 @@ export interface CaptureOptions {
|
|
|
12
12
|
stdinText?: string;
|
|
13
13
|
stdinTimedOut?: boolean;
|
|
14
14
|
sessionTurns?: readonly SessionTurn[];
|
|
15
|
-
/** Tee stdout/stderr to this log file while capture runs, so SessionEnd output (lost in TUI teardown) shows via
|
|
15
|
+
/** Tee stdout/stderr to this log file while capture runs, so SessionEnd output (lost in TUI teardown) shows via
|
|
16
|
+
* `hippo last-sleep`.
|
|
16
17
|
* Appends, because `hippo sleep` writes the same file first. */
|
|
17
18
|
logFile?: string;
|
|
18
19
|
dryRun: boolean;
|
|
19
20
|
global: boolean;
|
|
20
|
-
/** Tenant scope for the dedup read in `cmdCaptureCore`: when set and `global` is false, only this tenant's
|
|
21
|
+
/** Tenant scope for the dedup read in `cmdCaptureCore`: when set and `global` is false, only this tenant's
|
|
22
|
+
* memories count.
|
|
21
23
|
* Undefined means host-wide dedup; ignored when `global: true`. */
|
|
22
24
|
tenantId?: string;
|
|
23
25
|
/** The session's project: rows are stamped with its id, and dedup reads its rows under either name. */
|
package/dist/capture/command.js
CHANGED
|
@@ -10,12 +10,13 @@ import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
|
10
10
|
import { withRejectionProbe } from '../store/rejection-probe.js';
|
|
11
11
|
import { loadConfig } from '../core/config.js';
|
|
12
12
|
import { classifyOriginProject, projectId, isInitialized } from '../core/project-identity.js';
|
|
13
|
-
import { errorMessage, log } from '../util/log.js';
|
|
13
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
14
14
|
import { teeStdStreams } from '../util/stream-tee.js';
|
|
15
15
|
import { extractFromTexts } from './extract.js';
|
|
16
16
|
import { collectSessionTurns, sessionTail, resolveLastSessionTranscript } from './transcript.js';
|
|
17
17
|
export function cmdCapture(hippoRoot, options) {
|
|
18
|
-
// Tee to a log file for the SessionEnd hook; APPEND, because `hippo sleep` runs first in that sequence and already
|
|
18
|
+
// Tee to a log file for the SessionEnd hook; APPEND, because `hippo sleep` runs first in that sequence and already
|
|
19
|
+
// wrote its header and body.
|
|
19
20
|
const restoreStdio = options.logFile ? beginLogTee(options.logFile) : null;
|
|
20
21
|
try {
|
|
21
22
|
cmdCaptureCore(hippoRoot, options);
|
|
@@ -45,7 +46,7 @@ function writeLogBanner(logFile) {
|
|
|
45
46
|
fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} capturing session...\n`, 'utf8');
|
|
46
47
|
}
|
|
47
48
|
catch (err) {
|
|
48
|
-
log.warn(`could not open log file ${logFile}: ${errorMessage(err)}
|
|
49
|
+
log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`, errorFields(err));
|
|
49
50
|
return false;
|
|
50
51
|
}
|
|
51
52
|
return true;
|
|
@@ -59,8 +60,11 @@ function cmdCaptureCore(hippoRoot, options) {
|
|
|
59
60
|
}
|
|
60
61
|
else {
|
|
61
62
|
if (!isInitialized(hippoRoot)) {
|
|
62
|
-
console.error(`No hippo store at ${hippoRoot} (searched ${process.cwd()} and its parents up to your home directory).
|
|
63
|
-
|
|
63
|
+
console.error(`No hippo store at ${hippoRoot} (searched ${process.cwd()} and its parents up to your home directory). ` +
|
|
64
|
+
`Run \`hippo init\` first.`);
|
|
65
|
+
// Set, not exit, so cmdCapture's finally restores the tee'd stdio.
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
return;
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
const read = readCaptureTexts(options);
|
|
@@ -71,7 +75,8 @@ function cmdCaptureCore(hippoRoot, options) {
|
|
|
71
75
|
console.log('No text to capture from.');
|
|
72
76
|
return;
|
|
73
77
|
}
|
|
74
|
-
// Scrub once here, as the snapshot fields are: every source can
|
|
78
|
+
// Scrub once here, as the snapshot fields are: every source can
|
|
79
|
+
// carry a pasted token (AGENTS.md: no secrets in memories).
|
|
75
80
|
const extracted = extractFromTexts(texts.map((text) => maskEmails(redactSecretsStrict(text))), userTexts);
|
|
76
81
|
if (extracted.length === 0) {
|
|
77
82
|
console.log('No actionable items found in the input.');
|
|
@@ -86,7 +91,8 @@ function cmdCaptureCore(hippoRoot, options) {
|
|
|
86
91
|
};
|
|
87
92
|
printCaptureTally(options, captureExtractedItems(targetRoot, writeOpts, extracted, keys));
|
|
88
93
|
}
|
|
89
|
-
// Dedup only against rows this capture's reader sees: another tenant's or project's rows are hidden, so they must not
|
|
94
|
+
// Dedup only against rows this capture's reader sees: another tenant's or project's rows are hidden, so they must not
|
|
95
|
+
// stop its own copy.
|
|
90
96
|
// Only a row holding an item's longest word can hold that item, so the store returns those rows and no others.
|
|
91
97
|
function storedKeysInView(targetRoot, options, extracted) {
|
|
92
98
|
const stored = loadTextsHoldingWords(targetRoot, options.global ? undefined : options.tenantId, extracted.map((item) => longestWord(item.content)), undefined, EVERY_SCOPE);
|
|
@@ -102,7 +108,8 @@ function printCaptureTally(options, { captured, skipped, rejected }) {
|
|
|
102
108
|
(rejected > 0 ? `, ${rejected} rejected` : '') +
|
|
103
109
|
')');
|
|
104
110
|
}
|
|
105
|
-
/** The raw texts for the chosen source, one per session turn, the person's turns first; null after printing why a
|
|
111
|
+
/** The raw texts for the chosen source, one per session turn, the person's turns first; null after printing why a
|
|
112
|
+
* last-session capture has nothing.
|
|
106
113
|
* Only a session says who spoke, so a piped or file capture counts no user texts. */
|
|
107
114
|
function readCaptureTexts(options) {
|
|
108
115
|
switch (options.source) {
|
|
@@ -112,17 +119,20 @@ function readCaptureTexts(options) {
|
|
|
112
119
|
}
|
|
113
120
|
catch {
|
|
114
121
|
console.error('No input on stdin. Pipe text in or use --file <path>.');
|
|
115
|
-
process.
|
|
122
|
+
process.exitCode = 1;
|
|
123
|
+
return null;
|
|
116
124
|
}
|
|
117
125
|
}
|
|
118
126
|
case 'file': {
|
|
119
127
|
if (!options.filePath) {
|
|
120
128
|
console.error('Missing file path. Usage: hippo capture --file <path>');
|
|
121
|
-
process.
|
|
129
|
+
process.exitCode = 1;
|
|
130
|
+
return null;
|
|
122
131
|
}
|
|
123
132
|
if (!fs.existsSync(options.filePath)) {
|
|
124
133
|
console.error(`File not found: ${options.filePath}`);
|
|
125
|
-
process.
|
|
134
|
+
process.exitCode = 1;
|
|
135
|
+
return null;
|
|
126
136
|
}
|
|
127
137
|
return { texts: [fs.readFileSync(options.filePath, 'utf8')], userTexts: 0 };
|
|
128
138
|
}
|
|
@@ -149,7 +159,14 @@ export function captureExtractedItems(targetRoot, options, extracted, keys) {
|
|
|
149
159
|
const tally = { captured: 0, skipped: 0, rejected: 0 };
|
|
150
160
|
const baseHalfLifeDays = loadConfig(targetRoot).defaultHalfLifeDays;
|
|
151
161
|
if (!options.dryRun) {
|
|
152
|
-
const outcomes = writeCapturedItems(targetRoot, extracted.map((item) => ({
|
|
162
|
+
const outcomes = writeCapturedItems(targetRoot, extracted.map((item) => ({
|
|
163
|
+
content: item.content,
|
|
164
|
+
makeEntry: () => captureEntry(item, options, baseHalfLifeDays),
|
|
165
|
+
})), keys, {
|
|
166
|
+
actor: options.actor,
|
|
167
|
+
lean: options.lean,
|
|
168
|
+
onCaptured: options.lean ? undefined : (entry) => void embedMemory(targetRoot, entry),
|
|
169
|
+
});
|
|
153
170
|
for (const outcome of outcomes)
|
|
154
171
|
tally[outcome]++;
|
|
155
172
|
return tally;
|
|
@@ -164,7 +181,7 @@ export function captureExtractedItems(targetRoot, options, extracted, keys) {
|
|
|
164
181
|
continue;
|
|
165
182
|
}
|
|
166
183
|
const entry = captureEntry(item, options, baseHalfLifeDays);
|
|
167
|
-
if (wouldReject(entry.
|
|
184
|
+
if (wouldReject(entry.tenant_id ?? 'default', entry.id, entry.content)) {
|
|
168
185
|
console.log(` [reject] (${item.category}) ${item.content.slice(0, 80)} - matches a rejected value`);
|
|
169
186
|
tally.rejected++;
|
|
170
187
|
continue;
|
|
@@ -187,9 +204,11 @@ function captureEntry(item, options, baseHalfLifeDays) {
|
|
|
187
204
|
confidence: 'observed',
|
|
188
205
|
pinned: item.fromUser === true && item.category === 'rule',
|
|
189
206
|
tenantId: options.tenantId,
|
|
190
|
-
|
|
207
|
+
sourceSessionId: options.sessionId,
|
|
191
208
|
baseHalfLifeDays,
|
|
192
209
|
});
|
|
193
|
-
|
|
210
|
+
if (options.originProject === undefined)
|
|
211
|
+
return created;
|
|
212
|
+
return { ...created, origin_project: projectId(options.originProject) };
|
|
194
213
|
}
|
|
195
214
|
//# sourceMappingURL=command.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../api/context-render.js';
|
|
2
|
-
import { bookTokenUse } from '../api/ledger-db.js';
|
|
3
|
-
import { errorMessage, log } from '../util/log.js';
|
|
1
|
+
import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText, } from '../api/context-render.js';
|
|
2
|
+
import { bookTokenUse, ledgerReachOf } from '../api/ledger-db.js';
|
|
3
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
4
4
|
import { listSessionEvents, loadFreshActiveTaskSnapshot } from '../store/sessions.js';
|
|
5
5
|
import { estimateTokens } from '../util/token-text.js';
|
|
6
6
|
import { truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
@@ -10,13 +10,20 @@ export function compactResumeForCaller(ctx, req) {
|
|
|
10
10
|
if (req.source !== 'compact' || callerInHoldout(ctx, req.sessionId))
|
|
11
11
|
return { stdout: '' };
|
|
12
12
|
const snapshot = loadFreshActiveTaskSnapshot(ctx.hippoRoot, ctx.tenantId, { maxAgeMs: COMPACT_RESUME_MAX_AGE_MS }, key);
|
|
13
|
-
// One owner's concurrent sessions must not cross-restore; a
|
|
14
|
-
|
|
13
|
+
// One owner's concurrent sessions must not cross-restore; a
|
|
14
|
+
// snapshot with no session still restores, as on the local path.
|
|
15
|
+
if (snapshot === null || (snapshot.session_id !== null && snapshot.session_id !== req.sessionId)) {
|
|
15
16
|
return { stdout: '' };
|
|
17
|
+
}
|
|
16
18
|
const text = compactResumeText(snapshot, sessionTrail(ctx, snapshot.session_id));
|
|
17
19
|
bookTokenUse(ctx.hippoRoot, {
|
|
18
|
-
tenantId: ctx.tenantId,
|
|
19
|
-
|
|
20
|
+
tenantId: ctx.tenantId,
|
|
21
|
+
sessionId: req.sessionId,
|
|
22
|
+
surface: 'compact_resume',
|
|
23
|
+
event: 'inject',
|
|
24
|
+
items: 1,
|
|
25
|
+
tokens: estimateTokens(text),
|
|
26
|
+
}, ledgerReachOf(ctx, true));
|
|
20
27
|
return { stdout: text };
|
|
21
28
|
}
|
|
22
29
|
/** A bad trail row costs the trail, not the snapshot. */
|
|
@@ -28,7 +35,7 @@ function sessionTrail(ctx, sessionId) {
|
|
|
28
35
|
.map((e) => ({ ...e, content: truncateCodePointSafe(e.content, COMPACT_RESUME_EVENT_CONTENT_CAP) }));
|
|
29
36
|
}
|
|
30
37
|
catch (err) {
|
|
31
|
-
log.warn(`compact-resume: trail skipped: ${errorMessage(err)}
|
|
38
|
+
log.warn(`compact-resume: trail skipped: ${errorMessage(err)}`, errorFields(err));
|
|
32
39
|
return [];
|
|
33
40
|
}
|
|
34
41
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type HookRuntime } from '../core/capture-contract.js';
|
|
2
|
-
/** Log-forgery guard: strip C0 control chars (newlines above all) from payload-controlled values so a crafted value
|
|
3
|
-
*
|
|
2
|
+
/** Log-forgery guard: strip C0 control chars (newlines above all) from payload-controlled values so a crafted value
|
|
3
|
+
* cannot inject fake `[hippo]` log lines. Exported as the one shared guard for every `[hippo]`-prefixed log writer that
|
|
4
|
+
* interpolates payload values. */
|
|
4
5
|
export declare function sanitizeLogMessage(message: string): string;
|
|
5
6
|
export interface PreCompactOptions {
|
|
6
7
|
stdinText?: string;
|
|
@@ -10,8 +11,9 @@ export interface PreCompactOptions {
|
|
|
10
11
|
/** Called once when the hook accepts a compaction, with the text it printed or null when it printed none. */
|
|
11
12
|
onBoundary?: (printed: string | null) => void;
|
|
12
13
|
}
|
|
13
|
-
/** PreCompact hook entry point. Exit code 2 BLOCKS compaction, so every path (bad stdin, missing transcript, store
|
|
14
|
-
*
|
|
14
|
+
/** PreCompact hook entry point. Exit code 2 BLOCKS compaction, so every path (bad stdin, missing transcript, store
|
|
15
|
+
* error) must exit 0 as a logged no-op. Callers must not wrap this in anything that turns a caught-and-logged failure
|
|
16
|
+
* into a non-zero exit. */
|
|
15
17
|
export declare function cmdPreCompact(hippoRoot: string, options: PreCompactOptions): Promise<void>;
|
|
16
18
|
export interface PostCompactOptions {
|
|
17
19
|
stdinText?: string;
|
|
@@ -19,6 +21,7 @@ export interface PostCompactOptions {
|
|
|
19
21
|
logFile?: string;
|
|
20
22
|
afterSave?: (transcriptPath: string, cwd: string | null, log: (message: string) => void) => void;
|
|
21
23
|
}
|
|
22
|
-
/** PostCompact entry point: saves the summary and its items, replays earlier leftovers, returns the one line to show.
|
|
24
|
+
/** PostCompact entry point: saves the summary and its items, replays earlier leftovers, returns the one line to show.
|
|
25
|
+
* Never throws, so the hook exits 0. */
|
|
23
26
|
export declare function cmdPostCompact(hippoRoot: string, options: PostCompactOptions): string | null;
|
|
24
27
|
//# sourceMappingURL=compact.d.ts.map
|