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
|
@@ -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
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// /v1/processes routes.
|
|
2
|
-
import {
|
|
3
|
-
import { HttpError, sendJson } from '../../http-util.js';
|
|
2
|
+
import { PROCESS } from '../../objects/processes.js';
|
|
3
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
4
|
import { buildContextWithAuth } from '../auth.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { parseJsonBody } from '../validation.js';
|
|
6
|
+
import { isJsonString } from '../../util/json.js';
|
|
7
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString, saveFor, supersedeRoute } from './object-routes.js';
|
|
8
8
|
// HTTP-boundary validation for a process `steps` body (untrusted). Returns the
|
|
9
9
|
// step strings (saveProcess re-validates + trims, this is the fail-fast 400
|
|
10
|
-
// gate). Caps mirror src/processes.ts MAX_PROCESS_STEPS / MAX_PROCESS_STEP_LEN.
|
|
10
|
+
// gate). Caps mirror src/objects/processes.ts MAX_PROCESS_STEPS / MAX_PROCESS_STEP_LEN.
|
|
11
11
|
function validateProcessStepsBody(raw) {
|
|
12
12
|
if (raw === undefined || raw === null)
|
|
13
13
|
return [];
|
|
@@ -31,6 +31,21 @@ function validateProcessStepsBody(raw) {
|
|
|
31
31
|
// SAFETY: every item in raw was confirmed to be a string in the loop above.
|
|
32
32
|
return raw;
|
|
33
33
|
}
|
|
34
|
+
const processRoutes = {
|
|
35
|
+
noun: 'process',
|
|
36
|
+
field: 'process',
|
|
37
|
+
listField: 'processes',
|
|
38
|
+
object: PROCESS,
|
|
39
|
+
revise: (body) => {
|
|
40
|
+
const steps = validateProcessStepsBody(body['steps']);
|
|
41
|
+
if (steps.length === 0) {
|
|
42
|
+
throw new HttpError(400, 'steps is required (at least one step) for a supersession');
|
|
43
|
+
}
|
|
44
|
+
const changeSummary = optionalString(body, 'changeSummary', 4096);
|
|
45
|
+
const description = optionalString(body, 'description', 4096);
|
|
46
|
+
return (existing, id) => ({ processName: existing.processName, steps, description, changeSummary, supersedesProcessId: id });
|
|
47
|
+
},
|
|
48
|
+
};
|
|
34
49
|
// ── processes (first-class object) ──
|
|
35
50
|
//
|
|
36
51
|
// 5 routes: POST /v1/processes (new; body processName + steps[] + description),
|
|
@@ -42,121 +57,26 @@ function validateProcessStepsBody(raw) {
|
|
|
42
57
|
// caps: processName/description/changeSummary 4096, steps 200x2000
|
|
43
58
|
// (validateProcessStepsBody). Mirrors /v1/decisions; the delta lifecycle is the
|
|
44
59
|
// decision supersede path.
|
|
45
|
-
export async function handleCreateProcess(
|
|
46
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
47
|
-
const body = await parseJsonBody(req, ctx);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
const steps = validateProcessStepsBody(body['steps']);
|
|
56
|
-
const descriptionRaw = body['description'];
|
|
57
|
-
let description;
|
|
58
|
-
if (descriptionRaw !== undefined && descriptionRaw !== null) {
|
|
59
|
-
if (!isJsonString(descriptionRaw)) {
|
|
60
|
-
throw new HttpError(400, 'description must be a string');
|
|
61
|
-
}
|
|
62
|
-
if (descriptionRaw.length > 4096) {
|
|
63
|
-
throw new HttpError(400, 'description exceeds 4096-character cap');
|
|
64
|
-
}
|
|
65
|
-
description = descriptionRaw;
|
|
66
|
-
}
|
|
67
|
-
const process = saveProcess(opts.hippoRoot, ctx.tenantId, {
|
|
68
|
-
processName,
|
|
69
|
-
steps,
|
|
70
|
-
description,
|
|
71
|
-
}, ctx.actor.subject);
|
|
72
|
-
sendJson(res, 201, { process });
|
|
73
|
-
return;
|
|
60
|
+
export async function handleCreateProcess(rr) {
|
|
61
|
+
const ctx = await buildContextWithAuth(rr.req, rr.opts);
|
|
62
|
+
const body = await parseJsonBody(rr.req, ctx);
|
|
63
|
+
const process = await saveFor(rr, PROCESS, ctx.tenantId, ctx.actor.subject, {
|
|
64
|
+
processName: requiredString(body, 'processName', { max: 4096 }),
|
|
65
|
+
steps: validateProcessStepsBody(body['steps']),
|
|
66
|
+
description: optionalString(body, 'description', 4096),
|
|
67
|
+
});
|
|
68
|
+
sendJson(rr.res, 201, { process });
|
|
74
69
|
}
|
|
75
|
-
export
|
|
76
|
-
|
|
77
|
-
const limit = parseListLimit(query.get('limit'));
|
|
78
|
-
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
79
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
80
|
-
let processes;
|
|
81
|
-
if (status === 'all') {
|
|
82
|
-
processes = loadProcesses(opts.hippoRoot, ctx.tenantId, { limit: limit + 1, after });
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
if (!isSetMember(VALID_PROCESS_STATES, status)) {
|
|
86
|
-
throw new HttpError(400, `status must be one of: active | superseded | closed | all (got "${status}")`);
|
|
87
|
-
}
|
|
88
|
-
processes = loadProcesses(opts.hippoRoot, ctx.tenantId, {
|
|
89
|
-
status,
|
|
90
|
-
limit: limit + 1,
|
|
91
|
-
after,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
const page = pageOf(processes, limit, byCreatedAt);
|
|
95
|
-
sendJson(res, 200, { processes: page.items, next_cursor: page.nextCursor });
|
|
96
|
-
return;
|
|
70
|
+
export function handleListProcesses(rr) {
|
|
71
|
+
return listRoute(processRoutes, rr);
|
|
97
72
|
}
|
|
98
|
-
export
|
|
99
|
-
|
|
100
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
101
|
-
const body = await parseJsonBody(req, ctx);
|
|
102
|
-
const steps = validateProcessStepsBody(body['steps']);
|
|
103
|
-
if (steps.length === 0) {
|
|
104
|
-
throw new HttpError(400, 'steps is required (at least one step) for a supersession');
|
|
105
|
-
}
|
|
106
|
-
const changeRaw = body['changeSummary'];
|
|
107
|
-
let changeSummary;
|
|
108
|
-
if (changeRaw !== undefined && changeRaw !== null) {
|
|
109
|
-
if (!isJsonString(changeRaw)) {
|
|
110
|
-
throw new HttpError(400, 'changeSummary must be a string');
|
|
111
|
-
}
|
|
112
|
-
if (changeRaw.length > 4096) {
|
|
113
|
-
throw new HttpError(400, 'changeSummary exceeds 4096-character cap');
|
|
114
|
-
}
|
|
115
|
-
changeSummary = changeRaw;
|
|
116
|
-
}
|
|
117
|
-
const descRaw = body['description'];
|
|
118
|
-
let description;
|
|
119
|
-
if (descRaw !== undefined && descRaw !== null) {
|
|
120
|
-
if (!isJsonString(descRaw)) {
|
|
121
|
-
throw new HttpError(400, 'description must be a string');
|
|
122
|
-
}
|
|
123
|
-
if (descRaw.length > 4096) {
|
|
124
|
-
throw new HttpError(400, 'description exceeds 4096-character cap');
|
|
125
|
-
}
|
|
126
|
-
description = descRaw;
|
|
127
|
-
}
|
|
128
|
-
// A supersession is a new version of the SAME process: reuse the
|
|
129
|
-
// predecessor's name. 404 if the target does not exist; saveProcess's
|
|
130
|
-
// in-SAVEPOINT preflight is the authoritative active-state check (409).
|
|
131
|
-
const existing = loadProcessById(opts.hippoRoot, ctx.tenantId, id);
|
|
132
|
-
if (!existing) {
|
|
133
|
-
throw new HttpError(404, `process ${id} not found`);
|
|
134
|
-
}
|
|
135
|
-
const process = saveProcess(opts.hippoRoot, ctx.tenantId, {
|
|
136
|
-
processName: existing.processName,
|
|
137
|
-
steps,
|
|
138
|
-
description,
|
|
139
|
-
changeSummary,
|
|
140
|
-
supersedesProcessId: id,
|
|
141
|
-
}, ctx.actor.subject);
|
|
142
|
-
sendJson(res, 200, { process });
|
|
143
|
-
return;
|
|
73
|
+
export function handleSupersedeProcess(rr, match) {
|
|
74
|
+
return supersedeRoute(processRoutes, rr, match);
|
|
144
75
|
}
|
|
145
|
-
export
|
|
146
|
-
|
|
147
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
148
|
-
const process = closeProcess(opts.hippoRoot, ctx.tenantId, id, ctx.actor.subject);
|
|
149
|
-
sendJson(res, 200, { process });
|
|
150
|
-
return;
|
|
76
|
+
export function handleCloseProcess(rr, match) {
|
|
77
|
+
return closeRoute(processRoutes, rr, match);
|
|
151
78
|
}
|
|
152
|
-
export
|
|
153
|
-
|
|
154
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
155
|
-
const process = loadProcessById(opts.hippoRoot, ctx.tenantId, id);
|
|
156
|
-
if (!process) {
|
|
157
|
-
throw new HttpError(404, `process ${id} not found`);
|
|
158
|
-
}
|
|
159
|
-
sendJson(res, 200, { process });
|
|
160
|
-
return;
|
|
79
|
+
export function handleGetProcess(rr, match) {
|
|
80
|
+
return getRoute(processRoutes, rr, match);
|
|
161
81
|
}
|
|
162
82
|
//# sourceMappingURL=processes.js.map
|