hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -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',
|
|
@@ -29,7 +30,7 @@ export async function handleCreateMemory({ req, res, opts }) {
|
|
|
29
30
|
if (personalRaw !== undefined && !isJsonBoolean(personalRaw)) {
|
|
30
31
|
throw new HttpError(400, 'personal must be a boolean');
|
|
31
32
|
}
|
|
32
|
-
const result = remember(ctx, {
|
|
33
|
+
const result = await remember(ctx, {
|
|
33
34
|
content,
|
|
34
35
|
kind: kindRaw,
|
|
35
36
|
scope: getString(body, 'scope'),
|
|
@@ -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
|
|
@@ -69,7 +67,7 @@ export async function handleArchiveMemory({ req, res, opts }, archiveMatch) {
|
|
|
69
67
|
if (!reason) {
|
|
70
68
|
throw new HttpError(400, 'reason is required');
|
|
71
69
|
}
|
|
72
|
-
const result = archiveRaw(ctx, archiveMatch.id, reason);
|
|
70
|
+
const result = await archiveRaw(ctx, archiveMatch.id, reason);
|
|
73
71
|
sendJson(res, 200, result);
|
|
74
72
|
return;
|
|
75
73
|
}
|
|
@@ -81,7 +79,7 @@ export async function handleSupersedeMemory({ req, res, opts }, supersedeMatch)
|
|
|
81
79
|
if (!content) {
|
|
82
80
|
throw new HttpError(400, 'content is required');
|
|
83
81
|
}
|
|
84
|
-
const result = supersede(ctx, supersedeMatch.id, content);
|
|
82
|
+
const result = await supersede(ctx, supersedeMatch.id, content);
|
|
85
83
|
sendJson(res, 200, result);
|
|
86
84
|
return;
|
|
87
85
|
}
|
|
@@ -95,7 +93,7 @@ export async function handlePromoteMemory({ req, res, opts }, promoteMatch) {
|
|
|
95
93
|
export async function handleForgetMemory({ req, res, opts }, idMatch) {
|
|
96
94
|
validateIdSegment(idMatch.id, 'memory id');
|
|
97
95
|
const ctx = await buildContextWithAuth(req, opts);
|
|
98
|
-
const result = forget(ctx, idMatch.id);
|
|
96
|
+
const result = await forget(ctx, idMatch.id);
|
|
99
97
|
sendJson(res, 200, result);
|
|
100
98
|
return;
|
|
101
99
|
}
|
|
@@ -132,11 +130,14 @@ export async function handleApplyOutcome({ req, res, opts }) {
|
|
|
132
130
|
ids = idsRaw;
|
|
133
131
|
}
|
|
134
132
|
if (ids !== undefined) {
|
|
135
|
-
const { applied } = outcome(ctx, ids, good);
|
|
133
|
+
const { applied } = await outcome(ctx, ids, good);
|
|
136
134
|
sendJson(res, 200, { applied });
|
|
137
135
|
}
|
|
138
136
|
else {
|
|
139
|
-
|
|
137
|
+
// The last recall's ids live in hippo.db alone, so a client of another store must send the ids its recall returned.
|
|
138
|
+
if (ctx.store !== undefined && ctx.store.kind !== 'sqlite')
|
|
139
|
+
throw new HttpError(501, 'this store keeps no last recall: send the ids your recall returned');
|
|
140
|
+
const result = await outcomeForLastRecall(ctx, good);
|
|
140
141
|
sendJson(res, 200, result);
|
|
141
142
|
}
|
|
142
143
|
return;
|
|
@@ -177,7 +178,7 @@ export async function handleSleep({ req, res, opts }) {
|
|
|
177
178
|
throw new HttpError(400, 'no_share must be a boolean');
|
|
178
179
|
}
|
|
179
180
|
// sleepCtx already built above for the admin-role gate; reuse.
|
|
180
|
-
const result = await
|
|
181
|
+
const result = await sleepInChild(sleepCtx, {
|
|
181
182
|
dryRun: dryRunRaw === true,
|
|
182
183
|
noShare: noShareRaw === true,
|
|
183
184
|
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type JsonValue } from '../../util/json.js';
|
|
2
|
+
import type { ObjectDescriptor, SavableDescriptor } from '../../objects/descriptor.js';
|
|
3
|
+
import type { ObjectByKind, ObjectKind, SavableKind } from '../../store/object-types.js';
|
|
4
|
+
import { type Objects } from '../../store/port.js';
|
|
5
|
+
import type { RouteRequest } from '../types.js';
|
|
6
|
+
export interface ObjectRouteConfig<K extends ObjectKind> {
|
|
7
|
+
/** Names the object in the 404 text, e.g. "customer note". */
|
|
8
|
+
readonly noun: string;
|
|
9
|
+
/** Reply field that carries one object, e.g. "note". */
|
|
10
|
+
readonly field: string;
|
|
11
|
+
/** Reply field that carries a page, e.g. "notes". */
|
|
12
|
+
readonly listField: string;
|
|
13
|
+
/** The bad-status reply lists `object.states` in the set's own order. */
|
|
14
|
+
readonly object: ObjectDescriptor<K>;
|
|
15
|
+
/** List query parameter matched against the kind's filter column, e.g. "customer". */
|
|
16
|
+
readonly filterParam?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface VersionedRouteConfig<K extends SavableKind, W> extends ObjectRouteConfig<K> {
|
|
19
|
+
readonly object: SavableDescriptor<K, W>;
|
|
20
|
+
/** Checks the body, then returns the successor's write; split in two so a bad body answers 400 before a missing row answers 404. */
|
|
21
|
+
readonly revise: (body: Record<string, JsonValue>) => (existing: ObjectByKind[K], id: number) => W;
|
|
22
|
+
}
|
|
23
|
+
export interface RequiredStringRule {
|
|
24
|
+
readonly max: number;
|
|
25
|
+
/** The field name is a plural noun, so the replies read "are required" and "exceed". */
|
|
26
|
+
readonly plural?: boolean;
|
|
27
|
+
/** The blank check does not trim, so a value of only spaces passes it. */
|
|
28
|
+
readonly untrimmed?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function requiredString(body: Record<string, JsonValue>, key: string, rule: RequiredStringRule): string;
|
|
31
|
+
export declare function optionalString(body: Record<string, JsonValue>, key: string, max: number): string | undefined;
|
|
32
|
+
/** The request store's object group; the dispatcher has already answered 501 for a store without it. */
|
|
33
|
+
export declare function objectsOf({ opts }: RouteRequest): Objects;
|
|
34
|
+
/** Saves through the request's store as the authenticated caller. */
|
|
35
|
+
export declare function saveFor<K extends SavableKind, W>(rr: RouteRequest, d: SavableDescriptor<K, W>, tenantId: string, actor: string, write: W): Promise<ObjectByKind[K]>;
|
|
36
|
+
export declare function listRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: RouteRequest): Promise<void>;
|
|
37
|
+
export declare function getRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
38
|
+
export declare function closeRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
39
|
+
export declare function supersedeRoute<K extends SavableKind, W>(cfg: VersionedRouteConfig<K, W>, rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=object-routes.d.ts.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// List, get, close and supersede handlers shared by the typed-object routes; each route file passes one config.
|
|
2
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
3
|
+
import { isJsonString } from '../../util/json.js';
|
|
4
|
+
import { closeObject, listObjects, objectById, saveObject } from '../../objects/lifecycle.js';
|
|
5
|
+
import { requireGroup } from '../../store/port.js';
|
|
6
|
+
import { buildContextWithAuth } from '../auth.js';
|
|
7
|
+
import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
|
|
8
|
+
import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
|
|
9
|
+
export function requiredString(body, key, rule) {
|
|
10
|
+
const value = body[key];
|
|
11
|
+
if (!isJsonString(value) || (rule.untrimmed ? value : value.trim()).length === 0) {
|
|
12
|
+
throw new HttpError(400, `${key} ${rule.plural ? 'are' : 'is'} required (non-empty string)`);
|
|
13
|
+
}
|
|
14
|
+
if (value.length > rule.max) {
|
|
15
|
+
throw new HttpError(400, `${key} ${rule.plural ? 'exceed' : 'exceeds'} ${rule.max}-character cap`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
export function optionalString(body, key, max) {
|
|
20
|
+
const value = body[key];
|
|
21
|
+
if (value === undefined || value === null)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (!isJsonString(value))
|
|
24
|
+
throw new HttpError(400, `${key} must be a string`);
|
|
25
|
+
if (value.length > max)
|
|
26
|
+
throw new HttpError(400, `${key} exceeds ${max}-character cap`);
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
/** The request store's object group; the dispatcher has already answered 501 for a store without it. */
|
|
30
|
+
export function objectsOf({ opts }) {
|
|
31
|
+
return requireGroup(opts.store, 'objects');
|
|
32
|
+
}
|
|
33
|
+
/** Saves through the request's store as the authenticated caller. */
|
|
34
|
+
export function saveFor(rr, d, tenantId, actor, write) {
|
|
35
|
+
return saveObject(objectsOf(rr), d, { hippoRoot: rr.opts.hippoRoot, tenantId, actor }, write);
|
|
36
|
+
}
|
|
37
|
+
async function found(cfg, objects, tenantId, id) {
|
|
38
|
+
const row = await objectById(objects, cfg.object, tenantId, id);
|
|
39
|
+
if (!row)
|
|
40
|
+
throw new HttpError(404, `${cfg.noun} ${id} not found`);
|
|
41
|
+
return row;
|
|
42
|
+
}
|
|
43
|
+
// Limit and cursor are checked before auth and status after it, so a keyless caller gets 400 for the first two and 401 for a bad status.
|
|
44
|
+
export async function listRoute(cfg, rr) {
|
|
45
|
+
const { req, res, opts, query } = rr;
|
|
46
|
+
const status = query.get('status') ?? 'all';
|
|
47
|
+
const filter = cfg.filterParam === undefined ? null : query.get(cfg.filterParam);
|
|
48
|
+
const limit = parseListLimit(query.get('limit'));
|
|
49
|
+
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
50
|
+
const ctx = await buildContextWithAuth(req, opts);
|
|
51
|
+
const listOpts = { limit: limit + 1, after, filter: filter?.trim() || undefined };
|
|
52
|
+
if (status !== 'all') {
|
|
53
|
+
const states = cfg.object.states;
|
|
54
|
+
if (!isSetMember(states, status)) {
|
|
55
|
+
throw new HttpError(400, `status must be one of: ${[...states].join(' | ')} | all (got "${status}")`);
|
|
56
|
+
}
|
|
57
|
+
listOpts.status = status;
|
|
58
|
+
}
|
|
59
|
+
const page = pageOf(await listObjects(objectsOf(rr), cfg.object, ctx.tenantId, listOpts), limit, byCreatedAt);
|
|
60
|
+
sendJson(res, 200, { [cfg.listField]: page.items, next_cursor: page.nextCursor });
|
|
61
|
+
}
|
|
62
|
+
export async function getRoute(cfg, rr, match) {
|
|
63
|
+
const id = parseInt(match[1], 10);
|
|
64
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
65
|
+
sendJson(rr.res, 200, { [cfg.field]: await found(cfg, objectsOf(rr), ctx.tenantId, id) });
|
|
66
|
+
}
|
|
67
|
+
export async function closeRoute(cfg, rr, match) {
|
|
68
|
+
const id = parseInt(match[1], 10);
|
|
69
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
70
|
+
sendJson(rr.res, 200, { [cfg.field]: await closeObject(objectsOf(rr), cfg.object, ctx.tenantId, id, ctx.actor.subject) });
|
|
71
|
+
}
|
|
72
|
+
export async function supersedeRoute(cfg, rr, match) {
|
|
73
|
+
const id = parseInt(match[1], 10);
|
|
74
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
75
|
+
const successor = cfg.revise(await parseJsonBody(rr.req, ctx));
|
|
76
|
+
const existing = await found(cfg, objectsOf(rr), ctx.tenantId, id);
|
|
77
|
+
const saved = await saveFor(rr, cfg.object, ctx.tenantId, ctx.actor.subject, successor(existing, id));
|
|
78
|
+
sendJson(rr.res, 200, { [cfg.field]: saved });
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=object-routes.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { RouteRequest } from '../types.js';
|
|
2
|
-
export declare function handleCreatePolicy(
|
|
3
|
-
export declare function handleListPolicies(
|
|
4
|
-
export declare function handlePoliciesAsOf(
|
|
5
|
-
export declare function handleSupersedePolicy(
|
|
6
|
-
export declare function handleClosePolicy(
|
|
7
|
-
export declare function handleGetPolicy(
|
|
2
|
+
export declare function handleCreatePolicy(rr: RouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListPolicies(rr: RouteRequest): Promise<void>;
|
|
4
|
+
export declare function handlePoliciesAsOf(rr: RouteRequest): Promise<void>;
|
|
5
|
+
export declare function handleSupersedePolicy(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleClosePolicy(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
|
+
export declare function handleGetPolicy(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
8
8
|
//# sourceMappingURL=policies.d.ts.map
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
// /v1/policies routes.
|
|
2
|
-
import {
|
|
3
|
-
import { HttpError, sendJson } from '../../http-util.js';
|
|
2
|
+
import { policiesAsOf, POLICY } from '../../objects/policies.js';
|
|
3
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
4
|
import { buildContextWithAuth } from '../auth.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
}
|
|
5
|
+
import { parseJsonBody } from '../validation.js';
|
|
6
|
+
import { closeRoute, getRoute, listRoute, objectsOf, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
|
|
7
|
+
// The date fields get a type and length check only: the store parses the date, and the cap bounds a junk string before it reaches the Date parser.
|
|
8
|
+
const MAX_DATE_LEN = 64;
|
|
9
|
+
const policyRoutes = {
|
|
10
|
+
noun: 'policy',
|
|
11
|
+
field: 'policy',
|
|
12
|
+
listField: 'policies',
|
|
13
|
+
object: POLICY,
|
|
14
|
+
revise: (body) => {
|
|
15
|
+
const policyText = requiredString(body, 'policyText', { max: 4096 });
|
|
16
|
+
const validFrom = optionalString(body, 'validFrom', MAX_DATE_LEN);
|
|
17
|
+
const validTo = optionalString(body, 'validTo', MAX_DATE_LEN);
|
|
18
|
+
const changeSummary = optionalString(body, 'changeSummary', 4096);
|
|
19
|
+
return (existing, id) => ({ policyName: existing.policyName, policyText, validFrom, validTo, changeSummary, supersedesPolicyId: id });
|
|
20
|
+
},
|
|
21
|
+
};
|
|
23
22
|
// ── policies (first-class object, bi-temporal-first) ──
|
|
24
23
|
//
|
|
25
24
|
// 6 routes: POST /v1/policies (new; processName-style body policyName +
|
|
@@ -29,124 +28,41 @@ function optionalDateField(raw, label) {
|
|
|
29
28
|
// /v1/policies/:id, POST /v1/policies/:id/supersede, POST /v1/policies/:id/close.
|
|
30
29
|
// Date inputs are normalized + range-validated in the store; an invalid/inverted
|
|
31
30
|
// date throws -> 400. DoS caps: policyName/policyText/changeSummary 4096.
|
|
32
|
-
export async function handleCreatePolicy(
|
|
33
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
34
|
-
const body = await parseJsonBody(req, ctx);
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
const policyText = body['policyText'];
|
|
43
|
-
if (!isJsonString(policyText) || policyText.trim().length === 0) {
|
|
44
|
-
throw new HttpError(400, 'policyText is required (non-empty string)');
|
|
45
|
-
}
|
|
46
|
-
if (policyText.length > 4096) {
|
|
47
|
-
throw new HttpError(400, 'policyText exceeds 4096-character cap');
|
|
48
|
-
}
|
|
49
|
-
const validFrom = optionalDateField(body['validFrom'], 'validFrom');
|
|
50
|
-
const validTo = optionalDateField(body['validTo'], 'validTo');
|
|
51
|
-
const policy = savePolicy(opts.hippoRoot, ctx.tenantId, {
|
|
52
|
-
policyName,
|
|
53
|
-
policyText,
|
|
54
|
-
validFrom,
|
|
55
|
-
validTo,
|
|
56
|
-
}, ctx.actor.subject);
|
|
57
|
-
sendJson(res, 201, { policy });
|
|
58
|
-
return;
|
|
31
|
+
export async function handleCreatePolicy(rr) {
|
|
32
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
33
|
+
const body = await parseJsonBody(rr.req, ctx);
|
|
34
|
+
const policy = await saveFor(rr, POLICY, ctx.tenantId, ctx.actor.subject, {
|
|
35
|
+
policyName: requiredString(body, 'policyName', { max: 4096 }),
|
|
36
|
+
policyText: requiredString(body, 'policyText', { max: 4096 }),
|
|
37
|
+
validFrom: optionalString(body, 'validFrom', MAX_DATE_LEN),
|
|
38
|
+
validTo: optionalString(body, 'validTo', MAX_DATE_LEN),
|
|
39
|
+
});
|
|
40
|
+
sendJson(rr.res, 201, { policy });
|
|
59
41
|
}
|
|
60
|
-
export
|
|
61
|
-
|
|
62
|
-
const limit = parseListLimit(query.get('limit'));
|
|
63
|
-
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
64
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
65
|
-
let policies;
|
|
66
|
-
if (status === 'all') {
|
|
67
|
-
policies = loadPolicies(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
if (!isSetMember(VALID_POLICY_STATES, status)) {
|
|
71
|
-
throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
|
|
72
|
-
}
|
|
73
|
-
policies = loadPolicies(opts.hippoRoot, ctx.tenantId, {
|
|
74
|
-
status,
|
|
75
|
-
limit: limit + 1,
|
|
76
|
-
after,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
const page = pageOf(policies, limit, byCreatedAt);
|
|
80
|
-
sendJson(res, 200, { policies: page.items, next_cursor: page.nextCursor });
|
|
81
|
-
return;
|
|
42
|
+
export function handleListPolicies(rr) {
|
|
43
|
+
return listRoute(policyRoutes, rr);
|
|
82
44
|
}
|
|
83
45
|
// The as-of query: must precede the /:id GET (literal 'asof' is non-numeric so
|
|
84
46
|
// the /(\d+)/ route would not match it, but order it first for clarity).
|
|
85
|
-
export async function handlePoliciesAsOf(
|
|
47
|
+
export async function handlePoliciesAsOf(rr) {
|
|
48
|
+
const { req, res, opts, query } = rr;
|
|
86
49
|
const date = query.get('date');
|
|
87
50
|
if (date === null || date.length === 0) {
|
|
88
51
|
throw new HttpError(400, 'date is required (ISO-8601 valid-time)');
|
|
89
52
|
}
|
|
90
53
|
const name = query.get('name') ?? undefined;
|
|
91
54
|
const ctx = await buildContextWithAuth(req, opts);
|
|
92
|
-
const policies =
|
|
55
|
+
const policies = await policiesAsOf(objectsOf(rr), ctx.tenantId, date, { name });
|
|
93
56
|
sendJson(res, 200, { policies });
|
|
94
57
|
return;
|
|
95
58
|
}
|
|
96
|
-
export
|
|
97
|
-
|
|
98
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
99
|
-
const body = await parseJsonBody(req, ctx);
|
|
100
|
-
const policyText = body['policyText'];
|
|
101
|
-
if (!isJsonString(policyText) || policyText.trim().length === 0) {
|
|
102
|
-
throw new HttpError(400, 'policyText is required (non-empty string)');
|
|
103
|
-
}
|
|
104
|
-
if (policyText.length > 4096) {
|
|
105
|
-
throw new HttpError(400, 'policyText exceeds 4096-character cap');
|
|
106
|
-
}
|
|
107
|
-
const validFrom = optionalDateField(body['validFrom'], 'validFrom');
|
|
108
|
-
const validTo = optionalDateField(body['validTo'], 'validTo');
|
|
109
|
-
const changeRaw = body['changeSummary'];
|
|
110
|
-
let changeSummary;
|
|
111
|
-
if (changeRaw !== undefined && changeRaw !== null) {
|
|
112
|
-
if (!isJsonString(changeRaw)) {
|
|
113
|
-
throw new HttpError(400, 'changeSummary must be a string');
|
|
114
|
-
}
|
|
115
|
-
if (changeRaw.length > 4096) {
|
|
116
|
-
throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
|
|
117
|
-
}
|
|
118
|
-
changeSummary = changeRaw;
|
|
119
|
-
}
|
|
120
|
-
const existing = loadPolicyById(opts.hippoRoot, ctx.tenantId, id);
|
|
121
|
-
if (!existing) {
|
|
122
|
-
throw new HttpError(404, `policy ${id} not found`);
|
|
123
|
-
}
|
|
124
|
-
const policy = savePolicy(opts.hippoRoot, ctx.tenantId, {
|
|
125
|
-
policyName: existing.policyName,
|
|
126
|
-
policyText,
|
|
127
|
-
validFrom,
|
|
128
|
-
validTo,
|
|
129
|
-
changeSummary,
|
|
130
|
-
supersedesPolicyId: id,
|
|
131
|
-
}, ctx.actor.subject);
|
|
132
|
-
sendJson(res, 200, { policy });
|
|
133
|
-
return;
|
|
59
|
+
export function handleSupersedePolicy(rr, match) {
|
|
60
|
+
return supersedeRoute(policyRoutes, rr, match);
|
|
134
61
|
}
|
|
135
|
-
export
|
|
136
|
-
|
|
137
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
138
|
-
const policy = closePolicy(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
|
|
139
|
-
sendJson(res, 200, { policy });
|
|
140
|
-
return;
|
|
62
|
+
export function handleClosePolicy(rr, match) {
|
|
63
|
+
return closeRoute(policyRoutes, rr, match);
|
|
141
64
|
}
|
|
142
|
-
export
|
|
143
|
-
|
|
144
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
145
|
-
const policy = loadPolicyById(opts.hippoRoot, ctx.tenantId, id);
|
|
146
|
-
if (!policy) {
|
|
147
|
-
throw new HttpError(404, `policy ${id} not found`);
|
|
148
|
-
}
|
|
149
|
-
sendJson(res, 200, { policy });
|
|
150
|
-
return;
|
|
65
|
+
export function handleGetPolicy(rr, match) {
|
|
66
|
+
return getRoute(policyRoutes, rr, match);
|
|
151
67
|
}
|
|
152
68
|
//# sourceMappingURL=policies.js.map
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
// /v1/predictions routes.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { loadConfig } from '../../core/config.js';
|
|
3
|
+
import { predictionMirror, VALID_CLOSURE_STATES } from '../../store/predictions.js';
|
|
4
|
+
import { requireGroup } from '../../store/port.js';
|
|
5
|
+
import { HttpError, MAX_ID_LEN, sendJson } from '../../util/http-util.js';
|
|
4
6
|
import { buildContextWithAuth } from '../auth.js';
|
|
5
7
|
import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
|
|
6
|
-
import {
|
|
7
|
-
import { isJsonString } from '../../json.js';
|
|
8
|
+
import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
|
|
9
|
+
import { isJsonString, isJsonNumber } from '../../util/json.js';
|
|
8
10
|
// ── prediction first-class object ──
|
|
9
11
|
//
|
|
10
12
|
// 4 routes: POST /v1/predictions (create), GET /v1/predictions (list),
|
|
@@ -50,48 +52,33 @@ export async function handleCreatePrediction({ req, res, opts }) {
|
|
|
50
52
|
}
|
|
51
53
|
targetDateValue = targetDate;
|
|
52
54
|
}
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
estimateValue,
|
|
57
|
-
estimateUnit,
|
|
58
|
-
targetDate: targetDateValue,
|
|
59
|
-
}, ctx.actor.subject);
|
|
55
|
+
const claimed = { classTag, claimText: claim, estimateValue, estimateUnit, targetDate: targetDateValue };
|
|
56
|
+
const mirror = predictionMirror(ctx.tenantId, claimed, loadConfig(opts.hippoRoot).defaultHalfLifeDays);
|
|
57
|
+
const prediction = await requireGroup(opts.store, 'predictions').savePrediction(ctx.tenantId, { ...claimed, mirror }, ctx.actor.subject);
|
|
60
58
|
sendJson(res, 201, { prediction });
|
|
61
59
|
return;
|
|
62
60
|
}
|
|
61
|
+
/** Which rows a list reads; a status other than all or open needs a class, as no store reads one closed state across classes. */
|
|
62
|
+
function listFilter(classTag, status) {
|
|
63
|
+
if (status === 'all')
|
|
64
|
+
return { classTag };
|
|
65
|
+
if (status === 'open')
|
|
66
|
+
return { classTag, closureState: 'open' };
|
|
67
|
+
if (!isSetMember(VALID_CLOSURE_STATES, status)) {
|
|
68
|
+
throw new HttpError(400, `status must be one of: open | closed | closed-unknown | all (got "${status}")`);
|
|
69
|
+
}
|
|
70
|
+
if (!classTag) {
|
|
71
|
+
throw new HttpError(400, 'status filter (non-open) requires class param');
|
|
72
|
+
}
|
|
73
|
+
return { classTag, closureState: status };
|
|
74
|
+
}
|
|
63
75
|
export async function handleListPredictions({ req, res, opts, query }) {
|
|
64
|
-
const classTag = query.get('class')
|
|
76
|
+
const classTag = query.get('class') || undefined;
|
|
65
77
|
const status = query.get('status') ?? 'all';
|
|
66
78
|
const limit = parseListLimit(query.get('limit'));
|
|
67
79
|
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
68
80
|
const ctx = await buildContextWithAuth(req, opts);
|
|
69
|
-
|
|
70
|
-
if (status === 'all') {
|
|
71
|
-
predictions = classTag
|
|
72
|
-
? loadPredictionsByClass(opts.hippoRoot, ctx.tenantId, classTag, { limit: limit + 1, after })
|
|
73
|
-
: loadAllPredictions(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
|
|
74
|
-
}
|
|
75
|
-
else if (status === 'open') {
|
|
76
|
-
predictions = loadOpenPredictions(opts.hippoRoot, ctx.tenantId, {
|
|
77
|
-
classTag: classTag || undefined,
|
|
78
|
-
limit: limit + 1,
|
|
79
|
-
after,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
if (!isSetMember(VALID_CLOSURE_STATES, status)) {
|
|
84
|
-
throw new HttpError(400, `status must be one of: open | closed | closed-unknown | all (got "${status}")`);
|
|
85
|
-
}
|
|
86
|
-
if (!classTag) {
|
|
87
|
-
throw new HttpError(400, 'status filter (non-open) requires class param');
|
|
88
|
-
}
|
|
89
|
-
predictions = loadPredictionsByClass(opts.hippoRoot, ctx.tenantId, classTag, {
|
|
90
|
-
closureState: status,
|
|
91
|
-
limit: limit + 1,
|
|
92
|
-
after,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
81
|
+
const predictions = await requireGroup(opts.store, 'predictions').listPredictions(ctx.tenantId, { ...listFilter(classTag, status), limit: limit + 1, after });
|
|
95
82
|
const page = pageOf(predictions, limit, byCreatedAt);
|
|
96
83
|
sendJson(res, 200, { predictions: page.items, next_cursor: page.nextCursor });
|
|
97
84
|
return;
|
|
@@ -109,14 +96,14 @@ export async function handlePredictionStats({ req, res, opts, query }) {
|
|
|
109
96
|
throw new HttpError(400, `class exceeds ${MAX_ID_LEN}-character cap`);
|
|
110
97
|
}
|
|
111
98
|
const ctx = await buildContextWithAuth(req, opts);
|
|
112
|
-
const baserate =
|
|
99
|
+
const baserate = await requireGroup(opts.store, 'predictions').predictionBaserate(ctx.tenantId, classTag, ctx.actor.subject);
|
|
113
100
|
sendJson(res, 200, { baserate });
|
|
114
101
|
return;
|
|
115
102
|
}
|
|
116
103
|
export async function handleGetPrediction({ req, res, opts }, predictionByIdMatch) {
|
|
117
104
|
const id = parseInt(predictionByIdMatch[1], 10);
|
|
118
105
|
const ctx = await buildContextWithAuth(req, opts);
|
|
119
|
-
const prediction =
|
|
106
|
+
const prediction = await requireGroup(opts.store, 'predictions').predictionById(ctx.tenantId, id);
|
|
120
107
|
if (!prediction) {
|
|
121
108
|
throw new HttpError(404, `prediction ${id} not found`);
|
|
122
109
|
}
|
|
@@ -150,11 +137,8 @@ export async function handleClosePrediction({ req, res, opts }, predictionCloseM
|
|
|
150
137
|
}
|
|
151
138
|
closureNote = note;
|
|
152
139
|
}
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
actualValue,
|
|
156
|
-
closureNote,
|
|
157
|
-
}, ctx.actor.subject);
|
|
140
|
+
const close = { closureState: state, actualValue, closureNote };
|
|
141
|
+
const prediction = await requireGroup(opts.store, 'predictions').closePrediction(ctx.tenantId, id, close, ctx.actor.subject);
|
|
158
142
|
sendJson(res, 200, { prediction });
|
|
159
143
|
return;
|
|
160
144
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RouteRequest } from '../types.js';
|
|
2
|
-
export declare function handleCreateProcess(
|
|
3
|
-
export declare function handleListProcesses(
|
|
4
|
-
export declare function handleSupersedeProcess(
|
|
5
|
-
export declare function handleCloseProcess(
|
|
6
|
-
export declare function handleGetProcess(
|
|
2
|
+
export declare function handleCreateProcess(rr: RouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListProcesses(rr: RouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleSupersedeProcess(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseProcess(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetProcess(rr: RouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=processes.d.ts.map
|