hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// Admin routes: API keys, quarantine and the audit log.
|
|
2
|
-
import { AUDIT_OPS } from '../../audit.js';
|
|
3
|
-
import { auditList, authCreate, authListRows, authRevoke, quarantineApprove, quarantineList, quarantineReject } from '../../api.js';
|
|
4
|
-
import { HttpError, readBody, sendJson } from '../../http-util.js';
|
|
2
|
+
import { AUDIT_OPS } from '../../store/audit.js';
|
|
3
|
+
import { auditList, authCreate, authListRows, authRevoke, quarantineApprove, quarantineList, quarantineReject } from '../../api/index.js';
|
|
4
|
+
import { HttpError, readBody, sendJson } from '../../util/http-util.js';
|
|
5
|
+
import { log } from '../../util/log.js';
|
|
5
6
|
import { assertCrossTenantAdmin, buildContextWithAuth } from '../auth.js';
|
|
6
7
|
import { pageOf, parseCursor, setNextCursorHeader } from '../cursor.js';
|
|
7
8
|
import { isSetMember, parseJsonObjectText, parseListLimit, validateIdSegment } from '../validation.js';
|
|
8
|
-
import { isJsonString } from '../../json.js';
|
|
9
|
+
import { isJsonString } from '../../util/json.js';
|
|
9
10
|
const VALID_AUDIT_OPS = new Set(AUDIT_OPS);
|
|
10
11
|
// POST /v1/auth/keys reads its body before auth, so an unauthenticated caller can make the server buffer at most this many bytes and wait at most this many ms.
|
|
11
12
|
// ServeOpts.mintBodyDeadlineMs overrides the wait for tests only, so a 408 test need not sit through it.
|
|
@@ -48,6 +49,10 @@ export async function handleCreateAuthKey({ req, res, opts }) {
|
|
|
48
49
|
label: labelRaw,
|
|
49
50
|
role,
|
|
50
51
|
});
|
|
52
|
+
// The reply cannot change shape, so the server log is where a defaulted admin key gets noticed.
|
|
53
|
+
if (role === undefined && result.role === 'admin') {
|
|
54
|
+
log.warn(`auth key ${result.keyId} was minted with no role in the body, so it is an admin key, and it never expires; send "role": "member" for a narrower one`);
|
|
55
|
+
}
|
|
51
56
|
sendJson(res, 200, result);
|
|
52
57
|
return;
|
|
53
58
|
}
|
|
@@ -99,7 +104,7 @@ export async function handleListQuarantine({ req, res, opts, query }) {
|
|
|
99
104
|
}
|
|
100
105
|
const limit = parseListLimit(query.get('limit'));
|
|
101
106
|
const after = parseCursor(query.get('cursor'), 'string', 'string');
|
|
102
|
-
const page = pageOf(quarantineList(ctx, { status, limit: limit + 1, after }), limit, (q) => ({ key: q.quarantinedAt, id: q.id }));
|
|
107
|
+
const page = pageOf(await quarantineList(ctx, { status, limit: limit + 1, after }), limit, (q) => ({ key: q.quarantinedAt, id: q.id }));
|
|
103
108
|
sendJson(res, 200, { quarantine: page.items, next_cursor: page.nextCursor });
|
|
104
109
|
return;
|
|
105
110
|
}
|
|
@@ -107,7 +112,7 @@ export async function handleListQuarantine({ req, res, opts, query }) {
|
|
|
107
112
|
export async function handleApproveQuarantine({ req, res, opts }, quarantineApproveMatch) {
|
|
108
113
|
validateIdSegment(quarantineApproveMatch.id, 'memory id');
|
|
109
114
|
const ctx = await buildContextWithAuth(req, opts);
|
|
110
|
-
quarantineApprove(ctx, quarantineApproveMatch.id);
|
|
115
|
+
await quarantineApprove(ctx, quarantineApproveMatch.id);
|
|
111
116
|
sendJson(res, 200, { approved: quarantineApproveMatch.id });
|
|
112
117
|
return;
|
|
113
118
|
}
|
|
@@ -115,7 +120,7 @@ export async function handleApproveQuarantine({ req, res, opts }, quarantineAppr
|
|
|
115
120
|
export async function handleRejectQuarantine({ req, res, opts }, quarantineRejectMatch) {
|
|
116
121
|
validateIdSegment(quarantineRejectMatch.id, 'memory id');
|
|
117
122
|
const ctx = await buildContextWithAuth(req, opts);
|
|
118
|
-
quarantineReject(ctx, quarantineRejectMatch.id);
|
|
123
|
+
await quarantineReject(ctx, quarantineRejectMatch.id);
|
|
119
124
|
sendJson(res, 200, { rejected: quarantineRejectMatch.id });
|
|
120
125
|
return;
|
|
121
126
|
}
|
|
@@ -157,7 +162,7 @@ export async function handleListAudit({ req, res, opts, query }) {
|
|
|
157
162
|
if (crossTenant)
|
|
158
163
|
assertCrossTenantAdmin(ctx, '/v1/audit?tenant= for another tenant');
|
|
159
164
|
const effectiveCtx = crossTenant ? { ...ctx, tenantId: tenantOverride } : ctx;
|
|
160
|
-
const page = pageOf(auditList(effectiveCtx, { op, since, limit: limit + 1, after }), limit, (e) => ({ key: e.ts, id: e.id }));
|
|
165
|
+
const page = pageOf(await auditList(effectiveCtx, { op, since, limit: limit + 1, after }), limit, (e) => ({ key: e.ts, id: e.id }));
|
|
161
166
|
setNextCursorHeader(res, page.nextCursor);
|
|
162
167
|
sendJson(res, 200, page.items);
|
|
163
168
|
return;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RouteRequest } from '../types.js';
|
|
2
|
-
export declare function handleCreateCustomerNote(
|
|
3
|
-
export declare function handleListCustomerNotes(
|
|
4
|
-
export declare function handleSupersedeCustomerNote(
|
|
5
|
-
export declare function handleCloseCustomerNote(
|
|
6
|
-
export declare function handleGetCustomerNote(
|
|
2
|
+
export declare function handleCreateCustomerNote(rr: RouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListCustomerNotes(rr: RouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleSupersedeCustomerNote(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseCustomerNote(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetCustomerNote(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=customer-notes.d.ts.map
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
// /v1/customer-notes routes.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { CUSTOMER_NOTE, MAX_CUSTOMER_LEN } from '../../objects/customer-notes.js';
|
|
3
|
+
import { sendJson } from '../../util/http-util.js';
|
|
4
4
|
import { buildContextWithAuth } from '../auth.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
5
|
+
import { parseJsonBody } from '../validation.js';
|
|
6
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
|
|
7
|
+
const noteRoutes = {
|
|
8
|
+
noun: 'customer note',
|
|
9
|
+
field: 'note',
|
|
10
|
+
listField: 'notes',
|
|
11
|
+
object: CUSTOMER_NOTE,
|
|
12
|
+
filterParam: 'customer',
|
|
13
|
+
revise: (body) => {
|
|
14
|
+
const note = requiredString(body, 'note', { max: 8192 });
|
|
15
|
+
const changeSummary = optionalString(body, 'changeSummary', 4096);
|
|
16
|
+
return (existing, id) => ({ customer: existing.customer, note, changeSummary, supersedesNoteId: id });
|
|
17
|
+
},
|
|
18
|
+
};
|
|
8
19
|
// ── customer_note routes ──
|
|
9
20
|
//
|
|
10
21
|
// 5 routes (no assembler/refresh): POST /v1/customer-notes (new; body customer +
|
|
@@ -13,101 +24,25 @@ import { isJsonString } from '../../json.js';
|
|
|
13
24
|
// POST /v1/customer-notes/:id/close. DoS caps: customer 256, note 8192,
|
|
14
25
|
// changeSummary 4096. The store validates + throws; the boundary maps validation ->
|
|
15
26
|
// 400, not-found -> 404, not-active -> 409. Mirrors /v1/project-briefs.
|
|
16
|
-
export async function handleCreateCustomerNote(
|
|
17
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
18
|
-
const body = await parseJsonBody(req, ctx);
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
throw new HttpError(400, `customer exceeds ${MAX_CUSTOMER_LEN}-character cap`);
|
|
25
|
-
}
|
|
26
|
-
const note = body['note'];
|
|
27
|
-
if (!isJsonString(note) || note.trim().length === 0) {
|
|
28
|
-
throw new HttpError(400, 'note is required (non-empty string)');
|
|
29
|
-
}
|
|
30
|
-
if (note.length > 8192) {
|
|
31
|
-
throw new HttpError(400, 'note exceeds 8192-character cap');
|
|
32
|
-
}
|
|
33
|
-
const customerNote = saveCustomerNote(opts.hippoRoot, ctx.tenantId, {
|
|
34
|
-
customer,
|
|
35
|
-
note,
|
|
36
|
-
}, ctx.actor.subject);
|
|
37
|
-
sendJson(res, 201, { note: customerNote });
|
|
38
|
-
return;
|
|
27
|
+
export async function handleCreateCustomerNote(rr) {
|
|
28
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
29
|
+
const body = await parseJsonBody(rr.req, ctx);
|
|
30
|
+
const customerNote = await saveFor(rr, CUSTOMER_NOTE, ctx.tenantId, ctx.actor.subject, {
|
|
31
|
+
customer: requiredString(body, 'customer', { max: MAX_CUSTOMER_LEN }),
|
|
32
|
+
note: requiredString(body, 'note', { max: 8192 }),
|
|
33
|
+
});
|
|
34
|
+
sendJson(rr.res, 201, { note: customerNote });
|
|
39
35
|
}
|
|
40
|
-
export
|
|
41
|
-
|
|
42
|
-
const customerFilter = query.get('customer');
|
|
43
|
-
const limit = parseListLimit(query.get('limit'));
|
|
44
|
-
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
45
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
46
|
-
const listOpts = { limit: limit + 1, after };
|
|
47
|
-
if (customerFilter !== null && customerFilter.trim().length > 0) {
|
|
48
|
-
listOpts.customer = customerFilter.trim();
|
|
49
|
-
}
|
|
50
|
-
if (status !== 'all') {
|
|
51
|
-
if (!isSetMember(VALID_NOTE_STATES, status)) {
|
|
52
|
-
throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
|
|
53
|
-
}
|
|
54
|
-
listOpts.status = status;
|
|
55
|
-
}
|
|
56
|
-
const notes = loadCustomerNotes(opts.hippoRoot, ctx.tenantId, listOpts);
|
|
57
|
-
const page = pageOf(notes, limit, byCreatedAt);
|
|
58
|
-
sendJson(res, 200, { notes: page.items, next_cursor: page.nextCursor });
|
|
59
|
-
return;
|
|
36
|
+
export function handleListCustomerNotes(rr) {
|
|
37
|
+
return listRoute(noteRoutes, rr);
|
|
60
38
|
}
|
|
61
|
-
export
|
|
62
|
-
|
|
63
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
64
|
-
const body = await parseJsonBody(req, ctx);
|
|
65
|
-
const note = body['note'];
|
|
66
|
-
if (!isJsonString(note) || note.trim().length === 0) {
|
|
67
|
-
throw new HttpError(400, 'note is required (non-empty string)');
|
|
68
|
-
}
|
|
69
|
-
if (note.length > 8192) {
|
|
70
|
-
throw new HttpError(400, 'note exceeds 8192-character cap');
|
|
71
|
-
}
|
|
72
|
-
const changeRaw = body['changeSummary'];
|
|
73
|
-
let changeSummary;
|
|
74
|
-
if (changeRaw !== undefined && changeRaw !== null) {
|
|
75
|
-
if (!isJsonString(changeRaw)) {
|
|
76
|
-
throw new HttpError(400, 'changeSummary must be a string');
|
|
77
|
-
}
|
|
78
|
-
if (changeRaw.length > 4096) {
|
|
79
|
-
throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
|
|
80
|
-
}
|
|
81
|
-
changeSummary = changeRaw;
|
|
82
|
-
}
|
|
83
|
-
const existing = loadCustomerNoteById(opts.hippoRoot, ctx.tenantId, id);
|
|
84
|
-
if (!existing) {
|
|
85
|
-
throw new HttpError(404, `customer note ${id} not found`);
|
|
86
|
-
}
|
|
87
|
-
const customerNote = saveCustomerNote(opts.hippoRoot, ctx.tenantId, {
|
|
88
|
-
customer: existing.customer,
|
|
89
|
-
note,
|
|
90
|
-
changeSummary,
|
|
91
|
-
supersedesNoteId: id,
|
|
92
|
-
}, ctx.actor.subject);
|
|
93
|
-
sendJson(res, 200, { note: customerNote });
|
|
94
|
-
return;
|
|
39
|
+
export function handleSupersedeCustomerNote(rr, match) {
|
|
40
|
+
return supersedeRoute(noteRoutes, rr, match);
|
|
95
41
|
}
|
|
96
|
-
export
|
|
97
|
-
|
|
98
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
99
|
-
const customerNote = closeCustomerNote(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
|
|
100
|
-
sendJson(res, 200, { note: customerNote });
|
|
101
|
-
return;
|
|
42
|
+
export function handleCloseCustomerNote(rr, match) {
|
|
43
|
+
return closeRoute(noteRoutes, rr, match);
|
|
102
44
|
}
|
|
103
|
-
export
|
|
104
|
-
|
|
105
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
106
|
-
const customerNote = loadCustomerNoteById(opts.hippoRoot, ctx.tenantId, id);
|
|
107
|
-
if (!customerNote) {
|
|
108
|
-
throw new HttpError(404, `customer note ${id} not found`);
|
|
109
|
-
}
|
|
110
|
-
sendJson(res, 200, { note: customerNote });
|
|
111
|
-
return;
|
|
45
|
+
export function handleGetCustomerNote(rr, match) {
|
|
46
|
+
return getRoute(noteRoutes, rr, match);
|
|
112
47
|
}
|
|
113
48
|
//# sourceMappingURL=customer-notes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RouteRequest } from '../types.js';
|
|
2
|
-
export declare function handleCreateDecision(
|
|
3
|
-
export declare function handleListDecisions(
|
|
4
|
-
export declare function handleSupersedeDecision(
|
|
5
|
-
export declare function handleCloseDecision(
|
|
6
|
-
export declare function handleGetDecision(
|
|
2
|
+
export declare function handleCreateDecision(rr: RouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListDecisions(rr: RouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleSupersedeDecision(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseDecision(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetDecision(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
// /v1/decisions routes.
|
|
2
|
-
import {
|
|
3
|
-
import { HttpError, sendJson } from '../../http-util.js';
|
|
4
|
-
import { NotFoundError } from '../../api-errors.js';
|
|
2
|
+
import { DECISION } from '../../objects/decisions.js';
|
|
3
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
|
+
import { NotFoundError } from '../../core/api-errors.js';
|
|
5
|
+
import { isJsonNumber } from '../../util/json.js';
|
|
5
6
|
import { buildContextWithAuth } from '../auth.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
7
|
+
import { parseJsonBody } from '../validation.js';
|
|
8
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString, saveFor } from './object-routes.js';
|
|
9
|
+
const decisionRoutes = { noun: 'decision', field: 'decision', listField: 'decisions', object: DECISION };
|
|
10
|
+
const TEXT = { max: 4096, untrimmed: true };
|
|
11
|
+
function supersededId(body) {
|
|
12
|
+
const raw = body['supersedesDecisionId'];
|
|
13
|
+
if (raw === undefined || raw === null)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (!isJsonNumber(raw) || !Number.isInteger(raw) || raw <= 0) {
|
|
16
|
+
throw new HttpError(400, 'supersedesDecisionId must be a positive integer');
|
|
17
|
+
}
|
|
18
|
+
return raw;
|
|
19
|
+
}
|
|
9
20
|
// ── decisions (first-class object) ──
|
|
10
21
|
//
|
|
11
22
|
// 5 routes: POST /v1/decisions (create, optional supersedesDecisionId),
|
|
@@ -16,41 +27,17 @@ import { isJsonString } from '../../json.js';
|
|
|
16
27
|
// DoS caps: text 4096, context 4096. The HTTP surface is
|
|
17
28
|
// new (no legacy --supersedes <memory-id> constraint), so it supersedes by
|
|
18
29
|
// table id and never weakens a memory mirror.
|
|
19
|
-
export async function handleCreateDecision(
|
|
20
|
-
const
|
|
30
|
+
export async function handleCreateDecision(rr) {
|
|
31
|
+
const { req, res } = rr;
|
|
32
|
+
const ctx = await buildContextWithAuth(req, rr.opts);
|
|
21
33
|
const body = await parseJsonBody(req, ctx);
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
throw new HttpError(400, 'text exceeds 4096-character cap');
|
|
28
|
-
}
|
|
29
|
-
const contextRaw = body['context'];
|
|
30
|
-
let context;
|
|
31
|
-
if (contextRaw !== undefined && contextRaw !== null) {
|
|
32
|
-
if (!isJsonString(contextRaw)) {
|
|
33
|
-
throw new HttpError(400, 'context must be a string');
|
|
34
|
-
}
|
|
35
|
-
if (contextRaw.length > 4096) {
|
|
36
|
-
throw new HttpError(400, 'context exceeds 4096-character cap');
|
|
37
|
-
}
|
|
38
|
-
context = contextRaw;
|
|
39
|
-
}
|
|
40
|
-
const supRaw = body['supersedesDecisionId'];
|
|
41
|
-
let supersedesDecisionId;
|
|
42
|
-
if (supRaw !== undefined && supRaw !== null) {
|
|
43
|
-
if (!isJsonNumber(supRaw) || !Number.isInteger(supRaw) || supRaw <= 0) {
|
|
44
|
-
throw new HttpError(400, 'supersedesDecisionId must be a positive integer');
|
|
45
|
-
}
|
|
46
|
-
supersedesDecisionId = supRaw;
|
|
47
|
-
}
|
|
34
|
+
const write = {
|
|
35
|
+
decisionText: requiredString(body, 'text', TEXT),
|
|
36
|
+
context: optionalString(body, 'context', 4096),
|
|
37
|
+
supersedesDecisionId: supersededId(body),
|
|
38
|
+
};
|
|
48
39
|
try {
|
|
49
|
-
const decision =
|
|
50
|
-
decisionText: text,
|
|
51
|
-
context,
|
|
52
|
-
supersedesDecisionId,
|
|
53
|
-
}, ctx.actor.subject);
|
|
40
|
+
const decision = await saveFor(rr, DECISION, ctx.tenantId, ctx.actor.subject, write);
|
|
54
41
|
sendJson(res, 201, { decision });
|
|
55
42
|
}
|
|
56
43
|
catch (e) {
|
|
@@ -59,76 +46,26 @@ export async function handleCreateDecision({ req, res, opts }) {
|
|
|
59
46
|
throw new HttpError(409, e.message);
|
|
60
47
|
throw e;
|
|
61
48
|
}
|
|
62
|
-
return;
|
|
63
49
|
}
|
|
64
|
-
export
|
|
65
|
-
|
|
66
|
-
const limit = parseListLimit(query.get('limit'));
|
|
67
|
-
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
68
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
69
|
-
let decisions;
|
|
70
|
-
if (status === 'all') {
|
|
71
|
-
decisions = loadDecisions(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
if (!isSetMember(VALID_DECISION_STATES, status)) {
|
|
75
|
-
throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
|
|
76
|
-
}
|
|
77
|
-
decisions = loadDecisions(opts.hippoRoot, ctx.tenantId, {
|
|
78
|
-
status,
|
|
79
|
-
limit: limit + 1,
|
|
80
|
-
after,
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
const page = pageOf(decisions, limit, byCreatedAt);
|
|
84
|
-
sendJson(res, 200, { decisions: page.items, next_cursor: page.nextCursor });
|
|
85
|
-
return;
|
|
50
|
+
export function handleListDecisions(rr) {
|
|
51
|
+
return listRoute(decisionRoutes, rr);
|
|
86
52
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
const
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (text.length > 4096) {
|
|
96
|
-
throw new HttpError(400, 'text exceeds 4096-character cap');
|
|
97
|
-
}
|
|
98
|
-
const contextRaw = body['context'];
|
|
99
|
-
let context;
|
|
100
|
-
if (contextRaw !== undefined && contextRaw !== null) {
|
|
101
|
-
if (!isJsonString(contextRaw)) {
|
|
102
|
-
throw new HttpError(400, 'context must be a string');
|
|
103
|
-
}
|
|
104
|
-
if (contextRaw.length > 4096) {
|
|
105
|
-
throw new HttpError(400, 'context exceeds 4096-character cap');
|
|
106
|
-
}
|
|
107
|
-
context = contextRaw;
|
|
108
|
-
}
|
|
109
|
-
const decision = saveDecision(opts.hippoRoot, ctx.tenantId, {
|
|
110
|
-
decisionText: text,
|
|
111
|
-
context,
|
|
53
|
+
// Not on supersedeRoute: this one answers 201 and leaves the missing-row 404 to the store, where the other five answer 200 after their own lookup.
|
|
54
|
+
export async function handleSupersedeDecision(rr, match) {
|
|
55
|
+
const oldId = parseInt(match[1], 10);
|
|
56
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
57
|
+
const body = await parseJsonBody(rr.req, ctx);
|
|
58
|
+
const decision = await saveFor(rr, DECISION, ctx.tenantId, ctx.actor.subject, {
|
|
59
|
+
decisionText: requiredString(body, 'text', TEXT),
|
|
60
|
+
context: optionalString(body, 'context', 4096),
|
|
112
61
|
supersedesDecisionId: oldId,
|
|
113
|
-
}
|
|
114
|
-
sendJson(res, 201, { decision });
|
|
115
|
-
return;
|
|
62
|
+
});
|
|
63
|
+
sendJson(rr.res, 201, { decision });
|
|
116
64
|
}
|
|
117
|
-
export
|
|
118
|
-
|
|
119
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
120
|
-
const decision = closeDecision(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
|
|
121
|
-
sendJson(res, 200, { decision });
|
|
122
|
-
return;
|
|
65
|
+
export function handleCloseDecision(rr, match) {
|
|
66
|
+
return closeRoute(decisionRoutes, rr, match);
|
|
123
67
|
}
|
|
124
|
-
export
|
|
125
|
-
|
|
126
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
127
|
-
const decision = loadDecisionById(opts.hippoRoot, ctx.tenantId, id);
|
|
128
|
-
if (!decision) {
|
|
129
|
-
throw new HttpError(404, `decision ${id} not found`);
|
|
130
|
-
}
|
|
131
|
-
sendJson(res, 200, { decision });
|
|
132
|
-
return;
|
|
68
|
+
export function handleGetDecision(rr, match) {
|
|
69
|
+
return getRoute(decisionRoutes, rr, match);
|
|
133
70
|
}
|
|
134
71
|
//# sourceMappingURL=decisions.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RouteRequest } from '../types.js';
|
|
2
|
-
export declare function handleCreateIncident(
|
|
3
|
-
export declare function handleListIncidents(
|
|
4
|
-
export declare function handleResolveIncident(
|
|
5
|
-
export declare function handleCloseIncident(
|
|
6
|
-
export declare function handleGetIncident(
|
|
2
|
+
export declare function handleCreateIncident(rr: RouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListIncidents(rr: RouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleResolveIncident(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseIncident(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetIncident(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=incidents.d.ts.map
|
|
@@ -1,12 +1,29 @@
|
|
|
1
1
|
// /v1/incidents routes.
|
|
2
|
-
import {
|
|
3
|
-
import { HttpError, sendJson } from '../../http-util.js';
|
|
4
|
-
import { NotFoundError } from '../../api-errors.js';
|
|
2
|
+
import { INCIDENT, openIncident, resolveOpenIncident } from '../../objects/incidents.js';
|
|
3
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
|
+
import { NotFoundError } from '../../core/api-errors.js';
|
|
5
5
|
import { buildContextWithAuth } from '../auth.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { parseJsonBody } from '../validation.js';
|
|
7
|
+
import { isJsonString } from '../../util/json.js';
|
|
8
|
+
import { closeRoute, getRoute, listRoute, objectsOf, optionalString, requiredString } from './object-routes.js';
|
|
9
9
|
const MAX_LINKED_MEMORY_IDS = 256;
|
|
10
|
+
const incidentRoutes = { noun: 'incident', field: 'incident', listField: 'incidents', object: INCIDENT };
|
|
11
|
+
function linkedMemoryIds(body) {
|
|
12
|
+
const raw = body['linkedMemoryIds'];
|
|
13
|
+
if (raw === undefined || raw === null)
|
|
14
|
+
return undefined;
|
|
15
|
+
if (!Array.isArray(raw)) {
|
|
16
|
+
throw new HttpError(400, 'linkedMemoryIds must be an array of memory ids');
|
|
17
|
+
}
|
|
18
|
+
if (raw.length > MAX_LINKED_MEMORY_IDS) {
|
|
19
|
+
throw new HttpError(400, `linkedMemoryIds exceeds ${MAX_LINKED_MEMORY_IDS}-item cap`);
|
|
20
|
+
}
|
|
21
|
+
const isValidMemoryId = (item) => isJsonString(item) && item.length > 0 && item.length <= 4096;
|
|
22
|
+
if (!raw.every(isValidMemoryId)) {
|
|
23
|
+
throw new HttpError(400, 'each linkedMemoryIds entry must be a non-empty string <= 4096 chars');
|
|
24
|
+
}
|
|
25
|
+
return raw;
|
|
26
|
+
}
|
|
10
27
|
// ── incidents (first-class object) ──
|
|
11
28
|
//
|
|
12
29
|
// 5 routes: POST /v1/incidents (open; body text + context + linkedMemoryIds[]),
|
|
@@ -18,48 +35,17 @@ const MAX_LINKED_MEMORY_IDS = 256;
|
|
|
18
35
|
// 4096. Mirrors /v1/decisions; lifecycle is
|
|
19
36
|
// open->resolved->closed (no supersede), so linkedMemoryIds replaces
|
|
20
37
|
// supersedesDecisionId on create.
|
|
21
|
-
export async function handleCreateIncident(
|
|
38
|
+
export async function handleCreateIncident(rr) {
|
|
39
|
+
const { req, res, opts } = rr;
|
|
22
40
|
const ctx = await buildContextWithAuth(req, opts);
|
|
23
41
|
const body = await parseJsonBody(req, ctx);
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
throw new HttpError(400, 'text exceeds 4096-character cap');
|
|
30
|
-
}
|
|
31
|
-
const contextRaw = body['context'];
|
|
32
|
-
let context;
|
|
33
|
-
if (contextRaw !== undefined && contextRaw !== null) {
|
|
34
|
-
if (!isJsonString(contextRaw)) {
|
|
35
|
-
throw new HttpError(400, 'context must be a string');
|
|
36
|
-
}
|
|
37
|
-
if (contextRaw.length > 4096) {
|
|
38
|
-
throw new HttpError(400, 'context exceeds 4096-character cap');
|
|
39
|
-
}
|
|
40
|
-
context = contextRaw;
|
|
41
|
-
}
|
|
42
|
-
const linkedRaw = body['linkedMemoryIds'];
|
|
43
|
-
let linkedMemoryIds;
|
|
44
|
-
if (linkedRaw !== undefined && linkedRaw !== null) {
|
|
45
|
-
if (!Array.isArray(linkedRaw)) {
|
|
46
|
-
throw new HttpError(400, 'linkedMemoryIds must be an array of memory ids');
|
|
47
|
-
}
|
|
48
|
-
if (linkedRaw.length > MAX_LINKED_MEMORY_IDS) {
|
|
49
|
-
throw new HttpError(400, `linkedMemoryIds exceeds ${MAX_LINKED_MEMORY_IDS}-item cap`);
|
|
50
|
-
}
|
|
51
|
-
const isValidMemoryId = (item) => isJsonString(item) && item.length > 0 && item.length <= 4096;
|
|
52
|
-
if (!linkedRaw.every(isValidMemoryId)) {
|
|
53
|
-
throw new HttpError(400, 'each linkedMemoryIds entry must be a non-empty string <= 4096 chars');
|
|
54
|
-
}
|
|
55
|
-
linkedMemoryIds = linkedRaw;
|
|
56
|
-
}
|
|
42
|
+
const write = {
|
|
43
|
+
incidentText: requiredString(body, 'text', { max: 4096, untrimmed: true }),
|
|
44
|
+
context: optionalString(body, 'context', 4096),
|
|
45
|
+
linkedMemoryIds: linkedMemoryIds(body),
|
|
46
|
+
};
|
|
57
47
|
try {
|
|
58
|
-
const incident =
|
|
59
|
-
incidentText: text,
|
|
60
|
-
context,
|
|
61
|
-
linkedMemoryIds,
|
|
62
|
-
}, ctx.actor.subject);
|
|
48
|
+
const incident = await openIncident(objectsOf(rr), opts.hippoRoot, ctx.tenantId, write, ctx.actor.subject);
|
|
63
49
|
sendJson(res, 201, { incident });
|
|
64
50
|
}
|
|
65
51
|
catch (e) {
|
|
@@ -68,61 +54,22 @@ export async function handleCreateIncident({ req, res, opts }) {
|
|
|
68
54
|
throw new HttpError(409, e.message);
|
|
69
55
|
throw e;
|
|
70
56
|
}
|
|
71
|
-
return;
|
|
72
57
|
}
|
|
73
|
-
export
|
|
74
|
-
|
|
75
|
-
const limit = parseListLimit(query.get('limit'));
|
|
76
|
-
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
77
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
78
|
-
let incidents;
|
|
79
|
-
if (status === 'all') {
|
|
80
|
-
incidents = loadIncidents(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
if (!isSetMember(VALID_INCIDENT_STATES, status)) {
|
|
84
|
-
throw new HttpError(400, `status must be one of: open | resolved | closed | all (got "${status}")`);
|
|
85
|
-
}
|
|
86
|
-
incidents = loadIncidents(opts.hippoRoot, ctx.tenantId, {
|
|
87
|
-
status,
|
|
88
|
-
limit: limit + 1,
|
|
89
|
-
after,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
const page = pageOf(incidents, limit, byCreatedAt);
|
|
93
|
-
sendJson(res, 200, { incidents: page.items, next_cursor: page.nextCursor });
|
|
94
|
-
return;
|
|
58
|
+
export function handleListIncidents(rr) {
|
|
59
|
+
return listRoute(incidentRoutes, rr);
|
|
95
60
|
}
|
|
96
|
-
export async function handleResolveIncident(
|
|
97
|
-
const
|
|
61
|
+
export async function handleResolveIncident(rr, match) {
|
|
62
|
+
const { req, res, opts } = rr;
|
|
63
|
+
const id = parseInt(match[1], 10);
|
|
98
64
|
const ctx = await buildContextWithAuth(req, opts);
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
if (!isJsonString(resolutionText) || resolutionText.trim().length === 0) {
|
|
102
|
-
throw new HttpError(400, 'resolutionText is required (non-empty string)');
|
|
103
|
-
}
|
|
104
|
-
if (resolutionText.length > 4096) {
|
|
105
|
-
throw new HttpError(400, 'resolutionText exceeds 4096-character cap');
|
|
106
|
-
}
|
|
107
|
-
const incident = resolveIncident(opts.hippoRoot, ctx.tenantId, id, resolutionText, ctx.actor.subject);
|
|
65
|
+
const resolutionText = requiredString(await parseJsonBody(req, ctx), 'resolutionText', { max: 4096 });
|
|
66
|
+
const incident = await resolveOpenIncident(objectsOf(rr), ctx.tenantId, id, resolutionText, ctx.actor.subject);
|
|
108
67
|
sendJson(res, 200, { incident });
|
|
109
|
-
return;
|
|
110
68
|
}
|
|
111
|
-
export
|
|
112
|
-
|
|
113
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
114
|
-
const incident = closeIncident(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
|
|
115
|
-
sendJson(res, 200, { incident });
|
|
116
|
-
return;
|
|
69
|
+
export function handleCloseIncident(rr, match) {
|
|
70
|
+
return closeRoute(incidentRoutes, rr, match);
|
|
117
71
|
}
|
|
118
|
-
export
|
|
119
|
-
|
|
120
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
121
|
-
const incident = loadIncidentById(opts.hippoRoot, ctx.tenantId, id);
|
|
122
|
-
if (!incident) {
|
|
123
|
-
throw new HttpError(404, `incident ${id} not found`);
|
|
124
|
-
}
|
|
125
|
-
sendJson(res, 200, { incident });
|
|
126
|
-
return;
|
|
72
|
+
export function handleGetIncident(rr, match) {
|
|
73
|
+
return getRoute(incidentRoutes, rr, match);
|
|
127
74
|
}
|
|
128
75
|
//# sourceMappingURL=incidents.js.map
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// Memory write routes: create, graph, archive, supersede, promote, forget, outcome, sleep.
|
|
2
|
-
import { archiveRaw, forget, outcome, outcomeForLastRecall, promote, remember,
|
|
3
|
-
import {
|
|
4
|
-
import { MAX_ENTITY_NAME_LEN } from '../../graph
|
|
5
|
-
import { HttpError, sendJson } from '../../http-util.js';
|
|
6
|
-
import {
|
|
2
|
+
import { archiveRaw, forget, outcome, outcomeForLastRecall, promote, remember, supersede } from '../../api/index.js';
|
|
3
|
+
import { graphModelOf } from '../../graph/view.js';
|
|
4
|
+
import { MAX_ENTITY_NAME_LEN } from '../../store/graph-rows.js';
|
|
5
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
6
|
+
import { requireGroup } from '../../store/port.js';
|
|
7
7
|
import { assertCrossTenantAdmin, buildContextWithAuth, isLoopback } from '../auth.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { sleepInChild } from '../sleep-offload.js';
|
|
9
|
+
import { getCallerProject, getString, getStringArray, isSetMember, parseJsonBody, parseListLimit, validateIdSegment } from '../validation.js';
|
|
10
|
+
import { isJsonString, isJsonBoolean } from '../../util/json.js';
|
|
10
11
|
const VALID_KINDS = new Set([
|
|
11
12
|
'raw',
|
|
12
13
|
'distilled',
|
|
@@ -52,12 +53,9 @@ export async function handleGetGraph({ req, res, opts, query }) {
|
|
|
52
53
|
}
|
|
53
54
|
const limit = parseListLimit(query.get('limit'));
|
|
54
55
|
const ctx = await buildContextWithAuth(req, opts);
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
canRead: (s) => s === null || canReadScope(ctx.actor, s),
|
|
59
|
-
});
|
|
60
|
-
sendJson(res, 200, model);
|
|
56
|
+
const { role, scopes, owner } = ctx.actor;
|
|
57
|
+
const rows = await requireGroup(opts.store, 'graphReads').graphRows(ctx.tenantId, { entity: entityRaw ?? undefined, limit, reader: { role, scopes, owner } });
|
|
58
|
+
sendJson(res, 200, graphModelOf(rows));
|
|
61
59
|
return;
|
|
62
60
|
}
|
|
63
61
|
// /v1/memories/:id/* and DELETE /v1/memories/:id
|
|
@@ -180,7 +178,7 @@ export async function handleSleep({ req, res, opts }) {
|
|
|
180
178
|
throw new HttpError(400, 'no_share must be a boolean');
|
|
181
179
|
}
|
|
182
180
|
// sleepCtx already built above for the admin-role gate; reuse.
|
|
183
|
-
const result = await
|
|
181
|
+
const result = await sleepInChild(sleepCtx, {
|
|
184
182
|
dryRun: dryRunRaw === true,
|
|
185
183
|
noShare: noShareRaw === true,
|
|
186
184
|
});
|