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,10 +1,11 @@
|
|
|
1
|
-
import { generateId } from '
|
|
2
|
-
import {
|
|
3
|
-
import { rowToSessionHandoff, isHandoffOutcome } from '
|
|
4
|
-
import {
|
|
1
|
+
import { generateId } from '../core/memory.js';
|
|
2
|
+
import { withWriteScope, withWriteScopeOr } from '../db/index.js';
|
|
3
|
+
import { rowToSessionHandoff, isHandoffOutcome } from '../core/handoff.js';
|
|
4
|
+
import { CARD_LEASE_MS, assertCardTransition } from '../core/card.js';
|
|
5
5
|
import { assertTenantId } from './tenant.js';
|
|
6
|
-
import { openStore } from './
|
|
7
|
-
import {
|
|
6
|
+
import { onHandle, openStore } from './open.js';
|
|
7
|
+
import { chunked } from './entry-reads.js';
|
|
8
|
+
import { HANDOFF_COLUMNS } from './handoffs.js';
|
|
8
9
|
const CARD_COLUMNS = 'id, title, status, assignee_runtime, repo, contract, budget, lease_until, heartbeat_at, created_at, updated_at, tenant_id, scope';
|
|
9
10
|
function rowToCard(row) {
|
|
10
11
|
return {
|
|
@@ -77,27 +78,27 @@ function closeLiveRun(db, tenantId, cardId, outcome, now) {
|
|
|
77
78
|
WHERE card = ? AND tenant_id = ? AND ended IS NULL
|
|
78
79
|
`).run(now, outcome, now, cardId, tenantId);
|
|
79
80
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
81
|
+
function transitionCard(db, tenantId, cardId, options) {
|
|
82
|
+
return transitionCards(db, tenantId, [cardId], options);
|
|
83
|
+
}
|
|
84
|
+
/** transitionCard for every card in `cardIds`, as one statement with one timestamp; returns how many moved. */
|
|
85
|
+
function transitionCards(db, tenantId, cardIds, options) {
|
|
86
|
+
const { from, to, extra } = options;
|
|
87
|
+
assertCardTransition(from, to);
|
|
88
88
|
const now = new Date().toISOString();
|
|
89
89
|
// Lease columns follow status: set on the move to running, cleared on every other move (rule 15).
|
|
90
90
|
const lease = to === 'running' ? [leaseUntilFrom(now), now] : [null, null];
|
|
91
91
|
const fromPlaceholders = from.map(() => '?').join(', ');
|
|
92
92
|
const sql = `
|
|
93
93
|
UPDATE cards SET status = ?, updated_at = ?, lease_until = ?, heartbeat_at = ?${extra?.setSql ? `, ${extra.setSql}` : ''}
|
|
94
|
-
WHERE id
|
|
94
|
+
WHERE id IN (${cardIds.map(() => '?').join(', ')}) AND tenant_id = ? AND status IN (${fromPlaceholders})${extra?.whereSql ? ` AND ${extra.whereSql}` : ''}
|
|
95
95
|
`;
|
|
96
|
-
const params = [to, now, ...lease, ...(extra?.params ?? []),
|
|
96
|
+
const params = [to, now, ...lease, ...(extra?.params ?? []), ...cardIds, tenantId, ...from];
|
|
97
97
|
const result = db.prepare(sql).run(...params);
|
|
98
98
|
return Number(result.changes ?? 0);
|
|
99
99
|
}
|
|
100
|
-
/** Creates a card; status is ready with no deps or once every dependsOn id is done, else backlog.
|
|
100
|
+
/** Creates a card; status is ready with no deps or once every dependsOn id is done, else backlog.
|
|
101
|
+
* An unknown dependsOn id throws and commits nothing. A repeated dependsOn id is recorded once. */
|
|
101
102
|
export function createCard(hippoRoot, tenantId, input) {
|
|
102
103
|
assertTenantId('createCard', tenantId);
|
|
103
104
|
if (input.title.trim() === '') {
|
|
@@ -106,28 +107,13 @@ export function createCard(hippoRoot, tenantId, input) {
|
|
|
106
107
|
if (input.budget !== undefined && !(Number.isSafeInteger(input.budget) && input.budget > 0)) {
|
|
107
108
|
throw new Error(`Invalid budget: ${input.budget} (expected a positive integer)`);
|
|
108
109
|
}
|
|
109
|
-
|
|
110
|
-
try {
|
|
110
|
+
return onHandle(hippoRoot, (db) => {
|
|
111
111
|
const dependsOn = [...new Set(input.dependsOn ?? [])];
|
|
112
112
|
let id = '';
|
|
113
|
-
db
|
|
114
|
-
try {
|
|
113
|
+
withWriteScope(db, 'create_card', () => {
|
|
115
114
|
// Probe runs inside the transaction (mirrors batchWriteAndDelete): a parent
|
|
116
115
|
// completing between an outside-the-lock read and the INSERT would strand the child.
|
|
117
|
-
|
|
118
|
-
if (dependsOn.length > 0) {
|
|
119
|
-
const placeholders = dependsOn.map(() => '?').join(', ');
|
|
120
|
-
// SAFETY: rows' shape matches the two columns named in the SELECT below.
|
|
121
|
-
const rows = db.prepare(`SELECT id, status FROM cards WHERE tenant_id = ? AND id IN (${placeholders})`).all(tenantId, ...dependsOn);
|
|
122
|
-
const found = new Map(rows.map((r) => [r.id, r.status]));
|
|
123
|
-
// Pre-check before any write: a typo'd --depends-on can never commit a card row.
|
|
124
|
-
for (const parentId of dependsOn) {
|
|
125
|
-
if (!found.has(parentId)) {
|
|
126
|
-
throw new Error(`unknown parent card id: ${parentId}`);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
allParentsDone = dependsOn.every((pid) => found.get(pid) === 'done');
|
|
130
|
-
}
|
|
116
|
+
const allParentsDone = everyParentDone(db, tenantId, dependsOn);
|
|
131
117
|
id = generateId('card');
|
|
132
118
|
const now = new Date().toISOString();
|
|
133
119
|
const status = dependsOn.length === 0 || allParentsDone ? 'ready' : 'backlog';
|
|
@@ -135,42 +121,42 @@ export function createCard(hippoRoot, tenantId, input) {
|
|
|
135
121
|
INSERT INTO cards (id, title, status, repo, contract, budget, created_at, updated_at, tenant_id)
|
|
136
122
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
137
123
|
`).run(id, input.title, status, input.repo ?? null, input.contract ?? null, input.budget ?? null, now, now, tenantId);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
try {
|
|
147
|
-
db.exec('ROLLBACK');
|
|
148
|
-
}
|
|
149
|
-
catch { /* commit may have already rolled back */ }
|
|
150
|
-
throw error;
|
|
151
|
-
}
|
|
124
|
+
const insertDep = db.prepare(`
|
|
125
|
+
INSERT INTO card_deps (parent, child, tenant_id, created_at) VALUES (?, ?, ?, ?)
|
|
126
|
+
`);
|
|
127
|
+
for (const parentId of dependsOn)
|
|
128
|
+
insertDep.run(parentId, id, tenantId, now);
|
|
129
|
+
});
|
|
152
130
|
return loadCardRow(db, tenantId, id);
|
|
131
|
+
}, openStore);
|
|
132
|
+
}
|
|
133
|
+
/** Whether every dependsOn card is done, true for none; throws on an id that is no card of the tenant. Call inside the write scope. */
|
|
134
|
+
function everyParentDone(db, tenantId, dependsOn) {
|
|
135
|
+
if (dependsOn.length === 0)
|
|
136
|
+
return true;
|
|
137
|
+
const placeholders = dependsOn.map(() => '?').join(', ');
|
|
138
|
+
// SAFETY: rows' shape matches the two columns named in the SELECT below.
|
|
139
|
+
const rows = db.prepare(`SELECT id, status FROM cards WHERE tenant_id = ? AND id IN (${placeholders})`).all(tenantId, ...dependsOn);
|
|
140
|
+
const found = new Map(rows.map((r) => [r.id, r.status]));
|
|
141
|
+
// Pre-check before any write: a typo'd --depends-on can never commit a card row.
|
|
142
|
+
for (const parentId of dependsOn) {
|
|
143
|
+
if (!found.has(parentId)) {
|
|
144
|
+
throw new Error(`unknown parent card id: ${parentId}`);
|
|
145
|
+
}
|
|
153
146
|
}
|
|
154
|
-
|
|
155
|
-
closeHippoDb(db);
|
|
156
|
-
}
|
|
147
|
+
return dependsOn.every((pid) => found.get(pid) === 'done');
|
|
157
148
|
}
|
|
158
149
|
/** Returns the card row for id, or null if it does not exist under this tenant. */
|
|
159
150
|
export function loadCard(hippoRoot, tenantId, id) {
|
|
160
151
|
assertTenantId('loadCard', tenantId);
|
|
161
|
-
|
|
162
|
-
try {
|
|
152
|
+
return onHandle(hippoRoot, (db) => {
|
|
163
153
|
return loadCardRow(db, tenantId, id);
|
|
164
|
-
}
|
|
165
|
-
finally {
|
|
166
|
-
closeHippoDb(db);
|
|
167
|
-
}
|
|
154
|
+
}, openStore);
|
|
168
155
|
}
|
|
169
156
|
/** Lists cards for this tenant, optionally filtered to one status, newest-updated first. */
|
|
170
157
|
export function listCards(hippoRoot, tenantId, opts = {}) {
|
|
171
158
|
assertTenantId('listCards', tenantId);
|
|
172
|
-
|
|
173
|
-
try {
|
|
159
|
+
return onHandle(hippoRoot, (db) => {
|
|
174
160
|
const conditions = ['tenant_id = ?'];
|
|
175
161
|
const params = [tenantId];
|
|
176
162
|
if (opts.status) {
|
|
@@ -182,153 +168,109 @@ export function listCards(hippoRoot, tenantId, opts = {}) {
|
|
|
182
168
|
SELECT ${CARD_COLUMNS} FROM cards WHERE ${conditions.join(' AND ')} ORDER BY updated_at DESC, id DESC
|
|
183
169
|
`).all(...params);
|
|
184
170
|
return rows.map(rowToCard);
|
|
185
|
-
}
|
|
186
|
-
finally {
|
|
187
|
-
closeHippoDb(db);
|
|
188
|
-
}
|
|
171
|
+
}, openStore);
|
|
189
172
|
}
|
|
190
173
|
/** Returns this card's parent and child ids from card_deps. */
|
|
191
174
|
export function loadCardDeps(hippoRoot, tenantId, id) {
|
|
192
175
|
assertTenantId('loadCardDeps', tenantId);
|
|
193
|
-
|
|
194
|
-
try {
|
|
176
|
+
return onHandle(hippoRoot, (db) => {
|
|
195
177
|
// SAFETY: rows' shape matches the single `parent` column named in the SELECT below.
|
|
196
178
|
const parents = db.prepare(`SELECT parent FROM card_deps WHERE tenant_id = ? AND child = ?`).all(tenantId, id).map((r) => r.parent);
|
|
197
179
|
// SAFETY: rows' shape matches the single `child` column named in the SELECT below.
|
|
198
180
|
const children = db.prepare(`SELECT child FROM card_deps WHERE tenant_id = ? AND parent = ?`).all(tenantId, id).map((r) => r.child);
|
|
199
181
|
return { parents, children };
|
|
200
|
-
}
|
|
201
|
-
finally {
|
|
202
|
-
closeHippoDb(db);
|
|
203
|
-
}
|
|
182
|
+
}, openStore);
|
|
204
183
|
}
|
|
205
184
|
/** Returns this card's run history, most recent first. */
|
|
206
185
|
export function loadCardRuns(hippoRoot, tenantId, id) {
|
|
207
186
|
assertTenantId('loadCardRuns', tenantId);
|
|
208
|
-
|
|
209
|
-
try {
|
|
187
|
+
return onHandle(hippoRoot, (db) => {
|
|
210
188
|
// SAFETY: rows' shape matches CardRunRow.
|
|
211
189
|
const rows = db.prepare(`
|
|
212
190
|
SELECT id, card, runtime, session_id, started, ended, outcome
|
|
213
191
|
FROM card_runs WHERE tenant_id = ? AND card = ? ORDER BY started DESC, id DESC
|
|
214
192
|
`).all(tenantId, id);
|
|
215
193
|
return rows.map(rowToCardRun);
|
|
216
|
-
}
|
|
217
|
-
finally {
|
|
218
|
-
closeHippoDb(db);
|
|
219
|
-
}
|
|
194
|
+
}, openStore);
|
|
220
195
|
}
|
|
221
196
|
/** Returns this card's comments, most recent first. */
|
|
222
197
|
export function loadCardComments(hippoRoot, tenantId, id) {
|
|
223
198
|
assertTenantId('loadCardComments', tenantId);
|
|
224
|
-
|
|
225
|
-
try {
|
|
199
|
+
return onHandle(hippoRoot, (db) => {
|
|
226
200
|
// SAFETY: rows' shape matches CardCommentRow.
|
|
227
201
|
const rows = db.prepare(`
|
|
228
202
|
SELECT id, card_id, author, body, created_at
|
|
229
203
|
FROM card_comments WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC
|
|
230
204
|
`).all(tenantId, id);
|
|
231
205
|
return rows.map(rowToCardComment);
|
|
232
|
-
}
|
|
233
|
-
finally {
|
|
234
|
-
closeHippoDb(db);
|
|
235
|
-
}
|
|
206
|
+
}, openStore);
|
|
236
207
|
}
|
|
237
208
|
/** Read side of the card <-> handoff round trip: the newest handoff filed against this card. */
|
|
238
209
|
export function loadLatestHandoffForCard(hippoRoot, tenantId, cardId) {
|
|
239
210
|
assertTenantId('loadLatestHandoffForCard', tenantId);
|
|
240
|
-
|
|
241
|
-
try {
|
|
211
|
+
return onHandle(hippoRoot, (db) => {
|
|
242
212
|
// SAFETY: row's shape matches HANDOFF_COLUMNS.
|
|
243
213
|
const row = db.prepare(`
|
|
244
214
|
SELECT ${HANDOFF_COLUMNS} FROM session_handoffs
|
|
245
215
|
WHERE tenant_id = ? AND card_id = ? ORDER BY created_at DESC, id DESC LIMIT 1
|
|
246
216
|
`).get(tenantId, cardId);
|
|
247
217
|
return row ? rowToSessionHandoff(row) : null;
|
|
248
|
-
}
|
|
249
|
-
finally {
|
|
250
|
-
closeHippoDb(db);
|
|
251
|
-
}
|
|
218
|
+
}, openStore);
|
|
252
219
|
}
|
|
253
|
-
/** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id;
|
|
220
|
+
/** Atomic claim: WHERE status IN (ready, blocked) AND assignee_runtime IS NULL decides the race. Throws on an unknown card id;
|
|
221
|
+
* returns null for a card not ready/blocked or already claimed. Sets a CARD_LEASE_MS lease and returns the new run's id as runId. */
|
|
254
222
|
export function claimCard(hippoRoot, tenantId, id, runtime, sessionId) {
|
|
255
223
|
assertTenantId('claimCard', tenantId);
|
|
256
224
|
if (runtime.trim() === '') {
|
|
257
225
|
throw new Error('runtime must not be empty');
|
|
258
226
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
setSql: 'assignee_runtime = ?',
|
|
266
|
-
whereSql: 'assignee_runtime IS NULL',
|
|
267
|
-
params: [runtime],
|
|
227
|
+
return onHandle(hippoRoot, (db) => {
|
|
228
|
+
const runId = withWriteScopeOr(db, 'claim_card', (rollback) => {
|
|
229
|
+
const changes = transitionCard(db, tenantId, id, {
|
|
230
|
+
from: ['ready', 'blocked'],
|
|
231
|
+
to: 'running',
|
|
232
|
+
extra: { setSql: 'assignee_runtime = ?', whereSql: 'assignee_runtime IS NULL', params: [runtime] },
|
|
268
233
|
});
|
|
269
234
|
if (changes === 0) {
|
|
270
235
|
if (!loadCardRow(db, tenantId, id)) {
|
|
271
236
|
throw new Error(`unknown card id: ${id}`);
|
|
272
237
|
}
|
|
273
|
-
|
|
274
|
-
return null;
|
|
238
|
+
return rollback(null);
|
|
275
239
|
}
|
|
276
240
|
const now = new Date().toISOString();
|
|
277
241
|
const insert = db.prepare(`
|
|
278
242
|
INSERT INTO card_runs (card, runtime, session_id, started, created_at, updated_at, tenant_id)
|
|
279
243
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
280
244
|
`).run(id, runtime, sessionId ?? null, now, now, now, tenantId);
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
try {
|
|
286
|
-
db.exec('ROLLBACK');
|
|
287
|
-
}
|
|
288
|
-
catch { /* commit may have already rolled back */ }
|
|
289
|
-
throw error;
|
|
290
|
-
}
|
|
291
|
-
return { ...loadCardRow(db, tenantId, id), runId };
|
|
292
|
-
}
|
|
293
|
-
finally {
|
|
294
|
-
closeHippoDb(db);
|
|
295
|
-
}
|
|
245
|
+
return Number(insert.lastInsertRowid ?? 0);
|
|
246
|
+
});
|
|
247
|
+
return runId === null ? null : { ...loadCardRow(db, tenantId, id), runId };
|
|
248
|
+
}, openStore);
|
|
296
249
|
}
|
|
297
|
-
/** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an
|
|
250
|
+
/** Moves a running card's lease to CARD_LEASE_MS from now and records the heartbeat; updated_at is left alone. Throws on an
|
|
251
|
+
* unknown card id or a run id that is not a positive integer; returns null unless the card is running and runId is its live run. */
|
|
298
252
|
export function heartbeatCard(hippoRoot, tenantId, id, runId) {
|
|
299
253
|
assertTenantId('heartbeatCard', tenantId);
|
|
300
254
|
assertRunId(runId);
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
db.exec('BEGIN IMMEDIATE');
|
|
304
|
-
try {
|
|
255
|
+
return onHandle(hippoRoot, (db) => {
|
|
256
|
+
const beat = withWriteScopeOr(db, 'heartbeat_card', (rollback) => {
|
|
305
257
|
const card = loadCardRow(db, tenantId, id);
|
|
306
258
|
if (!card) {
|
|
307
259
|
throw new Error(`unknown card id: ${id}`);
|
|
308
260
|
}
|
|
309
261
|
if (card.status !== 'running' || !isLiveRun(db, tenantId, id, runId)) {
|
|
310
|
-
|
|
311
|
-
return null;
|
|
262
|
+
return rollback(false);
|
|
312
263
|
}
|
|
313
264
|
const now = new Date().toISOString();
|
|
314
265
|
db.prepare(`UPDATE cards SET lease_until = ?, heartbeat_at = ? WHERE id = ? AND tenant_id = ?`)
|
|
315
266
|
.run(leaseUntilFrom(now), now, id, tenantId);
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
db.exec('ROLLBACK');
|
|
321
|
-
}
|
|
322
|
-
catch { /* commit may have already rolled back */ }
|
|
323
|
-
throw error;
|
|
324
|
-
}
|
|
325
|
-
return loadCardRow(db, tenantId, id);
|
|
326
|
-
}
|
|
327
|
-
finally {
|
|
328
|
-
closeHippoDb(db);
|
|
329
|
-
}
|
|
267
|
+
return true;
|
|
268
|
+
});
|
|
269
|
+
return beat ? loadCardRow(db, tenantId, id) : null;
|
|
270
|
+
}, openStore);
|
|
330
271
|
}
|
|
331
|
-
/** Requires the card be running; closes the live run as blocked and files reason as a comment. Throws on an unknown
|
|
272
|
+
/** Requires the card be running; closes the live run as blocked and files reason as a comment. Throws on an unknown
|
|
273
|
+
* card id; returns null for a card not running. When runId is given, returns null unless it is the card's live run. */
|
|
332
274
|
export function blockCard(hippoRoot, tenantId, id, reason, runId) {
|
|
333
275
|
assertTenantId('blockCard', tenantId);
|
|
334
276
|
if (reason.trim() === '') {
|
|
@@ -336,72 +278,48 @@ export function blockCard(hippoRoot, tenantId, id, reason, runId) {
|
|
|
336
278
|
}
|
|
337
279
|
if (runId !== undefined)
|
|
338
280
|
assertRunId(runId);
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
db.exec('BEGIN IMMEDIATE');
|
|
342
|
-
try {
|
|
281
|
+
return onHandle(hippoRoot, (db) => {
|
|
282
|
+
const blocked = withWriteScopeOr(db, 'block_card', (rollback) => {
|
|
343
283
|
const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
|
|
344
|
-
const changes = allowed ? transitionCard(db, tenantId, id, ['running'], 'blocked', { setSql: 'assignee_runtime = NULL' }) : 0;
|
|
284
|
+
const changes = allowed ? transitionCard(db, tenantId, id, { from: ['running'], to: 'blocked', extra: { setSql: 'assignee_runtime = NULL' } }) : 0;
|
|
345
285
|
if (changes === 0) {
|
|
346
286
|
if (!loadCardRow(db, tenantId, id)) {
|
|
347
287
|
throw new Error(`unknown card id: ${id}`);
|
|
348
288
|
}
|
|
349
|
-
|
|
350
|
-
return null;
|
|
289
|
+
return rollback(false);
|
|
351
290
|
}
|
|
352
291
|
const now = new Date().toISOString();
|
|
353
292
|
// Close the interrupted run here so completeCard's ended IS NULL scope only ever matches the live run.
|
|
354
293
|
closeLiveRun(db, tenantId, id, 'blocked', now);
|
|
355
294
|
insertCardComment(db, tenantId, id, 'system', reason);
|
|
356
|
-
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
db.exec('ROLLBACK');
|
|
361
|
-
}
|
|
362
|
-
catch { /* commit may have already rolled back */ }
|
|
363
|
-
throw error;
|
|
364
|
-
}
|
|
365
|
-
return loadCardRow(db, tenantId, id);
|
|
366
|
-
}
|
|
367
|
-
finally {
|
|
368
|
-
closeHippoDb(db);
|
|
369
|
-
}
|
|
295
|
+
return true;
|
|
296
|
+
});
|
|
297
|
+
return blocked ? loadCardRow(db, tenantId, id) : null;
|
|
298
|
+
}, openStore);
|
|
370
299
|
}
|
|
371
|
-
/** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is
|
|
300
|
+
/** Requires the card be running; moves it to review, clearing its lease and heartbeat and keeping its live run. When runId is
|
|
301
|
+
* given, returns null unless it is the card's live run. Throws on an unknown card id; returns null for a card not running. */
|
|
372
302
|
export function reviewCard(hippoRoot, tenantId, id, runId) {
|
|
373
303
|
assertTenantId('reviewCard', tenantId);
|
|
374
304
|
if (runId !== undefined)
|
|
375
305
|
assertRunId(runId);
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
db.exec('BEGIN IMMEDIATE');
|
|
379
|
-
try {
|
|
306
|
+
return onHandle(hippoRoot, (db) => {
|
|
307
|
+
const moved = withWriteScopeOr(db, 'review_card', (rollback) => {
|
|
380
308
|
const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
|
|
381
|
-
const changes = allowed ? transitionCard(db, tenantId, id, ['running'], 'review') : 0;
|
|
309
|
+
const changes = allowed ? transitionCard(db, tenantId, id, { from: ['running'], to: 'review' }) : 0;
|
|
382
310
|
if (changes === 0) {
|
|
383
311
|
if (!loadCardRow(db, tenantId, id)) {
|
|
384
312
|
throw new Error(`unknown card id: ${id}`);
|
|
385
313
|
}
|
|
386
|
-
|
|
387
|
-
return null;
|
|
388
|
-
}
|
|
389
|
-
db.exec('COMMIT');
|
|
390
|
-
}
|
|
391
|
-
catch (error) {
|
|
392
|
-
try {
|
|
393
|
-
db.exec('ROLLBACK');
|
|
314
|
+
return rollback(false);
|
|
394
315
|
}
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
}
|
|
400
|
-
finally {
|
|
401
|
-
closeHippoDb(db);
|
|
402
|
-
}
|
|
316
|
+
return true;
|
|
317
|
+
});
|
|
318
|
+
return moved ? loadCardRow(db, tenantId, id) : null;
|
|
319
|
+
}, openStore);
|
|
403
320
|
}
|
|
404
|
-
/**
|
|
321
|
+
/** Closes the live run of a card in review: 'success' moves it to done and promotes children whose parents are all done; 'failure'/'partial' shelves it.
|
|
322
|
+
* Throws on an unknown card id; returns null for a card not in review, or when `runId` is given and is not the card's live run. */
|
|
405
323
|
export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
|
|
406
324
|
assertTenantId('completeCard', tenantId);
|
|
407
325
|
if (!isHandoffOutcome(outcome)) {
|
|
@@ -409,66 +327,48 @@ export function completeCard(hippoRoot, tenantId, id, outcome, runId) {
|
|
|
409
327
|
}
|
|
410
328
|
if (runId !== undefined)
|
|
411
329
|
assertRunId(runId);
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
db.exec('BEGIN IMMEDIATE');
|
|
415
|
-
let promotedChildren = [];
|
|
416
|
-
try {
|
|
330
|
+
return onHandle(hippoRoot, (db) => {
|
|
331
|
+
const promoted = withWriteScopeOr(db, 'complete_card', (rollback) => {
|
|
417
332
|
const target = outcome === 'success' ? 'done' : 'shelved';
|
|
418
333
|
const allowed = runId === undefined || isLiveRun(db, tenantId, id, runId);
|
|
419
|
-
const changes = allowed ? transitionCard(db, tenantId, id, ['review'], target) : 0;
|
|
334
|
+
const changes = allowed ? transitionCard(db, tenantId, id, { from: ['review'], to: target }) : 0;
|
|
420
335
|
if (changes === 0) {
|
|
421
336
|
if (!loadCardRow(db, tenantId, id)) {
|
|
422
337
|
throw new Error(`unknown card id: ${id}`);
|
|
423
338
|
}
|
|
424
|
-
|
|
425
|
-
return null;
|
|
339
|
+
return rollback(null);
|
|
426
340
|
}
|
|
427
341
|
const now = new Date().toISOString();
|
|
428
342
|
closeLiveRun(db, tenantId, id, outcome, now);
|
|
429
343
|
// Not best-effort (rule 12): promotion runs in this same transaction, so a
|
|
430
344
|
// card can never be `done` with an un-evaluated child.
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
}
|
|
452
|
-
catch (error) {
|
|
453
|
-
try {
|
|
454
|
-
db.exec('ROLLBACK');
|
|
455
|
-
}
|
|
456
|
-
catch { /* commit may have already rolled back */ }
|
|
457
|
-
throw error;
|
|
458
|
-
}
|
|
459
|
-
return { card: loadCardRow(db, tenantId, id), promotedChildren };
|
|
460
|
-
}
|
|
461
|
-
finally {
|
|
462
|
-
closeHippoDb(db);
|
|
463
|
-
}
|
|
345
|
+
return target === 'done' ? promoteUnblockedChildren(db, tenantId, id) : [];
|
|
346
|
+
});
|
|
347
|
+
return promoted === null ? null : { card: loadCardRow(db, tenantId, id), promotedChildren: promoted };
|
|
348
|
+
}, openStore);
|
|
349
|
+
}
|
|
350
|
+
/** Moves to ready each backlog child of `parentId` whose parents are all done, and returns their ids. Call inside the write scope. */
|
|
351
|
+
function promoteUnblockedChildren(db, tenantId, parentId) {
|
|
352
|
+
// The child's status and its open parents are result columns, not joins, so the rows keep the order of a plain read of the parent's children.
|
|
353
|
+
// SAFETY: rows' shape matches the three columns named in the SELECT below.
|
|
354
|
+
const children = db.prepare(`
|
|
355
|
+
SELECT d.child AS child,
|
|
356
|
+
(SELECT c.status FROM cards c WHERE c.tenant_id = ? AND c.id = d.child) AS status,
|
|
357
|
+
(SELECT COUNT(*) FROM card_deps p WHERE p.tenant_id = ? AND p.child = d.child
|
|
358
|
+
AND NOT EXISTS (SELECT 1 FROM cards pc WHERE pc.tenant_id = ? AND pc.id = p.parent AND pc.status = 'done')) AS open_parents
|
|
359
|
+
FROM card_deps d WHERE d.tenant_id = ? AND d.parent = ?
|
|
360
|
+
`).all(tenantId, tenantId, tenantId, tenantId, parentId);
|
|
361
|
+
const unblocked = children.filter((r) => r.status === 'backlog' && r.open_parents === 0).map((r) => r.child);
|
|
362
|
+
for (const ids of chunked(unblocked))
|
|
363
|
+
transitionCards(db, tenantId, ids, { from: ['backlog'], to: 'ready' });
|
|
364
|
+
return unblocked;
|
|
464
365
|
}
|
|
465
|
-
/** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live
|
|
366
|
+
/** Returns to ready every running card of the tenant whose lease has expired or is missing: clears its assignee, closes its live
|
|
367
|
+
* run as 'reclaimed' and leaves its handoffs alone, all in one write transaction. Returns the reclaimed card ids in id order. */
|
|
466
368
|
export function reclaimExpiredCards(hippoRoot, tenantId) {
|
|
467
369
|
assertTenantId('reclaimExpiredCards', tenantId);
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
db.exec('BEGIN IMMEDIATE');
|
|
471
|
-
try {
|
|
370
|
+
return onHandle(hippoRoot, (db) => {
|
|
371
|
+
return withWriteScope(db, 'reclaim_expired_cards', () => {
|
|
472
372
|
// Read lease times under the write lock, so a heartbeat that committed while we waited wins.
|
|
473
373
|
const now = new Date().toISOString();
|
|
474
374
|
// SAFETY: rows' shape matches the single `id` column named in the SELECT below.
|
|
@@ -478,23 +378,12 @@ export function reclaimExpiredCards(hippoRoot, tenantId) {
|
|
|
478
378
|
ORDER BY id
|
|
479
379
|
`).all(tenantId, now).map((r) => r.id);
|
|
480
380
|
for (const id of ids) {
|
|
481
|
-
transitionCard(db, tenantId, id, ['running'], 'ready', { setSql: 'assignee_runtime = NULL' });
|
|
381
|
+
transitionCard(db, tenantId, id, { from: ['running'], to: 'ready', extra: { setSql: 'assignee_runtime = NULL' } });
|
|
482
382
|
closeLiveRun(db, tenantId, id, 'reclaimed', now);
|
|
483
383
|
}
|
|
484
|
-
db.exec('COMMIT');
|
|
485
384
|
return ids;
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
try {
|
|
489
|
-
db.exec('ROLLBACK');
|
|
490
|
-
}
|
|
491
|
-
catch { /* commit may have already rolled back */ }
|
|
492
|
-
throw error;
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
finally {
|
|
496
|
-
closeHippoDb(db);
|
|
497
|
-
}
|
|
385
|
+
});
|
|
386
|
+
}, openStore);
|
|
498
387
|
}
|
|
499
388
|
/** Appends a comment to cardId in any card status; throws if cardId is not a card of this tenant. */
|
|
500
389
|
export function addCardComment(hippoRoot, tenantId, cardId, author, body) {
|
|
@@ -502,12 +391,8 @@ export function addCardComment(hippoRoot, tenantId, cardId, author, body) {
|
|
|
502
391
|
if (body.trim() === '') {
|
|
503
392
|
throw new Error('body must not be empty');
|
|
504
393
|
}
|
|
505
|
-
|
|
506
|
-
try {
|
|
394
|
+
return onHandle(hippoRoot, (db) => {
|
|
507
395
|
return insertCardComment(db, tenantId, cardId, author, body);
|
|
508
|
-
}
|
|
509
|
-
finally {
|
|
510
|
-
closeHippoDb(db);
|
|
511
|
-
}
|
|
396
|
+
}, openStore);
|
|
512
397
|
}
|
|
513
|
-
//# sourceMappingURL=
|
|
398
|
+
//# sourceMappingURL=cards.js.map
|