hippo-memory 1.69.0 → 1.71.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 +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- 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/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- 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} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- 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 +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -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/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- 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 +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- 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 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- 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 +5 -13
- package/dist/capture/command.js +57 -60
- 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 +8 -16
- package/dist/capture/compact.js +56 -47
- 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} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- 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} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- 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.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- 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.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- 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} +7 -7
- 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} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -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 +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- 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/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- 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} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- 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 +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- 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} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- 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 +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- 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 +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- 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 +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -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/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- 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 -3
- package/dist/search/boosts.js +36 -15
- 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/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -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} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- 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/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- 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 +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- 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 +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- 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 +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- 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/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- 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 +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- 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 +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- 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 +61 -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 +29 -0
- package/dist/store/sqlite/executor.js +287 -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 +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -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 +23 -0
- package/dist/store/sqlite/store.js +294 -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 +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- 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} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- 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 +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- 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 +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- 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} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- 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 +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- 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/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- 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/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /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/{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/{share-scrub.d.ts → capture/share-scrub.d.ts} +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/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +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/{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.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +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/{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/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
// One record per Claude Code compaction, and what turns its summary into kept memories.
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import { ConflictError } from '
|
|
5
|
-
import {
|
|
4
|
+
import { ConflictError } from '../core/api-errors.js';
|
|
5
|
+
import { isStringValue } from '../core/capture-contract.js';
|
|
6
6
|
import { COMPACTION_ITEM_MAX_CHARS, compactSummaryBody, parseCompactionItems, selectItemRows } from './compaction-items.js';
|
|
7
7
|
import { importSpool, spool } from './compaction-spool.js';
|
|
8
|
-
import { isSharedStore, loadConfig } from '
|
|
9
|
-
import { closeHippoDb, isSqliteBusy, openHippoDb } from '
|
|
10
|
-
import { gatedWrite } from '
|
|
11
|
-
import { COMPACTION_MEMORY_TAG, COMPACTION_SOURCE_PREFIX, Layer, createMemory, generateId } from '
|
|
12
|
-
import { fallbackOrigin, isGlobalStoreRoot,
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { strengthenRetrievedOn, writeEntryMirrors } from '
|
|
16
|
-
import { isRecallBoostAblated } from '
|
|
17
|
-
import { updateStats } from '
|
|
18
|
-
import { resolveTenantId } from '
|
|
19
|
-
import { errorMessage, log as logger } from '
|
|
20
|
-
import { readTranscriptTail, truncateCodePointSafe } from '
|
|
8
|
+
import { isSharedStore, loadConfig } from '../core/config.js';
|
|
9
|
+
import { closeHippoDb, isSqliteBusy, openHippoDb, withWriteScopeOr } from '../db/index.js';
|
|
10
|
+
import { gatedWrite } from '../trust/gated-write.js';
|
|
11
|
+
import { COMPACTION_MEMORY_TAG, COMPACTION_SOURCE_PREFIX, Layer, createMemory, generateId } from '../core/memory.js';
|
|
12
|
+
import { fallbackOrigin, isGlobalStoreRoot, projectId, projectNames, resolveProjectIdentity } from '../core/project-identity.js';
|
|
13
|
+
import { maskEmails, redactSecretsStrict } from '../util/secret-detect.js';
|
|
14
|
+
import { closeStartedWithoutSummary, compactionProgress, compactionRowsByRequest, heldMemoryRows, insertStartedCompaction, insertSummarisedCompaction, latestCompactionRows, latestStartedRows, markCompactionDone, markCompactionSummarised, markSnapshotSavedRow, nextCompactionStart, openTranscriptRows, stalledSummarisedRows, } from '../store/compactions.js';
|
|
15
|
+
import { strengthenRetrievedOn, writeEntryMirrors } from '../store/entry-writes.js';
|
|
16
|
+
import { isRecallBoostAblated } from '../core/ablation.js';
|
|
17
|
+
import { updateStats } from '../store/index-and-stats.js';
|
|
18
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
19
|
+
import { errorMessage, log as logger } from '../util/log.js';
|
|
20
|
+
import { readTranscriptTail, truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
21
21
|
/** PostCompact has 10 s in all (PreCompact 30 s), so a locked store must be given up on early. */
|
|
22
22
|
export const COMPACTION_DB_WAIT_MS = 2000;
|
|
23
23
|
/** Tested verbatim: Claude Code hands PreCompact stdout to the summariser as instructions. */
|
|
@@ -81,25 +81,18 @@ function toRecord(row) {
|
|
|
81
81
|
status: row.status,
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
-
const COLUMNS = 'tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, snapshot_saved, started_at, summarised_at, summary, items_json, items_written, status';
|
|
85
|
-
function selectRecords(db, where, ...params) {
|
|
86
|
-
// SAFETY: the SELECT names exactly COLUMNS, matching CompactionRow's field set.
|
|
87
|
-
const rows = db.prepare(`SELECT ${COLUMNS} FROM compactions WHERE ${where}`).all(...params);
|
|
88
|
-
return rows.map(toRecord);
|
|
89
|
-
}
|
|
90
84
|
export function startCompaction(db, tenantId, start, at = new Date()) {
|
|
91
85
|
const id = generateId('cmp');
|
|
92
|
-
db
|
|
93
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(tenantId, id, start.sessionId, start.originProject, start.trigger, start.cwd, start.transcriptPath, at.toISOString());
|
|
86
|
+
insertStartedCompaction(db, tenantId, { id, ...start, startedAt: at.toISOString() });
|
|
94
87
|
return id;
|
|
95
88
|
}
|
|
96
89
|
/** A session's newest record, or null. */
|
|
97
90
|
export function latestCompaction(db, tenantId, sessionId) {
|
|
98
|
-
return
|
|
91
|
+
return latestCompactionRows(db, tenantId, sessionId).map(toRecord)[0] ?? null;
|
|
99
92
|
}
|
|
100
93
|
/** The record a caller's request made, whatever state it reached, so a retry neither writes its items twice nor starts a second record; another session's id is a ConflictError. */
|
|
101
94
|
export function compactionByRequest(db, tenantId, requestId, sessionId) {
|
|
102
|
-
const record =
|
|
95
|
+
const record = compactionRowsByRequest(db, tenantId, requestId).map(toRecord)[0] ?? null;
|
|
103
96
|
// Sessions are owner-bound, so this also keeps one owner from reading or finishing another's record.
|
|
104
97
|
if (record !== null && record.sessionId !== sessionId)
|
|
105
98
|
throw new ConflictError('request id belongs to another session');
|
|
@@ -107,15 +100,11 @@ export function compactionByRequest(db, tenantId, requestId, sessionId) {
|
|
|
107
100
|
}
|
|
108
101
|
/** Pre-compact's record for the compaction that is ending: the session's newest `started` one within REPLAY_AFTER_MS before `at`, so an older one is left for the transcript fill. */
|
|
109
102
|
function latestStarted(db, tenantId, sessionId, at) {
|
|
110
|
-
return
|
|
103
|
+
return latestStartedRows(db, tenantId, sessionId, at.toISOString(), new Date(at.getTime() - REPLAY_AFTER_MS).toISOString()).map(toRecord)[0] ?? null;
|
|
111
104
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const stamp = requestId === undefined ? [] : [requestId];
|
|
116
|
-
const result = db.prepare(`UPDATE compactions SET summary = ?, items_json = ?, summarised_at = ?, status = 'summarised'${stamp.length === 0 ? '' : ', request_id = ?'}
|
|
117
|
-
WHERE tenant_id = ? AND id = ? AND status = 'started'`).run(text.summary, JSON.stringify(text.items), summarisedAt, ...stamp, tenantId, id);
|
|
118
|
-
return (result.changes ?? 0) > 0;
|
|
105
|
+
function markSummarised(db, tenantId, id, options) {
|
|
106
|
+
const { text, summarisedAt, requestId } = options;
|
|
107
|
+
return markCompactionSummarised(db, tenantId, id, { summary: text.summary, itemsJson: JSON.stringify(text.items), summarisedAt, requestId });
|
|
119
108
|
}
|
|
120
109
|
/** Best effort, never throws: a compaction must not fail because its record could not be written. */
|
|
121
110
|
export function recordCompactionStart(hippoRoot, start, log) {
|
|
@@ -135,7 +124,7 @@ export function recordCompactionStart(hippoRoot, start, log) {
|
|
|
135
124
|
}
|
|
136
125
|
/** On the caller's handle and tenant, so a server marks the record under the caller's tenant with its own wait. */
|
|
137
126
|
export function markSnapshotSaved(db, tenantId, recordId) {
|
|
138
|
-
db
|
|
127
|
+
markSnapshotSavedRow(db, tenantId, recordId);
|
|
139
128
|
}
|
|
140
129
|
export function recordSnapshotSaved(hippoRoot, tenantId, recordId, log) {
|
|
141
130
|
let db;
|
|
@@ -152,21 +141,18 @@ export function recordSnapshotSaved(hippoRoot, tenantId, recordId, log) {
|
|
|
152
141
|
}
|
|
153
142
|
}
|
|
154
143
|
/** Puts the summary on the session's `started` record, or inserts a `summarised` one when pre-compact wrote none. One statement each. */
|
|
155
|
-
export function recordSummary(db, hippoRoot, tenantId,
|
|
144
|
+
export function recordSummary(db, hippoRoot, tenantId, options) {
|
|
145
|
+
const { meta, text, at, caller = {} } = options;
|
|
156
146
|
const now = new Date().toISOString();
|
|
157
147
|
const itemsJson = JSON.stringify(text.items);
|
|
158
148
|
const { requestId } = caller;
|
|
159
149
|
const started = latestStarted(db, tenantId, meta.sessionId, at);
|
|
160
|
-
if (started && markSummarised(db, tenantId, started.id, text, now, requestId)) {
|
|
150
|
+
if (started && markSummarised(db, tenantId, started.id, { text, summarisedAt: now, requestId })) {
|
|
161
151
|
return { ...started, summary: text.summary, items: text.items, summarisedAt: now, status: 'summarised' };
|
|
162
152
|
}
|
|
163
153
|
const originProject = caller.originProject ?? compactionOrigin(hippoRoot, meta.cwd);
|
|
164
154
|
const id = generateId('cmp');
|
|
165
|
-
|
|
166
|
-
const stamp = requestId === undefined ? [] : [requestId];
|
|
167
|
-
const [col, mark] = stamp.length === 0 ? ['', ''] : [', request_id', ', ?'];
|
|
168
|
-
db.prepare(`INSERT INTO compactions(tenant_id, id, session_id, origin_project, compact_trigger, cwd, transcript_path, started_at, summarised_at, summary, items_json, status${col})
|
|
169
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'summarised'${mark})`).run(tenantId, id, meta.sessionId, originProject, meta.trigger, meta.cwd, meta.transcriptPath, at.toISOString(), now, text.summary, itemsJson, ...stamp);
|
|
155
|
+
insertSummarisedCompaction(db, tenantId, { ...meta, originProject, startedAt: at.toISOString() }, { id, summary: text.summary, itemsJson, summarisedAt: now, requestId });
|
|
170
156
|
return {
|
|
171
157
|
id, tenantId, sessionId: meta.sessionId, originProject, trigger: meta.trigger, cwd: meta.cwd, transcriptPath: meta.transcriptPath,
|
|
172
158
|
snapshotSaved: false, startedAt: at.toISOString(), summarisedAt: now, summary: text.summary, items: text.items, itemsWritten: 0, status: 'summarised',
|
|
@@ -195,11 +181,7 @@ function restates(item, held) {
|
|
|
195
181
|
}
|
|
196
182
|
/** Live rows of one tenant and origin that default recall shows: a compaction often restates what an earlier one, or the user, already saved. */
|
|
197
183
|
function heldRows(db, tenantId, origins) {
|
|
198
|
-
|
|
199
|
-
// SAFETY: the SELECT names the id, source_session_id and content columns.
|
|
200
|
-
const rows = db.prepare(`SELECT id, source_session_id, content FROM memories WHERE tenant_id = ? AND ${originInSql(origins)} AND superseded_by IS NULL AND kind != 'raw'
|
|
201
|
-
AND ${deny.sql}`).all(tenantId, ...origins, ...deny.params);
|
|
202
|
-
return rows.map((r) => ({ id: r.id, sessionId: r.source_session_id, words: words(r.content) }));
|
|
184
|
+
return heldMemoryRows(db, tenantId, origins).map((r) => ({ id: r.id, sessionId: r.source_session_id, words: words(r.content) }));
|
|
203
185
|
}
|
|
204
186
|
function compactionEntry(text, ctx, origin, baseHalfLifeDays) {
|
|
205
187
|
return {
|
|
@@ -277,55 +259,79 @@ export function saveItems(db, hippoRoot, ctx, log) {
|
|
|
277
259
|
if (capped > 0)
|
|
278
260
|
log(`capped: ${capped} more kept in the record only`);
|
|
279
261
|
const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
|
|
280
|
-
let
|
|
281
|
-
db
|
|
282
|
-
try {
|
|
262
|
+
let finishedItems = 0;
|
|
263
|
+
const writes = withWriteScopeOr(db, 'save_items', (rollback) => {
|
|
283
264
|
if (ctx.recordId !== null) {
|
|
284
265
|
// A replayer that read the record before another finished it must not write its items again.
|
|
285
|
-
const current = db.
|
|
286
|
-
.get(ctx.tenantId, ctx.recordId);
|
|
266
|
+
const current = compactionProgress(db, ctx.tenantId, ctx.recordId);
|
|
287
267
|
if (current?.status !== 'summarised') {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
return current?.items_written ?? 0;
|
|
268
|
+
finishedItems = current?.items_written ?? 0;
|
|
269
|
+
return rollback(null);
|
|
291
270
|
}
|
|
292
271
|
}
|
|
293
|
-
|
|
272
|
+
const written = writeItemRows(db, hippoRoot, ctx, rows, baseHalfLifeDays);
|
|
294
273
|
// Said again by another session is the same signal as being recalled; the same session carrying it forward is not.
|
|
295
|
-
strengthenRetrievedOn(db,
|
|
274
|
+
strengthenRetrievedOn(db, written.restated, { tenantId: ctx.tenantId, recallBoostAblated: isRecallBoostAblated() });
|
|
296
275
|
if (ctx.recordId !== null) {
|
|
297
|
-
db
|
|
298
|
-
}
|
|
299
|
-
db.exec('COMMIT');
|
|
300
|
-
}
|
|
301
|
-
catch (err) {
|
|
302
|
-
try {
|
|
303
|
-
db.exec('ROLLBACK');
|
|
276
|
+
markCompactionDone(db, ctx.tenantId, ctx.recordId, written.written.length);
|
|
304
277
|
}
|
|
305
|
-
|
|
306
|
-
|
|
278
|
+
return written;
|
|
279
|
+
});
|
|
280
|
+
if (writes === null) {
|
|
281
|
+
log(`${ctx.recordId} was already finished by another process`);
|
|
282
|
+
return finishedItems;
|
|
307
283
|
}
|
|
308
284
|
finishItemWrites(hippoRoot, writes, log);
|
|
309
285
|
return writes.written.length;
|
|
310
286
|
}
|
|
311
|
-
/**
|
|
312
|
-
|
|
313
|
-
|
|
287
|
+
/** One failure, told once to the hook's output and once to the structured log. */
|
|
288
|
+
function reportFailure(log, step, reason) {
|
|
289
|
+
log(`${step} failed: ${reason}`);
|
|
290
|
+
logger.error(`post-compact: ${step} failed: ${reason}`);
|
|
291
|
+
}
|
|
292
|
+
function recordStep(step) {
|
|
314
293
|
try {
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
return null; // non-JSON stdin is not a PostCompact payload; the caller skips it
|
|
294
|
+
const record = recordSummary(step.db, step.hippoRoot, step.tenantId, { meta: step.payload, text: step.text, at: step.at });
|
|
295
|
+
step.result.snapshotSaved = record.snapshotSaved;
|
|
296
|
+
return record;
|
|
319
297
|
}
|
|
320
|
-
|
|
298
|
+
catch (err) {
|
|
299
|
+
if (isSqliteBusy(err))
|
|
300
|
+
throw err;
|
|
301
|
+
reportFailure(step.log, 'record step', errorMessage(err));
|
|
321
302
|
return null;
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/** Busy with a saved record defers to sleep; any other failure goes to the caller. */
|
|
306
|
+
function itemsStep(step, record) {
|
|
307
|
+
const { payload, hippoRoot, log } = step;
|
|
308
|
+
try {
|
|
309
|
+
step.result.written = saveItems(step.db, hippoRoot, {
|
|
310
|
+
tenantId: step.tenantId,
|
|
311
|
+
recordId: record?.id ?? null,
|
|
312
|
+
sessionId: payload.sessionId,
|
|
313
|
+
originProject: record?.originProject ?? compactionOrigin(hippoRoot, payload.cwd),
|
|
314
|
+
cwd: payload.cwd,
|
|
315
|
+
items: step.text.items,
|
|
316
|
+
}, log);
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
if (!isSqliteBusy(err) || record === null)
|
|
320
|
+
throw err;
|
|
321
|
+
// The record already holds the items; sleep finishes them.
|
|
322
|
+
step.result.deferred = true;
|
|
323
|
+
log(`store busy, items left for the next sleep: ${errorMessage(err)}`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function spoolSummary(hippoRoot, payload, text, at, reason, result, log) {
|
|
327
|
+
try {
|
|
328
|
+
spool(hippoRoot, resolveTenantId({}), payload, text, at);
|
|
329
|
+
result.deferred = true;
|
|
330
|
+
log(`store busy, summary spooled: ${reason}`);
|
|
331
|
+
}
|
|
332
|
+
catch (spoolErr) {
|
|
333
|
+
reportFailure(log, 'spool', errorMessage(spoolErr));
|
|
334
|
+
}
|
|
329
335
|
}
|
|
330
336
|
/** The PostCompact work: record the summary, then write its items. Each step is independent; a busy store spools or defers. Never throws. */
|
|
331
337
|
export function saveCompaction(hippoRoot, payload, log) {
|
|
@@ -341,52 +347,14 @@ export function saveCompaction(hippoRoot, payload, log) {
|
|
|
341
347
|
let db;
|
|
342
348
|
try {
|
|
343
349
|
db = openHippoDb(hippoRoot, { busyWaitMs: COMPACTION_DB_WAIT_MS });
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
try {
|
|
347
|
-
record = recordSummary(db, hippoRoot, tenantId, payload, text, at);
|
|
348
|
-
result.snapshotSaved = record.snapshotSaved;
|
|
349
|
-
}
|
|
350
|
-
catch (err) {
|
|
351
|
-
if (isSqliteBusy(err))
|
|
352
|
-
throw err;
|
|
353
|
-
log(`record step failed: ${errorMessage(err)}`);
|
|
354
|
-
logger.error(`post-compact: record step failed: ${errorMessage(err)}`);
|
|
355
|
-
}
|
|
356
|
-
try {
|
|
357
|
-
result.written = saveItems(db, hippoRoot, {
|
|
358
|
-
tenantId,
|
|
359
|
-
recordId: record?.id ?? null,
|
|
360
|
-
sessionId: payload.sessionId,
|
|
361
|
-
originProject: record?.originProject ?? compactionOrigin(hippoRoot, payload.cwd),
|
|
362
|
-
cwd: payload.cwd,
|
|
363
|
-
items: text.items,
|
|
364
|
-
}, log);
|
|
365
|
-
}
|
|
366
|
-
catch (err) {
|
|
367
|
-
if (!isSqliteBusy(err) || record === null)
|
|
368
|
-
throw err;
|
|
369
|
-
// The record already holds the items; sleep finishes them.
|
|
370
|
-
result.deferred = true;
|
|
371
|
-
log(`store busy, items left for the next sleep: ${errorMessage(err)}`);
|
|
372
|
-
}
|
|
350
|
+
const step = { db, hippoRoot, tenantId: resolveTenantId({}), payload, text, at, result, log };
|
|
351
|
+
itemsStep(step, recordStep(step));
|
|
373
352
|
}
|
|
374
353
|
catch (err) {
|
|
375
|
-
if (isSqliteBusy(err) || db === undefined)
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
log(`store busy, summary spooled: ${errorMessage(err)}`);
|
|
380
|
-
}
|
|
381
|
-
catch (spoolErr) {
|
|
382
|
-
log(`spool failed: ${errorMessage(spoolErr)}`);
|
|
383
|
-
logger.error(`post-compact: spool failed: ${errorMessage(spoolErr)}`);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
log(`items step failed: ${errorMessage(err)}`);
|
|
388
|
-
logger.error(`post-compact: items step failed: ${errorMessage(err)}`);
|
|
389
|
-
}
|
|
354
|
+
if (isSqliteBusy(err) || db === undefined)
|
|
355
|
+
spoolSummary(hippoRoot, payload, text, at, errorMessage(err), result, log);
|
|
356
|
+
else
|
|
357
|
+
reportFailure(log, 'items step', errorMessage(err));
|
|
390
358
|
}
|
|
391
359
|
finally {
|
|
392
360
|
if (db)
|
|
@@ -437,70 +405,80 @@ function transcriptSummary(transcriptPath, afterMs, beforeMs) {
|
|
|
437
405
|
return null;
|
|
438
406
|
}
|
|
439
407
|
function closeWithoutSummary(db, tenantId, id, log) {
|
|
440
|
-
|
|
441
|
-
if ((result.changes ?? 0) > 0)
|
|
408
|
+
if (closeStartedWithoutSummary(db, tenantId, id) > 0)
|
|
442
409
|
log(`${id} closed as no-summary: its transcript holds no summary for it`);
|
|
443
410
|
}
|
|
444
411
|
function nextStartedAt(db, record) {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
412
|
+
return nextCompactionStart(db, record.tenantId, record.sessionId, record.startedAt);
|
|
413
|
+
}
|
|
414
|
+
/** The one place a record becomes the argument saveItems takes. */
|
|
415
|
+
function itemContext(tenantId, record, items = record.items) {
|
|
416
|
+
return { tenantId, recordId: record.id, sessionId: record.sessionId, originProject: record.originProject, cwd: record.cwd, items };
|
|
448
417
|
}
|
|
449
418
|
/** Records a spooled summary, then writes its items. */
|
|
450
419
|
function spoolImporter(db, hippoRoot, log) {
|
|
451
420
|
return (spooled, recorded) => {
|
|
452
|
-
const record = recordSummary(db, hippoRoot, spooled.tenantId, spooled.payload, spooled.text, spooled.at);
|
|
421
|
+
const record = recordSummary(db, hippoRoot, spooled.tenantId, { meta: spooled.payload, text: spooled.text, at: spooled.at });
|
|
453
422
|
// The record holds the items now, so the file is done even if the write below fails.
|
|
454
423
|
recorded();
|
|
455
|
-
saveItems(db, hippoRoot,
|
|
424
|
+
saveItems(db, hippoRoot, itemContext(spooled.tenantId, record), log);
|
|
456
425
|
};
|
|
457
426
|
}
|
|
458
|
-
|
|
459
|
-
export function replayCompactions(db, hippoRoot, log, deadline = Number.POSITIVE_INFINITY) {
|
|
460
|
-
const tenantId = resolveTenantId({});
|
|
461
|
-
const now = Date.now();
|
|
427
|
+
function replayStalled(db, hippoRoot, tenantId, now, log, deadline) {
|
|
462
428
|
let finished = 0;
|
|
463
|
-
const stalled =
|
|
429
|
+
const stalled = stalledSummarisedRows(db, tenantId, new Date(now - REPLAY_AFTER_MS).toISOString()).map(toRecord);
|
|
464
430
|
for (const record of stalled) {
|
|
465
431
|
if (Date.now() > deadline)
|
|
466
432
|
break;
|
|
467
433
|
try {
|
|
468
|
-
saveItems(db, hippoRoot,
|
|
434
|
+
saveItems(db, hippoRoot, itemContext(tenantId, record), log);
|
|
469
435
|
finished++;
|
|
470
436
|
}
|
|
471
437
|
catch (err) {
|
|
472
438
|
log(`replay of ${record.id} failed: ${errorMessage(err)}`);
|
|
473
439
|
}
|
|
474
440
|
}
|
|
441
|
+
return finished;
|
|
442
|
+
}
|
|
443
|
+
function replaySpool(db, hippoRoot, tenantId, log, deadline) {
|
|
475
444
|
try {
|
|
476
|
-
|
|
445
|
+
return importSpool(hippoRoot, tenantId, log, deadline, spoolImporter(db, hippoRoot, log));
|
|
477
446
|
}
|
|
478
447
|
catch (err) {
|
|
479
448
|
log(`spool import failed: ${errorMessage(err)}`);
|
|
449
|
+
return 0;
|
|
480
450
|
}
|
|
481
|
-
|
|
451
|
+
}
|
|
452
|
+
/** Fills one open record from its transcript; true when it saved items. */
|
|
453
|
+
function fillFromTranscript(db, hippoRoot, tenantId, record, log) {
|
|
454
|
+
if (record.transcriptPath === null || !fs.existsSync(record.transcriptPath))
|
|
455
|
+
return false;
|
|
456
|
+
const next = nextStartedAt(db, record);
|
|
457
|
+
const found = transcriptSummary(record.transcriptPath, Date.parse(record.startedAt), next === null ? Number.POSITIVE_INFINITY : Date.parse(next));
|
|
458
|
+
if (found === null) {
|
|
459
|
+
// The record is past REPLAY_AFTER_MS, so a window that is fully scanned or out of reach stays empty.
|
|
460
|
+
closeWithoutSummary(db, tenantId, record.id, log);
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
const { found: listed, ...text } = readCompactionText(found);
|
|
464
|
+
if (!listed)
|
|
465
|
+
log(`no memories section in the transcript summary for ${record.id}`);
|
|
466
|
+
if (!markSummarised(db, tenantId, record.id, { text, summarisedAt: new Date().toISOString() })) {
|
|
467
|
+
log(`${record.id} was filled by another process`);
|
|
468
|
+
return false;
|
|
469
|
+
}
|
|
470
|
+
saveItems(db, hippoRoot, itemContext(tenantId, record, text.items), log);
|
|
471
|
+
return true;
|
|
472
|
+
}
|
|
473
|
+
function replayOpen(db, hippoRoot, tenantId, now, log, deadline) {
|
|
474
|
+
let finished = 0;
|
|
475
|
+
const open = openTranscriptRows(db, tenantId, new Date(now - REPLAY_AFTER_MS).toISOString(), new Date(now - TRANSCRIPT_FILL_WINDOW_MS).toISOString()).map(toRecord);
|
|
482
476
|
for (const record of open) {
|
|
483
477
|
if (Date.now() > deadline)
|
|
484
478
|
break;
|
|
485
479
|
try {
|
|
486
|
-
if (
|
|
487
|
-
|
|
488
|
-
const next = nextStartedAt(db, record);
|
|
489
|
-
const found = transcriptSummary(record.transcriptPath, Date.parse(record.startedAt), next === null ? Number.POSITIVE_INFINITY : Date.parse(next));
|
|
490
|
-
if (found === null) {
|
|
491
|
-
// The record is past REPLAY_AFTER_MS, so a window that is fully scanned or out of reach stays empty.
|
|
492
|
-
closeWithoutSummary(db, tenantId, record.id, log);
|
|
493
|
-
continue;
|
|
494
|
-
}
|
|
495
|
-
const { found: listed, ...text } = readCompactionText(found);
|
|
496
|
-
if (!listed)
|
|
497
|
-
log(`no memories section in the transcript summary for ${record.id}`);
|
|
498
|
-
if (!markSummarised(db, tenantId, record.id, text, new Date().toISOString())) {
|
|
499
|
-
log(`${record.id} was filled by another process`);
|
|
500
|
-
continue;
|
|
501
|
-
}
|
|
502
|
-
saveItems(db, hippoRoot, { tenantId, recordId: record.id, sessionId: record.sessionId, originProject: record.originProject, cwd: record.cwd, items: text.items }, log);
|
|
503
|
-
finished++;
|
|
480
|
+
if (fillFromTranscript(db, hippoRoot, tenantId, record, log))
|
|
481
|
+
finished++;
|
|
504
482
|
}
|
|
505
483
|
catch (err) {
|
|
506
484
|
log(`transcript fill of ${record.id} failed: ${errorMessage(err)}`);
|
|
@@ -508,6 +486,14 @@ export function replayCompactions(db, hippoRoot, log, deadline = Number.POSITIVE
|
|
|
508
486
|
}
|
|
509
487
|
return finished;
|
|
510
488
|
}
|
|
489
|
+
/** Finishes what a killed hook or a busy store left: `summarised` records, spool files, and `started` records the transcript can fill. Returns how many compactions it saved. */
|
|
490
|
+
export function replayCompactions(db, hippoRoot, log, deadline = Number.POSITIVE_INFINITY) {
|
|
491
|
+
const tenantId = resolveTenantId({});
|
|
492
|
+
const now = Date.now();
|
|
493
|
+
return replayStalled(db, hippoRoot, tenantId, now, log, deadline)
|
|
494
|
+
+ replaySpool(db, hippoRoot, tenantId, log, deadline)
|
|
495
|
+
+ replayOpen(db, hippoRoot, tenantId, now, log, deadline);
|
|
496
|
+
}
|
|
511
497
|
/** For `hippo sleep` and post-compact: opens the store itself and never throws. */
|
|
512
498
|
export function replayCompactionsAt(hippoRoot, log, opts = {}) {
|
|
513
499
|
let db;
|
|
@@ -21,7 +21,7 @@ export interface SpoolFs {
|
|
|
21
21
|
}): void;
|
|
22
22
|
}
|
|
23
23
|
/** Test-only seam, so a test can make one fs call fail; null restores the real fs. */
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function _setSpoolFsForTests(next: SpoolFs | null): void;
|
|
25
25
|
export interface SpooledCompaction {
|
|
26
26
|
tenantId: string;
|
|
27
27
|
payload: PostCompactPayload;
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { randomBytes } from 'crypto';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
import { isObjectLike, isStringValue } from '
|
|
6
|
-
import { isSqliteBusy } from '
|
|
7
|
-
import { errorMessage } from '
|
|
5
|
+
import { isObjectLike, isStringValue } from '../core/capture-contract.js';
|
|
6
|
+
import { isSqliteBusy } from '../db/busy.js';
|
|
7
|
+
import { errorMessage } from '../util/log.js';
|
|
8
|
+
const STAMP_DIGITS = 13;
|
|
8
9
|
export const SPOOL_DIR = 'compactions-spool';
|
|
9
10
|
/** Starts the log line of a step that broke with an unexpected error, so the session-start banner counts it; a set-aside file is counted by its `.bad` name instead. */
|
|
10
11
|
export const SPOOL_PROBLEM = 'spool problem: ';
|
|
@@ -28,10 +29,10 @@ const NEW_STEM = /^(\d{13})-[0-9a-f]{8}$/;
|
|
|
28
29
|
const LEGACY_STEM_TIME = /-(\d+)$/;
|
|
29
30
|
let fsx = fs;
|
|
30
31
|
/** Test-only seam, so a test can make one fs call fail; null restores the real fs. */
|
|
31
|
-
export function
|
|
32
|
+
export function _setSpoolFsForTests(next) {
|
|
32
33
|
fsx = next ?? fs;
|
|
33
34
|
}
|
|
34
|
-
const stamp = (ms) => String(Math.trunc(ms)).padStart(
|
|
35
|
+
const stamp = (ms) => String(Math.trunc(ms)).padStart(STAMP_DIGITS, '0');
|
|
35
36
|
const isTime = (value) => typeof value === 'number' && Number.isFinite(value);
|
|
36
37
|
const idle = new Int32Array(new SharedArrayBuffer(4));
|
|
37
38
|
function errCode(cause) {
|
|
@@ -244,7 +245,7 @@ function recoverStaleClaims(dir, names, log) {
|
|
|
244
245
|
putBackOne = true;
|
|
245
246
|
}
|
|
246
247
|
}
|
|
247
|
-
else if (moveBad(dir, file, claim.stem, claim.attempt, 'interrupted', log)) {
|
|
248
|
+
else if (moveBad(dir, file, { stem: claim.stem, attempt: claim.attempt, cause: 'interrupted', log })) {
|
|
248
249
|
log(`spool file ${claim.name} was claimed by a replayer that never finished ${MAX_ATTEMPTS} times, set aside as .bad`);
|
|
249
250
|
}
|
|
250
251
|
}
|
|
@@ -258,7 +259,8 @@ function putBack(dir, claim, stem, attempt, log) {
|
|
|
258
259
|
}
|
|
259
260
|
}
|
|
260
261
|
/** Writes `<stem>.<cause>.bad` through a random temp file, so the rename replaces any torn `.bad` a crash left. */
|
|
261
|
-
function writeBad(dir,
|
|
262
|
+
function writeBad(dir, options) {
|
|
263
|
+
const { stem, cause, text, log, what } = options;
|
|
262
264
|
const tmp = path.join(dir, `${stem}.${cause}.bad.${randomBytes(4).toString('hex')}.tmp`);
|
|
263
265
|
const written = settle(() => fsx.writeFileSync(tmp, text, { encoding: 'utf8', flag: 'wx' }), log, what);
|
|
264
266
|
const moved = written === 'done' ? settle(() => fsx.renameSync(tmp, path.join(dir, `${stem}.${cause}.bad`)), log, what) : written;
|
|
@@ -267,12 +269,13 @@ function writeBad(dir, stem, cause, text, log, what) {
|
|
|
267
269
|
return moved === 'done';
|
|
268
270
|
}
|
|
269
271
|
/** Sets a claim aside as `.bad` before the claim goes, so a crash between leaves a whole copy; a busy write puts the claim back. */
|
|
270
|
-
function moveBad(dir, claim,
|
|
272
|
+
function moveBad(dir, claim, options) {
|
|
273
|
+
const { stem, attempt, cause, log, raw } = options;
|
|
271
274
|
const what = `spool file ${path.basename(claim)} not set aside`;
|
|
272
275
|
let text = raw ?? '';
|
|
273
276
|
if (raw === undefined && settle(() => { text = fsx.readFileSync(claim, 'utf8'); }, log, what) !== 'done')
|
|
274
277
|
return false;
|
|
275
|
-
if (!writeBad(dir, stem, cause, text, log, what)) {
|
|
278
|
+
if (!writeBad(dir, { stem, cause, text, log, what })) {
|
|
276
279
|
putBack(dir, claim, stem, attempt, log);
|
|
277
280
|
return false;
|
|
278
281
|
}
|
|
@@ -306,7 +309,7 @@ function promoteTmp(dir, names, tenantId, log) {
|
|
|
306
309
|
promoted = true;
|
|
307
310
|
}
|
|
308
311
|
}
|
|
309
|
-
else if (writeBad(dir, m[1], 'unreadable', text, log, what)) {
|
|
312
|
+
else if (writeBad(dir, { stem: m[1], cause: 'unreadable', text, log, what })) {
|
|
310
313
|
settle(() => fsx.unlinkSync(file), log, what);
|
|
311
314
|
log(`spool file ${name} was never finished, set aside as .bad`);
|
|
312
315
|
}
|
|
@@ -320,7 +323,8 @@ function removeClaim(claim, name, log) {
|
|
|
320
323
|
log(`spool file ${name} saved; its claim could not be removed (${removed.code}); it will be imported again`);
|
|
321
324
|
}
|
|
322
325
|
/** After an importer throw: a busy store stops the run with the count unchanged, any other error counts one try toward .bad. */
|
|
323
|
-
function importFailed(dir, claim, entry,
|
|
326
|
+
function importFailed(dir, claim, entry, options) {
|
|
327
|
+
const { text, recorded, cause, log } = options;
|
|
324
328
|
const { name } = entry;
|
|
325
329
|
const busy = isSqliteBusy(cause);
|
|
326
330
|
if (recorded) {
|
|
@@ -338,7 +342,7 @@ function importFailed(dir, claim, entry, text, recorded, cause, log) {
|
|
|
338
342
|
putBack(dir, claim, entry.stem, next, log);
|
|
339
343
|
log(`spool file ${name} failed to import (try ${next} of ${MAX_ATTEMPTS}): ${errorMessage(cause)}`);
|
|
340
344
|
}
|
|
341
|
-
else if (moveBad(dir, claim, entry.stem, entry.attempt, 'failed', log, text)) {
|
|
345
|
+
else if (moveBad(dir, claim, { stem: entry.stem, attempt: entry.attempt, cause: 'failed', log, raw: text })) {
|
|
342
346
|
log(`spool file ${name} set aside as .bad after ${MAX_ATTEMPTS} tries: ${errorMessage(cause)}`);
|
|
343
347
|
}
|
|
344
348
|
return 'skipped';
|
|
@@ -362,7 +366,7 @@ function importFile(dir, entry, tenantId, log, importOne) {
|
|
|
362
366
|
return 'skipped';
|
|
363
367
|
const spooled = parseSpooled(text, tenantId);
|
|
364
368
|
if (spooled === null) {
|
|
365
|
-
if (moveBad(dir, claim, entry.stem, entry.attempt, 'unreadable', log, text))
|
|
369
|
+
if (moveBad(dir, claim, { stem: entry.stem, attempt: entry.attempt, cause: 'unreadable', log, raw: text }))
|
|
366
370
|
log(`spool file ${name} is not readable, set aside as .bad`);
|
|
367
371
|
return 'skipped';
|
|
368
372
|
}
|
|
@@ -379,7 +383,7 @@ function importFile(dir, entry, tenantId, log, importOne) {
|
|
|
379
383
|
return 'imported';
|
|
380
384
|
}
|
|
381
385
|
catch (err) {
|
|
382
|
-
return importFailed(dir, claim, entry, text, recorded, err, log);
|
|
386
|
+
return importFailed(dir, claim, entry, { text, recorded, cause: err, log });
|
|
383
387
|
}
|
|
384
388
|
}
|
|
385
389
|
function mtimeOf(file) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import { copilotHomeDir } from '../hooks/shared.js';
|
|
6
|
-
import { isObjectLike, isStringValue } from '../capture-contract.js';
|
|
6
|
+
import { isObjectLike, isStringValue } from '../core/capture-contract.js';
|
|
7
7
|
// A session id becomes a folder name, so anything beyond word characters and hyphens could climb out of session-state.
|
|
8
8
|
export const SESSION_ID_RE = /^[\w-]+$/;
|
|
9
9
|
// user.message sources that mark text hippo did not get from the human: a hidden skill injection or another agent's prompt.
|
package/dist/capture/extract.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { duplicateKey } from '../same-text.js';
|
|
2
|
-
import { assessAutomaticMemory } from '../memory-quality.js';
|
|
1
|
+
import { duplicateKey } from '../util/same-text.js';
|
|
2
|
+
import { assessAutomaticMemory } from '../core/memory-quality.js';
|
|
3
3
|
const DECISION_PATTERNS = [
|
|
4
4
|
/\b(?:we(?:'ve| have)?|i(?:'ve| have)?|let's)\s+decid(?:ed|e)\b/i,
|
|
5
5
|
/\b(?:let's|we(?:'ll| will| should)?)\s+(?:go with|do|use|try|build|implement|switch to)\b/i,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context } from '../api/types.js';
|
|
2
|
-
import type
|
|
3
|
-
import
|
|
2
|
+
import { type CaptureErrorOutcome, type RoutineRule } from '../store/failure-log.js';
|
|
3
|
+
import type { CallerProject } from '../api/prompt-hook.js';
|
|
4
4
|
type FailureSkip = Exclude<CaptureErrorOutcome, 'stored' | 'duplicate'>;
|
|
5
5
|
/** failureReport's reading of the payload, read on the caller's machine, plus the id its retries carry. */
|
|
6
6
|
export interface CallerFailureRequest {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// PostToolUseFailure for a caller on another machine: the lesson and its log row carry the caller's owner and project, and a retried request id gets the first answer.
|
|
2
|
-
import { BadRequestError } from '../api-errors.js';
|
|
3
|
-
import { storeLesson } from '
|
|
4
|
-
import { recordFailure, requestOutcome, settleFailureOutcome } from '../failure-log.js';
|
|
5
|
-
import { errorMessage, log } from '../log.js';
|
|
6
|
-
import { scrubForSharing } from '
|
|
7
|
-
import { truncateCodePointSafe } from '../transcript-tail.js';
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
|
+
import { storeLesson } from './capture-error.js';
|
|
4
|
+
import { recordFailure, requestOutcome, settleFailureOutcome } from '../store/failure-log.js';
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
6
|
+
import { scrubForSharing } from './share-scrub.js';
|
|
7
|
+
import { truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
8
8
|
import { assertRequestId, bindCaller, withCallerDb } from './caller-session.js';
|
|
9
9
|
import { FAILURE_TEXT_MAX_CHARS, failureHash } from './failure-reading.js';
|
|
10
10
|
const SKIPS = { 'skipped-interrupt': true, 'skipped-routine': true, 'skipped-invalid': true };
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
export type CaptureErrorOutcome = 'stored' | 'duplicate' | 'skipped-interrupt' | 'skipped-routine' | 'skipped-invalid';
|
|
4
|
-
/** Which routine check skipped a failure; the log keeps it so declines can be told apart from empty searches. */
|
|
5
|
-
export type RoutineRule = 'declined' | 'os-permission' | 'no-match' | 'search-tool' | 'quiet-exit';
|
|
1
|
+
import { type JsonValue } from '../util/json.js';
|
|
2
|
+
import type { CaptureErrorOutcome, RoutineRule } from '../store/failure-log.js';
|
|
6
3
|
/** What {@link lessonFromFailure} read from a payload; `detail` is the finer failure-log key (untruncated, command head). */
|
|
7
4
|
export type FailureReading = {
|
|
8
5
|
text: string;
|