hippo-memory 1.69.0 → 1.70.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/api/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BadRequestError } from '../api-errors.js';
|
|
2
|
-
import type { HippoStore } from '../store
|
|
1
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
2
|
+
import type { HippoStore } from '../store/index.js';
|
|
3
3
|
/**
|
|
4
4
|
* Actor identity + authorization role for a Context.
|
|
5
5
|
*
|
package/dist/api/types.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Request context (caller identity and tenant) shared by every API module, plus the recall contract error.
|
|
2
|
-
import { BadRequestError } from '../api-errors.js';
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
3
|
/**
|
|
4
4
|
* Helper for building process-local Actor values (admin and host admin),
|
|
5
5
|
* used by CLI and CLI-run connector Context constructors so the role
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Context } from '../api/types.js';
|
|
2
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
3
|
-
import { type CallerProject } from '../prompt-hook.js';
|
|
2
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
3
|
+
import { type CallerProject } from '../api/prompt-hook.js';
|
|
4
4
|
import type { ContinuityKey } from '../store/sessions.js';
|
|
5
5
|
import { type WorkingState } from './working-state.js';
|
|
6
6
|
/** Checks the ids, then binds the session to the caller's owner (a ConflictError when another owner holds it). Returns the key the call's rows go under. */
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// The checks every caller call shares: ids, project, the session's owner and the pilot arm, all from the request, never the server's env or folder.
|
|
2
|
-
import { BadRequestError } from '../api-errors.js';
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
3
|
import { ownerOrSubject } from '../api/types.js';
|
|
4
|
-
import { closeHippoDb, openHippoDb } from '../db.js';
|
|
5
|
-
import { MAX_ID_LEN } from '../http-util.js';
|
|
6
|
-
import { sessionPilotArm } from '../pilot-arm.js';
|
|
7
|
-
import { assertCallerIds } from '../prompt-hook.js';
|
|
8
|
-
import { assertCallerProject, projectNames } from '../project-identity.js';
|
|
9
|
-
import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
|
|
10
|
-
import { bindSessionOwner } from '../session-owners.js';
|
|
4
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
5
|
+
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
6
|
+
import { sessionPilotArm } from '../api/pilot-arm.js';
|
|
7
|
+
import { assertCallerIds } from '../api/prompt-hook.js';
|
|
8
|
+
import { assertCallerProject, projectNames } from '../core/project-identity.js';
|
|
9
|
+
import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
10
|
+
import { bindSessionOwner } from '../api/session-owners.js';
|
|
11
11
|
import { fitWorkingState, WORKING_STATE_CAPS } from './working-state.js';
|
|
12
12
|
/** Checks the ids, then binds the session to the caller's owner (a ConflictError when another owner holds it). Returns the key the call's rows go under. */
|
|
13
13
|
export function bindCaller(ctx, sessionId, project) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type CaptureErrorOutcome } from '
|
|
2
|
-
import type { JsonValue } from '
|
|
1
|
+
import { type CaptureErrorOutcome } from '../store/failure-log.js';
|
|
2
|
+
import type { JsonValue } from '../util/json.js';
|
|
3
3
|
/** Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws. */
|
|
4
4
|
export declare function captureToolFailure(hippoRoot: string, tenantId: string, payload: JsonValue): CaptureErrorOutcome;
|
|
5
5
|
/** Who sent a failure from another machine: the audit actor and the project its lesson and repeat check belong to. */
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// `hippo capture-error`, run by the Claude Code PostToolUseFailure hook: routine failures and repeats are not
|
|
2
2
|
// stored, because error memories decay slowly and would crowd out real lessons; what is stored stays `observed`
|
|
3
3
|
// until outcome feedback confirms it. Every failure, stored or not, goes to the failure log.
|
|
4
|
-
import { createMemory } from '
|
|
5
|
-
import { writeEntry } from '
|
|
6
|
-
import { loadContentsWithTag } from '
|
|
7
|
-
import { loadConfig } from '
|
|
8
|
-
import { closeHippoDb, openHippoDb } from '
|
|
9
|
-
import { recordFailure } from '
|
|
10
|
-
import { failureHash, failureSignature, lessonFromFailure, payloadString, } from './
|
|
4
|
+
import { createMemory } from '../core/memory.js';
|
|
5
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
6
|
+
import { loadContentsWithTag } from '../store/entry-reads.js';
|
|
7
|
+
import { loadConfig } from '../core/config.js';
|
|
8
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
9
|
+
import { recordFailure } from '../store/failure-log.js';
|
|
10
|
+
import { failureHash, failureSignature, lessonFromFailure, payloadString, } from './failure-reading.js';
|
|
11
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
12
|
export function captureToolFailure(hippoRoot, tenantId, payload) {
|
|
13
13
|
const lesson = lessonFromFailure(payload);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Files named by a Codex apply_patch call, read the way openai/codex codex-rs/apply-patch reads them
|
|
2
2
|
// (parser.rs for the body, invocation.rs for the shell forms it runs as apply_patch).
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import { isStringValue } from '
|
|
4
|
+
import { isStringValue } from '../core/capture-contract.js';
|
|
5
5
|
/** Codex prints this line only when a patch applied (apply-patch lib.rs). */
|
|
6
6
|
export const PATCH_SUCCESS_LINE = 'Success. Updated the following files:';
|
|
7
7
|
const BEGIN_PATCH = '*** Begin Patch';
|
package/dist/capture/command.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { createMemory, Layer } from '../memory.js';
|
|
4
|
-
import { duplicateKey, storedTextKeys } from '../same-text.js';
|
|
3
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
4
|
+
import { duplicateKey, longestWord, storedTextKeys } from '../util/same-text.js';
|
|
5
5
|
import { stampOriginProject } from '../store/entry-row.js';
|
|
6
6
|
import { isInitialized, openStore } from '../store/open.js';
|
|
7
7
|
import { writeEntryMirrors } from '../store/entry-writes.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { gatedWrite } from '../gated-write.js';
|
|
11
|
-
import { getGlobalRoot, initGlobal } from '../shared.js';
|
|
12
|
-
import { embedMemory } from '../embeddings.js';
|
|
13
|
-
import { maskEmails, redactSecretsStrict } from '../secret-detect.js';
|
|
14
|
-
import { RejectedValueError, checkRejectionGuard } from '../rejection.js';
|
|
15
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
16
|
-
import { loadConfig } from '../config.js';
|
|
17
|
-
import { classifyOriginProject, projectId } from '../project-identity.js';
|
|
18
|
-
import { isStringValue } from '../capture-contract.js';
|
|
19
|
-
import { errorMessage, log } from '../log.js';
|
|
8
|
+
import { EVERY_SCOPE, loadTextsHoldingWords } from '../store/candidates.js';
|
|
9
|
+
import { updateStatsOn } from '../store/index-and-stats.js';
|
|
10
|
+
import { gatedWrite } from '../trust/gated-write.js';
|
|
11
|
+
import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
|
|
12
|
+
import { embedMemory } from '../store/embeddings/index.js';
|
|
13
|
+
import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
14
|
+
import { RejectedValueError, checkRejectionGuard } from '../store/rejection.js';
|
|
15
|
+
import { openHippoDb, closeHippoDb } from '../db/index.js';
|
|
16
|
+
import { loadConfig } from '../core/config.js';
|
|
17
|
+
import { classifyOriginProject, projectId } from '../core/project-identity.js';
|
|
18
|
+
import { isStringValue } from '../core/capture-contract.js';
|
|
19
|
+
import { errorMessage, log } from '../util/log.js';
|
|
20
20
|
import { extractFromTexts } from './extract.js';
|
|
21
21
|
import { collectSessionTurns, sessionTail, resolveLastSessionTranscript } from './transcript.js';
|
|
22
22
|
export function cmdCapture(hippoRoot, options) {
|
|
@@ -48,25 +48,11 @@ export function cmdCapture(hippoRoot, options) {
|
|
|
48
48
|
* the data.
|
|
49
49
|
*/
|
|
50
50
|
function beginLogTee(logFile) {
|
|
51
|
-
|
|
52
|
-
fs.mkdirSync(path.dirname(logFile), { recursive: true });
|
|
53
|
-
fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} capturing session...\n`, 'utf8');
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`);
|
|
51
|
+
if (!writeLogBanner(logFile))
|
|
57
52
|
return () => { };
|
|
58
|
-
}
|
|
59
53
|
const origStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
60
54
|
const origStderrWrite = process.stderr.write.bind(process.stderr);
|
|
61
|
-
const tee = (chunk) =>
|
|
62
|
-
try {
|
|
63
|
-
const buf = isStringValue(chunk) ? chunk : Buffer.from(chunk).toString('utf8');
|
|
64
|
-
fs.appendFileSync(logFile, buf, 'utf8');
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// log failures are non-fatal
|
|
68
|
-
}
|
|
69
|
-
};
|
|
55
|
+
const tee = (chunk) => appendToLog(logFile, chunk);
|
|
70
56
|
const wrapWrite = (origWrite) => {
|
|
71
57
|
const wrapped = (...args) => {
|
|
72
58
|
tee(args[0]);
|
|
@@ -89,6 +75,27 @@ function beginLogTee(logFile) {
|
|
|
89
75
|
process.stderr.write = origStderrWrite;
|
|
90
76
|
};
|
|
91
77
|
}
|
|
78
|
+
/** Creates the log's folder and appends the banner line; false, after a warning, when the log cannot be written. */
|
|
79
|
+
function writeLogBanner(logFile) {
|
|
80
|
+
try {
|
|
81
|
+
fs.mkdirSync(path.dirname(logFile), { recursive: true });
|
|
82
|
+
fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} capturing session...\n`, 'utf8');
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`);
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
function appendToLog(logFile, chunk) {
|
|
91
|
+
try {
|
|
92
|
+
const buf = isStringValue(chunk) ? chunk : Buffer.from(chunk).toString('utf8');
|
|
93
|
+
fs.appendFileSync(logFile, buf, 'utf8');
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// log failures are non-fatal
|
|
97
|
+
}
|
|
98
|
+
}
|
|
92
99
|
// Console lines here are the `hippo capture` command's printed result, so they stay off the logger.
|
|
93
100
|
function cmdCaptureCore(hippoRoot, options) {
|
|
94
101
|
const useGlobal = options.global;
|
|
@@ -115,22 +122,28 @@ function cmdCaptureCore(hippoRoot, options) {
|
|
|
115
122
|
console.log('No actionable items found in the input.');
|
|
116
123
|
return;
|
|
117
124
|
}
|
|
118
|
-
|
|
119
|
-
// project's, are hidden from it, so they must not stop its own copy.
|
|
120
|
-
const stored = loadAllEntries(targetRoot, useGlobal ? undefined : options.tenantId);
|
|
121
|
-
const origin = options.originProject;
|
|
122
|
-
const keys = storedTextKeys(origin === undefined
|
|
123
|
-
? stored
|
|
124
|
-
: stored.filter((e) => classifyOriginProject(e.origin_project, origin) !== 'cross-project'));
|
|
125
|
+
const keys = storedKeysInView(targetRoot, options, extracted);
|
|
125
126
|
const writeOpts = {
|
|
126
127
|
dryRun: options.dryRun,
|
|
127
128
|
tenantId: useGlobal ? undefined : options.tenantId,
|
|
128
|
-
originProject:
|
|
129
|
+
originProject: options.originProject,
|
|
129
130
|
lean: false,
|
|
130
131
|
};
|
|
131
|
-
|
|
132
|
+
printCaptureTally(options, captureExtractedItems(targetRoot, writeOpts, extracted, keys));
|
|
133
|
+
}
|
|
134
|
+
// Dedup only against rows this capture's reader sees: another tenant's rows, or another
|
|
135
|
+
// project's, are hidden from it, so they must not stop its own copy.
|
|
136
|
+
// Only a row holding an item's longest word can hold that item, so the store returns those rows and no others.
|
|
137
|
+
function storedKeysInView(targetRoot, options, extracted) {
|
|
138
|
+
const stored = loadTextsHoldingWords(targetRoot, options.global ? undefined : options.tenantId, extracted.map((item) => longestWord(item.content)), undefined, EVERY_SCOPE);
|
|
139
|
+
const origin = options.originProject;
|
|
140
|
+
return storedTextKeys(origin === undefined
|
|
141
|
+
? stored
|
|
142
|
+
: stored.filter((e) => classifyOriginProject(e.origin_project, origin) !== 'cross-project'));
|
|
143
|
+
}
|
|
144
|
+
function printCaptureTally(options, { captured, skipped, rejected }) {
|
|
132
145
|
const prefix = options.dryRun ? '[dry-run] ' : '';
|
|
133
|
-
const globalPrefix =
|
|
146
|
+
const globalPrefix = options.global ? '[global] ' : '';
|
|
134
147
|
console.log(`\n${prefix}${globalPrefix}Captured ${captured} items (${skipped} skipped as duplicates` +
|
|
135
148
|
(rejected > 0 ? `, ${rejected} rejected` : '') +
|
|
136
149
|
')');
|
|
@@ -247,7 +260,7 @@ function captureOne(ctx, item, entry) {
|
|
|
247
260
|
return 'skipped';
|
|
248
261
|
writeEntryMirrors(targetRoot, stamped);
|
|
249
262
|
if (!options.lean)
|
|
250
|
-
|
|
263
|
+
updateStatsOn(writeDb, targetRoot, { remembered: 1 });
|
|
251
264
|
keys.add(duplicateKey(item.content)); // within-batch dedup
|
|
252
265
|
if (!options.lean)
|
|
253
266
|
void embedMemory(targetRoot, entry);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Context } from '../api/types.js';
|
|
2
|
-
import type { CallerProject } from '../prompt-hook.js';
|
|
2
|
+
import type { CallerProject } from '../api/prompt-hook.js';
|
|
3
3
|
import type { CallerHookOutput } from './pre-compact-caller.js';
|
|
4
4
|
export interface CallerCompactResumeRequest {
|
|
5
5
|
readonly sessionId: string;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { COMPACT_RESUME_EVENT_CONTENT_CAP, COMPACT_RESUME_MAX_AGE_MS, compactResumeText } from '../context-render.js';
|
|
2
|
-
import {
|
|
3
|
-
import { errorMessage, log } from '../log.js';
|
|
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';
|
|
4
4
|
import { listSessionEvents, loadFreshActiveTaskSnapshot } from '../store/sessions.js';
|
|
5
|
-
import { estimateTokens
|
|
6
|
-
import { truncateCodePointSafe } from '../transcript-tail.js';
|
|
5
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
6
|
+
import { truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
7
7
|
import { bindCaller, callerInHoldout } from './caller-session.js';
|
|
8
8
|
export function compactResumeForCaller(ctx, req) {
|
|
9
9
|
const key = bindCaller(ctx, req.sessionId, req.project);
|
|
@@ -14,9 +14,9 @@ export function compactResumeForCaller(ctx, req) {
|
|
|
14
14
|
if (snapshot === null || (snapshot.session_id !== null && snapshot.session_id !== req.sessionId))
|
|
15
15
|
return { stdout: '' };
|
|
16
16
|
const text = compactResumeText(snapshot, sessionTrail(ctx, snapshot.session_id));
|
|
17
|
-
|
|
17
|
+
bookTokenUse(ctx.hippoRoot, {
|
|
18
18
|
tenantId: ctx.tenantId, sessionId: req.sessionId, surface: 'compact_resume', event: 'inject', items: 1, tokens: estimateTokens(text),
|
|
19
|
-
}
|
|
19
|
+
}, { sharedStore: true });
|
|
20
20
|
return { stdout: text };
|
|
21
21
|
}
|
|
22
22
|
/** A bad trail row costs the trail, not the snapshot. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type HookRuntime } from '../capture-contract.js';
|
|
1
|
+
import { type HookRuntime } from '../core/capture-contract.js';
|
|
2
2
|
/**
|
|
3
3
|
* Log-forgery guard: messages here interpolate payload-controlled values
|
|
4
4
|
* (transcript paths, session ids). Strip C0 control chars — newlines above
|
|
@@ -13,6 +13,8 @@ export interface PreCompactOptions {
|
|
|
13
13
|
stdinTimedOut?: boolean;
|
|
14
14
|
logFile?: string;
|
|
15
15
|
runtime?: HookRuntime;
|
|
16
|
+
/** Called once when the hook accepts a compaction, with the text it printed or null when it printed none. */
|
|
17
|
+
onBoundary?: (printed: string | null) => void;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* PreCompact hook entry point. Exit code 2 on PreCompact BLOCKS compaction,
|
|
@@ -24,6 +26,7 @@ export interface PreCompactOptions {
|
|
|
24
26
|
export declare function cmdPreCompact(hippoRoot: string, options: PreCompactOptions): Promise<void>;
|
|
25
27
|
export interface PostCompactOptions {
|
|
26
28
|
stdinText?: string;
|
|
29
|
+
stdinTimedOut?: boolean;
|
|
27
30
|
logFile?: string;
|
|
28
31
|
afterSave?: (transcriptPath: string, cwd: string | null, log: (message: string) => void) => void;
|
|
29
32
|
}
|
package/dist/capture/compact.js
CHANGED
|
@@ -2,11 +2,11 @@ import * as fs from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { isInitialized } from '../store/open.js';
|
|
4
4
|
import { saveActiveTaskSnapshot, loadActiveTaskSnapshot } from '../store/sessions.js';
|
|
5
|
-
import { PRE_COMPACT_INSTRUCTION,
|
|
6
|
-
import { resolveTenantId } from '../tenant.js';
|
|
5
|
+
import { PRE_COMPACT_INSTRUCTION, postCompactLine, recordCompactionStart, recordSnapshotSaved, saveCompaction, replayCompactionsAt, COMPACTION_DB_WAIT_MS, } from './compaction-record.js';
|
|
6
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
7
7
|
import { defaultPreCompactLogPath, vscodeUserHooksFile } from '../hooks/shared.js';
|
|
8
|
-
import { readClaudeCodePreCompact } from '../capture-contract.js';
|
|
9
|
-
import { errorMessage } from '../log.js';
|
|
8
|
+
import { readClaudeCodePostCompact, readClaudeCodePreCompact } from '../core/capture-contract.js';
|
|
9
|
+
import { errorMessage, log as logger } from '../util/log.js';
|
|
10
10
|
import { resolveLastSessionTranscript } from './transcript.js';
|
|
11
11
|
import { isVscodeTranscript } from './copilot-transcript.js';
|
|
12
12
|
import { mergeWorkingState, transcriptWorkingState } from './working-state.js';
|
|
@@ -36,8 +36,9 @@ function appendPreCompactLog(logFile, message) {
|
|
|
36
36
|
}
|
|
37
37
|
fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, 'utf8');
|
|
38
38
|
}
|
|
39
|
-
catch {
|
|
39
|
+
catch (err) {
|
|
40
40
|
// Diagnostic-only; a log write failure must never affect the exit-0 contract.
|
|
41
|
+
logger.debug(`pre-compact log not written: ${errorMessage(err)}`);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
/** True iff `filePath` exists and is readable — checks both in one call. */
|
|
@@ -52,11 +53,14 @@ function isReadableFile(filePath) {
|
|
|
52
53
|
}
|
|
53
54
|
/** PreCompact stdout is the summariser's instructions; sent before the snapshot work because a locked store can run the hook past its 30 s limit, and via writeSync because process.exit drops buffered pipe output. */
|
|
54
55
|
function printPreCompactInstruction(logFile) {
|
|
56
|
+
const text = `${PRE_COMPACT_INSTRUCTION}\n`;
|
|
55
57
|
try {
|
|
56
|
-
fs.writeSync(1,
|
|
58
|
+
fs.writeSync(1, text);
|
|
59
|
+
return text;
|
|
57
60
|
}
|
|
58
61
|
catch (err) {
|
|
59
62
|
appendPreCompactLog(logFile, `instruction not printed: ${errorMessage(err)}`);
|
|
63
|
+
return null;
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
66
|
/** The Copilot CLI accepts both preCompact and PreCompact, so hippo.json's pair can run twice for one compaction. */
|
|
@@ -82,7 +86,7 @@ function runPreCompact(hippoRoot, options, logFile) {
|
|
|
82
86
|
appendPreCompactLog(logFile, `skip: ${receipt.reason}`);
|
|
83
87
|
return;
|
|
84
88
|
}
|
|
85
|
-
const { sessionId, transcriptPath: payloadTranscriptPath
|
|
89
|
+
const { sessionId, transcriptPath: payloadTranscriptPath } = receipt.input;
|
|
86
90
|
// With chat.useClaudeHooks on, VS Code runs Claude Code's hooks too; it never sends PostCompact to close a record, nor reads the summariser text.
|
|
87
91
|
const vscode = runtime === 'claude-code' && isVscodeTranscript(payloadTranscriptPath);
|
|
88
92
|
if (vscode && fs.existsSync(vscodeUserHooksFile())) {
|
|
@@ -93,13 +97,7 @@ function runPreCompact(hippoRoot, options, logFile) {
|
|
|
93
97
|
appendPreCompactLog(logFile, `skip: snapshot for session ${sessionId} saved under ${TWIN_FIRE_MS / 1000} s ago, by the other preCompact entry`);
|
|
94
98
|
return;
|
|
95
99
|
}
|
|
96
|
-
|
|
97
|
-
// Copilot has no PostCompact hook to close a record, so its compactions get the snapshot alone.
|
|
98
|
-
let recordId = null;
|
|
99
|
-
if (runtime === 'claude-code' && !vscode && sessionId !== null && sessionId !== '') {
|
|
100
|
-
recordId = recordCompactionStart(hippoRoot, { sessionId, trigger: payloadTrigger, cwd: payloadCwd, transcriptPath: payloadTranscriptPath }, (message) => appendPreCompactLog(logFile, message));
|
|
101
|
-
printPreCompactInstruction(logFile);
|
|
102
|
-
}
|
|
100
|
+
const recordId = markCompactionBoundary(hippoRoot, options, logFile, receipt.input, runtime === 'claude-code' && !vscode);
|
|
103
101
|
const transcriptPath = resolvePreCompactTranscript(payloadTranscriptPath, stdinText, logFile, runtime);
|
|
104
102
|
if (!transcriptPath)
|
|
105
103
|
return;
|
|
@@ -109,6 +107,26 @@ function runPreCompact(hippoRoot, options, logFile) {
|
|
|
109
107
|
return;
|
|
110
108
|
saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived);
|
|
111
109
|
}
|
|
110
|
+
/** Starts the compaction record when the host will close one (`closable`), then tells `onBoundary` what was printed; the record id, or null without a record. */
|
|
111
|
+
function markCompactionBoundary(hippoRoot, options, logFile, input, closable) {
|
|
112
|
+
const { sessionId } = input;
|
|
113
|
+
// The record is the "something saved before every compaction", so it lands even when no snapshot is derivable later.
|
|
114
|
+
// Copilot has no PostCompact hook to close a record, so its compactions get the snapshot alone.
|
|
115
|
+
let recordId = null;
|
|
116
|
+
let printed = null;
|
|
117
|
+
if (closable && sessionId !== null && sessionId !== '') {
|
|
118
|
+
recordId = recordCompactionStart(hippoRoot, { sessionId, trigger: input.trigger, cwd: input.cwd, transcriptPath: input.transcriptPath }, (message) => appendPreCompactLog(logFile, message));
|
|
119
|
+
printed = printPreCompactInstruction(logFile);
|
|
120
|
+
}
|
|
121
|
+
// Its own guard, so a throwing callback can never skip the snapshot work that follows.
|
|
122
|
+
try {
|
|
123
|
+
options.onBoundary?.(printed);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
appendPreCompactLog(logFile, `boundary callback failed: ${errorMessage(err)}`);
|
|
127
|
+
}
|
|
128
|
+
return recordId;
|
|
129
|
+
}
|
|
112
130
|
/** The transcript to snapshot, or null after logging why there is none. */
|
|
113
131
|
function resolvePreCompactTranscript(payloadTranscriptPath, stdinText, logFile, runtime) {
|
|
114
132
|
// A payload transcript_path is EXCLUSIVE: auto-discovery would snapshot a DIFFERENT session's
|
|
@@ -142,8 +160,8 @@ function saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived) {
|
|
|
142
160
|
try {
|
|
143
161
|
existing = loadActiveTaskSnapshot(hippoRoot, tenantId);
|
|
144
162
|
}
|
|
145
|
-
catch {
|
|
146
|
-
|
|
163
|
+
catch (err) {
|
|
164
|
+
logger.debug(`pre-compact: stored snapshot unreadable, saving the derived one alone: ${errorMessage(err)}`);
|
|
147
165
|
}
|
|
148
166
|
// Carried-over fields are not re-capped, as `hippo snapshot save` stays uncapped; saveActiveTaskSnapshot scrubs every field.
|
|
149
167
|
const merged = mergeWorkingState(derived, existing, sessionId);
|
|
@@ -191,19 +209,19 @@ export function cmdPostCompact(hippoRoot, options) {
|
|
|
191
209
|
log('skip: no hippo store');
|
|
192
210
|
return null;
|
|
193
211
|
}
|
|
194
|
-
const
|
|
212
|
+
const receipt = readClaudeCodePostCompact(options.stdinText, options.stdinTimedOut ?? false);
|
|
195
213
|
let line = null;
|
|
196
214
|
let storeBusy = false;
|
|
197
|
-
if (
|
|
198
|
-
log(
|
|
215
|
+
if (receipt.status !== 'received') {
|
|
216
|
+
log(`skip: ${receipt.reason}`);
|
|
199
217
|
}
|
|
200
218
|
else {
|
|
201
|
-
const saved = saveCompaction(hippoRoot,
|
|
219
|
+
const saved = saveCompaction(hippoRoot, receipt.input, log);
|
|
202
220
|
line = postCompactLine(saved);
|
|
203
221
|
storeBusy = saved.deferred;
|
|
204
|
-
if (!storeBusy &&
|
|
222
|
+
if (!storeBusy && receipt.input.transcriptPath !== null && options.afterSave) {
|
|
205
223
|
try {
|
|
206
|
-
options.afterSave(
|
|
224
|
+
options.afterSave(receipt.input.transcriptPath, receipt.input.cwd, log);
|
|
207
225
|
}
|
|
208
226
|
catch (err) {
|
|
209
227
|
log(`agent memory import failed: ${errorMessage(err)}`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Context } from '../api/types.js';
|
|
2
|
-
import type { CallerProject } from '../prompt-hook.js';
|
|
2
|
+
import type { CallerProject } from '../api/prompt-hook.js';
|
|
3
3
|
export interface CallerItemsRequest {
|
|
4
4
|
readonly sessionId: string;
|
|
5
5
|
readonly project: CallerProject;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// PostCompact for a caller on another machine: the items it parsed become rows under its owner and project, and a retried request id writes nothing twice.
|
|
2
|
-
import { BadRequestError } from '../api-errors.js';
|
|
3
|
-
import { COMPACTION_ITEM_MAX_CHARS } from '
|
|
4
|
-
import { compactionByRequest, recordSummary, saveItems, scrubCompactionItems } from '
|
|
5
|
-
import { log } from '../log.js';
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
|
+
import { COMPACTION_ITEM_MAX_CHARS } from './compaction-items.js';
|
|
4
|
+
import { compactionByRequest, recordSummary, saveItems, scrubCompactionItems } from './compaction-record.js';
|
|
5
|
+
import { log } from '../util/log.js';
|
|
6
6
|
import { assertRequestId, assertTrigger, bindCaller, callerInHoldout, withCallerDb } from './caller-session.js';
|
|
7
7
|
/** Busy throws, for the server's 503: the retry carries the same request id, so nothing is spooled or deferred here. */
|
|
8
8
|
export function saveCompactionItemsForCaller(ctx, req) {
|
|
@@ -21,7 +21,9 @@ export function saveCompactionItemsForCaller(ctx, req) {
|
|
|
21
21
|
return { written: earlier.itemsWritten };
|
|
22
22
|
const meta = { sessionId: req.sessionId, trigger: req.trigger, cwd: null, transcriptPath: null };
|
|
23
23
|
const text = { summary: '', items: scrubCompactionItems(req.items) };
|
|
24
|
-
const record = earlier ?? recordSummary(db, ctx.hippoRoot, ctx.tenantId,
|
|
24
|
+
const record = earlier ?? recordSummary(db, ctx.hippoRoot, ctx.tenantId, {
|
|
25
|
+
meta, text, at: new Date(), caller: { originProject: req.project.name, requestId: req.requestId },
|
|
26
|
+
});
|
|
25
27
|
const written = saveItems(db, ctx.hippoRoot, {
|
|
26
28
|
tenantId: ctx.tenantId, recordId: record.id, sessionId: req.sessionId, originProject: record.originProject, cwd: null,
|
|
27
29
|
items: record.items, caller: { actor: key.owner, origins: key.project },
|
|
@@ -2,10 +2,34 @@
|
|
|
2
2
|
export const COMPACTION_ITEM_MAX_CHARS = 500;
|
|
3
3
|
export const COMPACTION_ITEM_ROW_CAP = 10;
|
|
4
4
|
const HEADING = 'memories for hippo';
|
|
5
|
-
|
|
5
|
+
// `\S` parts the gap from the text, so a line that fails to match is scanned once, not once per space.
|
|
6
|
+
const ITEM_LINE = /^\s*(?:[-*]|\d+[.)])(?:\s+(\S.*)?)?$/;
|
|
7
|
+
const ANALYSIS_OPEN = '<analysis>';
|
|
8
|
+
const ANALYSIS_CLOSE = '</analysis>';
|
|
9
|
+
const HEADING_TRAILER = /[*:\s]/;
|
|
10
|
+
/** `text` minus each closed <analysis> block; a search, as a lazy pattern rescans the rest from every unclosed tag. */
|
|
11
|
+
function withoutAnalysis(text) {
|
|
12
|
+
let kept = '';
|
|
13
|
+
let from = 0;
|
|
14
|
+
for (;;) {
|
|
15
|
+
const open = text.indexOf(ANALYSIS_OPEN, from);
|
|
16
|
+
const close = open < 0 ? -1 : text.indexOf(ANALYSIS_CLOSE, open + ANALYSIS_OPEN.length);
|
|
17
|
+
if (close < 0)
|
|
18
|
+
return kept + text.slice(from);
|
|
19
|
+
kept += text.slice(from, open);
|
|
20
|
+
from = close + ANALYSIS_CLOSE.length;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** `text` minus its trailing run of `*`, `:` and spaces; read from the end, as a `+$` pattern retries the run from each character. */
|
|
24
|
+
function withoutHeadingTrailer(text) {
|
|
25
|
+
let end = text.length;
|
|
26
|
+
while (end > 0 && HEADING_TRAILER.test(text[end - 1]))
|
|
27
|
+
end--;
|
|
28
|
+
return text.slice(0, end);
|
|
29
|
+
}
|
|
6
30
|
/** The <summary> body of a PostCompact compact_summary with any <analysis> block removed; the whole text trimmed when there is no <summary> tag. */
|
|
7
31
|
export function compactSummaryBody(compactSummary) {
|
|
8
|
-
const text = compactSummary
|
|
32
|
+
const text = withoutAnalysis(compactSummary);
|
|
9
33
|
const open = text.lastIndexOf('<summary>');
|
|
10
34
|
if (open < 0)
|
|
11
35
|
return text.trim();
|
|
@@ -14,7 +38,7 @@ export function compactSummaryBody(compactSummary) {
|
|
|
14
38
|
return text.slice(from, close < 0 ? undefined : close).trim();
|
|
15
39
|
}
|
|
16
40
|
function isHeading(line) {
|
|
17
|
-
const bare = line.replace(/^(?:[#*\s]|\d+\.)+/, '')
|
|
41
|
+
const bare = withoutHeadingTrailer(line.replace(/^(?:[#*\s]|\d+\.)+/, ''));
|
|
18
42
|
return bare.toLowerCase() === HEADING;
|
|
19
43
|
}
|
|
20
44
|
/** found=false when no "Memories for hippo" heading; items in order, "none" dropped, never cut. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import { type CompactionStatus } from '../store/compactions.js';
|
|
2
3
|
/** PostCompact has 10 s in all (PreCompact 30 s), so a locked store must be given up on early. */
|
|
3
4
|
export declare const COMPACTION_DB_WAIT_MS = 2000;
|
|
4
5
|
/** Tested verbatim: Claude Code hands PreCompact stdout to the summariser as instructions. */
|
|
@@ -7,7 +8,7 @@ export declare const PRE_COMPACT_INSTRUCTION = "In your summary, add a last sect
|
|
|
7
8
|
export declare const REPLAY_AFTER_MS: number;
|
|
8
9
|
/** Claude Code deletes transcripts after 30 days, so an older gap can never be filled. */
|
|
9
10
|
export declare const TRANSCRIPT_FILL_WINDOW_MS: number;
|
|
10
|
-
export type CompactionStatus
|
|
11
|
+
export type { CompactionStatus };
|
|
11
12
|
export interface CompactionRecord {
|
|
12
13
|
id: string;
|
|
13
14
|
tenantId: string;
|
|
@@ -61,8 +62,14 @@ export interface SummaryCaller {
|
|
|
61
62
|
originProject?: string;
|
|
62
63
|
requestId?: string;
|
|
63
64
|
}
|
|
65
|
+
export interface RecordSummaryOptions {
|
|
66
|
+
readonly meta: Omit<CompactionStart, 'originProject'>;
|
|
67
|
+
readonly text: CompactionText;
|
|
68
|
+
readonly at: Date;
|
|
69
|
+
readonly caller?: SummaryCaller;
|
|
70
|
+
}
|
|
64
71
|
/** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One statement each. */
|
|
65
|
-
export declare function recordSummary(db: DatabaseSyncLike, hippoRoot: string, tenantId: string,
|
|
72
|
+
export declare function recordSummary(db: DatabaseSyncLike, hippoRoot: string, tenantId: string, options: RecordSummaryOptions): CompactionRecord;
|
|
66
73
|
export interface ItemContext {
|
|
67
74
|
tenantId: string;
|
|
68
75
|
/** null when the record step failed: the items still go in, with no record to close. */
|
|
@@ -88,8 +95,6 @@ export interface PostCompactPayload {
|
|
|
88
95
|
/** null when Claude Code sent none; the transcript fills the record later. */
|
|
89
96
|
compactSummary: string | null;
|
|
90
97
|
}
|
|
91
|
-
/** null when the text is not a PostCompact payload naming a session. */
|
|
92
|
-
export declare function parsePostCompactPayload(stdinText: string | undefined): PostCompactPayload | null;
|
|
93
98
|
export interface CompactionSaveResult {
|
|
94
99
|
/** Memories written; null when neither the record nor the items could be saved. */
|
|
95
100
|
written: number | null;
|
|
@@ -108,5 +113,4 @@ export declare function replayCompactionsAt(hippoRoot: string, log: Log, opts?:
|
|
|
108
113
|
busyWaitMs?: number;
|
|
109
114
|
deadline?: number;
|
|
110
115
|
}): number;
|
|
111
|
-
export {};
|
|
112
116
|
//# sourceMappingURL=compaction-record.d.ts.map
|