@ag-eco/agentplate-cli 0.13.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/LICENSE +21 -0
- package/README.md +462 -0
- package/agents/ap-co-creation.md +90 -0
- package/agents/builder.md +144 -0
- package/agents/coordinator.md +377 -0
- package/agents/lead.md +435 -0
- package/agents/merger.md +164 -0
- package/agents/monitor.md +214 -0
- package/agents/orchestrator.md +239 -0
- package/agents/reviewer.md +140 -0
- package/agents/scout.md +125 -0
- package/agents/supervisor.md +427 -0
- package/package.json +66 -0
- package/src/agents/capabilities.test.ts +85 -0
- package/src/agents/capabilities.ts +125 -0
- package/src/agents/checkpoint.test.ts +88 -0
- package/src/agents/checkpoint.ts +101 -0
- package/src/agents/copilot-hooks-deployer.test.ts +162 -0
- package/src/agents/copilot-hooks-deployer.ts +93 -0
- package/src/agents/guard-rules.test.ts +372 -0
- package/src/agents/guard-rules.ts +97 -0
- package/src/agents/headless-mail-injector.test.ts +709 -0
- package/src/agents/headless-mail-injector.ts +377 -0
- package/src/agents/headless-prompt.test.ts +102 -0
- package/src/agents/headless-prompt.ts +68 -0
- package/src/agents/hooks-deployer.test.ts +3119 -0
- package/src/agents/hooks-deployer.ts +804 -0
- package/src/agents/identity.test.ts +604 -0
- package/src/agents/identity.ts +384 -0
- package/src/agents/lifecycle.test.ts +196 -0
- package/src/agents/lifecycle.ts +183 -0
- package/src/agents/mail-poll-detect.test.ts +153 -0
- package/src/agents/mail-poll-detect.ts +73 -0
- package/src/agents/manifest.test.ts +1026 -0
- package/src/agents/manifest.ts +376 -0
- package/src/agents/overlay.test.ts +1058 -0
- package/src/agents/overlay.ts +490 -0
- package/src/agents/scope-detect.test.ts +190 -0
- package/src/agents/scope-detect.ts +146 -0
- package/src/agents/turn-lock.test.ts +181 -0
- package/src/agents/turn-lock.ts +235 -0
- package/src/agents/turn-runner-dispatch.test.ts +182 -0
- package/src/agents/turn-runner-dispatch.ts +105 -0
- package/src/agents/turn-runner.test.ts +2312 -0
- package/src/agents/turn-runner.ts +1383 -0
- package/src/beads/client.test.ts +217 -0
- package/src/beads/client.ts +230 -0
- package/src/beads/molecules.test.ts +338 -0
- package/src/beads/molecules.ts +198 -0
- package/src/commands/agents.test.ts +328 -0
- package/src/commands/agents.ts +299 -0
- package/src/commands/clean.test.ts +797 -0
- package/src/commands/clean.ts +791 -0
- package/src/commands/completions.test.ts +348 -0
- package/src/commands/completions.ts +981 -0
- package/src/commands/coordinator.test.ts +2975 -0
- package/src/commands/coordinator.ts +1841 -0
- package/src/commands/costs.test.ts +1183 -0
- package/src/commands/costs.ts +599 -0
- package/src/commands/dashboard.test.ts +954 -0
- package/src/commands/dashboard.ts +1212 -0
- package/src/commands/discover.test.ts +288 -0
- package/src/commands/discover.ts +202 -0
- package/src/commands/doctor.test.ts +303 -0
- package/src/commands/doctor.ts +311 -0
- package/src/commands/ecosystem.test.ts +226 -0
- package/src/commands/ecosystem.ts +248 -0
- package/src/commands/errors.test.ts +654 -0
- package/src/commands/errors.ts +197 -0
- package/src/commands/feed.test.ts +709 -0
- package/src/commands/feed.ts +260 -0
- package/src/commands/group.test.ts +475 -0
- package/src/commands/group.ts +546 -0
- package/src/commands/hooks.test.ts +458 -0
- package/src/commands/hooks.ts +263 -0
- package/src/commands/init.test.ts +1011 -0
- package/src/commands/init.ts +967 -0
- package/src/commands/inspect.test.ts +1239 -0
- package/src/commands/inspect.ts +648 -0
- package/src/commands/log.test.ts +1913 -0
- package/src/commands/log.ts +958 -0
- package/src/commands/logs.test.ts +801 -0
- package/src/commands/logs.ts +483 -0
- package/src/commands/mail.test.ts +1501 -0
- package/src/commands/mail.ts +848 -0
- package/src/commands/merge.test.ts +864 -0
- package/src/commands/merge.ts +381 -0
- package/src/commands/metrics.test.ts +458 -0
- package/src/commands/metrics.ts +129 -0
- package/src/commands/monitor.test.ts +191 -0
- package/src/commands/monitor.ts +409 -0
- package/src/commands/nudge.test.ts +579 -0
- package/src/commands/nudge.ts +646 -0
- package/src/commands/orchestrator.ts +42 -0
- package/src/commands/prime.test.ts +612 -0
- package/src/commands/prime.ts +359 -0
- package/src/commands/replay.test.ts +757 -0
- package/src/commands/replay.ts +231 -0
- package/src/commands/run.test.ts +469 -0
- package/src/commands/run.ts +353 -0
- package/src/commands/serve/agent-actions.test.ts +210 -0
- package/src/commands/serve/agent-actions.ts +192 -0
- package/src/commands/serve/build.test.ts +202 -0
- package/src/commands/serve/build.ts +206 -0
- package/src/commands/serve/coordinator-actions.test.ts +339 -0
- package/src/commands/serve/coordinator-actions.ts +410 -0
- package/src/commands/serve/dev.test.ts +168 -0
- package/src/commands/serve/dev.ts +117 -0
- package/src/commands/serve/mail-actions.test.ts +312 -0
- package/src/commands/serve/mail-actions.ts +167 -0
- package/src/commands/serve/rest.test.ts +1680 -0
- package/src/commands/serve/rest.ts +1130 -0
- package/src/commands/serve/static.ts +51 -0
- package/src/commands/serve/ws.test.ts +361 -0
- package/src/commands/serve/ws.ts +332 -0
- package/src/commands/serve.test.ts +459 -0
- package/src/commands/serve.ts +654 -0
- package/src/commands/sling.test.ts +1583 -0
- package/src/commands/sling.ts +1351 -0
- package/src/commands/spec.test.ts +179 -0
- package/src/commands/spec.ts +105 -0
- package/src/commands/status.test.ts +614 -0
- package/src/commands/status.ts +403 -0
- package/src/commands/stop.test.ts +964 -0
- package/src/commands/stop.ts +319 -0
- package/src/commands/supervisor.test.ts +185 -0
- package/src/commands/supervisor.ts +537 -0
- package/src/commands/trace.test.ts +762 -0
- package/src/commands/trace.ts +205 -0
- package/src/commands/update.test.ts +466 -0
- package/src/commands/update.ts +263 -0
- package/src/commands/upgrade.test.ts +48 -0
- package/src/commands/upgrade.ts +240 -0
- package/src/commands/watch.test.ts +257 -0
- package/src/commands/watch.ts +308 -0
- package/src/commands/worktree.test.ts +1297 -0
- package/src/commands/worktree.ts +451 -0
- package/src/config.test.ts +1535 -0
- package/src/config.ts +1064 -0
- package/src/doctor/agents.test.ts +523 -0
- package/src/doctor/agents.ts +399 -0
- package/src/doctor/config-check.test.ts +191 -0
- package/src/doctor/config-check.ts +183 -0
- package/src/doctor/consistency.test.ts +807 -0
- package/src/doctor/consistency.ts +347 -0
- package/src/doctor/databases.test.ts +350 -0
- package/src/doctor/databases.ts +243 -0
- package/src/doctor/dependencies.test.ts +296 -0
- package/src/doctor/dependencies.ts +272 -0
- package/src/doctor/ecosystem.test.ts +308 -0
- package/src/doctor/ecosystem.ts +156 -0
- package/src/doctor/logs.test.ts +253 -0
- package/src/doctor/logs.ts +295 -0
- package/src/doctor/merge-queue.test.ts +315 -0
- package/src/doctor/merge-queue.ts +167 -0
- package/src/doctor/providers.test.ts +409 -0
- package/src/doctor/providers.ts +250 -0
- package/src/doctor/serve.test.ts +95 -0
- package/src/doctor/serve.ts +86 -0
- package/src/doctor/structure.test.ts +423 -0
- package/src/doctor/structure.ts +285 -0
- package/src/doctor/types.ts +43 -0
- package/src/doctor/version.test.ts +241 -0
- package/src/doctor/version.ts +132 -0
- package/src/doctor/watchdog.test.ts +167 -0
- package/src/doctor/watchdog.ts +214 -0
- package/src/e2e/init-sling-lifecycle.test.ts +283 -0
- package/src/errors.test.ts +350 -0
- package/src/errors.ts +217 -0
- package/src/events/store.test.ts +660 -0
- package/src/events/store.ts +369 -0
- package/src/events/tailer.test.ts +719 -0
- package/src/events/tailer.ts +332 -0
- package/src/events/tool-filter.test.ts +330 -0
- package/src/events/tool-filter.ts +126 -0
- package/src/index.ts +533 -0
- package/src/insights/analyzer.test.ts +466 -0
- package/src/insights/analyzer.ts +203 -0
- package/src/insights/quality-gates.test.ts +141 -0
- package/src/insights/quality-gates.ts +156 -0
- package/src/json.test.ts +72 -0
- package/src/json.ts +53 -0
- package/src/loam/client.test.ts +752 -0
- package/src/loam/client.ts +664 -0
- package/src/logging/color.test.ts +252 -0
- package/src/logging/color.ts +105 -0
- package/src/logging/format.test.ts +110 -0
- package/src/logging/format.ts +255 -0
- package/src/logging/logger.test.ts +814 -0
- package/src/logging/logger.ts +266 -0
- package/src/logging/reporter.test.ts +259 -0
- package/src/logging/reporter.ts +110 -0
- package/src/logging/sanitizer.test.ts +190 -0
- package/src/logging/sanitizer.ts +57 -0
- package/src/logging/theme.ts +140 -0
- package/src/mail/broadcast.test.ts +204 -0
- package/src/mail/broadcast.ts +92 -0
- package/src/mail/client.test.ts +774 -0
- package/src/mail/client.ts +236 -0
- package/src/mail/store.test.ts +898 -0
- package/src/mail/store.ts +425 -0
- package/src/merge/lock.test.ts +149 -0
- package/src/merge/lock.ts +140 -0
- package/src/merge/predict.test.ts +387 -0
- package/src/merge/predict.ts +249 -0
- package/src/merge/queue.test.ts +426 -0
- package/src/merge/queue.ts +246 -0
- package/src/merge/resolver.test.ts +1993 -0
- package/src/merge/resolver.ts +926 -0
- package/src/metrics/pricing.test.ts +258 -0
- package/src/metrics/pricing.ts +135 -0
- package/src/metrics/store.test.ts +978 -0
- package/src/metrics/store.ts +501 -0
- package/src/metrics/summary.test.ts +398 -0
- package/src/metrics/summary.ts +178 -0
- package/src/metrics/transcript.test.ts +483 -0
- package/src/metrics/transcript.ts +114 -0
- package/src/runtimes/__fixtures__/claude-stream-fixture.ts +22 -0
- package/src/runtimes/aider.test.ts +124 -0
- package/src/runtimes/aider.ts +147 -0
- package/src/runtimes/amp.test.ts +164 -0
- package/src/runtimes/amp.ts +154 -0
- package/src/runtimes/claude.test.ts +1474 -0
- package/src/runtimes/claude.ts +579 -0
- package/src/runtimes/codex.test.ts +805 -0
- package/src/runtimes/codex.ts +273 -0
- package/src/runtimes/connections.test.ts +214 -0
- package/src/runtimes/connections.ts +103 -0
- package/src/runtimes/copilot.test.ts +707 -0
- package/src/runtimes/copilot.ts +316 -0
- package/src/runtimes/cursor.test.ts +497 -0
- package/src/runtimes/cursor.ts +205 -0
- package/src/runtimes/gemini.test.ts +537 -0
- package/src/runtimes/gemini.ts +243 -0
- package/src/runtimes/goose.test.ts +133 -0
- package/src/runtimes/goose.ts +157 -0
- package/src/runtimes/headless-connection.test.ts +264 -0
- package/src/runtimes/headless-connection.ts +158 -0
- package/src/runtimes/opencode.test.ts +325 -0
- package/src/runtimes/opencode.ts +188 -0
- package/src/runtimes/pi-guards.test.ts +486 -0
- package/src/runtimes/pi-guards.ts +367 -0
- package/src/runtimes/pi.test.ts +789 -0
- package/src/runtimes/pi.ts +305 -0
- package/src/runtimes/registry.test.ts +196 -0
- package/src/runtimes/registry.ts +99 -0
- package/src/runtimes/sapling.test.ts +1267 -0
- package/src/runtimes/sapling.ts +710 -0
- package/src/runtimes/types.ts +266 -0
- package/src/schema-consistency.test.ts +246 -0
- package/src/sessions/compat.test.ts +281 -0
- package/src/sessions/compat.ts +105 -0
- package/src/sessions/store.test.ts +1748 -0
- package/src/sessions/store.ts +858 -0
- package/src/test-helpers.test.ts +124 -0
- package/src/test-helpers.ts +145 -0
- package/src/test-setup.test.ts +31 -0
- package/src/test-setup.ts +28 -0
- package/src/tools/loam/api.ts +368 -0
- package/src/tools/loam/cli.ts +278 -0
- package/src/tools/loam/commands/add.ts +52 -0
- package/src/tools/loam/commands/archive.ts +214 -0
- package/src/tools/loam/commands/audit.ts +276 -0
- package/src/tools/loam/commands/compact.ts +1062 -0
- package/src/tools/loam/commands/completions.ts +79 -0
- package/src/tools/loam/commands/config.ts +381 -0
- package/src/tools/loam/commands/delete-domain.ts +121 -0
- package/src/tools/loam/commands/delete.ts +316 -0
- package/src/tools/loam/commands/diff.ts +200 -0
- package/src/tools/loam/commands/doctor.ts +1113 -0
- package/src/tools/loam/commands/edit.ts +226 -0
- package/src/tools/loam/commands/init.ts +31 -0
- package/src/tools/loam/commands/learn.ts +179 -0
- package/src/tools/loam/commands/move.ts +323 -0
- package/src/tools/loam/commands/onboard.ts +374 -0
- package/src/tools/loam/commands/outcome.ts +185 -0
- package/src/tools/loam/commands/prime.ts +688 -0
- package/src/tools/loam/commands/prune.ts +614 -0
- package/src/tools/loam/commands/query.ts +218 -0
- package/src/tools/loam/commands/rank.ts +180 -0
- package/src/tools/loam/commands/ready.ts +189 -0
- package/src/tools/loam/commands/record.ts +1210 -0
- package/src/tools/loam/commands/restore.ts +166 -0
- package/src/tools/loam/commands/search.ts +327 -0
- package/src/tools/loam/commands/setup.ts +887 -0
- package/src/tools/loam/commands/status.ts +103 -0
- package/src/tools/loam/commands/sync.ts +298 -0
- package/src/tools/loam/commands/update.ts +19 -0
- package/src/tools/loam/commands/upgrade.ts +93 -0
- package/src/tools/loam/commands/validate.ts +190 -0
- package/src/tools/loam/index.ts +62 -0
- package/src/tools/loam/log.ts +127 -0
- package/src/tools/loam/registry/builtins.ts +409 -0
- package/src/tools/loam/registry/custom.ts +431 -0
- package/src/tools/loam/registry/init.ts +55 -0
- package/src/tools/loam/registry/template.ts +40 -0
- package/src/tools/loam/registry/type-registry.ts +113 -0
- package/src/tools/loam/schemas/config-schema.ts +489 -0
- package/src/tools/loam/schemas/config.ts +245 -0
- package/src/tools/loam/schemas/index.ts +18 -0
- package/src/tools/loam/schemas/record-schema.ts +191 -0
- package/src/tools/loam/schemas/record.ts +115 -0
- package/src/tools/loam/utils/active-work.ts +205 -0
- package/src/tools/loam/utils/anchor-validity.ts +80 -0
- package/src/tools/loam/utils/archive.ts +146 -0
- package/src/tools/loam/utils/audit.ts +667 -0
- package/src/tools/loam/utils/bm25.ts +238 -0
- package/src/tools/loam/utils/budget.ts +142 -0
- package/src/tools/loam/utils/config.ts +344 -0
- package/src/tools/loam/utils/dir-anchors.ts +62 -0
- package/src/tools/loam/utils/domain-rules.ts +114 -0
- package/src/tools/loam/utils/expertise.ts +393 -0
- package/src/tools/loam/utils/format-helpers.ts +96 -0
- package/src/tools/loam/utils/format.ts +1234 -0
- package/src/tools/loam/utils/git-context.ts +50 -0
- package/src/tools/loam/utils/git.ts +183 -0
- package/src/tools/loam/utils/hooks.ts +299 -0
- package/src/tools/loam/utils/index.ts +52 -0
- package/src/tools/loam/utils/json-output.ts +13 -0
- package/src/tools/loam/utils/lock.ts +76 -0
- package/src/tools/loam/utils/markers.ts +48 -0
- package/src/tools/loam/utils/numeric-flags.ts +20 -0
- package/src/tools/loam/utils/palette.ts +44 -0
- package/src/tools/loam/utils/prime-ranking.ts +135 -0
- package/src/tools/loam/utils/recipe-discovery.ts +195 -0
- package/src/tools/loam/utils/runtime-flags.ts +28 -0
- package/src/tools/loam/utils/scoring.ts +94 -0
- package/src/tools/loam/utils/version.ts +116 -0
- package/src/tools/sprout/commands/block.ts +64 -0
- package/src/tools/sprout/commands/blocked.ts +86 -0
- package/src/tools/sprout/commands/close.ts +129 -0
- package/src/tools/sprout/commands/completions.ts +198 -0
- package/src/tools/sprout/commands/config.ts +238 -0
- package/src/tools/sprout/commands/create.ts +164 -0
- package/src/tools/sprout/commands/dep.ts +148 -0
- package/src/tools/sprout/commands/doctor.ts +979 -0
- package/src/tools/sprout/commands/init.ts +83 -0
- package/src/tools/sprout/commands/label.ts +178 -0
- package/src/tools/sprout/commands/list.ts +210 -0
- package/src/tools/sprout/commands/migrate.ts +133 -0
- package/src/tools/sprout/commands/onboard.ts +207 -0
- package/src/tools/sprout/commands/plan-show.ts +278 -0
- package/src/tools/sprout/commands/plan.ts +2526 -0
- package/src/tools/sprout/commands/prime.ts +399 -0
- package/src/tools/sprout/commands/ready.ts +245 -0
- package/src/tools/sprout/commands/search.ts +221 -0
- package/src/tools/sprout/commands/show.ts +277 -0
- package/src/tools/sprout/commands/stats.ts +146 -0
- package/src/tools/sprout/commands/sync.ts +134 -0
- package/src/tools/sprout/commands/tpl.ts +364 -0
- package/src/tools/sprout/commands/unblock.ts +115 -0
- package/src/tools/sprout/commands/update.ts +257 -0
- package/src/tools/sprout/commands/upgrade.ts +91 -0
- package/src/tools/sprout/config-schema.ts +152 -0
- package/src/tools/sprout/config.ts +355 -0
- package/src/tools/sprout/filter.ts +107 -0
- package/src/tools/sprout/format.ts +43 -0
- package/src/tools/sprout/id.ts +22 -0
- package/src/tools/sprout/index.ts +204 -0
- package/src/tools/sprout/log.ts +76 -0
- package/src/tools/sprout/markers.ts +22 -0
- package/src/tools/sprout/output.ts +121 -0
- package/src/tools/sprout/plan-backref.ts +93 -0
- package/src/tools/sprout/plan-context.ts +81 -0
- package/src/tools/sprout/plan-domain.ts +139 -0
- package/src/tools/sprout/plan-lifecycle.ts +65 -0
- package/src/tools/sprout/plan-loam.ts +207 -0
- package/src/tools/sprout/plan-schema.ts +209 -0
- package/src/tools/sprout/sort.ts +31 -0
- package/src/tools/sprout/store.ts +172 -0
- package/src/tools/sprout/types.ts +118 -0
- package/src/tools/sprout/validation.ts +119 -0
- package/src/tools/sprout/version.ts +1 -0
- package/src/tools/sprout/yaml.ts +387 -0
- package/src/tools/trellis/commands/archive.ts +87 -0
- package/src/tools/trellis/commands/completions.ts +610 -0
- package/src/tools/trellis/commands/config.ts +382 -0
- package/src/tools/trellis/commands/create.ts +252 -0
- package/src/tools/trellis/commands/diff.ts +150 -0
- package/src/tools/trellis/commands/doctor.ts +771 -0
- package/src/tools/trellis/commands/emit.ts +365 -0
- package/src/tools/trellis/commands/history.ts +83 -0
- package/src/tools/trellis/commands/import.ts +198 -0
- package/src/tools/trellis/commands/init.ts +81 -0
- package/src/tools/trellis/commands/list.ts +103 -0
- package/src/tools/trellis/commands/onboard.ts +156 -0
- package/src/tools/trellis/commands/pin.ts +172 -0
- package/src/tools/trellis/commands/prime.ts +193 -0
- package/src/tools/trellis/commands/render.ts +122 -0
- package/src/tools/trellis/commands/schema.ts +353 -0
- package/src/tools/trellis/commands/show.ts +115 -0
- package/src/tools/trellis/commands/stats.ts +65 -0
- package/src/tools/trellis/commands/sync.ts +112 -0
- package/src/tools/trellis/commands/tree.ts +123 -0
- package/src/tools/trellis/commands/update.ts +330 -0
- package/src/tools/trellis/commands/upgrade.ts +95 -0
- package/src/tools/trellis/commands/validate.ts +166 -0
- package/src/tools/trellis/config-schema.ts +81 -0
- package/src/tools/trellis/config.ts +108 -0
- package/src/tools/trellis/frontmatter.ts +348 -0
- package/src/tools/trellis/id.ts +24 -0
- package/src/tools/trellis/index.ts +209 -0
- package/src/tools/trellis/markers.ts +28 -0
- package/src/tools/trellis/output.ts +84 -0
- package/src/tools/trellis/render.ts +212 -0
- package/src/tools/trellis/store.ts +144 -0
- package/src/tools/trellis/types.ts +82 -0
- package/src/tools/trellis/validate.ts +199 -0
- package/src/tools/trellis/yaml.ts +309 -0
- package/src/tracker/beads.test.ts +454 -0
- package/src/tracker/beads.ts +56 -0
- package/src/tracker/factory.test.ts +90 -0
- package/src/tracker/factory.ts +65 -0
- package/src/tracker/sprout.test.ts +461 -0
- package/src/tracker/sprout.ts +182 -0
- package/src/tracker/types.ts +52 -0
- package/src/trellis/client.test.ts +107 -0
- package/src/trellis/client.ts +179 -0
- package/src/types.ts +970 -0
- package/src/utils/bin.test.ts +10 -0
- package/src/utils/bin.ts +37 -0
- package/src/utils/browser.test.ts +49 -0
- package/src/utils/browser.ts +48 -0
- package/src/utils/fs.test.ts +119 -0
- package/src/utils/fs.ts +62 -0
- package/src/utils/pid.test.ts +152 -0
- package/src/utils/pid.ts +130 -0
- package/src/utils/process-scan.test.ts +53 -0
- package/src/utils/process-scan.ts +76 -0
- package/src/utils/time.test.ts +43 -0
- package/src/utils/time.ts +37 -0
- package/src/utils/version.test.ts +33 -0
- package/src/utils/version.ts +70 -0
- package/src/version.ts +5 -0
- package/src/watchdog/daemon.test.ts +3721 -0
- package/src/watchdog/daemon.ts +1257 -0
- package/src/watchdog/health.test.ts +830 -0
- package/src/watchdog/health.ts +434 -0
- package/src/watchdog/triage.test.ts +205 -0
- package/src/watchdog/triage.ts +205 -0
- package/src/worktree/manager.test.ts +720 -0
- package/src/worktree/manager.ts +405 -0
- package/src/worktree/process.test.ts +172 -0
- package/src/worktree/process.ts +131 -0
- package/src/worktree/tmux.test.ts +1616 -0
- package/src/worktree/tmux.ts +721 -0
- package/templates/CLAUDE.md.tmpl +100 -0
- package/templates/copilot-hooks.json.tmpl +13 -0
- package/templates/hooks.json.tmpl +109 -0
- package/templates/overlay.md.tmpl +88 -0
- package/ui/dist/apple-touch-icon-bdy6teep.png +0 -0
- package/ui/dist/chunk-8s31f05k.css +1 -0
- package/ui/dist/chunk-vm5rz679.js +300 -0
- package/ui/dist/favicon-nzb39vza.svg +4 -0
- package/ui/dist/index.html +17 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
export type PrimeMode = "manifest" | "full";
|
|
2
|
+
|
|
3
|
+
// Session-close footer styles. Audit (V1_PLAN §3) found 70-80% of conventions
|
|
4
|
+
// were ritual restatements driven by an earlier "you MUST run this checklist"
|
|
5
|
+
// prose; the v0.10.0 reframing dropped it for `conditional`. `directive` ships
|
|
6
|
+
// a numbered imperative + type glossary + anti-filler guardrails for projects
|
|
7
|
+
// that need a louder voice. `minimal` is a one-line nudge. `none` suppresses
|
|
8
|
+
// the footer entirely. `custom` (via SessionCloseConfig.custom) wins over
|
|
9
|
+
// style and ships the raw string verbatim.
|
|
10
|
+
export type SessionCloseStyleName = "directive" | "conditional" | "minimal" | "none";
|
|
11
|
+
|
|
12
|
+
export const DEFAULT_SESSION_CLOSE_STYLE: SessionCloseStyleName = "conditional";
|
|
13
|
+
|
|
14
|
+
export interface SessionCloseConfig {
|
|
15
|
+
style?: SessionCloseStyleName;
|
|
16
|
+
custom?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const DEFAULT_SEARCH_BOOST_FACTOR = 0.1;
|
|
20
|
+
|
|
21
|
+
// Trust-tier ranking weights for `lm prime` full-mode output (v0.10 slice 3).
|
|
22
|
+
// Sort score = stars * star_weight + classification_weight. Higher scores are
|
|
23
|
+
// surfaced first; ties preserve insertion order so within-tier output stays
|
|
24
|
+
// stable across runs.
|
|
25
|
+
export interface PrimeTierWeights {
|
|
26
|
+
star?: number;
|
|
27
|
+
foundational?: number;
|
|
28
|
+
tactical?: number;
|
|
29
|
+
observational?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export const DEFAULT_PRIME_TIER_WEIGHTS: Required<PrimeTierWeights> = {
|
|
33
|
+
star: 100,
|
|
34
|
+
foundational: 50,
|
|
35
|
+
tactical: 20,
|
|
36
|
+
observational: 10,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export const DEFAULT_HOOK_TIMEOUT_MS = 5_000;
|
|
40
|
+
|
|
41
|
+
// Lifecycle events. `pre-*` hooks block on non-zero exit. `pre-record`,
|
|
42
|
+
// `pre-prime`, and `pre-compact` may mutate the payload via stdout JSON;
|
|
43
|
+
// `pre-prune` is block-or-allow only (its stdout is ignored, so a hook cannot
|
|
44
|
+
// reshape the candidate set). `post-*` hooks are observation-only: a non-zero
|
|
45
|
+
// exit emits a warning but never fails the parent command.
|
|
46
|
+
export type HookEvent = "pre-record" | "post-record" | "pre-prime" | "pre-prune" | "pre-compact";
|
|
47
|
+
|
|
48
|
+
export const HOOK_EVENTS: readonly HookEvent[] = [
|
|
49
|
+
"pre-record",
|
|
50
|
+
"post-record",
|
|
51
|
+
"pre-prime",
|
|
52
|
+
"pre-prune",
|
|
53
|
+
"pre-compact",
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
export type HooksConfig = Partial<Record<HookEvent, string[]>>;
|
|
57
|
+
|
|
58
|
+
export type CustomCompactStrategy = "concat" | "merge_outcomes" | "keep_latest" | "manual";
|
|
59
|
+
|
|
60
|
+
export interface CustomTypeConfig {
|
|
61
|
+
// Inherit required/optional/dedup_key/id_key/summary/compact/section_title/
|
|
62
|
+
// extracts_files/files_field from a built-in type. Custom-from-custom is not
|
|
63
|
+
// supported in v1. When set, all other fields override only what differs;
|
|
64
|
+
// arrays merge as a union.
|
|
65
|
+
extends?: string;
|
|
66
|
+
required?: string[];
|
|
67
|
+
optional?: string[];
|
|
68
|
+
dedup_key?: string;
|
|
69
|
+
id_key?: string;
|
|
70
|
+
summary?: string;
|
|
71
|
+
extracts_files?: boolean;
|
|
72
|
+
files_field?: string;
|
|
73
|
+
compact?: CustomCompactStrategy;
|
|
74
|
+
section_title?: string;
|
|
75
|
+
// Map canonical (current) field name to legacy aliases. Records on disk that
|
|
76
|
+
// carry a legacy field are rewritten to the canonical name at read time.
|
|
77
|
+
aliases?: Record<string, string[]>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Per-domain configuration. `allowed_types` gates which registered record
|
|
81
|
+
// types may be written into the domain — empty/missing means all registered
|
|
82
|
+
// types are allowed (back-compat). `required_fields` lists additional
|
|
83
|
+
// top-level fields a record must carry on top of its per-type requirements;
|
|
84
|
+
// empty/missing means no extra requirements.
|
|
85
|
+
export interface DomainConfig {
|
|
86
|
+
allowed_types?: string[];
|
|
87
|
+
required_fields?: string[];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface AnchorValidityConfig {
|
|
91
|
+
threshold?: number;
|
|
92
|
+
grace_days?: number;
|
|
93
|
+
weight?: number;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface DecayConfig {
|
|
97
|
+
anchor_validity?: AnchorValidityConfig;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const DEFAULT_ANCHOR_VALIDITY_THRESHOLD = 0.5;
|
|
101
|
+
export const DEFAULT_ANCHOR_VALIDITY_GRACE_DAYS = 7;
|
|
102
|
+
|
|
103
|
+
// `lm audit` thresholds. PASS/WARN/FAIL bands for the three primary corpus
|
|
104
|
+
// health metrics. Defaults relaxed from the Python prototype per V1_PLAN §4.2
|
|
105
|
+
// ("0.7 evidence coverage is empirically unreachable today"). All knobs are
|
|
106
|
+
// overridable globally under `audit.thresholds` and per-domain under
|
|
107
|
+
// `audit.per_domain.<name>` — partial overrides are merged on top of defaults.
|
|
108
|
+
export interface AuditThresholds {
|
|
109
|
+
evidence_coverage?: number; // PASS ≥, default 0.5
|
|
110
|
+
evidence_coverage_warn?: number; // WARN ≥, default 0.3 (below = FAIL)
|
|
111
|
+
floater_max?: number; // PASS ≤ (fraction of records), default 0.2
|
|
112
|
+
rule_density_min?: number; // PASS ≥, default 0.25
|
|
113
|
+
rule_density_warn?: number; // WARN ≥, default 0.15 (below = FAIL)
|
|
114
|
+
max_records_per_domain?: number; // PASS ≤, default 200 (matches governance.hard_limit)
|
|
115
|
+
max_stale?: number; // PASS ≤ stale-record count, default 0
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface AuditConfig {
|
|
119
|
+
thresholds?: AuditThresholds;
|
|
120
|
+
// Domains excluded from audit metrics entirely (e.g. reference-doc domains
|
|
121
|
+
// that are legitimately convention-heavy and evidence-light).
|
|
122
|
+
ignore_domains?: string[];
|
|
123
|
+
// Per-domain threshold overrides. Each value is merged on top of the global
|
|
124
|
+
// thresholds for that domain only — keys not declared fall back to the global.
|
|
125
|
+
per_domain?: Record<string, AuditThresholds>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export const DEFAULT_AUDIT_THRESHOLDS: Required<AuditThresholds> = {
|
|
129
|
+
evidence_coverage: 0.5,
|
|
130
|
+
evidence_coverage_warn: 0.3,
|
|
131
|
+
floater_max: 0.2,
|
|
132
|
+
rule_density_min: 0.25,
|
|
133
|
+
rule_density_warn: 0.15,
|
|
134
|
+
max_records_per_domain: 200,
|
|
135
|
+
max_stale: 0,
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export function resolveAuditThresholds(
|
|
139
|
+
cfg: AuditConfig | undefined,
|
|
140
|
+
domain?: string,
|
|
141
|
+
): Required<AuditThresholds> {
|
|
142
|
+
const global = { ...DEFAULT_AUDIT_THRESHOLDS, ...(cfg?.thresholds ?? {}) };
|
|
143
|
+
if (!domain) return global;
|
|
144
|
+
const override = cfg?.per_domain?.[domain];
|
|
145
|
+
if (!override) return global;
|
|
146
|
+
return { ...global, ...override };
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Range-check decay.anchor_validity knobs. Returns a list of human-readable
|
|
151
|
+
* error strings (empty when valid). Caught at command-time (e.g. `lm prune
|
|
152
|
+
* --check-anchors`) so a misconfigured threshold/grace doesn't silently produce
|
|
153
|
+
* wrong demotion decisions:
|
|
154
|
+
* - threshold < 0 or > 1: validFraction is in [0, 1], so out-of-range values
|
|
155
|
+
* either always-decay (threshold > 1) or never-decay (threshold < 0).
|
|
156
|
+
* - grace_days < 0: every record passes the grace check, so brand-new records
|
|
157
|
+
* can decay before their anchors stabilize.
|
|
158
|
+
* - non-finite numbers (NaN/Infinity): YAML accepts `.nan` / `.inf` literals
|
|
159
|
+
* that bypass the type check.
|
|
160
|
+
*/
|
|
161
|
+
export function validateAnchorValidityConfig(cfg: AnchorValidityConfig): string[] {
|
|
162
|
+
const errors: string[] = [];
|
|
163
|
+
const t = cfg.threshold;
|
|
164
|
+
if (t !== undefined) {
|
|
165
|
+
if (typeof t !== "number" || !Number.isFinite(t)) {
|
|
166
|
+
errors.push(`threshold must be a finite number (got ${JSON.stringify(t)})`);
|
|
167
|
+
} else if (t < 0 || t > 1) {
|
|
168
|
+
errors.push(`threshold must be between 0 and 1 (got ${t})`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const g = cfg.grace_days;
|
|
172
|
+
if (g !== undefined) {
|
|
173
|
+
if (typeof g !== "number" || !Number.isFinite(g)) {
|
|
174
|
+
errors.push(`grace_days must be a finite number (got ${JSON.stringify(g)})`);
|
|
175
|
+
} else if (g < 0) {
|
|
176
|
+
errors.push(`grace_days must be >= 0 (got ${g})`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return errors;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface LoamConfig {
|
|
183
|
+
version: string;
|
|
184
|
+
domains: Record<string, DomainConfig>;
|
|
185
|
+
governance: {
|
|
186
|
+
max_entries: number;
|
|
187
|
+
warn_entries: number;
|
|
188
|
+
hard_limit: number;
|
|
189
|
+
};
|
|
190
|
+
classification_defaults: {
|
|
191
|
+
shelf_life: {
|
|
192
|
+
tactical: number;
|
|
193
|
+
observational: number;
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
prime?: {
|
|
197
|
+
default_mode?: PrimeMode;
|
|
198
|
+
// Trust-tier ranking weights. Each knob is optional; unset fields fall
|
|
199
|
+
// back to DEFAULT_PRIME_TIER_WEIGHTS so projects can tune one dimension
|
|
200
|
+
// (e.g. observational only) without redeclaring the whole block.
|
|
201
|
+
tier_weights?: PrimeTierWeights;
|
|
202
|
+
// Session-close footer customization. `style` selects a built-in preset
|
|
203
|
+
// (directive / conditional / minimal / none); `custom` overrides the
|
|
204
|
+
// preset entirely with verbatim prose. Both are optional — unset means
|
|
205
|
+
// DEFAULT_SESSION_CLOSE_STYLE ("conditional", v0.10.0 back-compat).
|
|
206
|
+
session_close?: SessionCloseConfig;
|
|
207
|
+
};
|
|
208
|
+
search?: {
|
|
209
|
+
// Multiplier applied to BM25 scores via applyConfirmationBoost. 0 disables.
|
|
210
|
+
boost_factor: number;
|
|
211
|
+
};
|
|
212
|
+
custom_types?: Record<string, CustomTypeConfig>;
|
|
213
|
+
// Decay knobs. R-05f wires `anchor_validity` into `lm prune --check-anchors`;
|
|
214
|
+
// `weight` is reserved for the future R-05g fitness blend and otherwise unused.
|
|
215
|
+
decay?: DecayConfig;
|
|
216
|
+
// `lm audit` thresholds and ignore-list. See AuditConfig.
|
|
217
|
+
audit?: AuditConfig;
|
|
218
|
+
// Names of registered types (built-in or custom) that emit a deprecation
|
|
219
|
+
// warning on write. Reads still succeed; the type stays in CLI choices.
|
|
220
|
+
disabled_types?: string[];
|
|
221
|
+
// Lifecycle hook scripts. Each event maps to an ordered array of shell
|
|
222
|
+
// commands. Loam invokes each script with the relevant payload as JSON on
|
|
223
|
+
// stdin. See HookEvent for semantics.
|
|
224
|
+
hooks?: HooksConfig;
|
|
225
|
+
// Per-hook execution settings. `timeout_ms` defaults to DEFAULT_HOOK_TIMEOUT_MS.
|
|
226
|
+
hook_settings?: {
|
|
227
|
+
timeout_ms?: number;
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export const DEFAULT_CONFIG: LoamConfig = {
|
|
232
|
+
version: "1",
|
|
233
|
+
domains: {},
|
|
234
|
+
governance: {
|
|
235
|
+
max_entries: 100,
|
|
236
|
+
warn_entries: 150,
|
|
237
|
+
hard_limit: 200,
|
|
238
|
+
},
|
|
239
|
+
classification_defaults: {
|
|
240
|
+
shelf_life: {
|
|
241
|
+
tactical: 14,
|
|
242
|
+
observational: 30,
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type { LoamConfig } from "./config.ts";
|
|
2
|
+
export { DEFAULT_CONFIG } from "./config.ts";
|
|
3
|
+
export { configSchema } from "./config-schema.ts";
|
|
4
|
+
export type {
|
|
5
|
+
BuiltinRecordType,
|
|
6
|
+
Classification,
|
|
7
|
+
ConventionRecord,
|
|
8
|
+
DecisionRecord,
|
|
9
|
+
Evidence,
|
|
10
|
+
ExpertiseRecord,
|
|
11
|
+
FailureRecord,
|
|
12
|
+
GuideRecord,
|
|
13
|
+
Outcome,
|
|
14
|
+
PatternRecord,
|
|
15
|
+
RecordType,
|
|
16
|
+
ReferenceRecord,
|
|
17
|
+
} from "./record.ts";
|
|
18
|
+
export { recordSchema } from "./record-schema.ts";
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
const linkArray = {
|
|
2
|
+
type: "array",
|
|
3
|
+
items: { type: "string", pattern: "^([a-z0-9-]+:)?mx-[0-9a-f]{4,8}$" },
|
|
4
|
+
} as const;
|
|
5
|
+
|
|
6
|
+
const dirAnchorArray = {
|
|
7
|
+
type: "array",
|
|
8
|
+
items: { type: "string" },
|
|
9
|
+
} as const;
|
|
10
|
+
|
|
11
|
+
export const recordSchema = {
|
|
12
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
13
|
+
title: "Loam Expertise Record",
|
|
14
|
+
description: "A single expertise record in a Loam domain file",
|
|
15
|
+
type: "object",
|
|
16
|
+
definitions: {
|
|
17
|
+
classification: {
|
|
18
|
+
type: "string",
|
|
19
|
+
enum: ["foundational", "tactical", "observational"],
|
|
20
|
+
},
|
|
21
|
+
evidence: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
commit: { type: "string" },
|
|
25
|
+
date: { type: "string" },
|
|
26
|
+
issue: { type: "string" },
|
|
27
|
+
file: { type: "string" },
|
|
28
|
+
bead: { type: "string" },
|
|
29
|
+
sprout: { type: "string" },
|
|
30
|
+
gh: { type: "string" },
|
|
31
|
+
linear: { type: "string" },
|
|
32
|
+
},
|
|
33
|
+
additionalProperties: false,
|
|
34
|
+
},
|
|
35
|
+
outcome: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {
|
|
38
|
+
status: { type: "string", enum: ["success", "failure", "partial"] },
|
|
39
|
+
duration: { type: "number" },
|
|
40
|
+
test_results: { type: "string" },
|
|
41
|
+
agent: { type: "string" },
|
|
42
|
+
notes: { type: "string" },
|
|
43
|
+
recorded_at: { type: "string" },
|
|
44
|
+
},
|
|
45
|
+
required: ["status"],
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
oneOf: [
|
|
50
|
+
{
|
|
51
|
+
type: "object",
|
|
52
|
+
properties: {
|
|
53
|
+
id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
|
|
54
|
+
type: { type: "string", const: "convention" },
|
|
55
|
+
content: { type: "string" },
|
|
56
|
+
classification: { $ref: "#/definitions/classification" },
|
|
57
|
+
recorded_at: { type: "string" },
|
|
58
|
+
evidence: { $ref: "#/definitions/evidence" },
|
|
59
|
+
tags: { type: "array", items: { type: "string" } },
|
|
60
|
+
relates_to: linkArray,
|
|
61
|
+
supersedes: linkArray,
|
|
62
|
+
outcomes: { type: "array", items: { $ref: "#/definitions/outcome" } },
|
|
63
|
+
dir_anchors: dirAnchorArray,
|
|
64
|
+
supersession_demoted_at: { type: "string" },
|
|
65
|
+
anchor_decay_demoted_at: { type: "string" },
|
|
66
|
+
owner: { type: "string" },
|
|
67
|
+
status: { type: "string", enum: ["draft", "active", "deprecated"] },
|
|
68
|
+
},
|
|
69
|
+
required: ["type", "content", "classification", "recorded_at"],
|
|
70
|
+
additionalProperties: false,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: "object",
|
|
74
|
+
properties: {
|
|
75
|
+
id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
|
|
76
|
+
type: { type: "string", const: "pattern" },
|
|
77
|
+
name: { type: "string" },
|
|
78
|
+
description: { type: "string" },
|
|
79
|
+
files: { type: "array", items: { type: "string" } },
|
|
80
|
+
classification: { $ref: "#/definitions/classification" },
|
|
81
|
+
recorded_at: { type: "string" },
|
|
82
|
+
evidence: { $ref: "#/definitions/evidence" },
|
|
83
|
+
tags: { type: "array", items: { type: "string" } },
|
|
84
|
+
relates_to: linkArray,
|
|
85
|
+
supersedes: linkArray,
|
|
86
|
+
outcomes: { type: "array", items: { $ref: "#/definitions/outcome" } },
|
|
87
|
+
dir_anchors: dirAnchorArray,
|
|
88
|
+
supersession_demoted_at: { type: "string" },
|
|
89
|
+
anchor_decay_demoted_at: { type: "string" },
|
|
90
|
+
owner: { type: "string" },
|
|
91
|
+
status: { type: "string", enum: ["draft", "active", "deprecated"] },
|
|
92
|
+
},
|
|
93
|
+
required: ["type", "name", "description", "classification", "recorded_at"],
|
|
94
|
+
additionalProperties: false,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
type: "object",
|
|
98
|
+
properties: {
|
|
99
|
+
id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
|
|
100
|
+
type: { type: "string", const: "failure" },
|
|
101
|
+
description: { type: "string" },
|
|
102
|
+
resolution: { type: "string" },
|
|
103
|
+
classification: { $ref: "#/definitions/classification" },
|
|
104
|
+
recorded_at: { type: "string" },
|
|
105
|
+
evidence: { $ref: "#/definitions/evidence" },
|
|
106
|
+
tags: { type: "array", items: { type: "string" } },
|
|
107
|
+
relates_to: linkArray,
|
|
108
|
+
supersedes: linkArray,
|
|
109
|
+
outcomes: { type: "array", items: { $ref: "#/definitions/outcome" } },
|
|
110
|
+
dir_anchors: dirAnchorArray,
|
|
111
|
+
supersession_demoted_at: { type: "string" },
|
|
112
|
+
anchor_decay_demoted_at: { type: "string" },
|
|
113
|
+
owner: { type: "string" },
|
|
114
|
+
status: { type: "string", enum: ["draft", "active", "deprecated"] },
|
|
115
|
+
},
|
|
116
|
+
required: ["type", "description", "resolution", "classification", "recorded_at"],
|
|
117
|
+
additionalProperties: false,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: "object",
|
|
121
|
+
properties: {
|
|
122
|
+
id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
|
|
123
|
+
type: { type: "string", const: "decision" },
|
|
124
|
+
title: { type: "string" },
|
|
125
|
+
rationale: { type: "string" },
|
|
126
|
+
date: { type: "string" },
|
|
127
|
+
classification: { $ref: "#/definitions/classification" },
|
|
128
|
+
recorded_at: { type: "string" },
|
|
129
|
+
evidence: { $ref: "#/definitions/evidence" },
|
|
130
|
+
tags: { type: "array", items: { type: "string" } },
|
|
131
|
+
relates_to: linkArray,
|
|
132
|
+
supersedes: linkArray,
|
|
133
|
+
outcomes: { type: "array", items: { $ref: "#/definitions/outcome" } },
|
|
134
|
+
dir_anchors: dirAnchorArray,
|
|
135
|
+
supersession_demoted_at: { type: "string" },
|
|
136
|
+
anchor_decay_demoted_at: { type: "string" },
|
|
137
|
+
owner: { type: "string" },
|
|
138
|
+
status: { type: "string", enum: ["draft", "active", "deprecated"] },
|
|
139
|
+
},
|
|
140
|
+
required: ["type", "title", "rationale", "classification", "recorded_at"],
|
|
141
|
+
additionalProperties: false,
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: "object",
|
|
145
|
+
properties: {
|
|
146
|
+
id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
|
|
147
|
+
type: { type: "string", const: "reference" },
|
|
148
|
+
name: { type: "string" },
|
|
149
|
+
description: { type: "string" },
|
|
150
|
+
files: { type: "array", items: { type: "string" } },
|
|
151
|
+
classification: { $ref: "#/definitions/classification" },
|
|
152
|
+
recorded_at: { type: "string" },
|
|
153
|
+
evidence: { $ref: "#/definitions/evidence" },
|
|
154
|
+
tags: { type: "array", items: { type: "string" } },
|
|
155
|
+
relates_to: linkArray,
|
|
156
|
+
supersedes: linkArray,
|
|
157
|
+
outcomes: { type: "array", items: { $ref: "#/definitions/outcome" } },
|
|
158
|
+
dir_anchors: dirAnchorArray,
|
|
159
|
+
supersession_demoted_at: { type: "string" },
|
|
160
|
+
anchor_decay_demoted_at: { type: "string" },
|
|
161
|
+
owner: { type: "string" },
|
|
162
|
+
status: { type: "string", enum: ["draft", "active", "deprecated"] },
|
|
163
|
+
},
|
|
164
|
+
required: ["type", "name", "description", "classification", "recorded_at"],
|
|
165
|
+
additionalProperties: false,
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
type: "object",
|
|
169
|
+
properties: {
|
|
170
|
+
id: { type: "string", pattern: "^mx-[0-9a-f]{4,8}$" },
|
|
171
|
+
type: { type: "string", const: "guide" },
|
|
172
|
+
name: { type: "string" },
|
|
173
|
+
description: { type: "string" },
|
|
174
|
+
classification: { $ref: "#/definitions/classification" },
|
|
175
|
+
recorded_at: { type: "string" },
|
|
176
|
+
evidence: { $ref: "#/definitions/evidence" },
|
|
177
|
+
tags: { type: "array", items: { type: "string" } },
|
|
178
|
+
relates_to: linkArray,
|
|
179
|
+
supersedes: linkArray,
|
|
180
|
+
outcomes: { type: "array", items: { $ref: "#/definitions/outcome" } },
|
|
181
|
+
dir_anchors: dirAnchorArray,
|
|
182
|
+
supersession_demoted_at: { type: "string" },
|
|
183
|
+
anchor_decay_demoted_at: { type: "string" },
|
|
184
|
+
owner: { type: "string" },
|
|
185
|
+
status: { type: "string", enum: ["draft", "active", "deprecated"] },
|
|
186
|
+
},
|
|
187
|
+
required: ["type", "name", "description", "classification", "recorded_at"],
|
|
188
|
+
additionalProperties: false,
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
} as const;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export type BuiltinRecordType =
|
|
2
|
+
| "convention"
|
|
3
|
+
| "pattern"
|
|
4
|
+
| "failure"
|
|
5
|
+
| "decision"
|
|
6
|
+
| "reference"
|
|
7
|
+
| "guide";
|
|
8
|
+
|
|
9
|
+
// Phase 2: widened to string so config-declared custom types are first-class.
|
|
10
|
+
// Use `BuiltinRecordType` for narrowing back to the six known shapes (e.g.,
|
|
11
|
+
// `registry.get(r.type)?.kind === "builtin"` then cast to a builtin record).
|
|
12
|
+
export type RecordType = string;
|
|
13
|
+
|
|
14
|
+
export type Classification = "foundational" | "tactical" | "observational";
|
|
15
|
+
|
|
16
|
+
export interface Evidence {
|
|
17
|
+
commit?: string;
|
|
18
|
+
date?: string;
|
|
19
|
+
issue?: string;
|
|
20
|
+
file?: string;
|
|
21
|
+
bead?: string;
|
|
22
|
+
sprout?: string;
|
|
23
|
+
gh?: string;
|
|
24
|
+
linear?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface Outcome {
|
|
28
|
+
status: "success" | "failure" | "partial";
|
|
29
|
+
duration?: number;
|
|
30
|
+
test_results?: string;
|
|
31
|
+
agent?: string;
|
|
32
|
+
notes?: string;
|
|
33
|
+
recorded_at?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface BaseRecord {
|
|
37
|
+
id?: string;
|
|
38
|
+
classification: Classification;
|
|
39
|
+
recorded_at: string;
|
|
40
|
+
evidence?: Evidence;
|
|
41
|
+
tags?: string[];
|
|
42
|
+
relates_to?: string[];
|
|
43
|
+
supersedes?: string[];
|
|
44
|
+
outcomes?: Outcome[];
|
|
45
|
+
dir_anchors?: string[];
|
|
46
|
+
// R-06 ownership: opaque handle (e.g. "@user" or "@team"). Stamped by the
|
|
47
|
+
// owner-resolution chain at write time (loam-41e1) and consumed by
|
|
48
|
+
// `lm review` (loam-8cce). No internal validation in v1.
|
|
49
|
+
owner?: string;
|
|
50
|
+
// Lifecycle status. "draft" / "active" / "deprecated" are author-set on
|
|
51
|
+
// live records; "archived" is set by `lm prune` soft-archive (lives only
|
|
52
|
+
// under .loam/archive/<domain>.jsonl) and the live AJV schemas reject it.
|
|
53
|
+
status?: "draft" | "active" | "deprecated" | "archived";
|
|
54
|
+
archived_at?: string;
|
|
55
|
+
// Set by `archiveRecords` on every code path that moves a record to
|
|
56
|
+
// .loam/archive/. Convention values: "stale" | "superseded" |
|
|
57
|
+
// "anchor_decay" | "manual" | "compacted"; a free-text suffix is permitted
|
|
58
|
+
// (e.g. "manual: wrong domain"). Optional for back-compat with archives
|
|
59
|
+
// written before loam-b41a landed; lives only on archived records.
|
|
60
|
+
archive_reason?: string;
|
|
61
|
+
// Set by `lm prune` when supersession decay (R-05e) demotes a record one
|
|
62
|
+
// classification tier. Lives on the record across the demotion until
|
|
63
|
+
// archive; bumped each pass that re-demotes.
|
|
64
|
+
supersession_demoted_at?: string;
|
|
65
|
+
// Set by `lm prune --check-anchors` when anchor-validity decay (R-05f)
|
|
66
|
+
// demotes a record one tier because too many of its file/dir anchors no
|
|
67
|
+
// longer resolve. Bumped each pass that re-demotes.
|
|
68
|
+
anchor_decay_demoted_at?: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface ConventionRecord extends BaseRecord {
|
|
72
|
+
type: "convention";
|
|
73
|
+
content: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface PatternRecord extends BaseRecord {
|
|
77
|
+
type: "pattern";
|
|
78
|
+
name: string;
|
|
79
|
+
description: string;
|
|
80
|
+
files?: string[];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface FailureRecord extends BaseRecord {
|
|
84
|
+
type: "failure";
|
|
85
|
+
description: string;
|
|
86
|
+
resolution: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export interface DecisionRecord extends BaseRecord {
|
|
90
|
+
type: "decision";
|
|
91
|
+
title: string;
|
|
92
|
+
rationale: string;
|
|
93
|
+
date?: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface ReferenceRecord extends BaseRecord {
|
|
97
|
+
type: "reference";
|
|
98
|
+
name: string;
|
|
99
|
+
description: string;
|
|
100
|
+
files?: string[];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface GuideRecord extends BaseRecord {
|
|
104
|
+
type: "guide";
|
|
105
|
+
name: string;
|
|
106
|
+
description: string;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export type ExpertiseRecord =
|
|
110
|
+
| ConventionRecord
|
|
111
|
+
| PatternRecord
|
|
112
|
+
| FailureRecord
|
|
113
|
+
| DecisionRecord
|
|
114
|
+
| ReferenceRecord
|
|
115
|
+
| GuideRecord;
|