hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- 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 +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- 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 +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- 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/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- 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 +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- 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 +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- 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 +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → 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 +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** Policy object: a rule in force over a valid-time range [valid_from, valid_to), evolving via supersession; `loadPoliciesAsOf` queries it.
|
|
2
|
+
* Transaction-time travel (what we believed at past system time T) is deferred. Superseding keeps the predecessor's valid-time range.
|
|
3
|
+
* All dates are normalised to ISO-8601 (`toISOString`) at the store boundary so the lexical half-open comparison is sound. */
|
|
4
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
5
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
6
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
7
|
+
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
8
|
+
export const VALID_POLICY_STATES = new Set([
|
|
9
|
+
'active',
|
|
10
|
+
'superseded',
|
|
11
|
+
'closed',
|
|
12
|
+
]);
|
|
13
|
+
/** Parse a date input to a fixed-width ISO-8601 datetime so lexical ordering is sound; throws on an unparseable value.
|
|
14
|
+
* Overflow inputs like '2026-02-30' roll forward per JS Date semantics. */
|
|
15
|
+
export function normalizePolicyDate(input, label = 'date') {
|
|
16
|
+
const d = new Date(input);
|
|
17
|
+
if (Number.isNaN(d.getTime())) {
|
|
18
|
+
throw new BadRequestError(`policy: invalid ${label} "${input}" (expected an ISO-8601 date or datetime)`);
|
|
19
|
+
}
|
|
20
|
+
return d.toISOString();
|
|
21
|
+
}
|
|
22
|
+
/** Normalise valid_from (default `nowIso`) and valid_to (default null), then enforce valid_to > valid_from. */
|
|
23
|
+
export function validatePolicyDates(validFromRaw, validToRaw, nowIso) {
|
|
24
|
+
const validFrom = validFromRaw !== undefined ? normalizePolicyDate(validFromRaw, 'valid_from') : nowIso;
|
|
25
|
+
const validTo = validToRaw !== undefined && validToRaw !== null
|
|
26
|
+
? normalizePolicyDate(validToRaw, 'valid_to')
|
|
27
|
+
: null;
|
|
28
|
+
if (validTo !== null && validTo <= validFrom) {
|
|
29
|
+
throw new BadRequestError(`policy: valid_to (${validTo}) must be strictly after valid_from (${validFrom})`);
|
|
30
|
+
}
|
|
31
|
+
return { validFrom, validTo };
|
|
32
|
+
}
|
|
33
|
+
/** Recall-surface content for the memory mirror: name + rule + effective range. */
|
|
34
|
+
function buildPolicyContent(policyName, policyText, validFrom, validTo) {
|
|
35
|
+
const range = validTo ? `${validFrom} to ${validTo}` : `${validFrom} onward`;
|
|
36
|
+
return `${policyName}\n\n${policyText}\n\nEffective: ${range}`;
|
|
37
|
+
}
|
|
38
|
+
export const POLICY = {
|
|
39
|
+
kind: 'policy',
|
|
40
|
+
label: 'policy',
|
|
41
|
+
plural: 'policies',
|
|
42
|
+
fn: { get: 'loadPolicyById', close: 'closePolicy', list: 'loadPolicies', save: 'savePolicy' },
|
|
43
|
+
states: VALID_POLICY_STATES,
|
|
44
|
+
closableFrom: ['active'],
|
|
45
|
+
draft(opts) {
|
|
46
|
+
if (!opts.policyName || opts.policyName.trim().length === 0) {
|
|
47
|
+
throw new BadRequestError('savePolicy: policyName is required');
|
|
48
|
+
}
|
|
49
|
+
if (!opts.policyText || opts.policyText.trim().length === 0) {
|
|
50
|
+
throw new BadRequestError('savePolicy: policyText is required');
|
|
51
|
+
}
|
|
52
|
+
const at = new Date().toISOString();
|
|
53
|
+
// valid_from defaults to the creation instant. A date-only as-of is widened to end-of-day on the read side,
|
|
54
|
+
// because backdating valid_from to midnight would report the policy in force earlier that day.
|
|
55
|
+
const { validFrom, validTo } = validatePolicyDates(opts.validFrom, opts.validTo, at);
|
|
56
|
+
return {
|
|
57
|
+
fields: { policyName: opts.policyName, policyText: opts.policyText, validFrom, validTo },
|
|
58
|
+
content: buildPolicyContent(opts.policyName, opts.policyText, validFrom, validTo),
|
|
59
|
+
tags: opts.extraTags ?? [],
|
|
60
|
+
supersedesId: opts.supersedesPolicyId,
|
|
61
|
+
changeSummary: opts.changeSummary,
|
|
62
|
+
at,
|
|
63
|
+
};
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
/** Create a policy, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
67
|
+
* valid_from defaults to now; valid_to must be > valid_from (validatePolicyDates). */
|
|
68
|
+
export function savePolicy(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
69
|
+
return saveObjectAt(POLICY, { hippoRoot, tenantId, actor }, opts);
|
|
70
|
+
}
|
|
71
|
+
/** Close (retire) an active policy with no successor; CAS on status='active', a superseded row is terminal. */
|
|
72
|
+
export function closePolicy(hippoRoot, tenantId, id, actor = 'cli') {
|
|
73
|
+
return closeObjectAt(hippoRoot, POLICY, tenantId, id, actor);
|
|
74
|
+
}
|
|
75
|
+
export function loadPolicyById(hippoRoot, tenantId, id) {
|
|
76
|
+
return objectByIdAt(hippoRoot, POLICY, tenantId, id);
|
|
77
|
+
}
|
|
78
|
+
export function loadPolicies(hippoRoot, tenantId, opts = {}) {
|
|
79
|
+
return listObjectsAt(hippoRoot, POLICY, tenantId, opts);
|
|
80
|
+
}
|
|
81
|
+
export function loadActivePolicies(hippoRoot, tenantId, opts = {}) {
|
|
82
|
+
return loadPolicies(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
83
|
+
}
|
|
84
|
+
/** The policies in force at `asOfDate` (valid-time, half-open [valid_from, valid_to)); superseded rows still answer while the successor is not yet effective.
|
|
85
|
+
* `closed` rows are excluded; a date-only asOfDate means the END of that UTC day (23:59:59.999Z), so a policy created today shows up in "as of today". */
|
|
86
|
+
export function loadPoliciesAsOf(hippoRoot, tenantId, asOfDate, opts = {}) {
|
|
87
|
+
return sqliteObjects(hippoRoot).policiesInForce(tenantId, inForceQuery(tenantId, asOfDate, opts));
|
|
88
|
+
}
|
|
89
|
+
/** `loadPoliciesAsOf` over a served store's group. */
|
|
90
|
+
export async function policiesAsOf(objects, tenantId, asOfDate, opts = {}) {
|
|
91
|
+
return objects.policiesInForce(tenantId, inForceQuery(tenantId, asOfDate, opts));
|
|
92
|
+
}
|
|
93
|
+
/** The as-of read, checked before a store is asked. */
|
|
94
|
+
function inForceQuery(tenantId, asOfDate, opts) {
|
|
95
|
+
assertTenantId('loadPoliciesAsOf', tenantId);
|
|
96
|
+
// A bare date means the whole of that day, so it reads as the day's last instant; a datetime is used as given.
|
|
97
|
+
const asOf = /^\d{4}-\d{2}-\d{2}$/.test(asOfDate.trim())
|
|
98
|
+
? normalizePolicyDate(`${asOfDate.trim()}T23:59:59.999Z`, 'asOfDate')
|
|
99
|
+
: normalizePolicyDate(asOfDate, 'asOfDate');
|
|
100
|
+
return { asOf, name: opts.name, limit: opts.limit ?? 100 };
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=policies.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Process object: a named, ordered list of `steps` that evolves by supersession, each version recording `change_summary` and a server-derived `version`.
|
|
2
|
+
* The `processes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
|
|
3
|
+
* Structural step-diffing is a deferred read-side feature; the version chain is the changelog. */
|
|
4
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
|
+
import { type JsonValue } from '../util/json.js';
|
|
6
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
7
|
+
import type { Process, ProcessStatus } from '../store/object-types.js';
|
|
8
|
+
export type { Process, ProcessStatus } from '../store/object-types.js';
|
|
9
|
+
export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
|
|
10
|
+
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
11
|
+
export declare const MAX_PROCESS_STEPS = 200;
|
|
12
|
+
export declare const MAX_PROCESS_STEP_LEN = 2000;
|
|
13
|
+
export interface SaveProcessOpts {
|
|
14
|
+
processName: string;
|
|
15
|
+
steps: string[];
|
|
16
|
+
description?: string;
|
|
17
|
+
/** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
|
|
18
|
+
changeSummary?: string;
|
|
19
|
+
/** Table id of an ACTIVE process this new version supersedes. */
|
|
20
|
+
supersedesProcessId?: number;
|
|
21
|
+
/** Extra memory tags merged after ['process']. */
|
|
22
|
+
extraTags?: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface ListProcessesOpts {
|
|
25
|
+
status?: ProcessStatus;
|
|
26
|
+
limit?: number;
|
|
27
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
28
|
+
after?: KeysetPosition;
|
|
29
|
+
}
|
|
30
|
+
/** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
|
|
31
|
+
export declare function validateProcessSteps(steps: JsonValue): string[];
|
|
32
|
+
export declare const PROCESS: SavableDescriptor<'process', SaveProcessOpts>;
|
|
33
|
+
/** Create a process, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
34
|
+
* The supersede CAS (WHERE status='active' AND id != <new id>) throws on changes===0 so a duplicate supersede aborts the write. */
|
|
35
|
+
export declare function saveProcess(hippoRoot: string, tenantId: string, opts: SaveProcessOpts, actor?: string): Process;
|
|
36
|
+
/** Close (retire) an active process with no successor; a superseded row cannot be closed. */
|
|
37
|
+
export declare function closeProcess(hippoRoot: string, tenantId: string, id: number, actor?: string): Process;
|
|
38
|
+
export declare function loadProcessById(hippoRoot: string, tenantId: string, id: number): Process | null;
|
|
39
|
+
export declare function loadProcesses(hippoRoot: string, tenantId: string, opts?: ListProcessesOpts): Process[];
|
|
40
|
+
export declare function loadActiveProcesses(hippoRoot: string, tenantId: string, opts?: {
|
|
41
|
+
limit?: number;
|
|
42
|
+
}): Process[];
|
|
43
|
+
//# sourceMappingURL=processes.d.ts.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Process object: a named, ordered list of `steps` that evolves by supersession, each version recording `change_summary` and a server-derived `version`.
|
|
2
|
+
* The `processes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall.
|
|
3
|
+
* Structural step-diffing is a deferred read-side feature; the version chain is the changelog. */
|
|
4
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
5
|
+
import { isJsonString } from '../util/json.js';
|
|
6
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
7
|
+
export const VALID_PROCESS_STATES = new Set([
|
|
8
|
+
'active',
|
|
9
|
+
'superseded',
|
|
10
|
+
'closed',
|
|
11
|
+
]);
|
|
12
|
+
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
13
|
+
export const MAX_PROCESS_STEPS = 200;
|
|
14
|
+
export const MAX_PROCESS_STEP_LEN = 2000;
|
|
15
|
+
/** Validate and trim the steps body; throws on a non-array, a non-string or empty element, or a cap breach. */
|
|
16
|
+
export function validateProcessSteps(steps) {
|
|
17
|
+
if (!Array.isArray(steps)) {
|
|
18
|
+
throw new BadRequestError('saveProcess: steps must be an array of strings');
|
|
19
|
+
}
|
|
20
|
+
if (steps.length > MAX_PROCESS_STEPS) {
|
|
21
|
+
throw new BadRequestError(`saveProcess: steps exceeds the ${MAX_PROCESS_STEPS}-step cap (got ${steps.length})`);
|
|
22
|
+
}
|
|
23
|
+
const out = [];
|
|
24
|
+
for (let i = 0; i < steps.length; i++) {
|
|
25
|
+
const raw = steps[i];
|
|
26
|
+
if (!isJsonString(raw)) {
|
|
27
|
+
throw new BadRequestError(`saveProcess: step ${i + 1} is not a string`);
|
|
28
|
+
}
|
|
29
|
+
const trimmed = raw.trim();
|
|
30
|
+
if (trimmed.length === 0) {
|
|
31
|
+
throw new BadRequestError(`saveProcess: step ${i + 1} is empty`);
|
|
32
|
+
}
|
|
33
|
+
if (trimmed.length > MAX_PROCESS_STEP_LEN) {
|
|
34
|
+
throw new BadRequestError(`saveProcess: step ${i + 1} exceeds the ${MAX_PROCESS_STEP_LEN}-char cap`);
|
|
35
|
+
}
|
|
36
|
+
out.push(trimmed);
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
/** The recall-surface content for the memory mirror: name + numbered steps +
|
|
41
|
+
* optional description, so `hippo recall` shows the process body. */
|
|
42
|
+
function buildProcessContent(processName, steps, description) {
|
|
43
|
+
const numbered = steps.map((s, i) => `${i + 1}. ${s}`).join('\n');
|
|
44
|
+
let content = processName;
|
|
45
|
+
if (numbered)
|
|
46
|
+
content += `\n\n${numbered}`;
|
|
47
|
+
if (description)
|
|
48
|
+
content += `\n\nDescription: ${description}`;
|
|
49
|
+
return content;
|
|
50
|
+
}
|
|
51
|
+
export const PROCESS = {
|
|
52
|
+
kind: 'process',
|
|
53
|
+
label: 'process',
|
|
54
|
+
plural: 'processes',
|
|
55
|
+
fn: { get: 'loadProcessById', close: 'closeProcess', list: 'loadProcesses', save: 'saveProcess' },
|
|
56
|
+
states: VALID_PROCESS_STATES,
|
|
57
|
+
closableFrom: ['active'],
|
|
58
|
+
draft(opts) {
|
|
59
|
+
// The name is stored as written, so only a blank one is refused.
|
|
60
|
+
if (!opts.processName || opts.processName.trim().length === 0) {
|
|
61
|
+
throw new BadRequestError('saveProcess: processName is required');
|
|
62
|
+
}
|
|
63
|
+
const steps = validateProcessSteps(opts.steps);
|
|
64
|
+
return {
|
|
65
|
+
fields: { processName: opts.processName, description: opts.description, steps },
|
|
66
|
+
content: buildProcessContent(opts.processName, steps, opts.description),
|
|
67
|
+
tags: opts.extraTags ?? [],
|
|
68
|
+
supersedesId: opts.supersedesProcessId,
|
|
69
|
+
changeSummary: opts.changeSummary,
|
|
70
|
+
at: new Date().toISOString(),
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
/** Create a process, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
75
|
+
* The supersede CAS (WHERE status='active' AND id != <new id>) throws on changes===0 so a duplicate supersede aborts the write. */
|
|
76
|
+
export function saveProcess(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
77
|
+
return saveObjectAt(PROCESS, { hippoRoot, tenantId, actor }, opts);
|
|
78
|
+
}
|
|
79
|
+
/** Close (retire) an active process with no successor; a superseded row cannot be closed. */
|
|
80
|
+
export function closeProcess(hippoRoot, tenantId, id, actor = 'cli') {
|
|
81
|
+
return closeObjectAt(hippoRoot, PROCESS, tenantId, id, actor);
|
|
82
|
+
}
|
|
83
|
+
export function loadProcessById(hippoRoot, tenantId, id) {
|
|
84
|
+
return objectByIdAt(hippoRoot, PROCESS, tenantId, id);
|
|
85
|
+
}
|
|
86
|
+
export function loadProcesses(hippoRoot, tenantId, opts = {}) {
|
|
87
|
+
return listObjectsAt(hippoRoot, PROCESS, tenantId, opts);
|
|
88
|
+
}
|
|
89
|
+
export function loadActiveProcesses(hippoRoot, tenantId, opts = {}) {
|
|
90
|
+
return loadProcesses(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=processes.js.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
|
|
2
|
+
* `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
|
|
3
|
+
* The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
4
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
+
import { type ObjectSaveSite } from './lifecycle.js';
|
|
7
|
+
import type { BriefStatus, ProjectBrief } from '../store/object-types.js';
|
|
8
|
+
import type { Objects } from '../store/port.js';
|
|
9
|
+
export type { BriefStatus, ProjectBrief } from '../store/object-types.js';
|
|
10
|
+
export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
|
|
11
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
12
|
+
* cap than the 4096 short-field convention. */
|
|
13
|
+
export declare const MAX_REPO_LEN = 256;
|
|
14
|
+
export declare const MAX_BRIEF_SUMMARY_LEN = 8192;
|
|
15
|
+
export declare const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
16
|
+
/** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
|
|
17
|
+
* + the rendered body). Realistic repos have far fewer recent receipts than this. */
|
|
18
|
+
export declare const MAX_BRIEF_RECEIPTS = 50;
|
|
19
|
+
/** Truncate each receipt's headline in the assembled digest. */
|
|
20
|
+
export declare const MAX_RECEIPT_HEADLINE_LEN = 200;
|
|
21
|
+
export interface SaveProjectBriefOpts {
|
|
22
|
+
repo: string;
|
|
23
|
+
summary: string;
|
|
24
|
+
/** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
|
|
25
|
+
changeSummary?: string;
|
|
26
|
+
/** Table id of an ACTIVE brief this new version supersedes. */
|
|
27
|
+
supersedesBriefId?: number;
|
|
28
|
+
/** Extra memory tags merged after ['project_brief']. */
|
|
29
|
+
extraTags?: string[];
|
|
30
|
+
/** Internal: set by refreshBrief to the receipt count so audit metadata marks the write as an auto-refresh
|
|
31
|
+
* without a 4th audit op. Not part of the CLI/HTTP surface. */
|
|
32
|
+
refreshReceiptCount?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface ListProjectBriefsOpts {
|
|
35
|
+
status?: BriefStatus;
|
|
36
|
+
/** Filter to a single repo. */
|
|
37
|
+
repo?: string;
|
|
38
|
+
limit?: number;
|
|
39
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
40
|
+
after?: KeysetPosition;
|
|
41
|
+
}
|
|
42
|
+
export declare const PROJECT_BRIEF: SavableDescriptor<'project_brief', SaveProjectBriefOpts>;
|
|
43
|
+
/** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
44
|
+
export declare function saveProjectBrief(hippoRoot: string, tenantId: string, opts: SaveProjectBriefOpts, actor?: string): ProjectBrief;
|
|
45
|
+
/** Close (retire) an active brief; a superseded row is terminal. */
|
|
46
|
+
export declare function closeProjectBrief(hippoRoot: string, tenantId: string, id: number, actor?: string): ProjectBrief;
|
|
47
|
+
export declare function loadProjectBriefById(hippoRoot: string, tenantId: string, id: number): ProjectBrief | null;
|
|
48
|
+
export declare function loadProjectBriefs(hippoRoot: string, tenantId: string, opts?: ListProjectBriefsOpts): ProjectBrief[];
|
|
49
|
+
/** Assemble the repo's recent receipts into a deterministic markdown digest and return it with the receipt count; never empty (summary is NOT NULL).
|
|
50
|
+
* The brief's own mirror (source='project_brief') is excluded; the quotes in the JSON-array LIKE are load-bearing (`hip` must not match `path:hippo`). */
|
|
51
|
+
export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): BriefDigest;
|
|
52
|
+
/** `assembleBriefFromReceipts` over a served store's group. */
|
|
53
|
+
export declare function briefFromReceipts(objects: Objects, tenantId: string, repo: string): Promise<BriefDigest>;
|
|
54
|
+
export interface BriefDigest {
|
|
55
|
+
markdown: string;
|
|
56
|
+
receiptCount: number;
|
|
57
|
+
}
|
|
58
|
+
/** Saves a new version of the repo's brief from its receipts. The receipts are read before
|
|
59
|
+
* the save's transaction, so a receipt written in between shows in the next refresh. */
|
|
60
|
+
export declare function refreshBrief(hippoRoot: string, tenantId: string, repo: string, actor?: string): ProjectBrief;
|
|
61
|
+
/** `refreshBrief` over a served store's group. */
|
|
62
|
+
export declare function refreshedBrief(objects: Objects, site: ObjectSaveSite, repo: string): Promise<ProjectBrief>;
|
|
63
|
+
//# sourceMappingURL=project-briefs.d.ts.map
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/** Project_brief object: the living, repo-scoped `summary` of a repository, evolving via supersession.
|
|
2
|
+
* `refreshBrief` assembles recent `path:<repo>` receipts with a deterministic (no-LLM) assembler; an LLM pipeline is deferred.
|
|
3
|
+
* The `project_briefs` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
4
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
5
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
6
|
+
import { checkText, requireLine } from './fields.js';
|
|
7
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObject, saveObjectAt } from './lifecycle.js';
|
|
8
|
+
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
9
|
+
export const VALID_BRIEF_STATES = new Set([
|
|
10
|
+
'active',
|
|
11
|
+
'superseded',
|
|
12
|
+
'closed',
|
|
13
|
+
]);
|
|
14
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
15
|
+
* cap than the 4096 short-field convention. */
|
|
16
|
+
export const MAX_REPO_LEN = 256;
|
|
17
|
+
export const MAX_BRIEF_SUMMARY_LEN = 8192;
|
|
18
|
+
export const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
19
|
+
/** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
|
|
20
|
+
* + the rendered body). Realistic repos have far fewer recent receipts than this. */
|
|
21
|
+
export const MAX_BRIEF_RECEIPTS = 50;
|
|
22
|
+
/** Truncate each receipt's headline in the assembled digest. */
|
|
23
|
+
export const MAX_RECEIPT_HEADLINE_LEN = 200;
|
|
24
|
+
export const PROJECT_BRIEF = {
|
|
25
|
+
kind: 'project_brief',
|
|
26
|
+
label: 'brief',
|
|
27
|
+
plural: 'briefs',
|
|
28
|
+
fn: { get: 'loadProjectBriefById', close: 'closeProjectBrief', list: 'loadProjectBriefs', save: 'saveProjectBrief' },
|
|
29
|
+
states: VALID_BRIEF_STATES,
|
|
30
|
+
closableFrom: ['active'],
|
|
31
|
+
draft(opts) {
|
|
32
|
+
// The repo becomes a path tag on the refresh match and a heading in the digest, so it must be one line.
|
|
33
|
+
const repo = requireLine(opts.repo, MAX_REPO_LEN, {
|
|
34
|
+
required: 'saveProjectBrief: repo is required',
|
|
35
|
+
singleLine: 'saveProjectBrief: repo must be a single line (no newlines)',
|
|
36
|
+
tooLong: `saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`,
|
|
37
|
+
});
|
|
38
|
+
checkText(opts.summary, MAX_BRIEF_SUMMARY_LEN, {
|
|
39
|
+
required: 'saveProjectBrief: summary is required',
|
|
40
|
+
tooLong: `saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`,
|
|
41
|
+
});
|
|
42
|
+
checkText(opts.changeSummary, MAX_CHANGE_SUMMARY_LEN, {
|
|
43
|
+
tooLong: `saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`,
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
fields: { repo, summary: opts.summary, receiptCount: opts.refreshReceiptCount },
|
|
47
|
+
content: buildBriefContent(repo, opts.summary),
|
|
48
|
+
tags: opts.extraTags ?? [],
|
|
49
|
+
supersedesId: opts.supersedesBriefId,
|
|
50
|
+
changeSummary: opts.changeSummary,
|
|
51
|
+
at: new Date().toISOString(),
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
/** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
|
|
56
|
+
* buildSkillContent) so the recall surface is deterministic + unit-testable. */
|
|
57
|
+
function buildBriefContent(repo, summary) {
|
|
58
|
+
return `${repo}\n\n${summary}`;
|
|
59
|
+
}
|
|
60
|
+
/** Create a project_brief, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
61
|
+
export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
62
|
+
return saveObjectAt(PROJECT_BRIEF, { hippoRoot, tenantId, actor }, opts);
|
|
63
|
+
}
|
|
64
|
+
/** Close (retire) an active brief; a superseded row is terminal. */
|
|
65
|
+
export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
|
|
66
|
+
return closeObjectAt(hippoRoot, PROJECT_BRIEF, tenantId, id, actor);
|
|
67
|
+
}
|
|
68
|
+
export function loadProjectBriefById(hippoRoot, tenantId, id) {
|
|
69
|
+
return objectByIdAt(hippoRoot, PROJECT_BRIEF, tenantId, id);
|
|
70
|
+
}
|
|
71
|
+
export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
|
|
72
|
+
return listObjectsAt(hippoRoot, PROJECT_BRIEF, tenantId, { status: opts.status, filter: opts.repo, limit: opts.limit, after: opts.after });
|
|
73
|
+
}
|
|
74
|
+
/** The repo's current active brief, or null. The DB allows several active rows per (tenant, repo); the most recent wins. */
|
|
75
|
+
function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
|
|
76
|
+
assertTenantId('loadActiveBriefForRepo', tenantId);
|
|
77
|
+
if (repo === '')
|
|
78
|
+
return null;
|
|
79
|
+
return sqliteObjects(hippoRoot).listObjects(tenantId, 'project_brief', newestActive(repo))[0] ?? null;
|
|
80
|
+
}
|
|
81
|
+
/** An empty filter lists every repo, so the callers refuse an empty repo first. */
|
|
82
|
+
function newestActive(repo) {
|
|
83
|
+
return { status: 'active', filter: repo, limit: 1 };
|
|
84
|
+
}
|
|
85
|
+
/** Single-line headline for a receipt: first non-empty line, newline-stripped,
|
|
86
|
+
* truncated. Deterministic + safe for the markdown bullet list. */
|
|
87
|
+
function receiptHeadline(content) {
|
|
88
|
+
const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
|
|
89
|
+
const trimmed = firstLine.trim();
|
|
90
|
+
return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
|
|
91
|
+
? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
|
|
92
|
+
: trimmed;
|
|
93
|
+
}
|
|
94
|
+
/** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
|
|
95
|
+
function receiptTag(normalizedRepo) {
|
|
96
|
+
return `path:${normalizedRepo.toLowerCase()}`;
|
|
97
|
+
}
|
|
98
|
+
// `id DESC` is a lexical tiebreak on a random-ish id, so same-`created` order is stable but arbitrary; `created DESC` is the recency order.
|
|
99
|
+
// Receipt lines go newest-first only while they fit MAX_BRIEF_SUMMARY_LEN (reserving slack for header and omission footer), else the store rejects the body.
|
|
100
|
+
function fitReceiptLines(receipts) {
|
|
101
|
+
const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
|
|
102
|
+
const receiptLines = [];
|
|
103
|
+
if (receipts.length > 0) {
|
|
104
|
+
// Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
|
|
105
|
+
// so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
|
|
106
|
+
const SLACK = 400;
|
|
107
|
+
let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
|
|
108
|
+
for (const r of receipts) {
|
|
109
|
+
const line = buildReceiptLine(r);
|
|
110
|
+
if (line.length + 1 > bodyBudget)
|
|
111
|
+
break;
|
|
112
|
+
receiptLines.push(line);
|
|
113
|
+
bodyBudget -= line.length + 1;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return receiptLines;
|
|
117
|
+
}
|
|
118
|
+
function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
|
|
119
|
+
const omitted = receiptCount - receiptLines.length;
|
|
120
|
+
const lines = [];
|
|
121
|
+
lines.push(`# Project Brief: ${normalizedRepo}`);
|
|
122
|
+
lines.push('');
|
|
123
|
+
lines.push(omitted > 0
|
|
124
|
+
? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
|
|
125
|
+
: `_Auto-assembled from ${receiptCount} receipt(s)._`);
|
|
126
|
+
lines.push('');
|
|
127
|
+
lines.push('## Recent receipts');
|
|
128
|
+
lines.push('');
|
|
129
|
+
if (receiptCount === 0) {
|
|
130
|
+
lines.push(`_No receipts found for ${normalizedRepo}._`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
lines.push(...receiptLines);
|
|
134
|
+
if (omitted > 0) {
|
|
135
|
+
lines.push('');
|
|
136
|
+
lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Belt-and-suspenders: hard-clamp so the store's NOT-NULL/<=cap contract holds even for a single oversized line.
|
|
140
|
+
let markdown = lines.join('\n');
|
|
141
|
+
if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
|
|
142
|
+
markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
|
|
143
|
+
}
|
|
144
|
+
return markdown;
|
|
145
|
+
}
|
|
146
|
+
/** Assemble the repo's recent receipts into a deterministic markdown digest and return it with the receipt count; never empty (summary is NOT NULL).
|
|
147
|
+
* The brief's own mirror (source='project_brief') is excluded; the quotes in the JSON-array LIKE are load-bearing (`hip` must not match `path:hippo`). */
|
|
148
|
+
export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
|
|
149
|
+
const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
|
|
150
|
+
return briefDigest(normalizedRepo, sqliteObjects(hippoRoot).briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
|
|
151
|
+
}
|
|
152
|
+
/** `assembleBriefFromReceipts` over a served store's group. */
|
|
153
|
+
export async function briefFromReceipts(objects, tenantId, repo) {
|
|
154
|
+
const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
|
|
155
|
+
return briefDigest(normalizedRepo, await objects.briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
|
|
156
|
+
}
|
|
157
|
+
function requiredRepo(fn, tenantId, repo) {
|
|
158
|
+
assertTenantId(fn, tenantId);
|
|
159
|
+
const normalizedRepo = (repo ?? '').trim();
|
|
160
|
+
if (normalizedRepo.length === 0)
|
|
161
|
+
throw new BadRequestError(`${fn}: repo is required`);
|
|
162
|
+
return normalizedRepo;
|
|
163
|
+
}
|
|
164
|
+
function briefDigest(normalizedRepo, receipts) {
|
|
165
|
+
return { markdown: renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts)), receiptCount: receipts.length };
|
|
166
|
+
}
|
|
167
|
+
/** The version a refresh saves: a successor of the repo's active brief when it has one, else a first version. */
|
|
168
|
+
function refreshWrite(normalizedRepo, digest, active) {
|
|
169
|
+
return {
|
|
170
|
+
repo: normalizedRepo,
|
|
171
|
+
summary: digest.markdown,
|
|
172
|
+
changeSummary: active ? `auto-refresh from ${digest.receiptCount} receipt(s)` : undefined,
|
|
173
|
+
supersedesBriefId: active ? active.id : undefined,
|
|
174
|
+
refreshReceiptCount: digest.receiptCount,
|
|
175
|
+
// The path tag lets path-aware recall boost the brief; it cannot become its own receipt, because receipts leave out source project_brief.
|
|
176
|
+
extraTags: [receiptTag(normalizedRepo)],
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/** Saves a new version of the repo's brief from its receipts. The receipts are read before
|
|
180
|
+
* the save's transaction, so a receipt written in between shows in the next refresh. */
|
|
181
|
+
export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
|
|
182
|
+
const normalizedRepo = requiredRepo('refreshBrief', tenantId, repo);
|
|
183
|
+
const digest = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
|
|
184
|
+
const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
|
|
185
|
+
return saveProjectBrief(hippoRoot, tenantId, refreshWrite(normalizedRepo, digest, active), actor);
|
|
186
|
+
}
|
|
187
|
+
/** `refreshBrief` over a served store's group. */
|
|
188
|
+
export async function refreshedBrief(objects, site, repo) {
|
|
189
|
+
const normalizedRepo = requiredRepo('refreshBrief', site.tenantId, repo);
|
|
190
|
+
const digest = await briefFromReceipts(objects, site.tenantId, normalizedRepo);
|
|
191
|
+
const [active = null] = await objects.listObjects(site.tenantId, 'project_brief', newestActive(normalizedRepo));
|
|
192
|
+
return saveObject(objects, PROJECT_BRIEF, site, refreshWrite(normalizedRepo, digest, active));
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=project-briefs.js.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Skill object: an agent-followable `instructions` body plus an optional `trigger`, evolving via supersession.
|
|
2
|
+
* `exportSkills` renders ACTIVE skills into AGENTS.md / CLAUDE.md rules; running code from a skill is deferred (security).
|
|
3
|
+
* `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
|
|
4
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
5
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
6
|
+
import type { Skill, SkillStatus } from '../store/object-types.js';
|
|
7
|
+
import type { Objects } from '../store/port.js';
|
|
8
|
+
export type { Skill, SkillStatus } from '../store/object-types.js';
|
|
9
|
+
export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
|
|
10
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
11
|
+
* larger cap than the 4096 short-field convention. */
|
|
12
|
+
export declare const MAX_SKILL_NAME_LEN = 256;
|
|
13
|
+
export declare const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
|
|
14
|
+
export declare const MAX_SKILL_TRIGGER_LEN = 1024;
|
|
15
|
+
/** Aggregate bound on a single export render so the export body is never unbounded.
|
|
16
|
+
* Realistic active-skill counts are tens; 1000 is a generous bound. */
|
|
17
|
+
export declare const MAX_EXPORT_SKILLS = 1000;
|
|
18
|
+
export interface SaveSkillOpts {
|
|
19
|
+
skillName: string;
|
|
20
|
+
instructions: string;
|
|
21
|
+
/** Optional "when to apply" trigger. */
|
|
22
|
+
trigger?: string;
|
|
23
|
+
/** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
|
|
24
|
+
changeSummary?: string;
|
|
25
|
+
/** Table id of an ACTIVE skill this new version supersedes. */
|
|
26
|
+
supersedesSkillId?: number;
|
|
27
|
+
/** Extra memory tags merged after ['skill']. */
|
|
28
|
+
extraTags?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface ListSkillsOpts {
|
|
31
|
+
status?: SkillStatus;
|
|
32
|
+
limit?: number;
|
|
33
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
34
|
+
after?: KeysetPosition;
|
|
35
|
+
}
|
|
36
|
+
export declare const SKILL: SavableDescriptor<'skill', SaveSkillOpts>;
|
|
37
|
+
/** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
38
|
+
export declare function saveSkill(hippoRoot: string, tenantId: string, opts: SaveSkillOpts, actor?: string): Skill;
|
|
39
|
+
/** Close (retire) an active skill; a superseded row is terminal. */
|
|
40
|
+
export declare function closeSkill(hippoRoot: string, tenantId: string, id: number, actor?: string): Skill;
|
|
41
|
+
export declare function loadSkillById(hippoRoot: string, tenantId: string, id: number): Skill | null;
|
|
42
|
+
export declare function loadSkills(hippoRoot: string, tenantId: string, opts?: ListSkillsOpts): Skill[];
|
|
43
|
+
export declare function loadActiveSkills(hippoRoot: string, tenantId: string, opts?: {
|
|
44
|
+
limit?: number;
|
|
45
|
+
}): Skill[];
|
|
46
|
+
/** Render the tenant's ACTIVE skills into one AGENTS.md / CLAUDE.md-style markdown block (H2 per skill, ordered by skill_name) and return it; writes no file.
|
|
47
|
+
* Bounded by MAX_EXPORT_SKILLS rows; instructions are emitted verbatim. */
|
|
48
|
+
export declare function exportSkills(hippoRoot: string, tenantId: string): string;
|
|
49
|
+
/** `exportSkills` over a served store's group. */
|
|
50
|
+
export declare function skillsMarkdown(objects: Objects, tenantId: string): Promise<string>;
|
|
51
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/** Skill object: an agent-followable `instructions` body plus an optional `trigger`, evolving via supersession.
|
|
2
|
+
* `exportSkills` renders ACTIVE skills into AGENTS.md / CLAUDE.md rules; running code from a skill is deferred (security).
|
|
3
|
+
* `trigger` is stored in `trigger_text` because it is a SQLite reserved keyword. */
|
|
4
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
5
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
6
|
+
import { checkText, requireLine } from './fields.js';
|
|
7
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
8
|
+
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
9
|
+
export const VALID_SKILL_STATES = new Set([
|
|
10
|
+
'active',
|
|
11
|
+
'superseded',
|
|
12
|
+
'closed',
|
|
13
|
+
]);
|
|
14
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
15
|
+
* larger cap than the 4096 short-field convention. */
|
|
16
|
+
export const MAX_SKILL_NAME_LEN = 256;
|
|
17
|
+
export const MAX_SKILL_INSTRUCTIONS_LEN = 8192;
|
|
18
|
+
export const MAX_SKILL_TRIGGER_LEN = 1024;
|
|
19
|
+
/** Aggregate bound on a single export render so the export body is never unbounded.
|
|
20
|
+
* Realistic active-skill counts are tens; 1000 is a generous bound. */
|
|
21
|
+
export const MAX_EXPORT_SKILLS = 1000;
|
|
22
|
+
/** The trigger as stored, or null for none. One line, because a newline would forge a heading inside the exported **When:** line. */
|
|
23
|
+
function checkTrigger(trigger) {
|
|
24
|
+
if (trigger === undefined || trigger === null || trigger.trim().length === 0)
|
|
25
|
+
return null;
|
|
26
|
+
if (trigger.length > MAX_SKILL_TRIGGER_LEN) {
|
|
27
|
+
throw new BadRequestError(`saveSkill: trigger exceeds the ${MAX_SKILL_TRIGGER_LEN}-char cap`);
|
|
28
|
+
}
|
|
29
|
+
if (/[\r\n]/.test(trigger)) {
|
|
30
|
+
throw new BadRequestError('saveSkill: trigger must be a single line (no newlines)');
|
|
31
|
+
}
|
|
32
|
+
return trigger;
|
|
33
|
+
}
|
|
34
|
+
/** Recall-surface content for the memory mirror: name, optional trigger, instructions. */
|
|
35
|
+
function buildSkillContent(skillName, instructions, trigger) {
|
|
36
|
+
let content = skillName;
|
|
37
|
+
if (trigger)
|
|
38
|
+
content += `\n\nWhen: ${trigger}`;
|
|
39
|
+
content += `\n\n${instructions}`;
|
|
40
|
+
return content;
|
|
41
|
+
}
|
|
42
|
+
export const SKILL = {
|
|
43
|
+
kind: 'skill',
|
|
44
|
+
label: 'skill',
|
|
45
|
+
plural: 'skills',
|
|
46
|
+
fn: { get: 'loadSkillById', close: 'closeSkill', list: 'loadSkills', save: 'saveSkill' },
|
|
47
|
+
states: VALID_SKILL_STATES,
|
|
48
|
+
closableFrom: ['active'],
|
|
49
|
+
draft(opts) {
|
|
50
|
+
// The name becomes an H2 header in the export, so it must be one line.
|
|
51
|
+
const name = requireLine(opts.skillName, MAX_SKILL_NAME_LEN, {
|
|
52
|
+
required: 'saveSkill: skillName is required',
|
|
53
|
+
singleLine: 'saveSkill: skillName must be a single line (no newlines)',
|
|
54
|
+
tooLong: `saveSkill: skillName exceeds the ${MAX_SKILL_NAME_LEN}-char cap`,
|
|
55
|
+
});
|
|
56
|
+
checkText(opts.instructions, MAX_SKILL_INSTRUCTIONS_LEN, {
|
|
57
|
+
required: 'saveSkill: instructions are required',
|
|
58
|
+
tooLong: `saveSkill: instructions exceed the ${MAX_SKILL_INSTRUCTIONS_LEN}-char cap`,
|
|
59
|
+
});
|
|
60
|
+
const trigger = checkTrigger(opts.trigger);
|
|
61
|
+
return {
|
|
62
|
+
fields: { name, instructions: opts.instructions, trigger },
|
|
63
|
+
content: buildSkillContent(name, opts.instructions, trigger),
|
|
64
|
+
tags: opts.extraTags ?? [],
|
|
65
|
+
supersedesId: opts.supersedesSkillId,
|
|
66
|
+
changeSummary: opts.changeSummary,
|
|
67
|
+
at: new Date().toISOString(),
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
/** Create a skill, or a new version superseding an existing one, in the `objects` store group's one transaction. */
|
|
72
|
+
export function saveSkill(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
73
|
+
return saveObjectAt(SKILL, { hippoRoot, tenantId, actor }, opts);
|
|
74
|
+
}
|
|
75
|
+
/** Close (retire) an active skill; a superseded row is terminal. */
|
|
76
|
+
export function closeSkill(hippoRoot, tenantId, id, actor = 'cli') {
|
|
77
|
+
return closeObjectAt(hippoRoot, SKILL, tenantId, id, actor);
|
|
78
|
+
}
|
|
79
|
+
export function loadSkillById(hippoRoot, tenantId, id) {
|
|
80
|
+
return objectByIdAt(hippoRoot, SKILL, tenantId, id);
|
|
81
|
+
}
|
|
82
|
+
export function loadSkills(hippoRoot, tenantId, opts = {}) {
|
|
83
|
+
return listObjectsAt(hippoRoot, SKILL, tenantId, opts);
|
|
84
|
+
}
|
|
85
|
+
export function loadActiveSkills(hippoRoot, tenantId, opts = {}) {
|
|
86
|
+
return loadSkills(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
87
|
+
}
|
|
88
|
+
/** Render the tenant's ACTIVE skills into one AGENTS.md / CLAUDE.md-style markdown block (H2 per skill, ordered by skill_name) and return it; writes no file.
|
|
89
|
+
* Bounded by MAX_EXPORT_SKILLS rows; instructions are emitted verbatim. */
|
|
90
|
+
export function exportSkills(hippoRoot, tenantId) {
|
|
91
|
+
assertTenantId('exportSkills', tenantId);
|
|
92
|
+
return skillsBlock(sqliteObjects(hippoRoot).activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
|
|
93
|
+
}
|
|
94
|
+
/** `exportSkills` over a served store's group. */
|
|
95
|
+
export async function skillsMarkdown(objects, tenantId) {
|
|
96
|
+
assertTenantId('exportSkills', tenantId);
|
|
97
|
+
return skillsBlock(await objects.activeSkillsByName(tenantId, MAX_EXPORT_SKILLS));
|
|
98
|
+
}
|
|
99
|
+
function skillsBlock(skills) {
|
|
100
|
+
return skills
|
|
101
|
+
.map((s) => {
|
|
102
|
+
let block = `## ${s.skillName}`;
|
|
103
|
+
if (s.trigger)
|
|
104
|
+
block += `\n\n**When:** ${s.trigger}`;
|
|
105
|
+
block += `\n\n${s.instructions}`;
|
|
106
|
+
return block;
|
|
107
|
+
})
|
|
108
|
+
.join('\n\n');
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=skills.js.map
|