hippo-memory 1.68.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 +6 -3
- 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.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- 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 +4 -13
- package/dist/api/forget.js +13 -35
- 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 +9 -46
- package/dist/api/outcome.js +15 -57
- 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 +7 -18
- package/dist/api/promote.js +30 -152
- 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 +12 -13
- package/dist/api/remember.js +38 -27
- 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 +59 -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.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- 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 +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- 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 +8 -3
- 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 -82
- 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 -48
- 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 -90
- 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} +16 -3
- package/dist/core/capture-contract.js +149 -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} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -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.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -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 +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- 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 +65 -63
- 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 +21 -20
- 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} +3 -2
- 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 +41 -50
- package/dist/server.js +26 -560
- 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 +12 -6
- package/dist/store/audit-event.js +6 -5
- 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 +6 -3
- package/dist/store/handoffs.js +70 -31
- 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 +8 -4
- package/dist/store/open.js +34 -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} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- 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 +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- 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} +17 -2
- package/dist/{env.js → util/env.js} +22 -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/capture-contract.js +0 -49
- 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-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{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/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,12 +2,13 @@ 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';
|
|
7
|
-
import { defaultPreCompactLogPath } from '../hooks/shared.js';
|
|
8
|
-
import { readClaudeCodePreCompact } from '../capture-contract.js';
|
|
9
|
-
import { errorMessage } from '../log.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
|
+
import { defaultPreCompactLogPath, vscodeUserHooksFile } from '../hooks/shared.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
|
+
import { isVscodeTranscript } from './copilot-transcript.js';
|
|
11
12
|
import { mergeWorkingState, transcriptWorkingState } from './working-state.js';
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// `hippo pre-compact` — PreCompact hook producer
|
|
@@ -35,8 +36,9 @@ function appendPreCompactLog(logFile, message) {
|
|
|
35
36
|
}
|
|
36
37
|
fs.appendFileSync(logFile, `[hippo] ${new Date().toISOString()} ${sanitizeLogMessage(message)}\n`, 'utf8');
|
|
37
38
|
}
|
|
38
|
-
catch {
|
|
39
|
+
catch (err) {
|
|
39
40
|
// Diagnostic-only; a log write failure must never affect the exit-0 contract.
|
|
41
|
+
logger.debug(`pre-compact log not written: ${errorMessage(err)}`);
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
/** True iff `filePath` exists and is readable — checks both in one call. */
|
|
@@ -51,13 +53,24 @@ function isReadableFile(filePath) {
|
|
|
51
53
|
}
|
|
52
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. */
|
|
53
55
|
function printPreCompactInstruction(logFile) {
|
|
56
|
+
const text = `${PRE_COMPACT_INSTRUCTION}\n`;
|
|
54
57
|
try {
|
|
55
|
-
fs.writeSync(1,
|
|
58
|
+
fs.writeSync(1, text);
|
|
59
|
+
return text;
|
|
56
60
|
}
|
|
57
61
|
catch (err) {
|
|
58
62
|
appendPreCompactLog(logFile, `instruction not printed: ${errorMessage(err)}`);
|
|
63
|
+
return null;
|
|
59
64
|
}
|
|
60
65
|
}
|
|
66
|
+
/** The Copilot CLI accepts both preCompact and PreCompact, so hippo.json's pair can run twice for one compaction. */
|
|
67
|
+
const TWIN_FIRE_MS = 10_000;
|
|
68
|
+
function snapshotJustSaved(hippoRoot, sessionId) {
|
|
69
|
+
if (sessionId === null || sessionId === '')
|
|
70
|
+
return false;
|
|
71
|
+
const active = loadActiveTaskSnapshot(hippoRoot, resolveTenantId({}));
|
|
72
|
+
return active?.session_id === sessionId && active.source === 'pre-compact' && Date.now() - Date.parse(active.updated_at) < TWIN_FIRE_MS;
|
|
73
|
+
}
|
|
61
74
|
/** Runs the PreCompact producer: records the compaction, asks the summariser for memories, saves a working-state snapshot. Never extracts memories itself; SessionEnd capture owns that. */
|
|
62
75
|
function runPreCompact(hippoRoot, options, logFile) {
|
|
63
76
|
const { stdinText, stdinTimedOut = false, runtime = 'claude-code' } = options;
|
|
@@ -73,14 +86,18 @@ function runPreCompact(hippoRoot, options, logFile) {
|
|
|
73
86
|
appendPreCompactLog(logFile, `skip: ${receipt.reason}`);
|
|
74
87
|
return;
|
|
75
88
|
}
|
|
76
|
-
const { sessionId, transcriptPath: payloadTranscriptPath
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
printPreCompactInstruction(logFile);
|
|
89
|
+
const { sessionId, transcriptPath: payloadTranscriptPath } = receipt.input;
|
|
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.
|
|
91
|
+
const vscode = runtime === 'claude-code' && isVscodeTranscript(payloadTranscriptPath);
|
|
92
|
+
if (vscode && fs.existsSync(vscodeUserHooksFile())) {
|
|
93
|
+
appendPreCompactLog(logFile, 'skip: VS Code payload, hippo.json runs pre-compact for this chat');
|
|
94
|
+
return;
|
|
83
95
|
}
|
|
96
|
+
if (runtime === 'copilot' && snapshotJustSaved(hippoRoot, sessionId)) {
|
|
97
|
+
appendPreCompactLog(logFile, `skip: snapshot for session ${sessionId} saved under ${TWIN_FIRE_MS / 1000} s ago, by the other preCompact entry`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const recordId = markCompactionBoundary(hippoRoot, options, logFile, receipt.input, runtime === 'claude-code' && !vscode);
|
|
84
101
|
const transcriptPath = resolvePreCompactTranscript(payloadTranscriptPath, stdinText, logFile, runtime);
|
|
85
102
|
if (!transcriptPath)
|
|
86
103
|
return;
|
|
@@ -90,6 +107,26 @@ function runPreCompact(hippoRoot, options, logFile) {
|
|
|
90
107
|
return;
|
|
91
108
|
saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived);
|
|
92
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
|
+
}
|
|
93
130
|
/** The transcript to snapshot, or null after logging why there is none. */
|
|
94
131
|
function resolvePreCompactTranscript(payloadTranscriptPath, stdinText, logFile, runtime) {
|
|
95
132
|
// A payload transcript_path is EXCLUSIVE: auto-discovery would snapshot a DIFFERENT session's
|
|
@@ -123,8 +160,8 @@ function saveDerivedSnapshot(hippoRoot, logFile, sessionId, recordId, derived) {
|
|
|
123
160
|
try {
|
|
124
161
|
existing = loadActiveTaskSnapshot(hippoRoot, tenantId);
|
|
125
162
|
}
|
|
126
|
-
catch {
|
|
127
|
-
|
|
163
|
+
catch (err) {
|
|
164
|
+
logger.debug(`pre-compact: stored snapshot unreadable, saving the derived one alone: ${errorMessage(err)}`);
|
|
128
165
|
}
|
|
129
166
|
// Carried-over fields are not re-capped, as `hippo snapshot save` stays uncapped; saveActiveTaskSnapshot scrubs every field.
|
|
130
167
|
const merged = mergeWorkingState(derived, existing, sessionId);
|
|
@@ -172,19 +209,19 @@ export function cmdPostCompact(hippoRoot, options) {
|
|
|
172
209
|
log('skip: no hippo store');
|
|
173
210
|
return null;
|
|
174
211
|
}
|
|
175
|
-
const
|
|
212
|
+
const receipt = readClaudeCodePostCompact(options.stdinText, options.stdinTimedOut ?? false);
|
|
176
213
|
let line = null;
|
|
177
214
|
let storeBusy = false;
|
|
178
|
-
if (
|
|
179
|
-
log(
|
|
215
|
+
if (receipt.status !== 'received') {
|
|
216
|
+
log(`skip: ${receipt.reason}`);
|
|
180
217
|
}
|
|
181
218
|
else {
|
|
182
|
-
const saved = saveCompaction(hippoRoot,
|
|
219
|
+
const saved = saveCompaction(hippoRoot, receipt.input, log);
|
|
183
220
|
line = postCompactLine(saved);
|
|
184
221
|
storeBusy = saved.deferred;
|
|
185
|
-
if (!storeBusy &&
|
|
222
|
+
if (!storeBusy && receipt.input.transcriptPath !== null && options.afterSave) {
|
|
186
223
|
try {
|
|
187
|
-
options.afterSave(
|
|
224
|
+
options.afterSave(receipt.input.transcriptPath, receipt.input.cwd, log);
|
|
188
225
|
}
|
|
189
226
|
catch (err) {
|
|
190
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
|