hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreateDecision(rr:
|
|
3
|
-
export declare function handleListDecisions(rr:
|
|
4
|
-
export declare function handleSupersedeDecision(rr:
|
|
5
|
-
export declare function handleCloseDecision(rr:
|
|
6
|
-
export declare function handleGetDecision(rr:
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreateDecision(rr: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListDecisions(rr: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleSupersedeDecision(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseDecision(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetDecision(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -3,11 +3,11 @@ import { DECISION } from '../../objects/decisions.js';
|
|
|
3
3
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
4
|
import { NotFoundError } from '../../core/api-errors.js';
|
|
5
5
|
import { isJsonNumber } from '../../util/json.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { closeRoute, getRoute, listRoute, optionalString, requiredString
|
|
6
|
+
import { MAX_SHORT_FIELD_LEN, parseJsonBody } from '../validation.js';
|
|
7
|
+
import { saveFor } from '../../api/objects.js';
|
|
8
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString } from './object-routes.js';
|
|
9
9
|
const decisionRoutes = { noun: 'decision', field: 'decision', listField: 'decisions', object: DECISION };
|
|
10
|
-
const TEXT = { max:
|
|
10
|
+
const TEXT = { max: MAX_SHORT_FIELD_LEN, untrimmed: true };
|
|
11
11
|
function supersededId(body) {
|
|
12
12
|
const raw = body['supersedesDecisionId'];
|
|
13
13
|
if (raw === undefined || raw === null)
|
|
@@ -17,27 +17,18 @@ function supersededId(body) {
|
|
|
17
17
|
}
|
|
18
18
|
return raw;
|
|
19
19
|
}
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// 5 routes: POST /v1/decisions (create, optional supersedesDecisionId),
|
|
23
|
-
// GET /v1/decisions (list, status filter), GET /v1/decisions/:id (show),
|
|
24
|
-
// POST /v1/decisions/:id/supersede (create a successor + supersede :id),
|
|
25
|
-
// POST /v1/decisions/:id/close (retire). Bearer-authed + tenant-scoped via
|
|
26
|
-
// buildContextWithAuth. status validated against VALID_DECISION_STATES.
|
|
27
|
-
// DoS caps: text 4096, context 4096. The HTTP surface is
|
|
28
|
-
// new (no legacy --supersedes <memory-id> constraint), so it supersedes by
|
|
29
|
-
// table id and never weakens a memory mirror.
|
|
20
|
+
// Routes: /v1/decisions (create, list, show, supersede, close), Bearer-authed and tenant-scoped; status is validated against VALID_DECISION_STATES.
|
|
21
|
+
// The HTTP surface has no legacy --supersedes <memory-id> constraint, so it supersedes by table id and never weakens a memory mirror.
|
|
30
22
|
export async function handleCreateDecision(rr) {
|
|
31
|
-
const { req, res } = rr;
|
|
32
|
-
const ctx = await buildContextWithAuth(req, rr.opts);
|
|
23
|
+
const { req, res, ctx } = rr;
|
|
33
24
|
const body = await parseJsonBody(req, ctx);
|
|
34
25
|
const write = {
|
|
35
26
|
decisionText: requiredString(body, 'text', TEXT),
|
|
36
|
-
context: optionalString(body, 'context',
|
|
27
|
+
context: optionalString(body, 'context', MAX_SHORT_FIELD_LEN),
|
|
37
28
|
supersedesDecisionId: supersededId(body),
|
|
38
29
|
};
|
|
39
30
|
try {
|
|
40
|
-
const decision = await saveFor(
|
|
31
|
+
const decision = await saveFor(ctx, DECISION, write);
|
|
41
32
|
sendJson(res, 201, { decision });
|
|
42
33
|
}
|
|
43
34
|
catch (e) {
|
|
@@ -53,11 +44,11 @@ export function handleListDecisions(rr) {
|
|
|
53
44
|
// Not on supersedeRoute: this one answers 201 and leaves the missing-row 404 to the store, where the other five answer 200 after their own lookup.
|
|
54
45
|
export async function handleSupersedeDecision(rr, match) {
|
|
55
46
|
const oldId = parseInt(match[1], 10);
|
|
56
|
-
const ctx =
|
|
47
|
+
const { ctx } = rr;
|
|
57
48
|
const body = await parseJsonBody(rr.req, ctx);
|
|
58
|
-
const decision = await saveFor(
|
|
49
|
+
const decision = await saveFor(ctx, DECISION, {
|
|
59
50
|
decisionText: requiredString(body, 'text', TEXT),
|
|
60
|
-
context: optionalString(body, 'context',
|
|
51
|
+
context: optionalString(body, 'context', MAX_SHORT_FIELD_LEN),
|
|
61
52
|
supersedesDecisionId: oldId,
|
|
62
53
|
});
|
|
63
54
|
sendJson(rr.res, 201, { decision });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreateIncident(rr:
|
|
3
|
-
export declare function handleListIncidents(rr:
|
|
4
|
-
export declare function handleResolveIncident(rr:
|
|
5
|
-
export declare function handleCloseIncident(rr:
|
|
6
|
-
export declare function handleGetIncident(rr:
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreateIncident(rr: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListIncidents(rr: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleResolveIncident(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseIncident(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetIncident(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=incidents.d.ts.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { INCIDENT, openIncident, resolveOpenIncident } from '../../objects/incidents.js';
|
|
3
3
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
4
|
import { NotFoundError } from '../../core/api-errors.js';
|
|
5
|
-
import {
|
|
6
|
-
import { parseJsonBody } from '../validation.js';
|
|
5
|
+
import { MAX_SHORT_FIELD_LEN, parseJsonBody } from '../validation.js';
|
|
7
6
|
import { isJsonString } from '../../util/json.js';
|
|
8
|
-
import {
|
|
7
|
+
import { objectsOf } from '../../api/objects.js';
|
|
8
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString } from './object-routes.js';
|
|
9
9
|
const MAX_LINKED_MEMORY_IDS = 256;
|
|
10
10
|
const incidentRoutes = { noun: 'incident', field: 'incident', listField: 'incidents', object: INCIDENT };
|
|
11
11
|
function linkedMemoryIds(body) {
|
|
@@ -18,34 +18,24 @@ function linkedMemoryIds(body) {
|
|
|
18
18
|
if (raw.length > MAX_LINKED_MEMORY_IDS) {
|
|
19
19
|
throw new HttpError(400, `linkedMemoryIds exceeds ${MAX_LINKED_MEMORY_IDS}-item cap`);
|
|
20
20
|
}
|
|
21
|
-
const isValidMemoryId = (item) => isJsonString(item) && item.length > 0 && item.length <=
|
|
21
|
+
const isValidMemoryId = (item) => isJsonString(item) && item.length > 0 && item.length <= MAX_SHORT_FIELD_LEN;
|
|
22
22
|
if (!raw.every(isValidMemoryId)) {
|
|
23
|
-
throw new HttpError(400,
|
|
23
|
+
throw new HttpError(400, `each linkedMemoryIds entry must be a non-empty string <= ${MAX_SHORT_FIELD_LEN} chars`);
|
|
24
24
|
}
|
|
25
25
|
return raw;
|
|
26
26
|
}
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
// 5 routes: POST /v1/incidents (open; body text + context + linkedMemoryIds[]),
|
|
30
|
-
// GET /v1/incidents (list, status filter), GET /v1/incidents/:id (show),
|
|
31
|
-
// POST /v1/incidents/:id/resolve (open -> resolved; body resolutionText),
|
|
32
|
-
// POST /v1/incidents/:id/close (open|resolved -> closed). Bearer-authed +
|
|
33
|
-
// tenant-scoped via buildContextWithAuth. status validated against
|
|
34
|
-
// VALID_INCIDENT_STATES. DoS caps: text 4096, context 4096, resolutionText
|
|
35
|
-
// 4096. Mirrors /v1/decisions; lifecycle is
|
|
36
|
-
// open->resolved->closed (no supersede), so linkedMemoryIds replaces
|
|
37
|
-
// supersedesDecisionId on create.
|
|
27
|
+
// Routes: /v1/incidents (open, list, show, resolve, close), mirroring /v1/decisions; status is validated against VALID_INCIDENT_STATES.
|
|
28
|
+
// Lifecycle is open->resolved->closed (no supersede), so linkedMemoryIds replaces supersedesDecisionId on create.
|
|
38
29
|
export async function handleCreateIncident(rr) {
|
|
39
|
-
const { req, res, opts } = rr;
|
|
40
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
30
|
+
const { req, res, opts, ctx } = rr;
|
|
41
31
|
const body = await parseJsonBody(req, ctx);
|
|
42
32
|
const write = {
|
|
43
|
-
incidentText: requiredString(body, 'text', { max:
|
|
44
|
-
context: optionalString(body, 'context',
|
|
33
|
+
incidentText: requiredString(body, 'text', { max: MAX_SHORT_FIELD_LEN, untrimmed: true }),
|
|
34
|
+
context: optionalString(body, 'context', MAX_SHORT_FIELD_LEN),
|
|
45
35
|
linkedMemoryIds: linkedMemoryIds(body),
|
|
46
36
|
};
|
|
47
37
|
try {
|
|
48
|
-
const incident = await openIncident(objectsOf(
|
|
38
|
+
const incident = await openIncident(objectsOf(ctx), opts.hippoRoot, ctx.tenantId, write, ctx.actor.subject);
|
|
49
39
|
sendJson(res, 201, { incident });
|
|
50
40
|
}
|
|
51
41
|
catch (e) {
|
|
@@ -59,11 +49,10 @@ export function handleListIncidents(rr) {
|
|
|
59
49
|
return listRoute(incidentRoutes, rr);
|
|
60
50
|
}
|
|
61
51
|
export async function handleResolveIncident(rr, match) {
|
|
62
|
-
const { req, res,
|
|
52
|
+
const { req, res, ctx } = rr;
|
|
63
53
|
const id = parseInt(match[1], 10);
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
const incident = await resolveOpenIncident(objectsOf(rr), ctx.tenantId, id, resolutionText, ctx.actor.subject);
|
|
54
|
+
const resolutionText = requiredString(await parseJsonBody(req, ctx), 'resolutionText', { max: MAX_SHORT_FIELD_LEN });
|
|
55
|
+
const incident = await resolveOpenIncident(objectsOf(ctx), ctx.tenantId, id, resolutionText, ctx.actor.subject);
|
|
67
56
|
sendJson(res, 200, { incident });
|
|
68
57
|
}
|
|
69
58
|
export function handleCloseIncident(rr, match) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreateMemory({ req, res,
|
|
3
|
-
export declare function handleGetGraph({
|
|
4
|
-
export declare function handleArchiveMemory({ req, res,
|
|
5
|
-
export declare function handleSupersedeMemory({ req, res,
|
|
6
|
-
export declare function handlePromoteMemory({
|
|
7
|
-
export declare function handleForgetMemory({
|
|
8
|
-
export declare function handleApplyOutcome({ req, res,
|
|
9
|
-
export declare function handleSleep({ req, res,
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreateMemory({ req, res, ctx }: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleGetGraph({ res, ctx, query }: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleArchiveMemory({ req, res, ctx }: AuthedRouteRequest, archiveMatch: Record<string, string>): Promise<void>;
|
|
5
|
+
export declare function handleSupersedeMemory({ req, res, ctx }: AuthedRouteRequest, supersedeMatch: Record<string, string>): Promise<void>;
|
|
6
|
+
export declare function handlePromoteMemory({ res, ctx }: AuthedRouteRequest, promoteMatch: Record<string, string>): Promise<void>;
|
|
7
|
+
export declare function handleForgetMemory({ res, ctx }: AuthedRouteRequest, idMatch: Record<string, string>): Promise<void>;
|
|
8
|
+
export declare function handleApplyOutcome({ req, res, ctx }: AuthedRouteRequest): Promise<void>;
|
|
9
|
+
export declare function handleSleep({ req, res, ctx }: AuthedRouteRequest): Promise<void>;
|
|
10
10
|
//# sourceMappingURL=memories.d.ts.map
|
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
// Memory write routes: create, graph, archive, supersede, promote, forget, outcome, sleep.
|
|
2
|
+
import { graphRows } from '../../api/graph.js';
|
|
2
3
|
import { archiveRaw, forget, outcome, outcomeForLastRecall, promote, remember, supersede } from '../../api/index.js';
|
|
4
|
+
import { MEMORY_KINDS } from '../../core/memory.js';
|
|
3
5
|
import { graphModelOf } from '../../graph/view.js';
|
|
4
6
|
import { MAX_ENTITY_NAME_LEN } from '../../store/graph-rows.js';
|
|
5
7
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
6
|
-
import { requireGroup } from '../../store/port.js';
|
|
7
|
-
import { assertCrossTenantAdmin, buildContextWithAuth, isLoopback } from '../auth.js';
|
|
8
8
|
import { sleepInChild } from '../sleep-offload.js';
|
|
9
9
|
import { getCallerProject, getString, getStringArray, isSetMember, parseJsonBody, parseListLimit, validateIdSegment } from '../validation.js';
|
|
10
10
|
import { isJsonString, isJsonBoolean } from '../../util/json.js';
|
|
11
|
-
const VALID_KINDS = new Set(
|
|
12
|
-
'raw',
|
|
13
|
-
'distilled',
|
|
14
|
-
'superseded',
|
|
15
|
-
'archived',
|
|
16
|
-
]);
|
|
11
|
+
const VALID_KINDS = new Set(MEMORY_KINDS);
|
|
17
12
|
// POST /v1/memories
|
|
18
|
-
export async function handleCreateMemory({ req, res,
|
|
19
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
13
|
+
export async function handleCreateMemory({ req, res, ctx }) {
|
|
20
14
|
const body = await parseJsonBody(req, ctx);
|
|
21
15
|
const content = getString(body, 'content');
|
|
22
16
|
if (!content) {
|
|
@@ -44,7 +38,7 @@ export async function handleCreateMemory({ req, res, opts }) {
|
|
|
44
38
|
return;
|
|
45
39
|
}
|
|
46
40
|
// GET /v1/graph?entity=NAME&limit=N — read-only entity/relation graph (tenant-scoped)
|
|
47
|
-
export async function handleGetGraph({
|
|
41
|
+
export async function handleGetGraph({ res, ctx, query }) {
|
|
48
42
|
const entityRaw = query.get('entity');
|
|
49
43
|
// Cap at the graph entity-name cap (512), not the id-shaped 256, so a valid
|
|
50
44
|
// long decision/policy name remains focusable over HTTP.
|
|
@@ -52,16 +46,13 @@ export async function handleGetGraph({ req, res, opts, query }) {
|
|
|
52
46
|
throw new HttpError(400, `entity exceeds the ${MAX_ENTITY_NAME_LEN}-character cap`);
|
|
53
47
|
}
|
|
54
48
|
const limit = parseListLimit(query.get('limit'));
|
|
55
|
-
const
|
|
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 } });
|
|
49
|
+
const rows = await graphRows(ctx, { entity: entityRaw ?? undefined, limit });
|
|
58
50
|
sendJson(res, 200, graphModelOf(rows));
|
|
59
51
|
return;
|
|
60
52
|
}
|
|
61
53
|
// /v1/memories/:id/* and DELETE /v1/memories/:id
|
|
62
|
-
export async function handleArchiveMemory({ req, res,
|
|
54
|
+
export async function handleArchiveMemory({ req, res, ctx }, archiveMatch) {
|
|
63
55
|
validateIdSegment(archiveMatch.id, 'memory id');
|
|
64
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
65
56
|
const body = await parseJsonBody(req, ctx);
|
|
66
57
|
const reason = getString(body, 'reason');
|
|
67
58
|
if (!reason) {
|
|
@@ -71,9 +62,8 @@ export async function handleArchiveMemory({ req, res, opts }, archiveMatch) {
|
|
|
71
62
|
sendJson(res, 200, result);
|
|
72
63
|
return;
|
|
73
64
|
}
|
|
74
|
-
export async function handleSupersedeMemory({ req, res,
|
|
65
|
+
export async function handleSupersedeMemory({ req, res, ctx }, supersedeMatch) {
|
|
75
66
|
validateIdSegment(supersedeMatch.id, 'memory id');
|
|
76
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
77
67
|
const body = await parseJsonBody(req, ctx);
|
|
78
68
|
const content = getString(body, 'content');
|
|
79
69
|
if (!content) {
|
|
@@ -83,28 +73,21 @@ export async function handleSupersedeMemory({ req, res, opts }, supersedeMatch)
|
|
|
83
73
|
sendJson(res, 200, result);
|
|
84
74
|
return;
|
|
85
75
|
}
|
|
86
|
-
export async function handlePromoteMemory({
|
|
76
|
+
export async function handlePromoteMemory({ res, ctx }, promoteMatch) {
|
|
87
77
|
validateIdSegment(promoteMatch.id, 'memory id');
|
|
88
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
89
78
|
const result = promote(ctx, promoteMatch.id);
|
|
90
79
|
sendJson(res, 200, result);
|
|
91
80
|
return;
|
|
92
81
|
}
|
|
93
|
-
export async function handleForgetMemory({
|
|
82
|
+
export async function handleForgetMemory({ res, ctx }, idMatch) {
|
|
94
83
|
validateIdSegment(idMatch.id, 'memory id');
|
|
95
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
96
84
|
const result = await forget(ctx, idMatch.id);
|
|
97
85
|
sendJson(res, 200, result);
|
|
98
86
|
return;
|
|
99
87
|
}
|
|
100
|
-
// POST /v1/outcome
|
|
101
|
-
//
|
|
102
|
-
|
|
103
|
-
// {applied, ids} in that case so callers can disambiguate "no recent
|
|
104
|
-
// recall" from "all ids skipped". Each applied id writes one audit_log
|
|
105
|
-
// row (op='outcome', actor from Bearer).
|
|
106
|
-
export async function handleApplyOutcome({ req, res, opts }) {
|
|
107
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
88
|
+
// POST /v1/outcome: applies a positive/negative outcome to memory ids; without ids it falls back to the last-recall path (api.outcomeForLastRecall)
|
|
89
|
+
// and returns {applied, ids}, so callers can tell "no recent recall" from "all ids skipped". Each applied id writes one audit_log row (op='outcome').
|
|
90
|
+
export async function handleApplyOutcome({ req, res, ctx }) {
|
|
108
91
|
const body = await parseJsonBody(req, ctx);
|
|
109
92
|
const good = body['good'];
|
|
110
93
|
if (!isJsonBoolean(good)) {
|
|
@@ -120,10 +103,8 @@ export async function handleApplyOutcome({ req, res, opts }) {
|
|
|
120
103
|
if (!idsRaw.every(isNonEmptyId)) {
|
|
121
104
|
throw new HttpError(400, 'ids must be an array of non-empty strings');
|
|
122
105
|
}
|
|
123
|
-
// DoS cap on ids.length
|
|
124
|
-
//
|
|
125
|
-
// to sub-second wall time on SQLite hot path. Cap BEFORE buildContextWithAuth
|
|
126
|
-
// so attack traffic doesn't pay the api-key lookup cost.
|
|
106
|
+
// DoS cap on ids.length (each id costs ~3 DB ops): N=1000 keeps per-request work sub-second on SQLite. Auth runs first, so only a caller with a key
|
|
107
|
+
// reaches it.
|
|
127
108
|
if (idsRaw.length > 1000) {
|
|
128
109
|
throw new HttpError(400, 'ids exceeds 1000-id cap');
|
|
129
110
|
}
|
|
@@ -142,33 +123,10 @@ export async function handleApplyOutcome({ req, res, opts }) {
|
|
|
142
123
|
}
|
|
143
124
|
return;
|
|
144
125
|
}
|
|
145
|
-
// POST /v1/sleep
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
// {dry_run?, no_share?}. Returns SleepResult JSON.
|
|
150
|
-
//
|
|
151
|
-
// Tenant scope (Episode A follow-up tracked in TODOS.md): api.sleep operates
|
|
152
|
-
// on the WHOLE hippoRoot (cross-tenant by design, matching CLI cmdSleep).
|
|
153
|
-
// The loopback-only guard is the trust boundary today. Future non-loopback
|
|
154
|
-
// serving must also zero the cross-tenant counters for other tenants.
|
|
155
|
-
export async function handleSleep({ req, res, opts }) {
|
|
156
|
-
// Defensive per-request loopback guard. Uses the canonical isLoopback()
|
|
157
|
-
// helper above so any future extension (additional mapped/IPv6 forms,
|
|
158
|
-
// NAT64 prefixes) flows through without drift. serve()'s boot-time host
|
|
159
|
-
// check is the primary trust boundary; this is belt-and-suspenders.
|
|
160
|
-
if (!isLoopback(req.socket.remoteAddress)) {
|
|
161
|
-
throw new HttpError(403, '/v1/sleep is loopback-only (host-wide consolidation; see CHANGELOG v1.11.4)');
|
|
162
|
-
}
|
|
163
|
-
// Admin-role gate. Forward-defensive: exists today
|
|
164
|
-
// under loopback-only enforcement (loopback fallback is admin by default;
|
|
165
|
-
// any Bearer-authed caller now carries an explicit role from the api_keys
|
|
166
|
-
// row). When non-loopback serving lands, this gate is the actual auth
|
|
167
|
-
// boundary on host-wide sleep.
|
|
168
|
-
const sleepCtx = await buildContextWithAuth(req, opts);
|
|
169
|
-
// Sleep consolidates every tenant under hippoRoot, so it is a cross-tenant action.
|
|
170
|
-
assertCrossTenantAdmin(sleepCtx, '/v1/sleep');
|
|
171
|
-
const body = await parseJsonBody(req, sleepCtx);
|
|
126
|
+
// POST /v1/sleep: host-wide consolidation (consolidate, dedup, audit, share, ambient); api.sleep spans the WHOLE hippoRoot, cross-tenant by design, so the
|
|
127
|
+
// row's host-admin-local gate is the trust boundary. Body {dry_run?, no_share?}; returns SleepResult JSON.
|
|
128
|
+
export async function handleSleep({ req, res, ctx }) {
|
|
129
|
+
const body = await parseJsonBody(req, ctx);
|
|
172
130
|
const dryRunRaw = body['dry_run'];
|
|
173
131
|
if (dryRunRaw !== undefined && !isJsonBoolean(dryRunRaw)) {
|
|
174
132
|
throw new HttpError(400, 'dry_run must be a boolean');
|
|
@@ -177,8 +135,7 @@ export async function handleSleep({ req, res, opts }) {
|
|
|
177
135
|
if (noShareRaw !== undefined && !isJsonBoolean(noShareRaw)) {
|
|
178
136
|
throw new HttpError(400, 'no_share must be a boolean');
|
|
179
137
|
}
|
|
180
|
-
|
|
181
|
-
const result = await sleepInChild(sleepCtx, {
|
|
138
|
+
const result = await sleepInChild(ctx, {
|
|
182
139
|
dryRun: dryRunRaw === true,
|
|
183
140
|
noShare: noShareRaw === true,
|
|
184
141
|
});
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { type JsonValue } from '../../util/json.js';
|
|
2
2
|
import type { ObjectDescriptor, SavableDescriptor } from '../../objects/descriptor.js';
|
|
3
|
-
import type { ObjectByKind, ObjectKind, SavableKind } from '../../
|
|
4
|
-
import {
|
|
5
|
-
import type { RouteRequest } from '../types.js';
|
|
3
|
+
import type { ObjectByKind, ObjectKind, SavableKind } from '../../core/object-types.js';
|
|
4
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
6
5
|
export interface ObjectRouteConfig<K extends ObjectKind> {
|
|
7
6
|
/** Names the object in the 404 text, e.g. "customer note". */
|
|
8
7
|
readonly noun: string;
|
|
@@ -29,12 +28,8 @@ export interface RequiredStringRule {
|
|
|
29
28
|
}
|
|
30
29
|
export declare function requiredString(body: Record<string, JsonValue>, key: string, rule: RequiredStringRule): string;
|
|
31
30
|
export declare function optionalString(body: Record<string, JsonValue>, key: string, max: number): string | undefined;
|
|
32
|
-
|
|
33
|
-
export declare function
|
|
34
|
-
|
|
35
|
-
export declare function
|
|
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>;
|
|
31
|
+
export declare function listRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: AuthedRouteRequest): Promise<void>;
|
|
32
|
+
export declare function getRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
33
|
+
export declare function closeRoute<K extends ObjectKind>(cfg: ObjectRouteConfig<K>, rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
34
|
+
export declare function supersedeRoute<K extends SavableKind, W>(cfg: VersionedRouteConfig<K, W>, rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
40
35
|
//# sourceMappingURL=object-routes.d.ts.map
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
// List, get, close and supersede handlers shared by the typed-object routes; each route file passes one config.
|
|
2
2
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
3
3
|
import { isJsonString } from '../../util/json.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { buildContextWithAuth } from '../auth.js';
|
|
4
|
+
import { objectsOf, saveFor } from '../../api/objects.js';
|
|
5
|
+
import { closeObject, listObjects, objectById } from '../../objects/lifecycle.js';
|
|
7
6
|
import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
|
|
8
7
|
import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
|
|
9
8
|
export function requiredString(body, key, rule) {
|
|
@@ -26,28 +25,18 @@ export function optionalString(body, key, max) {
|
|
|
26
25
|
throw new HttpError(400, `${key} exceeds ${max}-character cap`);
|
|
27
26
|
return value;
|
|
28
27
|
}
|
|
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
28
|
async function found(cfg, objects, tenantId, id) {
|
|
38
29
|
const row = await objectById(objects, cfg.object, tenantId, id);
|
|
39
30
|
if (!row)
|
|
40
31
|
throw new HttpError(404, `${cfg.noun} ${id} not found`);
|
|
41
32
|
return row;
|
|
42
33
|
}
|
|
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
34
|
export async function listRoute(cfg, rr) {
|
|
45
|
-
const {
|
|
35
|
+
const { res, query, ctx } = rr;
|
|
46
36
|
const status = query.get('status') ?? 'all';
|
|
47
37
|
const filter = cfg.filterParam === undefined ? null : query.get(cfg.filterParam);
|
|
48
38
|
const limit = parseListLimit(query.get('limit'));
|
|
49
39
|
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
50
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
51
40
|
const listOpts = { limit: limit + 1, after, filter: filter?.trim() || undefined };
|
|
52
41
|
if (status !== 'all') {
|
|
53
42
|
const states = cfg.object.states;
|
|
@@ -56,25 +45,25 @@ export async function listRoute(cfg, rr) {
|
|
|
56
45
|
}
|
|
57
46
|
listOpts.status = status;
|
|
58
47
|
}
|
|
59
|
-
const page = pageOf(await listObjects(objectsOf(
|
|
48
|
+
const page = pageOf(await listObjects(objectsOf(ctx), cfg.object, ctx.tenantId, listOpts), limit, byCreatedAt);
|
|
60
49
|
sendJson(res, 200, { [cfg.listField]: page.items, next_cursor: page.nextCursor });
|
|
61
50
|
}
|
|
62
51
|
export async function getRoute(cfg, rr, match) {
|
|
63
52
|
const id = parseInt(match[1], 10);
|
|
64
|
-
const ctx =
|
|
65
|
-
sendJson(rr.res, 200, { [cfg.field]: await found(cfg, objectsOf(
|
|
53
|
+
const { ctx } = rr;
|
|
54
|
+
sendJson(rr.res, 200, { [cfg.field]: await found(cfg, objectsOf(ctx), ctx.tenantId, id) });
|
|
66
55
|
}
|
|
67
56
|
export async function closeRoute(cfg, rr, match) {
|
|
68
57
|
const id = parseInt(match[1], 10);
|
|
69
|
-
const ctx =
|
|
70
|
-
sendJson(rr.res, 200, { [cfg.field]: await closeObject(objectsOf(
|
|
58
|
+
const { ctx } = rr;
|
|
59
|
+
sendJson(rr.res, 200, { [cfg.field]: await closeObject(objectsOf(ctx), cfg.object, ctx.tenantId, id, ctx.actor.subject) });
|
|
71
60
|
}
|
|
72
61
|
export async function supersedeRoute(cfg, rr, match) {
|
|
73
62
|
const id = parseInt(match[1], 10);
|
|
74
|
-
const ctx =
|
|
63
|
+
const { ctx } = rr;
|
|
75
64
|
const successor = cfg.revise(await parseJsonBody(rr.req, ctx));
|
|
76
|
-
const existing = await found(cfg, objectsOf(
|
|
77
|
-
const saved = await saveFor(
|
|
65
|
+
const existing = await found(cfg, objectsOf(ctx), ctx.tenantId, id);
|
|
66
|
+
const saved = await saveFor(ctx, cfg.object, successor(existing, id));
|
|
78
67
|
sendJson(rr.res, 200, { [cfg.field]: saved });
|
|
79
68
|
}
|
|
80
69
|
//# sourceMappingURL=object-routes.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreatePolicy(rr:
|
|
3
|
-
export declare function handleListPolicies(rr:
|
|
4
|
-
export declare function handlePoliciesAsOf(rr:
|
|
5
|
-
export declare function handleSupersedePolicy(rr:
|
|
6
|
-
export declare function handleClosePolicy(rr:
|
|
7
|
-
export declare function handleGetPolicy(rr:
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreatePolicy(rr: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListPolicies(rr: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handlePoliciesAsOf(rr: AuthedRouteRequest): Promise<void>;
|
|
5
|
+
export declare function handleSupersedePolicy(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleClosePolicy(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
|
+
export declare function handleGetPolicy(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
8
8
|
//# sourceMappingURL=policies.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// /v1/policies routes.
|
|
2
2
|
import { policiesAsOf, POLICY } from '../../objects/policies.js';
|
|
3
3
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { closeRoute, getRoute, listRoute,
|
|
4
|
+
import { MAX_SHORT_FIELD_LEN, parseJsonBody } from '../validation.js';
|
|
5
|
+
import { objectsOf, saveFor } from '../../api/objects.js';
|
|
6
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString, supersedeRoute, } from './object-routes.js';
|
|
7
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
8
|
const MAX_DATE_LEN = 64;
|
|
9
9
|
const policyRoutes = {
|
|
@@ -12,28 +12,20 @@ const policyRoutes = {
|
|
|
12
12
|
listField: 'policies',
|
|
13
13
|
object: POLICY,
|
|
14
14
|
revise: (body) => {
|
|
15
|
-
const policyText = requiredString(body, 'policyText', { max:
|
|
15
|
+
const policyText = requiredString(body, 'policyText', { max: MAX_SHORT_FIELD_LEN });
|
|
16
16
|
const validFrom = optionalString(body, 'validFrom', MAX_DATE_LEN);
|
|
17
17
|
const validTo = optionalString(body, 'validTo', MAX_DATE_LEN);
|
|
18
|
-
const changeSummary = optionalString(body, 'changeSummary',
|
|
18
|
+
const changeSummary = optionalString(body, 'changeSummary', MAX_SHORT_FIELD_LEN);
|
|
19
19
|
return (existing, id) => ({ policyName: existing.policyName, policyText, validFrom, validTo, changeSummary, supersedesPolicyId: id });
|
|
20
20
|
},
|
|
21
21
|
};
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
// 6 routes: POST /v1/policies (new; processName-style body policyName +
|
|
25
|
-
// policyText + validFrom? + validTo?), GET /v1/policies (list, status filter),
|
|
26
|
-
// GET /v1/policies/asof (date + optional name; the bi-temporal as-of query;
|
|
27
|
-
// placed BEFORE the /:id GET so the literal 'asof' is matched first), GET
|
|
28
|
-
// /v1/policies/:id, POST /v1/policies/:id/supersede, POST /v1/policies/:id/close.
|
|
29
|
-
// Date inputs are normalized + range-validated in the store; an invalid/inverted
|
|
30
|
-
// date throws -> 400. DoS caps: policyName/policyText/changeSummary 4096.
|
|
22
|
+
// The as-of route is registered BEFORE /:id so the literal 'asof' is matched first; date errors surface as 400.
|
|
31
23
|
export async function handleCreatePolicy(rr) {
|
|
32
|
-
const ctx =
|
|
24
|
+
const { ctx } = rr;
|
|
33
25
|
const body = await parseJsonBody(rr.req, ctx);
|
|
34
|
-
const policy = await saveFor(
|
|
35
|
-
policyName: requiredString(body, 'policyName', { max:
|
|
36
|
-
policyText: requiredString(body, 'policyText', { max:
|
|
26
|
+
const policy = await saveFor(ctx, POLICY, {
|
|
27
|
+
policyName: requiredString(body, 'policyName', { max: MAX_SHORT_FIELD_LEN }),
|
|
28
|
+
policyText: requiredString(body, 'policyText', { max: MAX_SHORT_FIELD_LEN }),
|
|
37
29
|
validFrom: optionalString(body, 'validFrom', MAX_DATE_LEN),
|
|
38
30
|
validTo: optionalString(body, 'validTo', MAX_DATE_LEN),
|
|
39
31
|
});
|
|
@@ -45,16 +37,14 @@ export function handleListPolicies(rr) {
|
|
|
45
37
|
// The as-of query: must precede the /:id GET (literal 'asof' is non-numeric so
|
|
46
38
|
// the /(\d+)/ route would not match it, but order it first for clarity).
|
|
47
39
|
export async function handlePoliciesAsOf(rr) {
|
|
48
|
-
const {
|
|
40
|
+
const { res, query, ctx } = rr;
|
|
49
41
|
const date = query.get('date');
|
|
50
42
|
if (date === null || date.length === 0) {
|
|
51
43
|
throw new HttpError(400, 'date is required (ISO-8601 valid-time)');
|
|
52
44
|
}
|
|
53
45
|
const name = query.get('name') ?? undefined;
|
|
54
|
-
const
|
|
55
|
-
const policies = await policiesAsOf(objectsOf(rr), ctx.tenantId, date, { name });
|
|
46
|
+
const policies = await policiesAsOf(objectsOf(ctx), ctx.tenantId, date, { name });
|
|
56
47
|
sendJson(res, 200, { policies });
|
|
57
|
-
return;
|
|
58
48
|
}
|
|
59
49
|
export function handleSupersedePolicy(rr, match) {
|
|
60
50
|
return supersedeRoute(policyRoutes, rr, match);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreatePrediction({ req, res, opts }:
|
|
3
|
-
export declare function handleListPredictions({
|
|
4
|
-
export declare function handlePredictionStats({
|
|
5
|
-
export declare function handleGetPrediction({
|
|
6
|
-
export declare function handleClosePrediction({ req, res,
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreatePrediction({ req, res, ctx, opts }: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListPredictions({ res, ctx, query }: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handlePredictionStats({ res, ctx, query }: AuthedRouteRequest): Promise<void>;
|
|
5
|
+
export declare function handleGetPrediction({ res, ctx }: AuthedRouteRequest, predictionByIdMatch: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleClosePrediction({ req, res, ctx }: AuthedRouteRequest, predictionCloseMatch: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=predictions.d.ts.map
|