hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -23,41 +23,21 @@
|
|
|
23
23
|
* Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
|
|
24
24
|
* enforce processes.tenant_id == the referenced memory's tenant_id, and a
|
|
25
25
|
* superseded_by same-tenant trigger makes cross-tenant supersession
|
|
26
|
-
* unrepresentable. Mirrors the v30 decisions pattern (src/decisions.ts).
|
|
26
|
+
* unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
|
|
27
27
|
*
|
|
28
|
-
* Dual-write atomicity: `saveProcess`
|
|
29
|
-
*
|
|
30
|
-
* '
|
|
31
|
-
* them back. Pattern matches saveDecision (decisions.ts).
|
|
28
|
+
* Dual-write atomicity: `saveProcess` hands the memory and the process to the
|
|
29
|
+
* `objects` store group, which commits them (and, when superseding, the
|
|
30
|
+
* predecessor's UPDATE) together, so a failure in any step rolls all of them back.
|
|
32
31
|
*/
|
|
33
|
-
import {
|
|
34
|
-
import type
|
|
35
|
-
|
|
32
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
33
|
+
import { type JsonValue } from '../util/json.js';
|
|
34
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
35
|
+
import type { Process, ProcessStatus } from '../store/object-types.js';
|
|
36
|
+
export type { Process, ProcessStatus } from '../store/object-types.js';
|
|
36
37
|
export declare const VALID_PROCESS_STATES: ReadonlySet<ProcessStatus>;
|
|
37
38
|
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
38
39
|
export declare const MAX_PROCESS_STEPS = 200;
|
|
39
40
|
export declare const MAX_PROCESS_STEP_LEN = 2000;
|
|
40
|
-
export interface Process {
|
|
41
|
-
id: number;
|
|
42
|
-
/** Nullable: ON DELETE SET NULL lets memory deletion (forget / consolidate /
|
|
43
|
-
* archive) proceed without breaking the process row. */
|
|
44
|
-
memoryId: string | null;
|
|
45
|
-
tenantId: string;
|
|
46
|
-
processName: string;
|
|
47
|
-
description: string | null;
|
|
48
|
-
/** Ordered step list (the process body). Stored as a JSON array of strings. */
|
|
49
|
-
steps: string[];
|
|
50
|
-
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
51
|
-
version: number;
|
|
52
|
-
status: ProcessStatus;
|
|
53
|
-
/** Successor process id; set only when status === 'superseded'. */
|
|
54
|
-
supersededBy: number | null;
|
|
55
|
-
supersededAt: string | null;
|
|
56
|
-
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
57
|
-
changeSummary: string | null;
|
|
58
|
-
closedAt: string | null;
|
|
59
|
-
createdAt: string;
|
|
60
|
-
}
|
|
61
41
|
export interface SaveProcessOpts {
|
|
62
42
|
processName: string;
|
|
63
43
|
steps: string[];
|
|
@@ -82,12 +62,13 @@ export interface ListProcessesOpts {
|
|
|
82
62
|
* discipline.
|
|
83
63
|
*/
|
|
84
64
|
export declare function validateProcessSteps(steps: JsonValue): string[];
|
|
65
|
+
export declare const PROCESS: SavableDescriptor<'process', SaveProcessOpts>;
|
|
85
66
|
/**
|
|
86
67
|
* Create a process (or a new version that supersedes an existing one). Writes
|
|
87
|
-
* the memory mirror + the processes row
|
|
88
|
-
*
|
|
68
|
+
* the memory mirror + the processes row in the `objects` store group's one
|
|
69
|
+
* transaction. When supersedesProcessId is given, the referenced ACTIVE row is
|
|
89
70
|
* preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
|
|
90
|
-
* the SAME
|
|
71
|
+
* the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
|
|
91
72
|
* changes===0 so a duplicate supersede aborts the whole write). The new row's
|
|
92
73
|
* version = predecessor.version + 1 (server-derived); change_summary carries the
|
|
93
74
|
* delta note. A fresh create has version 1 and change_summary NULL.
|
|
@@ -95,8 +76,7 @@ export declare function validateProcessSteps(steps: JsonValue): string[];
|
|
|
95
76
|
export declare function saveProcess(hippoRoot: string, tenantId: string, opts: SaveProcessOpts, actor?: string): Process;
|
|
96
77
|
/**
|
|
97
78
|
* Close (retire) an active process with no successor. Updates the processes row
|
|
98
|
-
* only; the memory mirror is not mutated.
|
|
99
|
-
* changes distinguishes not-found from not-active. A superseded row is already
|
|
79
|
+
* only; the memory mirror is not mutated. A superseded row is already
|
|
100
80
|
* terminal in the chain and cannot be closed.
|
|
101
81
|
*/
|
|
102
82
|
export declare function closeProcess(hippoRoot: string, tenantId: string, id: number, actor?: string): Process;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process first-class object.
|
|
3
|
+
*
|
|
4
|
+
* A `process` is a "living process map": a named, ordered list of steps that
|
|
5
|
+
* evolves over time. Unlike `incident` (open->resolved->closed, no supersede),
|
|
6
|
+
* `process` REUSES the `decision` supersede path as its delta mechanism: a
|
|
7
|
+
* process evolves by being superseded by a NEW VERSION that records what
|
|
8
|
+
* changed (`change_summary`) and the full new state (`steps`), carrying a
|
|
9
|
+
* server-derived `version` counter. The version chain (walk `superseded_by`)
|
|
10
|
+
* is the changelog. Computed structural step-diffing is a deferred v2 read-side
|
|
11
|
+
* feature; the row stores enough to reconstruct any delta
|
|
12
|
+
* (predecessor.steps + successor.steps + change_summary).
|
|
13
|
+
*
|
|
14
|
+
* The `processes` table is the source of truth: a process stays `active`
|
|
15
|
+
* regardless of memory decay. A memory row mirrors the process for recall but
|
|
16
|
+
* is NOT canonical — memory_id is NULLABLE with ON DELETE SET NULL so
|
|
17
|
+
* forget/consolidate/archive gracefully orphans the process row.
|
|
18
|
+
*
|
|
19
|
+
* Lifecycle: active -> superseded (a newer version replaces it; superseded_by
|
|
20
|
+
* points to the successor) or active -> closed (retired with no successor;
|
|
21
|
+
* only an active head closes).
|
|
22
|
+
*
|
|
23
|
+
* Tenant scoping: every helper requires tenantId. BEFORE INSERT/UPDATE triggers
|
|
24
|
+
* enforce processes.tenant_id == the referenced memory's tenant_id, and a
|
|
25
|
+
* superseded_by same-tenant trigger makes cross-tenant supersession
|
|
26
|
+
* unrepresentable. Mirrors the v30 decisions pattern (src/objects/decisions.ts).
|
|
27
|
+
*
|
|
28
|
+
* Dual-write atomicity: `saveProcess` hands the memory and the process to the
|
|
29
|
+
* `objects` store group, which commits them (and, when superseding, the
|
|
30
|
+
* predecessor's UPDATE) together, so a failure in any step rolls all of them back.
|
|
31
|
+
*/
|
|
32
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
33
|
+
import { isJsonString } from '../util/json.js';
|
|
34
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObjectAt } from './lifecycle.js';
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Domain types
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
export const VALID_PROCESS_STATES = new Set([
|
|
39
|
+
'active',
|
|
40
|
+
'superseded',
|
|
41
|
+
'closed',
|
|
42
|
+
]);
|
|
43
|
+
/** DoS / abuse caps on the steps body (untrusted at the HTTP/SDK boundary). */
|
|
44
|
+
export const MAX_PROCESS_STEPS = 200;
|
|
45
|
+
export const MAX_PROCESS_STEP_LEN = 2000;
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// steps validation (untrusted input)
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Validate + normalise the steps body. Returns the trimmed step strings
|
|
51
|
+
* (trim-then-store, so ' x ' is stored as 'x'). Throws on a non-array, a
|
|
52
|
+
* non-string / empty element, or a cap breach. Mirrors the incident DoS-cap
|
|
53
|
+
* discipline.
|
|
54
|
+
*/
|
|
55
|
+
export function validateProcessSteps(steps) {
|
|
56
|
+
if (!Array.isArray(steps)) {
|
|
57
|
+
throw new BadRequestError('saveProcess: steps must be an array of strings');
|
|
58
|
+
}
|
|
59
|
+
if (steps.length > MAX_PROCESS_STEPS) {
|
|
60
|
+
throw new BadRequestError(`saveProcess: steps exceeds the ${MAX_PROCESS_STEPS}-step cap (got ${steps.length})`);
|
|
61
|
+
}
|
|
62
|
+
const out = [];
|
|
63
|
+
for (let i = 0; i < steps.length; i++) {
|
|
64
|
+
const raw = steps[i];
|
|
65
|
+
if (!isJsonString(raw)) {
|
|
66
|
+
throw new BadRequestError(`saveProcess: step ${i + 1} is not a string`);
|
|
67
|
+
}
|
|
68
|
+
const trimmed = raw.trim();
|
|
69
|
+
if (trimmed.length === 0) {
|
|
70
|
+
throw new BadRequestError(`saveProcess: step ${i + 1} is empty`);
|
|
71
|
+
}
|
|
72
|
+
if (trimmed.length > MAX_PROCESS_STEP_LEN) {
|
|
73
|
+
throw new BadRequestError(`saveProcess: step ${i + 1} exceeds the ${MAX_PROCESS_STEP_LEN}-char cap`);
|
|
74
|
+
}
|
|
75
|
+
out.push(trimmed);
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/** The recall-surface content for the memory mirror: name + numbered steps +
|
|
80
|
+
* optional description, so `hippo recall` shows the process body. */
|
|
81
|
+
function buildProcessContent(processName, steps, description) {
|
|
82
|
+
const numbered = steps.map((s, i) => `${i + 1}. ${s}`).join('\n');
|
|
83
|
+
let content = processName;
|
|
84
|
+
if (numbered)
|
|
85
|
+
content += `\n\n${numbered}`;
|
|
86
|
+
if (description)
|
|
87
|
+
content += `\n\nDescription: ${description}`;
|
|
88
|
+
return content;
|
|
89
|
+
}
|
|
90
|
+
export const PROCESS = {
|
|
91
|
+
kind: 'process',
|
|
92
|
+
label: 'process',
|
|
93
|
+
plural: 'processes',
|
|
94
|
+
fn: { get: 'loadProcessById', close: 'closeProcess', list: 'loadProcesses', save: 'saveProcess' },
|
|
95
|
+
states: VALID_PROCESS_STATES,
|
|
96
|
+
closableFrom: ['active'],
|
|
97
|
+
draft(opts) {
|
|
98
|
+
// The name is stored as written, so only a blank one is refused.
|
|
99
|
+
if (!opts.processName || opts.processName.trim().length === 0) {
|
|
100
|
+
throw new BadRequestError('saveProcess: processName is required');
|
|
101
|
+
}
|
|
102
|
+
const steps = validateProcessSteps(opts.steps);
|
|
103
|
+
return {
|
|
104
|
+
fields: { processName: opts.processName, description: opts.description, steps },
|
|
105
|
+
content: buildProcessContent(opts.processName, steps, opts.description),
|
|
106
|
+
tags: opts.extraTags ?? [],
|
|
107
|
+
supersedesId: opts.supersedesProcessId,
|
|
108
|
+
changeSummary: opts.changeSummary,
|
|
109
|
+
at: new Date().toISOString(),
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Public API
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
/**
|
|
117
|
+
* Create a process (or a new version that supersedes an existing one). Writes
|
|
118
|
+
* the memory mirror + the processes row in the `objects` store group's one
|
|
119
|
+
* transaction. When supersedesProcessId is given, the referenced ACTIVE row is
|
|
120
|
+
* preflighted (status + version) BEFORE the INSERT, then UPDATEd -> superseded in
|
|
121
|
+
* the SAME transaction (CAS: WHERE status='active' AND id != <new id>; throws on
|
|
122
|
+
* changes===0 so a duplicate supersede aborts the whole write). The new row's
|
|
123
|
+
* version = predecessor.version + 1 (server-derived); change_summary carries the
|
|
124
|
+
* delta note. A fresh create has version 1 and change_summary NULL.
|
|
125
|
+
*/
|
|
126
|
+
export function saveProcess(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
127
|
+
return saveObjectAt(PROCESS, { hippoRoot, tenantId, actor }, opts);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Close (retire) an active process with no successor. Updates the processes row
|
|
131
|
+
* only; the memory mirror is not mutated. A superseded row is already
|
|
132
|
+
* terminal in the chain and cannot be closed.
|
|
133
|
+
*/
|
|
134
|
+
export function closeProcess(hippoRoot, tenantId, id, actor = 'cli') {
|
|
135
|
+
return closeObjectAt(hippoRoot, PROCESS, tenantId, id, actor);
|
|
136
|
+
}
|
|
137
|
+
export function loadProcessById(hippoRoot, tenantId, id) {
|
|
138
|
+
return objectByIdAt(hippoRoot, PROCESS, tenantId, id);
|
|
139
|
+
}
|
|
140
|
+
export function loadProcesses(hippoRoot, tenantId, opts = {}) {
|
|
141
|
+
return listObjectsAt(hippoRoot, PROCESS, tenantId, opts);
|
|
142
|
+
}
|
|
143
|
+
export function loadActiveProcesses(hippoRoot, tenantId, opts = {}) {
|
|
144
|
+
return loadProcesses(hippoRoot, tenantId, { status: 'active', limit: opts.limit });
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=processes.js.map
|
|
@@ -20,8 +20,12 @@
|
|
|
20
20
|
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
21
21
|
* closed (retired).
|
|
22
22
|
*/
|
|
23
|
-
import {
|
|
24
|
-
|
|
23
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
24
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
25
|
+
import { type ObjectSaveSite } from './lifecycle.js';
|
|
26
|
+
import type { BriefStatus, ProjectBrief } from '../store/object-types.js';
|
|
27
|
+
import type { Objects } from '../store/port.js';
|
|
28
|
+
export type { BriefStatus, ProjectBrief } from '../store/object-types.js';
|
|
25
29
|
export declare const VALID_BRIEF_STATES: ReadonlySet<BriefStatus>;
|
|
26
30
|
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
27
31
|
* cap than the 4096 short-field convention. */
|
|
@@ -33,26 +37,6 @@ export declare const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
|
33
37
|
export declare const MAX_BRIEF_RECEIPTS = 50;
|
|
34
38
|
/** Truncate each receipt's headline in the assembled digest. */
|
|
35
39
|
export declare const MAX_RECEIPT_HEADLINE_LEN = 200;
|
|
36
|
-
export interface ProjectBrief {
|
|
37
|
-
id: number;
|
|
38
|
-
/** Nullable: ON DELETE SET NULL lets memory deletion proceed without breaking
|
|
39
|
-
* the brief row. */
|
|
40
|
-
memoryId: string | null;
|
|
41
|
-
tenantId: string;
|
|
42
|
-
/** The repo identifier this brief is scoped to (e.g. `hippo`). */
|
|
43
|
-
repo: string;
|
|
44
|
-
/** The brief body. */
|
|
45
|
-
summary: string;
|
|
46
|
-
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
47
|
-
version: number;
|
|
48
|
-
status: BriefStatus;
|
|
49
|
-
supersededBy: number | null;
|
|
50
|
-
supersededAt: string | null;
|
|
51
|
-
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
52
|
-
changeSummary: string | null;
|
|
53
|
-
closedAt: string | null;
|
|
54
|
-
createdAt: string;
|
|
55
|
-
}
|
|
56
40
|
export interface SaveProjectBriefOpts {
|
|
57
41
|
repo: string;
|
|
58
42
|
summary: string;
|
|
@@ -75,17 +59,17 @@ export interface ListProjectBriefsOpts {
|
|
|
75
59
|
/** Resume after this row: the position the previous page ended on. */
|
|
76
60
|
after?: KeysetPosition;
|
|
77
61
|
}
|
|
62
|
+
export declare const PROJECT_BRIEF: SavableDescriptor<'project_brief', SaveProjectBriefOpts>;
|
|
78
63
|
/**
|
|
79
64
|
* Create a project_brief (or a new version that supersedes an existing one). Writes
|
|
80
|
-
* the memory mirror + the project_briefs row
|
|
81
|
-
*
|
|
65
|
+
* the memory mirror + the project_briefs row in the `objects` store group's one
|
|
66
|
+
* transaction. When supersedesBriefId is given, the referenced ACTIVE row is
|
|
82
67
|
* preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
|
|
83
|
-
* in the same
|
|
68
|
+
* in the same transaction; the new version = predecessor.version + 1 (server-derived).
|
|
84
69
|
*/
|
|
85
70
|
export declare function saveProjectBrief(hippoRoot: string, tenantId: string, opts: SaveProjectBriefOpts, actor?: string): ProjectBrief;
|
|
86
71
|
/**
|
|
87
|
-
* Close (retire) an active brief.
|
|
88
|
-
* distinguishes not-found from not-active. A superseded row is terminal.
|
|
72
|
+
* Close (retire) an active brief. A superseded row is terminal.
|
|
89
73
|
*/
|
|
90
74
|
export declare function closeProjectBrief(hippoRoot: string, tenantId: string, id: number, actor?: string): ProjectBrief;
|
|
91
75
|
export declare function loadProjectBriefById(hippoRoot: string, tenantId: string, id: number): ProjectBrief | null;
|
|
@@ -109,20 +93,15 @@ export declare function loadActiveBriefForRepo(hippoRoot: string, tenantId: stri
|
|
|
109
93
|
* surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
|
|
110
94
|
* `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
|
|
111
95
|
*/
|
|
112
|
-
export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string):
|
|
96
|
+
export declare function assembleBriefFromReceipts(hippoRoot: string, tenantId: string, repo: string): BriefDigest;
|
|
97
|
+
/** `assembleBriefFromReceipts` over a served store's group. */
|
|
98
|
+
export declare function briefFromReceipts(objects: Objects, tenantId: string, repo: string): Promise<BriefDigest>;
|
|
99
|
+
export interface BriefDigest {
|
|
113
100
|
markdown: string;
|
|
114
101
|
receiptCount: number;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Auto-refresh the repo's brief from its receipts: assemble the digest, then create
|
|
118
|
-
* a new version. If the repo already has an active brief it is superseded (the
|
|
119
|
-
* change_summary records the auto-refresh + the audit metadata carries
|
|
120
|
-
* `refreshed: true`); otherwise a v1 is created. Returns the new brief.
|
|
121
|
-
*
|
|
122
|
-
* The assemble (a read of `memories`) happens BEFORE writeEntry opens its SAVEPOINT;
|
|
123
|
-
* a concurrent receipt write landing between the read and the brief write simply
|
|
124
|
-
* appears in the NEXT refresh — the brief is a derived snapshot, not a transactional
|
|
125
|
-
* aggregate, so no consistency invariant is violated.
|
|
126
|
-
*/
|
|
102
|
+
}
|
|
103
|
+
/** Saves a new version of the repo's brief from its receipts. The receipts are read before the save's transaction, so a receipt written in between shows in the next refresh. */
|
|
127
104
|
export declare function refreshBrief(hippoRoot: string, tenantId: string, repo: string, actor?: string): ProjectBrief;
|
|
105
|
+
/** `refreshBrief` over a served store's group. */
|
|
106
|
+
export declare function refreshedBrief(objects: Objects, site: ObjectSaveSite, repo: string): Promise<ProjectBrief>;
|
|
128
107
|
//# sourceMappingURL=project-briefs.d.ts.map
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project_brief first-class object.
|
|
3
|
+
*
|
|
4
|
+
* A `project_brief` is the living, repo-scoped summary of a repository's state: a
|
|
5
|
+
* `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
|
|
6
|
+
* "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
|
|
7
|
+
* `refreshBrief` gathers the repo's recent receipts (memory rows tagged
|
|
8
|
+
* `path:<repo>`) and assembles them into the brief body. The distinguishing
|
|
9
|
+
* capability is therefore the refresh assembler (analog of skill's export
|
|
10
|
+
* renderer), not an LLM/async pipeline (deferred).
|
|
11
|
+
*
|
|
12
|
+
* Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
|
|
13
|
+
* CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
+
* tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
|
|
15
|
+
* `repo` (the repo-scoping dimension) + `summary` (the brief body).
|
|
16
|
+
*
|
|
17
|
+
* The `project_briefs` table is the source of truth (survives memory decay); the
|
|
18
|
+
* memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
19
|
+
*
|
|
20
|
+
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
21
|
+
* closed (retired).
|
|
22
|
+
*/
|
|
23
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
24
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
25
|
+
import { checkText, requireLine } from './fields.js';
|
|
26
|
+
import { closeObjectAt, listObjectsAt, objectByIdAt, saveObject, saveObjectAt } from './lifecycle.js';
|
|
27
|
+
import { sqliteObjects } from '../store/sqlite/objects-group.js';
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Domain types
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
export const VALID_BRIEF_STATES = new Set([
|
|
32
|
+
'active',
|
|
33
|
+
'superseded',
|
|
34
|
+
'closed',
|
|
35
|
+
]);
|
|
36
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
37
|
+
* cap than the 4096 short-field convention. */
|
|
38
|
+
export const MAX_REPO_LEN = 256;
|
|
39
|
+
export const MAX_BRIEF_SUMMARY_LEN = 8192;
|
|
40
|
+
export const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
41
|
+
/** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
|
|
42
|
+
* + the rendered body). Realistic repos have far fewer recent receipts than this. */
|
|
43
|
+
export const MAX_BRIEF_RECEIPTS = 50;
|
|
44
|
+
/** Truncate each receipt's headline in the assembled digest. */
|
|
45
|
+
export const MAX_RECEIPT_HEADLINE_LEN = 200;
|
|
46
|
+
export const PROJECT_BRIEF = {
|
|
47
|
+
kind: 'project_brief',
|
|
48
|
+
label: 'brief',
|
|
49
|
+
plural: 'briefs',
|
|
50
|
+
fn: { get: 'loadProjectBriefById', close: 'closeProjectBrief', list: 'loadProjectBriefs', save: 'saveProjectBrief' },
|
|
51
|
+
states: VALID_BRIEF_STATES,
|
|
52
|
+
closableFrom: ['active'],
|
|
53
|
+
draft(opts) {
|
|
54
|
+
// The repo becomes a path tag on the refresh match and a heading in the digest, so it must be one line.
|
|
55
|
+
const repo = requireLine(opts.repo, MAX_REPO_LEN, {
|
|
56
|
+
required: 'saveProjectBrief: repo is required',
|
|
57
|
+
singleLine: 'saveProjectBrief: repo must be a single line (no newlines)',
|
|
58
|
+
tooLong: `saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`,
|
|
59
|
+
});
|
|
60
|
+
checkText(opts.summary, MAX_BRIEF_SUMMARY_LEN, {
|
|
61
|
+
required: 'saveProjectBrief: summary is required',
|
|
62
|
+
tooLong: `saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`,
|
|
63
|
+
});
|
|
64
|
+
checkText(opts.changeSummary, MAX_CHANGE_SUMMARY_LEN, {
|
|
65
|
+
tooLong: `saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`,
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
fields: { repo, summary: opts.summary, receiptCount: opts.refreshReceiptCount },
|
|
69
|
+
content: buildBriefContent(repo, opts.summary),
|
|
70
|
+
tags: opts.extraTags ?? [],
|
|
71
|
+
supersedesId: opts.supersedesBriefId,
|
|
72
|
+
changeSummary: opts.changeSummary,
|
|
73
|
+
at: new Date().toISOString(),
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
|
|
78
|
+
* buildSkillContent) so the recall surface is deterministic + unit-testable. */
|
|
79
|
+
function buildBriefContent(repo, summary) {
|
|
80
|
+
return `${repo}\n\n${summary}`;
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Public API
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
/**
|
|
86
|
+
* Create a project_brief (or a new version that supersedes an existing one). Writes
|
|
87
|
+
* the memory mirror + the project_briefs row in the `objects` store group's one
|
|
88
|
+
* transaction. When supersedesBriefId is given, the referenced ACTIVE row is
|
|
89
|
+
* preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
|
|
90
|
+
* in the same transaction; the new version = predecessor.version + 1 (server-derived).
|
|
91
|
+
*/
|
|
92
|
+
export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
93
|
+
return saveObjectAt(PROJECT_BRIEF, { hippoRoot, tenantId, actor }, opts);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Close (retire) an active brief. A superseded row is terminal.
|
|
97
|
+
*/
|
|
98
|
+
export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
|
|
99
|
+
return closeObjectAt(hippoRoot, PROJECT_BRIEF, tenantId, id, actor);
|
|
100
|
+
}
|
|
101
|
+
export function loadProjectBriefById(hippoRoot, tenantId, id) {
|
|
102
|
+
return objectByIdAt(hippoRoot, PROJECT_BRIEF, tenantId, id);
|
|
103
|
+
}
|
|
104
|
+
export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
|
|
105
|
+
return listObjectsAt(hippoRoot, PROJECT_BRIEF, tenantId, { status: opts.status, filter: opts.repo, limit: opts.limit, after: opts.after });
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The repo's CURRENT active brief, or null. By convention there is one active brief
|
|
109
|
+
* per (tenant, repo); if an operator created more than one (the DB does not prevent
|
|
110
|
+
* it, consistent with every other first-class object), the MOST-RECENT active row wins.
|
|
111
|
+
*/
|
|
112
|
+
export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
|
|
113
|
+
assertTenantId('loadActiveBriefForRepo', tenantId);
|
|
114
|
+
if (repo === '')
|
|
115
|
+
return null;
|
|
116
|
+
return sqliteObjects(hippoRoot).listObjects(tenantId, 'project_brief', newestActive(repo))[0] ?? null;
|
|
117
|
+
}
|
|
118
|
+
/** An empty filter lists every repo, so the callers refuse an empty repo first. */
|
|
119
|
+
function newestActive(repo) {
|
|
120
|
+
return { status: 'active', filter: repo, limit: 1 };
|
|
121
|
+
}
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
// Refresh assembler (the distinguishing deliverable)
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
/** Single-line headline for a receipt: first non-empty line, newline-stripped,
|
|
126
|
+
* truncated. Deterministic + safe for the markdown bullet list. */
|
|
127
|
+
function receiptHeadline(content) {
|
|
128
|
+
const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
|
|
129
|
+
const trimmed = firstLine.trim();
|
|
130
|
+
return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
|
|
131
|
+
? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
|
|
132
|
+
: trimmed;
|
|
133
|
+
}
|
|
134
|
+
/** The tag a memory of the repo carries; the store matches it whole, so `path:hip` never matches `path:hippo`. */
|
|
135
|
+
function receiptTag(normalizedRepo) {
|
|
136
|
+
return `path:${normalizedRepo.toLowerCase()}`;
|
|
137
|
+
}
|
|
138
|
+
// NOTE on ordering: the `id DESC` tiebreak is lexical on a random-ish memory id
|
|
139
|
+
// (e.g. `sem_<hex>`), NOT chronological — within the same `created` timestamp the
|
|
140
|
+
// order is stable-but-arbitrary, not insertion order. `created DESC` is the real
|
|
141
|
+
// recency ordering.
|
|
142
|
+
//
|
|
143
|
+
// Budget-aware assembly: the digest is the
|
|
144
|
+
// brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
|
|
145
|
+
// receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
|
|
146
|
+
// store then REJECTS, breaking refresh for inputs within the advertised caps. So
|
|
147
|
+
// include receipt lines newest-first only while they fit under the cap (reserving
|
|
148
|
+
// slack for the header + an omission footer), and note the omitted remainder.
|
|
149
|
+
function fitReceiptLines(receipts) {
|
|
150
|
+
const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
|
|
151
|
+
const receiptLines = [];
|
|
152
|
+
if (receipts.length > 0) {
|
|
153
|
+
// Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
|
|
154
|
+
// so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
|
|
155
|
+
const SLACK = 400;
|
|
156
|
+
let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
|
|
157
|
+
for (const r of receipts) {
|
|
158
|
+
const line = buildReceiptLine(r);
|
|
159
|
+
if (line.length + 1 > bodyBudget)
|
|
160
|
+
break;
|
|
161
|
+
receiptLines.push(line);
|
|
162
|
+
bodyBudget -= line.length + 1;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return receiptLines;
|
|
166
|
+
}
|
|
167
|
+
function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
|
|
168
|
+
const omitted = receiptCount - receiptLines.length;
|
|
169
|
+
const lines = [];
|
|
170
|
+
lines.push(`# Project Brief: ${normalizedRepo}`);
|
|
171
|
+
lines.push('');
|
|
172
|
+
lines.push(omitted > 0
|
|
173
|
+
? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
|
|
174
|
+
: `_Auto-assembled from ${receiptCount} receipt(s)._`);
|
|
175
|
+
lines.push('');
|
|
176
|
+
lines.push('## Recent receipts');
|
|
177
|
+
lines.push('');
|
|
178
|
+
if (receiptCount === 0) {
|
|
179
|
+
lines.push(`_No receipts found for ${normalizedRepo}._`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
lines.push(...receiptLines);
|
|
183
|
+
if (omitted > 0) {
|
|
184
|
+
lines.push('');
|
|
185
|
+
lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Belt-and-suspenders: the budget loop keeps us under the cap, but hard-clamp the
|
|
189
|
+
// joined string so the store's NOT-NULL/<=cap contract can never be violated even
|
|
190
|
+
// for a pathological single oversized line.
|
|
191
|
+
let markdown = lines.join('\n');
|
|
192
|
+
if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
|
|
193
|
+
markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
|
|
194
|
+
}
|
|
195
|
+
return markdown;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Assemble the repo's recent receipts into a deterministic markdown digest, and
|
|
199
|
+
* return it WITH the receipt count (the count feeds refreshBrief's change_summary +
|
|
200
|
+
* audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
|
|
201
|
+
* `summary` is NOT NULL), including the zero-receipts case.
|
|
202
|
+
*
|
|
203
|
+
* A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
|
|
204
|
+
* brief's OWN memory mirror (source='project_brief') is excluded so a brief never
|
|
205
|
+
* becomes its own receipt on the next refresh. The match is against the JSON-array
|
|
206
|
+
* serialization (each element is a double-quoted string `"path:hippo"`); the
|
|
207
|
+
* surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
|
|
208
|
+
* `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
|
|
209
|
+
*/
|
|
210
|
+
export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
|
|
211
|
+
const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
|
|
212
|
+
return briefDigest(normalizedRepo, sqliteObjects(hippoRoot).briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
|
|
213
|
+
}
|
|
214
|
+
/** `assembleBriefFromReceipts` over a served store's group. */
|
|
215
|
+
export async function briefFromReceipts(objects, tenantId, repo) {
|
|
216
|
+
const normalizedRepo = requiredRepo('assembleBriefFromReceipts', tenantId, repo);
|
|
217
|
+
return briefDigest(normalizedRepo, await objects.briefReceipts(tenantId, receiptTag(normalizedRepo), MAX_BRIEF_RECEIPTS));
|
|
218
|
+
}
|
|
219
|
+
function requiredRepo(fn, tenantId, repo) {
|
|
220
|
+
assertTenantId(fn, tenantId);
|
|
221
|
+
const normalizedRepo = (repo ?? '').trim();
|
|
222
|
+
if (normalizedRepo.length === 0)
|
|
223
|
+
throw new BadRequestError(`${fn}: repo is required`);
|
|
224
|
+
return normalizedRepo;
|
|
225
|
+
}
|
|
226
|
+
function briefDigest(normalizedRepo, receipts) {
|
|
227
|
+
return { markdown: renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts)), receiptCount: receipts.length };
|
|
228
|
+
}
|
|
229
|
+
/** The version a refresh saves: a successor of the repo's active brief when it has one, else a first version. */
|
|
230
|
+
function refreshWrite(normalizedRepo, digest, active) {
|
|
231
|
+
return {
|
|
232
|
+
repo: normalizedRepo,
|
|
233
|
+
summary: digest.markdown,
|
|
234
|
+
changeSummary: active ? `auto-refresh from ${digest.receiptCount} receipt(s)` : undefined,
|
|
235
|
+
supersedesBriefId: active ? active.id : undefined,
|
|
236
|
+
refreshReceiptCount: digest.receiptCount,
|
|
237
|
+
// The path tag lets path-aware recall boost the brief; it cannot become its own receipt, because receipts leave out source project_brief.
|
|
238
|
+
extraTags: [receiptTag(normalizedRepo)],
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/** Saves a new version of the repo's brief from its receipts. The receipts are read before the save's transaction, so a receipt written in between shows in the next refresh. */
|
|
242
|
+
export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
|
|
243
|
+
const normalizedRepo = requiredRepo('refreshBrief', tenantId, repo);
|
|
244
|
+
const digest = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
|
|
245
|
+
const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
|
|
246
|
+
return saveProjectBrief(hippoRoot, tenantId, refreshWrite(normalizedRepo, digest, active), actor);
|
|
247
|
+
}
|
|
248
|
+
/** `refreshBrief` over a served store's group. */
|
|
249
|
+
export async function refreshedBrief(objects, site, repo) {
|
|
250
|
+
const normalizedRepo = requiredRepo('refreshBrief', site.tenantId, repo);
|
|
251
|
+
const digest = await briefFromReceipts(objects, site.tenantId, normalizedRepo);
|
|
252
|
+
const [active = null] = await objects.listObjects(site.tenantId, 'project_brief', newestActive(normalizedRepo));
|
|
253
|
+
return saveObject(objects, PROJECT_BRIEF, site, refreshWrite(normalizedRepo, digest, active));
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=project-briefs.js.map
|
|
@@ -21,8 +21,11 @@
|
|
|
21
21
|
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
22
22
|
* closed (retired). Export renders ACTIVE skills only.
|
|
23
23
|
*/
|
|
24
|
-
import {
|
|
25
|
-
|
|
24
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
25
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
26
|
+
import type { Skill, SkillStatus } from '../store/object-types.js';
|
|
27
|
+
import type { Objects } from '../store/port.js';
|
|
28
|
+
export type { Skill, SkillStatus } from '../store/object-types.js';
|
|
26
29
|
export declare const VALID_SKILL_STATES: ReadonlySet<SkillStatus>;
|
|
27
30
|
/** Field caps (untrusted at the HTTP/SDK boundary). instructions is a body, so a
|
|
28
31
|
* larger cap than the 4096 short-field convention. */
|
|
@@ -32,26 +35,6 @@ export declare const MAX_SKILL_TRIGGER_LEN = 1024;
|
|
|
32
35
|
/** Aggregate bound on a single export render so the export body is never unbounded.
|
|
33
36
|
* Realistic active-skill counts are tens; 1000 is a generous bound. */
|
|
34
37
|
export declare const MAX_EXPORT_SKILLS = 1000;
|
|
35
|
-
export interface Skill {
|
|
36
|
-
id: number;
|
|
37
|
-
/** Nullable: ON DELETE SET NULL lets memory deletion proceed without breaking
|
|
38
|
-
* the skill row. */
|
|
39
|
-
memoryId: string | null;
|
|
40
|
-
tenantId: string;
|
|
41
|
-
skillName: string;
|
|
42
|
-
instructions: string;
|
|
43
|
-
/** Optional "when to apply"; stored in the trigger_text column. */
|
|
44
|
-
trigger: string | null;
|
|
45
|
-
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
46
|
-
version: number;
|
|
47
|
-
status: SkillStatus;
|
|
48
|
-
supersededBy: number | null;
|
|
49
|
-
supersededAt: string | null;
|
|
50
|
-
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
51
|
-
changeSummary: string | null;
|
|
52
|
-
closedAt: string | null;
|
|
53
|
-
createdAt: string;
|
|
54
|
-
}
|
|
55
38
|
export interface SaveSkillOpts {
|
|
56
39
|
skillName: string;
|
|
57
40
|
instructions: string;
|
|
@@ -70,17 +53,17 @@ export interface ListSkillsOpts {
|
|
|
70
53
|
/** Resume after this row: the position the previous page ended on. */
|
|
71
54
|
after?: KeysetPosition;
|
|
72
55
|
}
|
|
56
|
+
export declare const SKILL: SavableDescriptor<'skill', SaveSkillOpts>;
|
|
73
57
|
/**
|
|
74
58
|
* Create a skill (or a new version that supersedes an existing one). Writes the
|
|
75
|
-
* memory mirror + the skills row
|
|
59
|
+
* memory mirror + the skills row in the `objects` store group's one transaction. When
|
|
76
60
|
* supersedesSkillId is given, the referenced ACTIVE row is preflighted (status +
|
|
77
|
-
* version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same
|
|
61
|
+
* version) BEFORE the INSERT, then CAS-UPDATEd -> superseded in the same transaction;
|
|
78
62
|
* the new version = predecessor.version + 1 (server-derived).
|
|
79
63
|
*/
|
|
80
64
|
export declare function saveSkill(hippoRoot: string, tenantId: string, opts: SaveSkillOpts, actor?: string): Skill;
|
|
81
65
|
/**
|
|
82
|
-
* Close (retire) an active skill.
|
|
83
|
-
* distinguishes not-found from not-active. A superseded row is terminal.
|
|
66
|
+
* Close (retire) an active skill. A superseded row is terminal.
|
|
84
67
|
*/
|
|
85
68
|
export declare function closeSkill(hippoRoot: string, tenantId: string, id: number, actor?: string): Skill;
|
|
86
69
|
export declare function loadSkillById(hippoRoot: string, tenantId: string, id: number): Skill | null;
|
|
@@ -98,4 +81,6 @@ export declare function loadActiveSkills(hippoRoot: string, tenantId: string, op
|
|
|
98
81
|
* active rows; each field is capped on save, so the rendered string is bounded.
|
|
99
82
|
*/
|
|
100
83
|
export declare function exportSkills(hippoRoot: string, tenantId: string): string;
|
|
84
|
+
/** `exportSkills` over a served store's group. */
|
|
85
|
+
export declare function skillsMarkdown(objects: Objects, tenantId: string): Promise<string>;
|
|
101
86
|
//# sourceMappingURL=skills.d.ts.map
|