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
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** customer_note object: many discrete notes per free-form `customer` column (no entities FK yet), each with its own supersede chain.
|
|
2
|
+
* The `customer_notes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
3
|
+
import { checkText, requireLine } from './fields.js';
|
|
4
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
5
|
+
export const VALID_NOTE_STATES = new Set([
|
|
6
|
+
'active',
|
|
7
|
+
'superseded',
|
|
8
|
+
'closed',
|
|
9
|
+
]);
|
|
10
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). note is a body, so a larger cap
|
|
11
|
+
* than the 4096 short-field convention. */
|
|
12
|
+
export const MAX_CUSTOMER_LEN = 256;
|
|
13
|
+
export const MAX_NOTE_LEN = 8192;
|
|
14
|
+
export const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
15
|
+
/** Recall-surface content for the memory mirror: customer + note. Named (mirrors
|
|
16
|
+
* buildBriefContent) so the recall surface is deterministic + unit-testable. */
|
|
17
|
+
function buildNoteContent(customer, note) {
|
|
18
|
+
return `${customer}\n\n${note}`;
|
|
19
|
+
}
|
|
20
|
+
export const CUSTOMER_NOTE = {
|
|
21
|
+
kind: 'customer_note',
|
|
22
|
+
label: 'note',
|
|
23
|
+
plural: 'notes',
|
|
24
|
+
fn: { get: 'loadCustomerNoteById', close: 'closeCustomerNote', list: 'loadCustomerNotes', save: 'saveCustomerNote' },
|
|
25
|
+
states: VALID_NOTE_STATES,
|
|
26
|
+
closableFrom: ['active'],
|
|
27
|
+
draft(opts) {
|
|
28
|
+
// The customer becomes a `customer:<lc>` recall tag and an identifier, so it must be one line.
|
|
29
|
+
const customer = requireLine(opts.customer, MAX_CUSTOMER_LEN, {
|
|
30
|
+
required: 'saveCustomerNote: customer is required',
|
|
31
|
+
singleLine: 'saveCustomerNote: customer must be a single line (no newlines)',
|
|
32
|
+
tooLong: `saveCustomerNote: customer exceeds the ${MAX_CUSTOMER_LEN}-char cap`,
|
|
33
|
+
});
|
|
34
|
+
checkText(opts.note, MAX_NOTE_LEN, {
|
|
35
|
+
required: 'saveCustomerNote: note is required',
|
|
36
|
+
tooLong: `saveCustomerNote: note exceeds the ${MAX_NOTE_LEN}-char cap`,
|
|
37
|
+
});
|
|
38
|
+
checkText(opts.changeSummary, MAX_CHANGE_SUMMARY_LEN, {
|
|
39
|
+
tooLong: `saveCustomerNote: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
fields: { customer, note: opts.note },
|
|
43
|
+
content: buildNoteContent(customer, opts.note),
|
|
44
|
+
tags: [`customer:${customer.toLowerCase()}`, ...(opts.extraTags ?? [])],
|
|
45
|
+
supersedesId: opts.supersedesNoteId,
|
|
46
|
+
changeSummary: opts.changeSummary,
|
|
47
|
+
at: new Date().toISOString(),
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/** Create a customer_note, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
52
|
+
* The mirror carries a `customer:<lc>` tag so scope-aware recall treats the note as entity-local. */
|
|
53
|
+
export function saveCustomerNote(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
54
|
+
return saveObjectAt(CUSTOMER_NOTE, { hippoRoot, tenantId, actor }, opts);
|
|
55
|
+
}
|
|
56
|
+
/** Close (retire) an active note; CAS on status='active', 0 changes means not-found or not-active. */
|
|
57
|
+
export function closeCustomerNote(hippoRoot, tenantId, id, actor = 'cli') {
|
|
58
|
+
return closeObjectAt(hippoRoot, CUSTOMER_NOTE, tenantId, id, actor);
|
|
59
|
+
}
|
|
60
|
+
export function loadCustomerNoteById(hippoRoot, tenantId, id) {
|
|
61
|
+
return objectByIdAt(hippoRoot, CUSTOMER_NOTE, tenantId, id);
|
|
62
|
+
}
|
|
63
|
+
export function loadCustomerNotes(hippoRoot, tenantId, opts = {}) {
|
|
64
|
+
return listObjectsAt(hippoRoot, CUSTOMER_NOTE, tenantId, { status: opts.status, filter: opts.customer, limit: opts.limit, after: opts.after });
|
|
65
|
+
}
|
|
66
|
+
/** All ACTIVE notes for a customer, newest first. Returns a LIST, unlike project_brief's single-or-null
|
|
67
|
+
* loadActiveBriefForRepo: a customer accrues many notes. */
|
|
68
|
+
export function loadActiveNotesForCustomer(hippoRoot, tenantId, customer, opts = {}) {
|
|
69
|
+
return loadCustomerNotes(hippoRoot, tenantId, { customer, status: 'active', limit: opts.limit });
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=customer-notes.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Decision object: the `decisions` table is the source of truth, so an in-force decision stays `active` despite memory decay.
|
|
2
|
+
* The memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall only; saveDecision commits both in one `objects` transaction. */
|
|
3
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
4
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
+
import type { Decision, DecisionStatus } from '../store/object-types.js';
|
|
7
|
+
export type { Decision, DecisionStatus } from '../store/object-types.js';
|
|
8
|
+
export declare const VALID_DECISION_STATES: ReadonlySet<DecisionStatus>;
|
|
9
|
+
export interface SaveDecisionOpts {
|
|
10
|
+
decisionText: string;
|
|
11
|
+
context?: string;
|
|
12
|
+
/** Table id of an ACTIVE decision this one supersedes; the CLI resolves a `--supersedes <memory-id>`
|
|
13
|
+
* via resolveActiveDecisionIdByMemory, HTTP/SDK pass the table id. */
|
|
14
|
+
supersedesDecisionId?: number;
|
|
15
|
+
/** Extra memory tags merged after ['decision'] (the CLI passes path-context
|
|
16
|
+
* tags; HTTP/SDK pass none). */
|
|
17
|
+
extraTags?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface ListDecisionsOpts {
|
|
20
|
+
status?: DecisionStatus;
|
|
21
|
+
limit?: number;
|
|
22
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
23
|
+
after?: KeysetPosition;
|
|
24
|
+
}
|
|
25
|
+
export declare const DECISION: SavableDescriptor<'decision', SaveDecisionOpts>;
|
|
26
|
+
/** Create a decision; the memory mirror and the row commit in one transaction.
|
|
27
|
+
* Superseding CASes the old row (WHERE status='active'), so a duplicate supersede aborts the whole write. */
|
|
28
|
+
export declare function saveDecision(hippoRoot: string, tenantId: string, opts: SaveDecisionOpts, actor?: string): Decision;
|
|
29
|
+
/** Weaken the memory a new decision replaces, once the save has committed: half-life halved to a day at least, marked stale, tagged `superseded`. */
|
|
30
|
+
export declare function weakenSupersededMemory(hippoRoot: string, entry: MemoryEntry, actor?: string): void;
|
|
31
|
+
/** Close (retire) an active decision with no successor; the memory mirror is not mutated. */
|
|
32
|
+
export declare function closeDecision(hippoRoot: string, tenantId: string, id: number, actor?: string): Decision;
|
|
33
|
+
export declare function loadDecisionById(hippoRoot: string, tenantId: string, id: number): Decision | null;
|
|
34
|
+
export declare function loadDecisions(hippoRoot: string, tenantId: string, opts?: ListDecisionsOpts): Decision[];
|
|
35
|
+
export declare function loadActiveDecisions(hippoRoot: string, tenantId: string, opts?: {
|
|
36
|
+
limit?: number;
|
|
37
|
+
}): Decision[];
|
|
38
|
+
/** Resolve a `--supersedes <memory-id>` to the table id of the ACTIVE decision backed by that memory, or null.
|
|
39
|
+
* Exported so the CLI's backward-compat path is testable at the store layer. */
|
|
40
|
+
export declare function resolveActiveDecisionIdByMemory(hippoRoot: string, tenantId: string, memoryId: string): number | null;
|
|
41
|
+
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Decision object: the `decisions` table is the source of truth, so an in-force decision stays `active` despite memory decay.
|
|
2
|
+
* The memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall only; saveDecision commits both in one `objects` transaction. */
|
|
3
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
4
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
5
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
6
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
7
|
+
import { objectIdByMemory } from '../store/sqlite/objects-group.js';
|
|
8
|
+
const SUPERSEDED_TAG = 'superseded';
|
|
9
|
+
export const VALID_DECISION_STATES = new Set([
|
|
10
|
+
'active',
|
|
11
|
+
'superseded',
|
|
12
|
+
'closed',
|
|
13
|
+
]);
|
|
14
|
+
export const DECISION = {
|
|
15
|
+
kind: 'decision',
|
|
16
|
+
label: 'decision',
|
|
17
|
+
plural: 'decisions',
|
|
18
|
+
fn: { get: 'loadDecisionById', close: 'closeDecision', list: 'loadDecisions', save: 'saveDecision' },
|
|
19
|
+
states: VALID_DECISION_STATES,
|
|
20
|
+
closableFrom: ['active'],
|
|
21
|
+
draft(opts) {
|
|
22
|
+
if (!opts.decisionText)
|
|
23
|
+
throw new BadRequestError('saveDecision: decisionText is required');
|
|
24
|
+
return {
|
|
25
|
+
fields: { decisionText: opts.decisionText, context: opts.context },
|
|
26
|
+
content: opts.context ? `${opts.decisionText}\n\nContext: ${opts.context}` : opts.decisionText,
|
|
27
|
+
tags: opts.extraTags ?? [],
|
|
28
|
+
supersedesId: opts.supersedesDecisionId,
|
|
29
|
+
at: new Date().toISOString(),
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/** Create a decision; the memory mirror and the row commit in one transaction.
|
|
34
|
+
* Superseding CASes the old row (WHERE status='active'), so a duplicate supersede aborts the whole write. */
|
|
35
|
+
export function saveDecision(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
36
|
+
return saveObjectAt(DECISION, { hippoRoot, tenantId, actor }, opts);
|
|
37
|
+
}
|
|
38
|
+
/** Weaken the memory a new decision replaces, once the save has committed: half-life halved to a day at least, marked stale, tagged `superseded`. */
|
|
39
|
+
export function weakenSupersededMemory(hippoRoot, entry, actor = 'cli') {
|
|
40
|
+
const tags = entry.tags.includes(SUPERSEDED_TAG) ? entry.tags : [...entry.tags, SUPERSEDED_TAG];
|
|
41
|
+
const halved = Math.max(1, Math.floor(entry.half_life_days / 2));
|
|
42
|
+
writeEntry(hippoRoot, { ...entry, half_life_days: halved, confidence: 'stale', tags }, { actor });
|
|
43
|
+
}
|
|
44
|
+
/** Close (retire) an active decision with no successor; the memory mirror is not mutated. */
|
|
45
|
+
export function closeDecision(hippoRoot, tenantId, id, actor = 'cli') {
|
|
46
|
+
return closeObjectAt(hippoRoot, DECISION, tenantId, id, actor);
|
|
47
|
+
}
|
|
48
|
+
export function loadDecisionById(hippoRoot, tenantId, id) {
|
|
49
|
+
return objectByIdAt(hippoRoot, DECISION, tenantId, id);
|
|
50
|
+
}
|
|
51
|
+
export function loadDecisions(hippoRoot, tenantId, opts = {}) {
|
|
52
|
+
return listObjectsAt(hippoRoot, DECISION, tenantId, opts);
|
|
53
|
+
}
|
|
54
|
+
export function loadActiveDecisions(hippoRoot, tenantId, opts = {}) {
|
|
55
|
+
return loadDecisions(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
56
|
+
}
|
|
57
|
+
/** Resolve a `--supersedes <memory-id>` to the table id of the ACTIVE decision backed by that memory, or null.
|
|
58
|
+
* Exported so the CLI's backward-compat path is testable at the store layer. */
|
|
59
|
+
export function resolveActiveDecisionIdByMemory(hippoRoot, tenantId, memoryId) {
|
|
60
|
+
assertTenantId('resolveActiveDecisionIdByMemory', tenantId);
|
|
61
|
+
return objectIdByMemory(hippoRoot, tenantId, 'decision', 'active', memoryId);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=decisions.js.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
2
|
+
import type { ObjectByKind, ObjectFields, ObjectKind, SavableKind } from '../store/object-types.js';
|
|
3
|
+
export interface ObjectDescriptor<K extends ObjectKind> {
|
|
4
|
+
readonly kind: K;
|
|
5
|
+
/** The nouns error text uses: "brief 3 not found", "only active briefs". */
|
|
6
|
+
readonly label: string;
|
|
7
|
+
readonly plural: string;
|
|
8
|
+
/** The exported function names; each one prefixes the errors of its own call. */
|
|
9
|
+
readonly fn: {
|
|
10
|
+
readonly get: string;
|
|
11
|
+
readonly close: string;
|
|
12
|
+
readonly list: string;
|
|
13
|
+
};
|
|
14
|
+
readonly states: ReadonlySet<ObjectByKind[K]['status']>;
|
|
15
|
+
/** The statuses a close may start from. */
|
|
16
|
+
readonly closableFrom: readonly ObjectByKind[K]['status'][];
|
|
17
|
+
/** Said in place of "not <closable statuses>" when a close is refused; incidents say "already closed". */
|
|
18
|
+
readonly closeRefusal?: string;
|
|
19
|
+
}
|
|
20
|
+
/** One save, checked and resolved before a store is asked. */
|
|
21
|
+
export interface ObjectDraft<K extends SavableKind> {
|
|
22
|
+
readonly fields: ObjectFields[K];
|
|
23
|
+
/** The mirror memory's text, and its tags after the kind's own. */
|
|
24
|
+
readonly content: string;
|
|
25
|
+
readonly tags: readonly string[];
|
|
26
|
+
/** The active object this one replaces. */
|
|
27
|
+
readonly supersedesId: number | undefined;
|
|
28
|
+
/** What changed; stored only on a versioned successor. */
|
|
29
|
+
readonly changeSummary?: string;
|
|
30
|
+
/** Read once the checks pass, so one instant stamps everything the save writes. */
|
|
31
|
+
readonly at: string;
|
|
32
|
+
}
|
|
33
|
+
/** A kind the shared save writes: active rows, replaced by supersede. `W` is the options its module's save takes. */
|
|
34
|
+
export interface SavableDescriptor<K extends SavableKind, W> extends ObjectDescriptor<K> {
|
|
35
|
+
readonly fn: {
|
|
36
|
+
readonly get: string;
|
|
37
|
+
readonly close: string;
|
|
38
|
+
readonly list: string;
|
|
39
|
+
readonly save: string;
|
|
40
|
+
};
|
|
41
|
+
/** Throws BadRequestError for options the kind refuses. */
|
|
42
|
+
readonly draft: (opts: W) => ObjectDraft<K>;
|
|
43
|
+
}
|
|
44
|
+
export interface ObjectListOpts<K extends ObjectKind> {
|
|
45
|
+
status?: ObjectByKind[K]['status'];
|
|
46
|
+
/** The value the kind's one filter column must equal: a customer note's customer, a project brief's repo. */
|
|
47
|
+
filter?: string;
|
|
48
|
+
limit?: number;
|
|
49
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
50
|
+
after?: KeysetPosition;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// The words and rules that differ between the typed objects (decision, project brief and the rest), held as data so one lifecycle serves every kind.
|
|
2
|
+
// A kind's table, columns and audit keys sit behind the `objects` store group.
|
|
3
|
+
export {};
|
|
4
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface LineMessages {
|
|
2
|
+
readonly required: string;
|
|
3
|
+
readonly singleLine: string;
|
|
4
|
+
readonly tooLong: string;
|
|
5
|
+
}
|
|
6
|
+
/** A one-line name such as a repo or a customer: trimmed first, because the trimmed value is what gets stored and matched. */
|
|
7
|
+
export declare function requireLine(value: string, max: number, m: LineMessages): string;
|
|
8
|
+
export interface TextMessages {
|
|
9
|
+
/** Leave out for an optional field. */
|
|
10
|
+
readonly required?: string;
|
|
11
|
+
readonly tooLong: string;
|
|
12
|
+
}
|
|
13
|
+
/** A body stored as written: blank fails a required one, and the cap counts the untrimmed length. */
|
|
14
|
+
export declare function checkText(value: string | undefined, max: number, m: TextMessages): void;
|
|
15
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Field checks the typed objects share. The module passes each error text in full, because the wording differs per type.
|
|
2
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
3
|
+
/** A one-line name such as a repo or a customer: trimmed first, because the trimmed value is what gets stored and matched. */
|
|
4
|
+
export function requireLine(value, max, m) {
|
|
5
|
+
const line = (value ?? '').trim();
|
|
6
|
+
if (line.length === 0)
|
|
7
|
+
throw new BadRequestError(m.required);
|
|
8
|
+
if (/[\r\n]/.test(line))
|
|
9
|
+
throw new BadRequestError(m.singleLine);
|
|
10
|
+
if (line.length > max)
|
|
11
|
+
throw new BadRequestError(m.tooLong);
|
|
12
|
+
return line;
|
|
13
|
+
}
|
|
14
|
+
/** A body stored as written: blank fails a required one, and the cap counts the untrimmed length. */
|
|
15
|
+
export function checkText(value, max, m) {
|
|
16
|
+
if (m.required !== undefined && (!value || value.trim().length === 0))
|
|
17
|
+
throw new BadRequestError(m.required);
|
|
18
|
+
if (value !== undefined && value.length > max)
|
|
19
|
+
throw new BadRequestError(m.tooLong);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Incident object: a postmortem capsule with lifecycle open -> resolved -> closed (no supersede chain) and optional linked receipts.
|
|
2
|
+
* The `incidents` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
|
|
3
|
+
* linked_memory_ids must all exist in the SAME tenant or save throws before the insert. */
|
|
4
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
|
+
import type { ObjectDescriptor } from './descriptor.js';
|
|
6
|
+
import type { Incident, IncidentStatus } from '../store/object-types.js';
|
|
7
|
+
import { type Objects } from '../store/port.js';
|
|
8
|
+
export type { Incident, IncidentStatus } from '../store/object-types.js';
|
|
9
|
+
export declare const VALID_INCIDENT_STATES: ReadonlySet<IncidentStatus>;
|
|
10
|
+
export interface SaveIncidentOpts {
|
|
11
|
+
incidentText: string;
|
|
12
|
+
context?: string;
|
|
13
|
+
/** Memory ids (linked receipts) that are this incident's evidence. Each must
|
|
14
|
+
* exist in the same tenant; cross-tenant/nonexistent ids are rejected. */
|
|
15
|
+
linkedMemoryIds?: string[];
|
|
16
|
+
/** Extra memory tags merged after ['incident'] (the CLI passes path-context
|
|
17
|
+
* tags; HTTP/SDK pass none). */
|
|
18
|
+
extraTags?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface ListIncidentsOpts {
|
|
21
|
+
status?: IncidentStatus;
|
|
22
|
+
limit?: number;
|
|
23
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
24
|
+
after?: KeysetPosition;
|
|
25
|
+
}
|
|
26
|
+
export declare const INCIDENT: ObjectDescriptor<'incident'>;
|
|
27
|
+
/** Opens an incident with its mirror memory (content "<text>\n\nContext: <context>" when
|
|
28
|
+
* context is given) in one write; a linked memory outside the tenant refuses the whole write. */
|
|
29
|
+
export declare function saveIncident(hippoRoot: string, tenantId: string, opts: SaveIncidentOpts, actor?: string): Incident;
|
|
30
|
+
/** `saveIncident` over a served store's group. */
|
|
31
|
+
export declare function openIncident(objects: Objects, hippoRoot: string, tenantId: string, opts: SaveIncidentOpts, actor: string): Promise<Incident>;
|
|
32
|
+
/** Moves an open incident to resolved and keeps it on record; a missing incident and one that is not open are told apart. */
|
|
33
|
+
export declare function resolveIncident(hippoRoot: string, tenantId: string, id: number, resolutionText: string, actor?: string): Incident;
|
|
34
|
+
/** `resolveIncident` over a served store's group. */
|
|
35
|
+
export declare function resolveOpenIncident(objects: Objects, tenantId: string, id: number, resolutionText: string, actor: string): Promise<Incident>;
|
|
36
|
+
/** Close (retire) an incident from open or resolved; sets closed_at only, the memory mirror is not mutated. */
|
|
37
|
+
export declare function closeIncident(hippoRoot: string, tenantId: string, id: number, actor?: string): Incident;
|
|
38
|
+
export declare function loadIncidentById(hippoRoot: string, tenantId: string, id: number): Incident | null;
|
|
39
|
+
export declare function loadIncidents(hippoRoot: string, tenantId: string, opts?: ListIncidentsOpts): Incident[];
|
|
40
|
+
export declare function loadOpenIncidents(hippoRoot: string, tenantId: string, opts?: {
|
|
41
|
+
limit?: number;
|
|
42
|
+
}): Incident[];
|
|
43
|
+
/** Resolve a memory id to the table id of the OPEN incident backed by it, or null; exported for store-layer tests. */
|
|
44
|
+
export declare function resolveActiveIncidentIdByMemory(hippoRoot: string, tenantId: string, memoryId: string): number | null;
|
|
45
|
+
//# sourceMappingURL=incidents.d.ts.map
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/** Incident object: a postmortem capsule with lifecycle open -> resolved -> closed (no supersede chain) and optional linked receipts.
|
|
2
|
+
* The `incidents` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
|
|
3
|
+
* linked_memory_ids must all exist in the SAME tenant or save throws before the insert. */
|
|
4
|
+
import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
5
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
6
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, objectMirror } from './lifecycle.js';
|
|
7
|
+
import { isObjectRefusal } from '../store/port.js';
|
|
8
|
+
import { objectIdByMemory, sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
9
|
+
export const VALID_INCIDENT_STATES = new Set([
|
|
10
|
+
'open',
|
|
11
|
+
'resolved',
|
|
12
|
+
'closed',
|
|
13
|
+
]);
|
|
14
|
+
// No draft: an incident is opened with linked memories and is never superseded, so it keeps its own save.
|
|
15
|
+
export const INCIDENT = {
|
|
16
|
+
kind: 'incident',
|
|
17
|
+
label: 'incident',
|
|
18
|
+
plural: 'incidents',
|
|
19
|
+
fn: { get: 'loadIncidentById', close: 'closeIncident', list: 'loadIncidents' },
|
|
20
|
+
states: VALID_INCIDENT_STATES,
|
|
21
|
+
closableFrom: ['open', 'resolved'],
|
|
22
|
+
closeRefusal: 'already closed',
|
|
23
|
+
};
|
|
24
|
+
/** One open, checked before a store is asked; `hippoRoot` is read only for the configured half-life. */
|
|
25
|
+
function incidentOpen(hippoRoot, tenantId, opts, actor) {
|
|
26
|
+
assertTenantId('saveIncident', tenantId);
|
|
27
|
+
if (!opts.incidentText)
|
|
28
|
+
throw new BadRequestError('saveIncident: incidentText is required');
|
|
29
|
+
const at = new Date().toISOString();
|
|
30
|
+
const content = opts.context
|
|
31
|
+
? `${opts.incidentText}\n\nContext: ${opts.context}`
|
|
32
|
+
: opts.incidentText;
|
|
33
|
+
const mirror = objectMirror(hippoRoot, tenantId, 'incident', { content, tags: opts.extraTags ?? [] });
|
|
34
|
+
const fields = { incidentText: opts.incidentText, context: opts.context ?? undefined, linkedMemoryIds: opts.linkedMemoryIds ?? [] };
|
|
35
|
+
return { mirror, fields, actor, at };
|
|
36
|
+
}
|
|
37
|
+
function opened(tenantId, written) {
|
|
38
|
+
if (!('refused' in written))
|
|
39
|
+
return written;
|
|
40
|
+
// A linked id of another tenant reads as missing, so an unverifiable receipt is never recorded.
|
|
41
|
+
if (written.refused === 'unlinked')
|
|
42
|
+
throw new NotFoundError(`saveIncident: linked memory ${written.memoryId} not found for tenant ${tenantId}`);
|
|
43
|
+
throw new Error('saveIncident: failed to reload saved incident row');
|
|
44
|
+
}
|
|
45
|
+
/** Opens an incident with its mirror memory (content "<text>\n\nContext: <context>" when
|
|
46
|
+
* context is given) in one write; a linked memory outside the tenant refuses the whole write. */
|
|
47
|
+
export function saveIncident(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
48
|
+
return opened(tenantId, sqliteObjects(hippoRoot).openIncident(tenantId, incidentOpen(hippoRoot, tenantId, opts, actor)));
|
|
49
|
+
}
|
|
50
|
+
/** `saveIncident` over a served store's group. */
|
|
51
|
+
export async function openIncident(objects, hippoRoot, tenantId, opts, actor) {
|
|
52
|
+
return opened(tenantId, await objects.openIncident(tenantId, incidentOpen(hippoRoot, tenantId, opts, actor)));
|
|
53
|
+
}
|
|
54
|
+
function resolving(tenantId, resolutionText, actor) {
|
|
55
|
+
assertTenantId('resolveIncident', tenantId);
|
|
56
|
+
if (!resolutionText || !resolutionText.trim()) {
|
|
57
|
+
throw new BadRequestError('resolveIncident: resolutionText is required (non-empty)');
|
|
58
|
+
}
|
|
59
|
+
return { text: resolutionText, actor, at: new Date().toISOString() };
|
|
60
|
+
}
|
|
61
|
+
function resolved(tenantId, id, written) {
|
|
62
|
+
if (!isObjectRefusal(written))
|
|
63
|
+
return written;
|
|
64
|
+
if (written.refused === 'missing')
|
|
65
|
+
throw new NotFoundError(`resolveIncident: incident ${id} not found for tenant ${tenantId}`);
|
|
66
|
+
if (written.refused !== 'status')
|
|
67
|
+
throw new NotFoundError(`resolveIncident: incident ${id} not found after UPDATE`);
|
|
68
|
+
throw new ConflictError(`resolveIncident: incident ${id} is not open (status='${written.status}'); only open incidents can be resolved.`);
|
|
69
|
+
}
|
|
70
|
+
/** Moves an open incident to resolved and keeps it on record; a missing incident and one that is not open are told apart. */
|
|
71
|
+
export function resolveIncident(hippoRoot, tenantId, id, resolutionText, actor = 'cli') {
|
|
72
|
+
return resolved(tenantId, id, sqliteObjects(hippoRoot).resolveIncident(tenantId, id, resolving(tenantId, resolutionText, actor)));
|
|
73
|
+
}
|
|
74
|
+
/** `resolveIncident` over a served store's group. */
|
|
75
|
+
export async function resolveOpenIncident(objects, tenantId, id, resolutionText, actor) {
|
|
76
|
+
return resolved(tenantId, id, await objects.resolveIncident(tenantId, id, resolving(tenantId, resolutionText, actor)));
|
|
77
|
+
}
|
|
78
|
+
/** Close (retire) an incident from open or resolved; sets closed_at only, the memory mirror is not mutated. */
|
|
79
|
+
export function closeIncident(hippoRoot, tenantId, id, actor = 'cli') {
|
|
80
|
+
return closeObjectAt(hippoRoot, INCIDENT, tenantId, id, actor);
|
|
81
|
+
}
|
|
82
|
+
export function loadIncidentById(hippoRoot, tenantId, id) {
|
|
83
|
+
return objectByIdAt(hippoRoot, INCIDENT, tenantId, id);
|
|
84
|
+
}
|
|
85
|
+
export function loadIncidents(hippoRoot, tenantId, opts = {}) {
|
|
86
|
+
return listObjectsAt(hippoRoot, INCIDENT, tenantId, opts);
|
|
87
|
+
}
|
|
88
|
+
export function loadOpenIncidents(hippoRoot, tenantId, opts = {}) {
|
|
89
|
+
return loadIncidents(hippoRoot, tenantId, { status: 'open', limit: opts.limit });
|
|
90
|
+
}
|
|
91
|
+
/** Resolve a memory id to the table id of the OPEN incident backed by it, or null; exported for store-layer tests. */
|
|
92
|
+
export function resolveActiveIncidentIdByMemory(hippoRoot, tenantId, memoryId) {
|
|
93
|
+
assertTenantId('resolveActiveIncidentIdByMemory', tenantId);
|
|
94
|
+
return objectIdByMemory(hippoRoot, tenantId, 'incident', 'open', memoryId);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=incidents.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { ObjectByKind, ObjectKind, SavableKind } from '../store/object-types.js';
|
|
3
|
+
import { type Objects } from '../store/port.js';
|
|
4
|
+
import type { ObjectDescriptor, ObjectListOpts, SavableDescriptor } from './descriptor.js';
|
|
5
|
+
/** Newest first. */
|
|
6
|
+
export declare function listObjectsAt<K extends ObjectKind>(hippoRoot: string, d: ObjectDescriptor<K>, tenantId: string, opts: ObjectListOpts<K>): ObjectByKind[K][];
|
|
7
|
+
export declare function listObjects<K extends ObjectKind>(objects: Objects, d: ObjectDescriptor<K>, tenantId: string, opts: ObjectListOpts<K>): Promise<ObjectByKind[K][]>;
|
|
8
|
+
export declare function objectByIdAt<K extends ObjectKind>(hippoRoot: string, d: ObjectDescriptor<K>, tenantId: string, id: number): ObjectByKind[K] | null;
|
|
9
|
+
export declare function objectById<K extends ObjectKind>(objects: Objects, d: ObjectDescriptor<K>, tenantId: string, id: number): Promise<ObjectByKind[K] | null>;
|
|
10
|
+
/** Retires one object; its mirror memory stays as saved. */
|
|
11
|
+
export declare function closeObjectAt<K extends ObjectKind>(hippoRoot: string, d: ObjectDescriptor<K>, tenantId: string, id: number, actor: string): ObjectByKind[K];
|
|
12
|
+
export declare function closeObject<K extends ObjectKind>(objects: Objects, d: ObjectDescriptor<K>, tenantId: string, id: number, actor: string): Promise<ObjectByKind[K]>;
|
|
13
|
+
/** The memory a typed object writes beside its row, so recall finds the object. */
|
|
14
|
+
export declare function objectMirror(hippoRoot: string, tenantId: string, source: ObjectKind, text: {
|
|
15
|
+
readonly content: string;
|
|
16
|
+
readonly tags: readonly string[];
|
|
17
|
+
}): MemoryEntry;
|
|
18
|
+
/** Where a save lands and who makes it; `hippoRoot` is read only for the configured half-life. */
|
|
19
|
+
export interface ObjectSaveSite {
|
|
20
|
+
readonly hippoRoot: string;
|
|
21
|
+
readonly tenantId: string;
|
|
22
|
+
readonly actor: string;
|
|
23
|
+
}
|
|
24
|
+
/** Creates an object, or the version that replaces the one its options name, with its mirror memory in one write. */
|
|
25
|
+
export declare function saveObjectAt<K extends SavableKind, W>(d: SavableDescriptor<K, W>, site: ObjectSaveSite, opts: W): ObjectByKind[K];
|
|
26
|
+
export declare function saveObject<K extends SavableKind, W>(objects: Objects, d: SavableDescriptor<K, W>, site: ObjectSaveSite, opts: W): Promise<ObjectByKind[K]>;
|
|
27
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Save, close, load-by-id and list for every typed object: the checks, the mirror memory and the error text, over the `objects` store group.
|
|
2
|
+
// Each flow is written twice over the same steps: `...At` answers at once on hippo.db for the CLI, and the other awaits a served store's group for the routes.
|
|
3
|
+
// The tenant, the fields and the list status are checked first, so a bad request fails before a store is asked.
|
|
4
|
+
import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
5
|
+
import { loadConfig } from '../core/config.js';
|
|
6
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
7
|
+
import { isObjectRefusal } from '../store/port.js';
|
|
8
|
+
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
9
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
10
|
+
/** An empty status or filter lists every row, as an absent one does. */
|
|
11
|
+
function listQuery(d, tenantId, opts) {
|
|
12
|
+
assertTenantId(d.fn.list, tenantId);
|
|
13
|
+
if (opts.status && !d.states.has(opts.status)) {
|
|
14
|
+
throw new BadRequestError(`${d.fn.list}: status must be one of ${Array.from(d.states).join('|')}; got ${opts.status}`);
|
|
15
|
+
}
|
|
16
|
+
return { status: opts.status || undefined, filter: opts.filter || undefined, limit: opts.limit ?? 100, after: opts.after };
|
|
17
|
+
}
|
|
18
|
+
/** Newest first. */
|
|
19
|
+
export function listObjectsAt(hippoRoot, d, tenantId, opts) {
|
|
20
|
+
return sqliteObjects(hippoRoot).listObjects(tenantId, d.kind, listQuery(d, tenantId, opts));
|
|
21
|
+
}
|
|
22
|
+
export async function listObjects(objects, d, tenantId, opts) {
|
|
23
|
+
return objects.listObjects(tenantId, d.kind, listQuery(d, tenantId, opts));
|
|
24
|
+
}
|
|
25
|
+
export function objectByIdAt(hippoRoot, d, tenantId, id) {
|
|
26
|
+
assertTenantId(d.fn.get, tenantId);
|
|
27
|
+
return sqliteObjects(hippoRoot).objectById(tenantId, d.kind, id);
|
|
28
|
+
}
|
|
29
|
+
export async function objectById(objects, d, tenantId, id) {
|
|
30
|
+
assertTenantId(d.fn.get, tenantId);
|
|
31
|
+
return objects.objectById(tenantId, d.kind, id);
|
|
32
|
+
}
|
|
33
|
+
function closing(d, tenantId, actor) {
|
|
34
|
+
assertTenantId(d.fn.close, tenantId);
|
|
35
|
+
return { from: d.closableFrom, actor, at: new Date().toISOString() };
|
|
36
|
+
}
|
|
37
|
+
function closed(d, tenantId, id, written) {
|
|
38
|
+
if (!isObjectRefusal(written))
|
|
39
|
+
return written;
|
|
40
|
+
if (written.refused === 'missing')
|
|
41
|
+
throw new NotFoundError(`${d.fn.close}: ${d.label} ${id} not found for tenant ${tenantId}`);
|
|
42
|
+
if (written.refused !== 'status')
|
|
43
|
+
throw new NotFoundError(`${d.fn.close}: ${d.label} ${id} not found after UPDATE`);
|
|
44
|
+
const closable = d.closableFrom.join(' or ');
|
|
45
|
+
throw new ConflictError(`${d.fn.close}: ${d.label} ${id} is ${d.closeRefusal ?? `not ${closable}`} (status='${written.status}'); only ${closable} ${d.plural} can be closed.`);
|
|
46
|
+
}
|
|
47
|
+
/** Retires one object; its mirror memory stays as saved. */
|
|
48
|
+
export function closeObjectAt(hippoRoot, d, tenantId, id, actor) {
|
|
49
|
+
const close = closing(d, tenantId, actor);
|
|
50
|
+
return closed(d, tenantId, id, sqliteObjects(hippoRoot).closeObject(tenantId, d.kind, id, close));
|
|
51
|
+
}
|
|
52
|
+
export async function closeObject(objects, d, tenantId, id, actor) {
|
|
53
|
+
const close = closing(d, tenantId, actor);
|
|
54
|
+
return closed(d, tenantId, id, await objects.closeObject(tenantId, d.kind, id, close));
|
|
55
|
+
}
|
|
56
|
+
/** The memory a typed object writes beside its row, so recall finds the object. */
|
|
57
|
+
export function objectMirror(hippoRoot, tenantId, source, text) {
|
|
58
|
+
return createMemory(text.content, {
|
|
59
|
+
tags: [source, ...text.tags],
|
|
60
|
+
layer: Layer.Semantic,
|
|
61
|
+
confidence: 'verified',
|
|
62
|
+
source,
|
|
63
|
+
baseHalfLifeDays: loadConfig(hippoRoot).defaultHalfLifeDays,
|
|
64
|
+
tenantId,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function objectSave(site, kind, draft) {
|
|
68
|
+
const mirror = objectMirror(site.hippoRoot, site.tenantId, kind, draft);
|
|
69
|
+
return { mirror, fields: draft.fields, supersedesId: draft.supersedesId, changeSummary: draft.changeSummary, actor: site.actor, at: draft.at };
|
|
70
|
+
}
|
|
71
|
+
function saved(d, tenantId, replaced, written) {
|
|
72
|
+
if (!isObjectRefusal(written))
|
|
73
|
+
return written;
|
|
74
|
+
switch (written.refused) {
|
|
75
|
+
case 'missing':
|
|
76
|
+
throw new NotFoundError(`${d.fn.save}: ${d.label} ${replaced} to supersede not found for tenant ${tenantId}`);
|
|
77
|
+
case 'status':
|
|
78
|
+
throw new ConflictError(`${d.fn.save}: ${d.label} ${replaced} is not active (status='${written.status}'); only active ${d.plural} can be superseded.`);
|
|
79
|
+
case 'raced':
|
|
80
|
+
throw new ConflictError(`${d.fn.save}: ${d.label} ${replaced} could not be superseded (no longer active or self-reference).`);
|
|
81
|
+
case 'vanished':
|
|
82
|
+
throw new Error(`${d.fn.save}: failed to reload saved ${d.label} row`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Creates an object, or the version that replaces the one its options name, with its mirror memory in one write. */
|
|
86
|
+
export function saveObjectAt(d, site, opts) {
|
|
87
|
+
assertTenantId(d.fn.save, site.tenantId);
|
|
88
|
+
const draft = d.draft(opts);
|
|
89
|
+
return saved(d, site.tenantId, draft.supersedesId, sqliteObjects(site.hippoRoot).saveObject(site.tenantId, d.kind, objectSave(site, d.kind, draft)));
|
|
90
|
+
}
|
|
91
|
+
export async function saveObject(objects, d, site, opts) {
|
|
92
|
+
assertTenantId(d.fn.save, site.tenantId);
|
|
93
|
+
const draft = d.draft(opts);
|
|
94
|
+
return saved(d, site.tenantId, draft.supersedesId, await objects.saveObject(site.tenantId, d.kind, objectSave(site, d.kind, draft)));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** Policy object: a rule in force over a valid-time range [valid_from, valid_to), evolving via supersession; `loadPoliciesAsOf` queries it.
|
|
2
|
+
* Transaction-time travel (what we believed at past system time T) is deferred. Superseding keeps the predecessor's valid-time range.
|
|
3
|
+
* All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
|
|
4
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
+
import type { Policy, PolicyStatus } from '../store/object-types.js';
|
|
7
|
+
import type { Objects } from '../store/port.js';
|
|
8
|
+
export type { Policy, PolicyStatus } from '../store/object-types.js';
|
|
9
|
+
export declare const VALID_POLICY_STATES: ReadonlySet<PolicyStatus>;
|
|
10
|
+
export interface SavePolicyOpts {
|
|
11
|
+
policyName: string;
|
|
12
|
+
policyText: string;
|
|
13
|
+
/** ISO-8601; normalized to canonical datetime. Defaults to now when omitted. */
|
|
14
|
+
validFrom?: string;
|
|
15
|
+
/** ISO-8601; normalized; must be > validFrom. null/undefined = open-ended. */
|
|
16
|
+
validTo?: string;
|
|
17
|
+
/** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
|
|
18
|
+
changeSummary?: string;
|
|
19
|
+
/** Table id of an ACTIVE policy this new version supersedes. */
|
|
20
|
+
supersedesPolicyId?: number;
|
|
21
|
+
/** Extra memory tags merged after ['policy']. */
|
|
22
|
+
extraTags?: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface ListPoliciesOpts {
|
|
25
|
+
status?: PolicyStatus;
|
|
26
|
+
limit?: number;
|
|
27
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
28
|
+
after?: KeysetPosition;
|
|
29
|
+
}
|
|
30
|
+
/** Parse a date input to a fixed-width ISO-8601 datetime so lexical ordering is sound; throws on an unparseable value.
|
|
31
|
+
* Overflow inputs like '2026-02-30' roll forward per JS Date semantics. */
|
|
32
|
+
export declare function normalizePolicyDate(input: string, label?: string): string;
|
|
33
|
+
/** Normalise valid_from (default `nowIso`) and valid_to (default null), then enforce valid_to > valid_from. */
|
|
34
|
+
export declare function validatePolicyDates(validFromRaw: string | undefined, validToRaw: string | undefined, nowIso: string): {
|
|
35
|
+
validFrom: string;
|
|
36
|
+
validTo: string | null;
|
|
37
|
+
};
|
|
38
|
+
export declare const POLICY: SavableDescriptor<'policy', SavePolicyOpts>;
|
|
39
|
+
/** Create a policy, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
40
|
+
* valid_from defaults to now; valid_to must be > valid_from (validatePolicyDates). */
|
|
41
|
+
export declare function savePolicy(hippoRoot: string, tenantId: string, opts: SavePolicyOpts, actor?: string): Policy;
|
|
42
|
+
/** Close (retire) an active policy with no successor; CAS on status='active', a superseded row is terminal. */
|
|
43
|
+
export declare function closePolicy(hippoRoot: string, tenantId: string, id: number, actor?: string): Policy;
|
|
44
|
+
export declare function loadPolicyById(hippoRoot: string, tenantId: string, id: number): Policy | null;
|
|
45
|
+
export declare function loadPolicies(hippoRoot: string, tenantId: string, opts?: ListPoliciesOpts): Policy[];
|
|
46
|
+
export declare function loadActivePolicies(hippoRoot: string, tenantId: string, opts?: {
|
|
47
|
+
limit?: number;
|
|
48
|
+
}): Policy[];
|
|
49
|
+
/** The policies in force at `asOfDate` (valid-time, half-open [valid_from, valid_to)); superseded rows still answer while the successor is not yet effective.
|
|
50
|
+
* `closed` rows are excluded; a date-only asOfDate means the END of that UTC day (23:59:59.999Z), so a policy created today shows up in "as of today". */
|
|
51
|
+
export declare function loadPoliciesAsOf(hippoRoot: string, tenantId: string, asOfDate: string, opts?: {
|
|
52
|
+
name?: string;
|
|
53
|
+
limit?: number;
|
|
54
|
+
}): Policy[];
|
|
55
|
+
/** `loadPoliciesAsOf` over a served store's group. */
|
|
56
|
+
export declare function policiesAsOf(objects: Objects, tenantId: string, asOfDate: string, opts?: {
|
|
57
|
+
name?: string;
|
|
58
|
+
limit?: number;
|
|
59
|
+
}): Promise<Policy[]>;
|
|
60
|
+
//# sourceMappingURL=policies.d.ts.map
|