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,28 +1,23 @@
|
|
|
1
1
|
// /v1/predictions routes.
|
|
2
|
+
import { closePrediction, listPredictions, predictionBaserate, predictionById, savePrediction } from '../../api/predictions.js';
|
|
2
3
|
import { loadConfig } from '../../core/config.js';
|
|
3
|
-
import { predictionMirror
|
|
4
|
-
import {
|
|
5
|
-
import { HttpError,
|
|
6
|
-
import {
|
|
4
|
+
import { predictionMirror } from '../../store/predictions.js';
|
|
5
|
+
import { VALID_CLOSURE_STATES } from '../../core/prediction.js';
|
|
6
|
+
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
7
|
+
import { MAX_ID_LEN } from '../../util/limits.js';
|
|
7
8
|
import { byCreatedAt, pageOf, parseCursor } from '../cursor.js';
|
|
8
|
-
import { isSetMember, parseJsonBody, parseListLimit } from '../validation.js';
|
|
9
|
+
import { isSetMember, MAX_SHORT_FIELD_LEN, parseJsonBody, parseListLimit } from '../validation.js';
|
|
9
10
|
import { isJsonString, isJsonNumber } from '../../util/json.js';
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
// GET /v1/predictions/:id (show), POST /v1/predictions/:id/close (close).
|
|
14
|
-
// All Bearer-authed + tenant-scoped via buildContextWithAuth. closure_state
|
|
15
|
-
// validated against VALID_CLOSURE_STATES (3 states). DoS caps on claim
|
|
16
|
-
// (4096 chars) + closureNote (2048 chars).
|
|
17
|
-
export async function handleCreatePrediction({ req, res, opts }) {
|
|
18
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
11
|
+
// Routes: /v1/predictions (create, list, show, close), Bearer-authed and tenant-scoped; closure_state is validated against VALID_CLOSURE_STATES.
|
|
12
|
+
// DoS caps: claim MAX_SHORT_FIELD_LEN chars, closureNote 2048.
|
|
13
|
+
export async function handleCreatePrediction({ req, res, ctx, opts }) {
|
|
19
14
|
const body = await parseJsonBody(req, ctx);
|
|
20
15
|
const claim = body['claim'];
|
|
21
16
|
if (!isJsonString(claim) || claim.length === 0) {
|
|
22
17
|
throw new HttpError(400, 'claim is required (non-empty string)');
|
|
23
18
|
}
|
|
24
|
-
if (claim.length >
|
|
25
|
-
throw new HttpError(400,
|
|
19
|
+
if (claim.length > MAX_SHORT_FIELD_LEN) {
|
|
20
|
+
throw new HttpError(400, `claim exceeds ${MAX_SHORT_FIELD_LEN}-character cap`);
|
|
26
21
|
}
|
|
27
22
|
const classTag = body['classTag'];
|
|
28
23
|
if (!isJsonString(classTag) || classTag.length === 0) {
|
|
@@ -54,9 +49,8 @@ export async function handleCreatePrediction({ req, res, opts }) {
|
|
|
54
49
|
}
|
|
55
50
|
const claimed = { classTag, claimText: claim, estimateValue, estimateUnit, targetDate: targetDateValue };
|
|
56
51
|
const mirror = predictionMirror(ctx.tenantId, claimed, loadConfig(opts.hippoRoot).defaultHalfLifeDays);
|
|
57
|
-
const prediction = await
|
|
52
|
+
const prediction = await savePrediction(ctx, { ...claimed, mirror });
|
|
58
53
|
sendJson(res, 201, { prediction });
|
|
59
|
-
return;
|
|
60
54
|
}
|
|
61
55
|
/** 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
56
|
function listFilter(classTag, status) {
|
|
@@ -72,22 +66,18 @@ function listFilter(classTag, status) {
|
|
|
72
66
|
}
|
|
73
67
|
return { classTag, closureState: status };
|
|
74
68
|
}
|
|
75
|
-
export async function handleListPredictions({
|
|
69
|
+
export async function handleListPredictions({ res, ctx, query }) {
|
|
76
70
|
const classTag = query.get('class') || undefined;
|
|
77
71
|
const status = query.get('status') ?? 'all';
|
|
78
72
|
const limit = parseListLimit(query.get('limit'));
|
|
79
73
|
const after = parseCursor(query.get('cursor'), 'string', 'integer');
|
|
80
|
-
const
|
|
81
|
-
const predictions = await requireGroup(opts.store, 'predictions').listPredictions(ctx.tenantId, { ...listFilter(classTag, status), limit: limit + 1, after });
|
|
74
|
+
const predictions = await listPredictions(ctx, { ...listFilter(classTag, status), limit: limit + 1, after });
|
|
82
75
|
const page = pageOf(predictions, limit, byCreatedAt);
|
|
83
76
|
sendJson(res, 200, { predictions: page.items, next_cursor: page.nextCursor });
|
|
84
|
-
return;
|
|
85
77
|
}
|
|
86
|
-
// Reference-class / planning-fallacy detector
|
|
87
|
-
//
|
|
88
|
-
|
|
89
|
-
// but routing this first avoids the dispatch order risk.
|
|
90
|
-
export async function handlePredictionStats({ req, res, opts, query }) {
|
|
78
|
+
// Reference-class / planning-fallacy detector; registered BEFORE /v1/predictions/:id so dispatch order cannot matter ('stats' is not a number, but routing
|
|
79
|
+
// it first is safer).
|
|
80
|
+
export async function handlePredictionStats({ res, ctx, query }) {
|
|
91
81
|
const classTag = query.get('class');
|
|
92
82
|
if (!classTag || classTag.length === 0) {
|
|
93
83
|
throw new HttpError(400, 'class param is required');
|
|
@@ -95,24 +85,19 @@ export async function handlePredictionStats({ req, res, opts, query }) {
|
|
|
95
85
|
if (classTag.length > MAX_ID_LEN) {
|
|
96
86
|
throw new HttpError(400, `class exceeds ${MAX_ID_LEN}-character cap`);
|
|
97
87
|
}
|
|
98
|
-
const
|
|
99
|
-
const baserate = await requireGroup(opts.store, 'predictions').predictionBaserate(ctx.tenantId, classTag, ctx.actor.subject);
|
|
88
|
+
const baserate = await predictionBaserate(ctx, classTag);
|
|
100
89
|
sendJson(res, 200, { baserate });
|
|
101
|
-
return;
|
|
102
90
|
}
|
|
103
|
-
export async function handleGetPrediction({
|
|
91
|
+
export async function handleGetPrediction({ res, ctx }, predictionByIdMatch) {
|
|
104
92
|
const id = parseInt(predictionByIdMatch[1], 10);
|
|
105
|
-
const
|
|
106
|
-
const prediction = await requireGroup(opts.store, 'predictions').predictionById(ctx.tenantId, id);
|
|
93
|
+
const prediction = await predictionById(ctx, id);
|
|
107
94
|
if (!prediction) {
|
|
108
95
|
throw new HttpError(404, `prediction ${id} not found`);
|
|
109
96
|
}
|
|
110
97
|
sendJson(res, 200, { prediction });
|
|
111
|
-
return;
|
|
112
98
|
}
|
|
113
|
-
export async function handleClosePrediction({ req, res,
|
|
99
|
+
export async function handleClosePrediction({ req, res, ctx }, predictionCloseMatch) {
|
|
114
100
|
const id = parseInt(predictionCloseMatch[1], 10);
|
|
115
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
116
101
|
const body = await parseJsonBody(req, ctx);
|
|
117
102
|
const state = body['state'];
|
|
118
103
|
if (!isJsonString(state) || !isSetMember(VALID_CLOSURE_STATES, state) || state === 'open') {
|
|
@@ -138,8 +123,7 @@ export async function handleClosePrediction({ req, res, opts }, predictionCloseM
|
|
|
138
123
|
closureNote = note;
|
|
139
124
|
}
|
|
140
125
|
const close = { closureState: state, actualValue, closureNote };
|
|
141
|
-
const prediction = await
|
|
126
|
+
const prediction = await closePrediction(ctx, id, close);
|
|
142
127
|
sendJson(res, 200, { prediction });
|
|
143
|
-
return;
|
|
144
128
|
}
|
|
145
129
|
//# sourceMappingURL=predictions.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreateProcess(rr:
|
|
3
|
-
export declare function handleListProcesses(rr:
|
|
4
|
-
export declare function handleSupersedeProcess(rr:
|
|
5
|
-
export declare function handleCloseProcess(rr:
|
|
6
|
-
export declare function handleGetProcess(rr:
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreateProcess(rr: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListProcesses(rr: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleSupersedeProcess(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
5
|
+
export declare function handleCloseProcess(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleGetProcess(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=processes.d.ts.map
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
// /v1/processes routes.
|
|
2
|
-
import { PROCESS } from '../../objects/processes.js';
|
|
2
|
+
import { MAX_PROCESS_STEP_LEN, MAX_PROCESS_STEPS, PROCESS } from '../../objects/processes.js';
|
|
3
3
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
4
|
-
import {
|
|
5
|
-
import { parseJsonBody } from '../validation.js';
|
|
4
|
+
import { MAX_SHORT_FIELD_LEN, parseJsonBody } from '../validation.js';
|
|
6
5
|
import { isJsonString } from '../../util/json.js';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
// gate). Caps mirror src/objects/processes.ts MAX_PROCESS_STEPS / MAX_PROCESS_STEP_LEN.
|
|
6
|
+
import { saveFor } from '../../api/objects.js';
|
|
7
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString, supersedeRoute } from './object-routes.js';
|
|
8
|
+
// HTTP-boundary validation for an untrusted process `steps` body; saveProcess re-validates and trims, this is the fail-fast 400 gate.
|
|
11
9
|
function validateProcessStepsBody(raw) {
|
|
12
10
|
if (raw === undefined || raw === null)
|
|
13
11
|
return [];
|
|
14
12
|
if (!Array.isArray(raw)) {
|
|
15
13
|
throw new HttpError(400, 'steps must be an array of strings');
|
|
16
14
|
}
|
|
17
|
-
if (raw.length >
|
|
18
|
-
throw new HttpError(400,
|
|
15
|
+
if (raw.length > MAX_PROCESS_STEPS) {
|
|
16
|
+
throw new HttpError(400, `steps exceeds ${MAX_PROCESS_STEPS}-step cap`);
|
|
19
17
|
}
|
|
20
18
|
for (const item of raw) {
|
|
21
19
|
if (!isJsonString(item)) {
|
|
@@ -24,8 +22,8 @@ function validateProcessStepsBody(raw) {
|
|
|
24
22
|
if (item.trim().length === 0) {
|
|
25
23
|
throw new HttpError(400, 'a step is empty');
|
|
26
24
|
}
|
|
27
|
-
if (item.length >
|
|
28
|
-
throw new HttpError(400,
|
|
25
|
+
if (item.length > MAX_PROCESS_STEP_LEN) {
|
|
26
|
+
throw new HttpError(400, `a step exceeds the ${MAX_PROCESS_STEP_LEN}-character cap`);
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
// SAFETY: every item in raw was confirmed to be a string in the loop above.
|
|
@@ -41,29 +39,20 @@ const processRoutes = {
|
|
|
41
39
|
if (steps.length === 0) {
|
|
42
40
|
throw new HttpError(400, 'steps is required (at least one step) for a supersession');
|
|
43
41
|
}
|
|
44
|
-
const changeSummary = optionalString(body, 'changeSummary',
|
|
45
|
-
const description = optionalString(body, 'description',
|
|
42
|
+
const changeSummary = optionalString(body, 'changeSummary', MAX_SHORT_FIELD_LEN);
|
|
43
|
+
const description = optionalString(body, 'description', MAX_SHORT_FIELD_LEN);
|
|
46
44
|
return (existing, id) => ({ processName: existing.processName, steps, description, changeSummary, supersedesProcessId: id });
|
|
47
45
|
},
|
|
48
46
|
};
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
// 5 routes: POST /v1/processes (new; body processName + steps[] + description),
|
|
52
|
-
// GET /v1/processes (list, status filter), GET /v1/processes/:id (show),
|
|
53
|
-
// POST /v1/processes/:id/supersede (active -> superseded by a new version; body
|
|
54
|
-
// steps[] + changeSummary + description; reuses the predecessor's name),
|
|
55
|
-
// POST /v1/processes/:id/close (active -> closed). Bearer-authed + tenant-scoped
|
|
56
|
-
// via buildContextWithAuth. status validated against VALID_PROCESS_STATES. DoS
|
|
57
|
-
// caps: processName/description/changeSummary 4096, steps 200x2000
|
|
58
|
-
// (validateProcessStepsBody). Mirrors /v1/decisions; the delta lifecycle is the
|
|
59
|
-
// decision supersede path.
|
|
47
|
+
// Routes: /v1/processes (create, list, show, supersede, close), mirroring /v1/decisions; supersede creates a new version that reuses the predecessor's name.
|
|
48
|
+
// DoS caps: processName/description/changeSummary MAX_SHORT_FIELD_LEN, steps MAX_PROCESS_STEPS x MAX_PROCESS_STEP_LEN (validateProcessStepsBody).
|
|
60
49
|
export async function handleCreateProcess(rr) {
|
|
61
|
-
const ctx =
|
|
50
|
+
const { ctx } = rr;
|
|
62
51
|
const body = await parseJsonBody(rr.req, ctx);
|
|
63
|
-
const process = await saveFor(
|
|
64
|
-
processName: requiredString(body, 'processName', { max:
|
|
52
|
+
const process = await saveFor(ctx, PROCESS, {
|
|
53
|
+
processName: requiredString(body, 'processName', { max: MAX_SHORT_FIELD_LEN }),
|
|
65
54
|
steps: validateProcessStepsBody(body['steps']),
|
|
66
|
-
description: optionalString(body, 'description',
|
|
55
|
+
description: optionalString(body, 'description', MAX_SHORT_FIELD_LEN),
|
|
67
56
|
});
|
|
68
57
|
sendJson(rr.res, 201, { process });
|
|
69
58
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreateProjectBrief(rr:
|
|
3
|
-
export declare function handleListProjectBriefs(rr:
|
|
4
|
-
export declare function handleRefreshProjectBrief(rr:
|
|
5
|
-
export declare function handleSupersedeProjectBrief(rr:
|
|
6
|
-
export declare function handleCloseProjectBrief(rr:
|
|
7
|
-
export declare function handleGetProjectBrief(rr:
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreateProjectBrief(rr: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListProjectBriefs(rr: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleRefreshProjectBrief(rr: AuthedRouteRequest): Promise<void>;
|
|
5
|
+
export declare function handleSupersedeProjectBrief(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleCloseProjectBrief(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
|
+
export declare function handleGetProjectBrief(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
8
8
|
//# sourceMappingURL=project-briefs.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// /v1/project-briefs routes.
|
|
2
|
-
import { briefFromReceipts, MAX_REPO_LEN, PROJECT_BRIEF, refreshedBrief } from '../../objects/project-briefs.js';
|
|
2
|
+
import { briefFromReceipts, MAX_CHANGE_SUMMARY_LEN, MAX_REPO_LEN, PROJECT_BRIEF, refreshedBrief, } from '../../objects/project-briefs.js';
|
|
3
3
|
import { sendJson } from '../../util/http-util.js';
|
|
4
|
-
import { buildContextWithAuth } from '../auth.js';
|
|
5
4
|
import { parseJsonBody } from '../validation.js';
|
|
6
|
-
import {
|
|
5
|
+
import { objectsOf, saveFor } from '../../api/objects.js';
|
|
6
|
+
import { closeRoute, getRoute, listRoute, optionalString, requiredString, supersedeRoute, } from './object-routes.js';
|
|
7
7
|
const briefRoutes = {
|
|
8
8
|
noun: 'project brief',
|
|
9
9
|
field: 'brief',
|
|
@@ -12,24 +12,16 @@ const briefRoutes = {
|
|
|
12
12
|
filterParam: 'repo',
|
|
13
13
|
revise: (body) => {
|
|
14
14
|
const summary = requiredString(body, 'summary', { max: 8192 });
|
|
15
|
-
const changeSummary = optionalString(body, 'changeSummary',
|
|
15
|
+
const changeSummary = optionalString(body, 'changeSummary', MAX_CHANGE_SUMMARY_LEN);
|
|
16
16
|
return (existing, id) => ({ repo: existing.repo, summary, changeSummary, supersedesBriefId: id });
|
|
17
17
|
},
|
|
18
18
|
};
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
// 6 routes: POST /v1/project-briefs (new; body repo + summary), GET
|
|
22
|
-
// /v1/project-briefs (list; status + repo filter; shared parseListLimit), POST
|
|
23
|
-
// /v1/project-briefs/refresh (body {repo, dryRun?} -> auto-assemble the brief
|
|
24
|
-
// from the repo's receipts; dryRun returns {markdown} without writing; ordered
|
|
25
|
-
// before /:id), GET /v1/project-briefs/:id, POST /v1/project-briefs/:id/supersede,
|
|
26
|
-
// POST /v1/project-briefs/:id/close. DoS caps: repo 256, summary 8192,
|
|
27
|
-
// changeSummary 4096. The store validates + throws; the boundary maps validation
|
|
28
|
-
// -> 400, not-found -> 404, not-active -> 409. Mirrors /v1/skills.
|
|
19
|
+
// Routes: /v1/project-briefs (create, list, refresh, show, supersede, close), mirroring /v1/skills; /refresh is ordered before /:id.
|
|
20
|
+
// The store validates and throws; the boundary maps validation -> 400, not-found -> 404, not-active -> 409.
|
|
29
21
|
export async function handleCreateProjectBrief(rr) {
|
|
30
|
-
const ctx =
|
|
22
|
+
const { ctx } = rr;
|
|
31
23
|
const body = await parseJsonBody(rr.req, ctx);
|
|
32
|
-
const brief = await saveFor(
|
|
24
|
+
const brief = await saveFor(ctx, PROJECT_BRIEF, {
|
|
33
25
|
repo: requiredString(body, 'repo', { max: MAX_REPO_LEN }),
|
|
34
26
|
summary: requiredString(body, 'summary', { max: 8192 }),
|
|
35
27
|
});
|
|
@@ -41,16 +33,15 @@ export function handleListProjectBriefs(rr) {
|
|
|
41
33
|
// The refresh op: must precede the /:id routes (literal 'refresh' is non-numeric
|
|
42
34
|
// so the /(\d+)/ routes would not match it, but order it first).
|
|
43
35
|
export async function handleRefreshProjectBrief(rr) {
|
|
44
|
-
const { req, res, opts } = rr;
|
|
45
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
36
|
+
const { req, res, opts, ctx } = rr;
|
|
46
37
|
const body = await parseJsonBody(req, ctx);
|
|
47
38
|
const repo = requiredString(body, 'repo', { max: MAX_REPO_LEN });
|
|
48
39
|
if (body['dryRun'] === true) {
|
|
49
|
-
const { markdown, receiptCount } = await briefFromReceipts(objectsOf(
|
|
40
|
+
const { markdown, receiptCount } = await briefFromReceipts(objectsOf(ctx), ctx.tenantId, repo);
|
|
50
41
|
sendJson(res, 200, { markdown, receiptCount });
|
|
51
42
|
return;
|
|
52
43
|
}
|
|
53
|
-
const brief = await refreshedBrief(objectsOf(
|
|
44
|
+
const brief = await refreshedBrief(objectsOf(ctx), { hippoRoot: opts.hippoRoot, tenantId: ctx.tenantId, actor: ctx.actor.subject }, repo);
|
|
54
45
|
sendJson(res, 200, { brief });
|
|
55
46
|
}
|
|
56
47
|
export function handleSupersedeProjectBrief(rr, match) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
2
|
/** Test-only: reset the HTTP recall rings. Call from beforeEach. */
|
|
3
3
|
export declare function __resetSessionRecallHistoryHttp(): void;
|
|
4
|
-
export declare function handleRecallMemories({
|
|
5
|
-
export declare function handleAssembleSession({
|
|
6
|
-
export declare function handleDrillRecall({
|
|
7
|
-
export declare function handleGetContext({
|
|
4
|
+
export declare function handleRecallMemories({ res, ctx, query }: AuthedRouteRequest): Promise<void>;
|
|
5
|
+
export declare function handleAssembleSession({ res, ctx, query }: AuthedRouteRequest, assembleMatch: Record<string, string>): Promise<void>;
|
|
6
|
+
export declare function handleDrillRecall({ res, ctx, query }: AuthedRouteRequest, drillMatch: Record<string, string>): Promise<void>;
|
|
7
|
+
export declare function handleGetContext({ res, ctx, opts, query }: AuthedRouteRequest): Promise<void>;
|
|
8
8
|
//# sourceMappingURL=recall.d.ts.map
|
|
@@ -3,51 +3,32 @@ import { dirname, resolve } from 'node:path';
|
|
|
3
3
|
import { assertCallerProject, resolveProjectIdentity } from '../../core/project-identity.js';
|
|
4
4
|
import { isSharedStore } from '../../core/config.js';
|
|
5
5
|
import { assembleCost, contextCost, drillCost } from '../../api/context-render.js';
|
|
6
|
-
import { storeFor } from '../../store/index.js';
|
|
7
|
-
import { biasHintEnabled } from '../../api/recall-history.js';
|
|
8
6
|
import { assemble, drillDown, getContext, recordTokens, retrieve } from '../../api/index.js';
|
|
7
|
+
import { RECALL_RECORDING } from '../../api/recall-finish.js';
|
|
9
8
|
import { httpParams, parseContextRequest, parseRecallRequest } from '../../api/recall-request.js';
|
|
10
|
-
import {
|
|
9
|
+
import { resetSessionRings } from '../../api/recall-record.js';
|
|
11
10
|
import { HttpError, sendJson } from '../../util/http-util.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
11
|
+
import { MAX_LIST_LIMIT } from '../../util/limits.js';
|
|
12
|
+
import { parseListLimit, validateIdSegment } from '../validation.js';
|
|
14
13
|
/** Test-only: reset the HTTP recall rings. Call from beforeEach. */
|
|
15
14
|
export function __resetSessionRecallHistoryHttp() {
|
|
16
15
|
resetSessionRings('http');
|
|
17
16
|
}
|
|
18
|
-
// HTTP threads the ring through opts.recallHistory, so the hint retrieve() returns is the one the caller sees.
|
|
19
|
-
function recallHistoryFor(ctx, sessionId) {
|
|
20
|
-
return sessionId && biasHintEnabled('anchoring') ? peekSessionRing('http', ctx.tenantId, sessionId) : undefined;
|
|
21
|
-
}
|
|
22
17
|
// GET /v1/memories?q=...&limit=...&mode=...&scope=...&include_continuity=1
|
|
23
|
-
export async function handleRecallMemories({
|
|
18
|
+
export async function handleRecallMemories({ res, ctx, query }) {
|
|
24
19
|
const { opts: recallOpts, limit, mode, explain } = parseRecallRequest(httpParams(query));
|
|
25
|
-
const {
|
|
26
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
27
|
-
const recallHistory = recallHistoryFor(ctx, sessionId);
|
|
28
|
-
// Written first in the recall's own write, so a recall that fails leaves no row.
|
|
29
|
-
const leadingAudit = sessionId ? [] : anchorSkippedRows({ tenantId: ctx.tenantId, actor: ctx.actor.subject }, q);
|
|
30
|
-
const result = await retrieve(ctx, { ...recallOpts, limit, mode, explain, recallHistory, leadingAudit });
|
|
31
|
-
// The ring is created only after recall succeeds, so a 400 cannot LRU-evict a live session.
|
|
32
|
-
const ring = sessionRing('http', ctx.tenantId, sessionId);
|
|
33
|
-
if (ring)
|
|
34
|
-
noteRecall(ring, q, result.results[0]?.id ?? null, result.anchoringHint?.memoryId);
|
|
35
|
-
// HTTP counts the rows it returns here; `retrieve` cannot count for every ranker, since MCP shows a different band and counts none.
|
|
36
|
-
await storeFor(ctx).bumpRecallStats(result.results.length);
|
|
20
|
+
const result = await retrieve(ctx, { ...recallOpts, limit, mode, explain, recordAs: RECALL_RECORDING.http });
|
|
37
21
|
// Continuity payloads should never be cached. The caller is asking for
|
|
38
22
|
// session-state-aware data; intermediaries must not reuse it across users.
|
|
39
|
-
if (includeContinuity) {
|
|
23
|
+
if (recallOpts.includeContinuity) {
|
|
40
24
|
res.setHeader('Cache-Control', 'no-store');
|
|
41
25
|
}
|
|
42
|
-
await recordTokens(ctx, 'http_recall', { items: result.results.length, tokens: result.tokens + (result.continuityTokens ?? 0), sessionId: sessionId ?? null });
|
|
43
26
|
sendJson(res, 200, result);
|
|
44
27
|
return;
|
|
45
28
|
}
|
|
46
|
-
// GET /v1/sessions/:id/assemble?budget=N&freshTail=N&summarizeOlder=0|1
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
// Tenant scope from Bearer; default-deny on private rows.
|
|
50
|
-
export async function handleAssembleSession({ req, res, opts, query }, assembleMatch) {
|
|
29
|
+
// GET /v1/sessions/:id/assemble?budget=N&freshTail=N&summarizeOlder=0|1: ordered AssembledContextItem[] (fresh-tail raws, summary substitutions, bio-aware
|
|
30
|
+
// budget fit). Tenant scope from the Bearer; default-deny on private rows.
|
|
31
|
+
export async function handleAssembleSession({ res, ctx, query }, assembleMatch) {
|
|
51
32
|
validateIdSegment(assembleMatch.id, 'session id');
|
|
52
33
|
const budgetRaw = query.get('budget');
|
|
53
34
|
const budget = budgetRaw === null ? undefined : Number(budgetRaw);
|
|
@@ -67,7 +48,6 @@ export async function handleAssembleSession({ req, res, opts, query }, assembleM
|
|
|
67
48
|
: (sumOlderRaw === '1' || sumOlderRaw === 'true');
|
|
68
49
|
const scopeQ = query.get('scope');
|
|
69
50
|
const scope = scopeQ !== null && scopeQ.length > 0 ? scopeQ : undefined;
|
|
70
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
71
51
|
const assembleExtra = {};
|
|
72
52
|
if (budget !== undefined)
|
|
73
53
|
assembleExtra.budget = budget;
|
|
@@ -82,13 +62,9 @@ export async function handleAssembleSession({ req, res, opts, query }, assembleM
|
|
|
82
62
|
sendJson(res, 200, result);
|
|
83
63
|
return;
|
|
84
64
|
}
|
|
85
|
-
// GET /v1/recall/drill/:id?limit=N&budget=N
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
// caller drills into the summary id to recover the originals. Tenant
|
|
89
|
-
// scoped via Bearer; default-deny on private scopes for both summary
|
|
90
|
-
// and children.
|
|
91
|
-
export async function handleDrillRecall({ req, res, opts, query }, drillMatch) {
|
|
65
|
+
// GET /v1/recall/drill/:id?limit=N&budget=N: companion to /v1/memories; the caller drills into a level-2 summary (RecallResultItem.isSummary) to recover the
|
|
66
|
+
// originals. Tenant-scoped via Bearer; default-deny on private scopes for the summary and its children.
|
|
67
|
+
export async function handleDrillRecall({ res, ctx, query }, drillMatch) {
|
|
92
68
|
validateIdSegment(drillMatch.id, 'summary id');
|
|
93
69
|
const limitRaw = query.get('limit');
|
|
94
70
|
const limit = limitRaw === null ? undefined : Number(limitRaw);
|
|
@@ -114,7 +90,6 @@ export async function handleDrillRecall({ req, res, opts, query }, drillMatch) {
|
|
|
114
90
|
}
|
|
115
91
|
depth = parsed;
|
|
116
92
|
}
|
|
117
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
118
93
|
const drillExtra = {};
|
|
119
94
|
if (limit !== undefined)
|
|
120
95
|
drillExtra.limit = limit;
|
|
@@ -145,14 +120,10 @@ function contextReader(hippoRoot, query) {
|
|
|
145
120
|
assertCallerProject({ name, aliases });
|
|
146
121
|
return { name, legacyName: name, aliases };
|
|
147
122
|
}
|
|
148
|
-
// GET /v1/context
|
|
149
|
-
//
|
|
150
|
-
|
|
151
|
-
// via the Bearer. Pinned-only + '*' fallback skip the recall audit emit
|
|
152
|
-
// (matches cmdContext); real-query hybrid search emits one 'recall' row.
|
|
153
|
-
export async function handleGetContext({ req, res, opts, query }) {
|
|
123
|
+
// GET /v1/context: a budget-bounded ContextResult JSON, rendered by clients, not the server; tenant-scoped via the Bearer.
|
|
124
|
+
// Pinned-only and '*' fallback skip the recall audit emit (as cmdContext does); a real-query hybrid search emits one 'recall' row.
|
|
125
|
+
export async function handleGetContext({ res, ctx, opts, query }) {
|
|
154
126
|
const parsed = parseContextRequest(httpParams(query));
|
|
155
|
-
const ctx = await buildContextWithAuth(req, opts);
|
|
156
127
|
const result = await getContext(ctx, {
|
|
157
128
|
...parsed,
|
|
158
129
|
currentProject: contextReader(opts.hippoRoot, query),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function handleCreateSkill(rr:
|
|
3
|
-
export declare function handleListSkills(rr:
|
|
4
|
-
export declare function handleExportSkills(rr:
|
|
5
|
-
export declare function handleSupersedeSkill(rr:
|
|
6
|
-
export declare function handleCloseSkill(rr:
|
|
7
|
-
export declare function handleGetSkill(rr:
|
|
1
|
+
import type { AuthedRouteRequest } from '../types.js';
|
|
2
|
+
export declare function handleCreateSkill(rr: AuthedRouteRequest): Promise<void>;
|
|
3
|
+
export declare function handleListSkills(rr: AuthedRouteRequest): Promise<void>;
|
|
4
|
+
export declare function handleExportSkills(rr: AuthedRouteRequest): Promise<void>;
|
|
5
|
+
export declare function handleSupersedeSkill(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
6
|
+
export declare function handleCloseSkill(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
7
|
+
export declare function handleGetSkill(rr: AuthedRouteRequest, match: RegExpMatchArray): Promise<void>;
|
|
8
8
|
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// /v1/skills routes.
|
|
2
2
|
import { MAX_SKILL_NAME_LEN, SKILL, skillsMarkdown } from '../../objects/skills.js';
|
|
3
3
|
import { 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
|
const INSTRUCTIONS = { max: 8192, plural: true };
|
|
8
8
|
const skillRoutes = {
|
|
9
9
|
noun: 'skill',
|
|
@@ -13,26 +13,16 @@ const skillRoutes = {
|
|
|
13
13
|
revise: (body) => {
|
|
14
14
|
const instructions = requiredString(body, 'instructions', INSTRUCTIONS);
|
|
15
15
|
const trigger = optionalString(body, 'trigger', 1024);
|
|
16
|
-
const changeSummary = optionalString(body, 'changeSummary',
|
|
16
|
+
const changeSummary = optionalString(body, 'changeSummary', MAX_SHORT_FIELD_LEN);
|
|
17
17
|
return (existing, id) => ({ skillName: existing.skillName, instructions, trigger, changeSummary, supersedesSkillId: id });
|
|
18
18
|
},
|
|
19
19
|
};
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// 6 routes: POST /v1/skills (new; body skillName + instructions + trigger?),
|
|
23
|
-
// GET /v1/skills (list, status filter; shared parseListLimit), GET
|
|
24
|
-
// /v1/skills/export (renders ACTIVE skills as an AGENTS.md/CLAUDE.md markdown
|
|
25
|
-
// block -> {markdown}; literal 'export' is non-numeric so the /:id (\d+) route
|
|
26
|
-
// cannot capture it, but it is ordered first regardless), GET /v1/skills/:id,
|
|
27
|
-
// POST /v1/skills/:id/supersede, POST /v1/skills/:id/close. DoS caps:
|
|
28
|
-
// skillName 256, instructions 8192, trigger 1024, changeSummary 4096. The store
|
|
29
|
-
// validates + throws; the boundary maps validation -> 400, not-found -> 404,
|
|
30
|
-
// not-active -> 409. Mirrors /v1/processes; "executable" = exportable
|
|
31
|
-
// instruction (no code exec).
|
|
20
|
+
// Routes: /v1/skills (create, list, export, show, supersede, close), mirroring /v1/processes; "executable" means exportable instruction (no code exec).
|
|
21
|
+
// GET /v1/skills/export renders ACTIVE skills as a markdown block for AGENTS.md or CLAUDE.md and is ordered before /:id.
|
|
32
22
|
export async function handleCreateSkill(rr) {
|
|
33
|
-
const ctx =
|
|
23
|
+
const { ctx } = rr;
|
|
34
24
|
const body = await parseJsonBody(rr.req, ctx);
|
|
35
|
-
const skill = await saveFor(
|
|
25
|
+
const skill = await saveFor(ctx, SKILL, {
|
|
36
26
|
skillName: requiredString(body, 'skillName', { max: MAX_SKILL_NAME_LEN }),
|
|
37
27
|
instructions: requiredString(body, 'instructions', INSTRUCTIONS),
|
|
38
28
|
trigger: optionalString(body, 'trigger', 1024),
|
|
@@ -45,11 +35,9 @@ export function handleListSkills(rr) {
|
|
|
45
35
|
// The export renderer: must precede the /:id GET (literal 'export' is
|
|
46
36
|
// non-numeric so the /(\d+)/ route would not match it, but order it first).
|
|
47
37
|
export async function handleExportSkills(rr) {
|
|
48
|
-
const {
|
|
49
|
-
const
|
|
50
|
-
const markdown = await skillsMarkdown(objectsOf(rr), ctx.tenantId);
|
|
38
|
+
const { res, ctx } = rr;
|
|
39
|
+
const markdown = await skillsMarkdown(objectsOf(ctx), ctx.tenantId);
|
|
51
40
|
sendJson(res, 200, { markdown });
|
|
52
|
-
return;
|
|
53
41
|
}
|
|
54
42
|
export function handleSupersedeSkill(rr, match) {
|
|
55
43
|
return supersedeRoute(skillRoutes, rr, match);
|
|
@@ -1,70 +1,32 @@
|
|
|
1
1
|
export interface ServerInfo {
|
|
2
|
-
/**
|
|
3
|
-
* Pidfile schema version (L3). Absent on pidfiles written before this
|
|
4
|
-
* field existed — detectServer treats a missing `schema` as legacy and
|
|
5
|
-
* still accepts the pidfile.
|
|
6
|
-
*/
|
|
2
|
+
/** Pidfile schema version; absent on pidfiles written before the field existed, which detectServer treats as legacy and still accepts. */
|
|
7
3
|
schema?: number;
|
|
8
4
|
pid: number;
|
|
9
5
|
port: number;
|
|
10
6
|
url: string;
|
|
11
7
|
started_at: string;
|
|
12
8
|
}
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* then confirms the process that answers is *this* hippo server: its
|
|
22
|
-
* `started_at` must equal the pidfile's. A mismatch, non-200, malformed
|
|
23
|
-
* body, or timeout all mean the pidfile is stale.
|
|
24
|
-
*
|
|
25
|
-
* The /health probe runs only when a pidfile exists and the pid is live, so
|
|
26
|
-
* the common no-server path stays a single fast file existence check.
|
|
27
|
-
*/
|
|
9
|
+
/** The pidfile names a live process on loopback that did not answer /health in time: most likely a busy server, so a caller must neither
|
|
10
|
+
* bypass it with a second writer nor start another server beside it. */
|
|
11
|
+
export declare class ServerUnresponsiveError extends Error {
|
|
12
|
+
constructor(info: ServerInfo, probeMs: number, options?: ErrorOptions);
|
|
13
|
+
}
|
|
14
|
+
/** Returns the pidfile's ServerInfo if a live hippo server answers on the recorded url, else null (best-effort unlinking of missing/stale/malformed pidfiles).
|
|
15
|
+
* `process.kill(pid, 0)` rules out dead pids; GET /health must then return the pidfile's `started_at` (pids get reused). Probes only if the pid is live.
|
|
16
|
+
* Throws ServerUnresponsiveError when that probe times out. */
|
|
28
17
|
export declare function detectServer(hippoRoot: string): Promise<ServerInfo | null>;
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* renames into place, which is atomic on POSIX and on NTFS via MoveFileEx.
|
|
32
|
-
*
|
|
33
|
-
* `startedAt` is supplied by the caller (`serve()`) rather than generated
|
|
34
|
-
* here, so the pidfile and the server's GET /health response carry the same
|
|
35
|
-
* timestamp — detectServer's liveness probe compares the two for equality.
|
|
36
|
-
*/
|
|
18
|
+
/** Atomically writes the pidfile (process-scoped temp file, then rename; atomic on POSIX and NTFS). `startedAt` comes from the caller (`serve()`) so the
|
|
19
|
+
* pidfile and GET /health carry the same timestamp, which detectServer's liveness probe compares. */
|
|
37
20
|
export declare function writePidfile(hippoRoot: string, opts: {
|
|
38
21
|
port: number;
|
|
39
22
|
url: string;
|
|
40
23
|
startedAt: string;
|
|
41
24
|
}): void;
|
|
42
|
-
/**
|
|
43
|
-
*
|
|
44
|
-
* caller can use this in shutdown paths without fear of throwing.
|
|
45
|
-
*
|
|
46
|
-
* Identity-blind: deletes whatever pidfile is on disk. A shutdown path that
|
|
47
|
-
* must not clobber a newer server's pidfile should use removePidfileIfOwned.
|
|
48
|
-
*/
|
|
25
|
+
/** Best-effort pidfile removal, silent on any error so shutdown paths can call it. Identity-blind: a shutdown that must not clobber a newer server's pidfile
|
|
26
|
+
* uses removePidfileIfOwned. */
|
|
49
27
|
export declare function removePidfile(hippoRoot: string): void;
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
52
|
-
* Reads and parses the pidfile and unlinks it ONLY when both `pid` and
|
|
53
|
-
* `started_at` match `owner`. A pidfile rewritten by a newer server is left
|
|
54
|
-
* intact, so a shutting-down older server cannot orphan the newer one by
|
|
55
|
-
* deleting its pidfile out from under it.
|
|
56
|
-
*
|
|
57
|
-
* Best-effort and never throws: a missing, unreadable, malformed, or
|
|
58
|
-
* non-object pidfile (including a literal JSON `null`) is "not provably mine"
|
|
59
|
-
* and left alone — detectServer unlinks a malformed pidfile on its next
|
|
60
|
-
* probe, so it does not leak. Returns true iff a matching pidfile was removed.
|
|
61
|
-
*
|
|
62
|
-
* Residual TOCTOU: the pidfile could be rewritten between the read and the
|
|
63
|
-
* unlink. The window is microseconds and the shape is the same read-check-
|
|
64
|
-
* unlink detectServer already uses; this narrows the clobber from an
|
|
65
|
-
* unbounded window (any time between writePidfile and stop) to a negligible
|
|
66
|
-
* one.
|
|
67
|
-
*/
|
|
28
|
+
/** Removes the pidfile ONLY when both `pid` and `started_at` match `owner`, so an older shutting-down server cannot orphan a newer one; never throws.
|
|
29
|
+
* Anything unreadable or malformed is "not provably mine" and left alone (detectServer unlinks it). Returns true iff removed. */
|
|
68
30
|
export declare function removePidfileIfOwned(hippoRoot: string, owner: {
|
|
69
31
|
pid: number;
|
|
70
32
|
startedAt: string;
|