agentera 3.0.0-dev.4 → 3.0.0-dev.41
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 +201 -0
- package/README.md +79 -22
- package/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/CHANGELOG.md +1261 -0
- package/bundle/DESIGN.md +229 -0
- package/bundle/LICENSE +201 -0
- package/bundle/README.md +136 -0
- package/bundle/UPGRADE.md +201 -0
- package/bundle/extract-corpus-parity.json +21 -0
- package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
- package/bundle/references/adapters/package-manifest-interface-model.yaml +42 -252
- package/bundle/references/adapters/package-publication.json +43 -0
- package/bundle/references/adapters/package-registry.yaml +20 -188
- package/bundle/references/adapters/package-surface-characterization.md +59 -48
- package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
- package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
- package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
- package/bundle/references/adapters/runtime-retired-resources.yaml +97 -0
- package/bundle/references/analysis/benchmark.md +10 -6
- package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
- package/bundle/references/analysis/startup-measurement-contract.yaml +37 -26
- package/bundle/references/analysis/verification-policy.yaml +143 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
- package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +2930 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/agent-ready-state-contract.yaml +133 -71
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +73 -33
- package/bundle/references/cli/bundle-skill-vocabulary.yaml +12 -49
- package/bundle/references/cli/capability-instruction-contract.yaml +96 -58
- package/bundle/references/cli/capability-instruction-structure.md +144 -0
- package/bundle/references/cli/capability-tool-classification.yaml +14 -14
- package/bundle/references/cli/coexistence-probe.yaml +13 -0
- package/bundle/references/cli/hybrid-route-contract.yaml +416 -0
- package/bundle/references/cli/parity-expected-actual-template.md +30 -0
- package/bundle/references/cli/prime-consumer-compatibility.yaml +701 -0
- package/bundle/references/cli/routing-execution-vocabulary.yaml +16 -38
- package/bundle/references/cli/routing-model.md +139 -0
- package/bundle/references/cli/single-name-protocol.yaml +42 -0
- package/bundle/references/cli/trigger-schema-enrichment.md +140 -0
- package/bundle/references/cli/update-channels.yaml +35 -2
- package/bundle/references/cli/upgrade-repair-wording.md +25 -0
- package/bundle/references/cli/v3-handoff-manifest.schema.yaml +97 -0
- package/bundle/references/cli/vocabulary-index.yaml +23 -18
- package/bundle/references/cli/vocabulary.md +341 -328
- package/bundle/references/meta/documentation-inventory.md +10 -3
- package/bundle/registry.json +14 -14
- package/bundle/skills/agentera/SKILL.md +202 -408
- package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
- package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
- package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
- package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
- package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
- package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
- package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +17 -17
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
- package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
- package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
- package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
- package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
- package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
- package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
- package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
- package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
- package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
- package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
- package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
- package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
- package/bundle/skills/agentera/protocol.yaml +31 -31
- package/bundle/skills/agentera/references/contract.md +387 -329
- package/bundle/skills/agentera/route-phrases.yaml +81 -0
- package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
- package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
- package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
- package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
- package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
- package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +419 -33
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +343 -31
- package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
- package/dist/analytics/extractCorpus/cli.js +191 -0
- package/dist/analytics/extractCorpus/cli.js.map +1 -0
- package/dist/analytics/extractCorpus/copilotSessions.js +276 -0
- package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/core.js +393 -0
- package/dist/analytics/extractCorpus/core.js.map +1 -0
- package/dist/analytics/extractCorpus/corpus.js +168 -0
- package/dist/analytics/extractCorpus/corpus.js.map +1 -0
- package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
- package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
- package/dist/analytics/extractCorpus/cursorSessions.js +426 -0
- package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js +604 -0
- package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js +106 -0
- package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
- package/dist/analytics/extractCorpus/filesystemSources.js +119 -0
- package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
- package/dist/analytics/extractCorpus/index.js +15 -0
- package/dist/analytics/extractCorpus/index.js.map +1 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js +205 -0
- package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
- package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
- package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
- package/dist/analytics/extractCorpus/tierReader.js +109 -0
- package/dist/analytics/extractCorpus/tierReader.js.map +1 -0
- package/dist/analytics/extractCorpus.js +2 -1790
- package/dist/analytics/extractCorpus.js.map +1 -1
- package/dist/analytics/glossaryAdviceResolution.js +167 -0
- package/dist/analytics/glossaryAdviceResolution.js.map +1 -0
- package/dist/analytics/glossaryInputAcquisition.js +320 -0
- package/dist/analytics/glossaryInputAcquisition.js.map +1 -0
- package/dist/analytics/personalGlossaryAdmission.js +134 -0
- package/dist/analytics/personalGlossaryAdmission.js.map +1 -0
- package/dist/analytics/personalGlossaryProfile.js +220 -0
- package/dist/analytics/personalGlossaryProfile.js.map +1 -0
- package/dist/analytics/profileSignals.js +212 -0
- package/dist/analytics/profileSignals.js.map +1 -0
- package/dist/analytics/usageStats.js +169 -41
- package/dist/analytics/usageStats.js.map +1 -1
- package/dist/audit/terminologyDrift.js +282 -0
- package/dist/audit/terminologyDrift.js.map +1 -0
- package/dist/bin/agentera.js +3 -1
- package/dist/bin/agentera.js.map +1 -1
- package/dist/capabilities/audit/instructions.js +17 -0
- package/dist/capabilities/audit/instructions.js.map +1 -0
- package/dist/capabilities/build/instructions.js +57 -0
- package/dist/capabilities/build/instructions.js.map +1 -0
- package/dist/capabilities/design/instructions.js +5 -0
- package/dist/capabilities/design/instructions.js.map +1 -0
- package/dist/capabilities/discuss/instructions.js +30 -0
- package/dist/capabilities/discuss/instructions.js.map +1 -0
- package/dist/capabilities/document/instructions.js +12 -0
- package/dist/capabilities/document/instructions.js.map +1 -0
- package/dist/capabilities/index.js +39 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/optimize/instructions.js +15 -0
- package/dist/capabilities/optimize/instructions.js.map +1 -0
- package/dist/capabilities/orchestrate/instructions.js +41 -0
- package/dist/capabilities/orchestrate/instructions.js.map +1 -0
- package/dist/capabilities/plan/instructions.js +33 -0
- package/dist/capabilities/plan/instructions.js.map +1 -0
- package/dist/capabilities/profile/instructions.js +71 -0
- package/dist/capabilities/profile/instructions.js.map +1 -0
- package/dist/capabilities/research/instructions.js +6 -0
- package/dist/capabilities/research/instructions.js.map +1 -0
- package/dist/capabilities/status/instructions.js +12 -0
- package/dist/capabilities/status/instructions.js.map +1 -0
- package/dist/capabilities/status/startupInstructions.js +39 -0
- package/dist/capabilities/status/startupInstructions.js.map +1 -0
- package/dist/capabilities/vision/instructions.js +5 -0
- package/dist/capabilities/vision/instructions.js.map +1 -0
- package/dist/cli/appContext.js +30 -23
- package/dist/cli/appContext.js.map +1 -1
- package/dist/cli/argvalidate.js.map +1 -1
- package/dist/cli/capabilityContext/benchmark.js +565 -0
- package/dist/cli/capabilityContext/benchmark.js.map +1 -0
- package/dist/cli/capabilityContext/bespoke.js +45 -0
- package/dist/cli/capabilityContext/bespoke.js.map +1 -0
- package/dist/cli/capabilityContext/build.js +244 -0
- package/dist/cli/capabilityContext/build.js.map +1 -0
- package/dist/cli/capabilityContext/closeout.js +235 -0
- package/dist/cli/capabilityContext/closeout.js.map +1 -0
- package/dist/cli/capabilityContext/contract.js +214 -0
- package/dist/cli/capabilityContext/contract.js.map +1 -0
- package/dist/cli/capabilityContext/evidence.js +465 -0
- package/dist/cli/capabilityContext/evidence.js.map +1 -0
- package/dist/cli/capabilityContext/index.js +4 -0
- package/dist/cli/capabilityContext/index.js.map +1 -0
- package/dist/cli/capabilityContext/orchestration.js +133 -0
- package/dist/cli/capabilityContext/orchestration.js.map +1 -0
- package/dist/cli/capabilityContext/planState.js +261 -0
- package/dist/cli/capabilityContext/planState.js.map +1 -0
- package/dist/cli/capabilityContext/progress.js +143 -0
- package/dist/cli/capabilityContext/progress.js.map +1 -0
- package/dist/cli/capabilityContext/projectVerification.js +410 -0
- package/dist/cli/capabilityContext/projectVerification.js.map +1 -0
- package/dist/cli/capabilityContext/shared.js +100 -0
- package/dist/cli/capabilityContext/shared.js.map +1 -0
- package/dist/cli/capabilityContext/slim.js +153 -0
- package/dist/cli/capabilityContext/slim.js.map +1 -0
- package/dist/cli/capabilityContext/startup.js +278 -0
- package/dist/cli/capabilityContext/startup.js.map +1 -0
- package/dist/cli/capabilityContext/types.js +56 -0
- package/dist/cli/capabilityContext/types.js.map +1 -0
- package/dist/cli/capabilityContext.js +1 -2420
- package/dist/cli/capabilityContext.js.map +1 -1
- package/dist/cli/commands/appHome.js +23 -0
- package/dist/cli/commands/appHome.js.map +1 -0
- package/dist/cli/commands/capability.js +3 -10
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/compact.js +41 -12
- package/dist/cli/commands/compact.js.map +1 -1
- package/dist/cli/commands/doctor.js +34 -99
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/durability.js +82 -0
- package/dist/cli/commands/durability.js.map +1 -0
- package/dist/cli/commands/entityMigrate.js +132 -0
- package/dist/cli/commands/entityMigrate.js.map +1 -0
- package/dist/cli/commands/glossaryAdvice.js +139 -0
- package/dist/cli/commands/glossaryAdvice.js.map +1 -0
- package/dist/cli/commands/lint.js +26 -43
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/personalGlossary.js +177 -0
- package/dist/cli/commands/personalGlossary.js.map +1 -0
- package/dist/cli/commands/prime/briefOrientation.js +808 -0
- package/dist/cli/commands/prime/briefOrientation.js.map +1 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
- package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -0
- package/dist/cli/commands/prime/bundleStatus.js +191 -0
- package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js +291 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -0
- package/dist/cli/commands/prime/collectOrientationState.js +178 -0
- package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
- package/dist/cli/commands/prime/orientationOutput.js +377 -0
- package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
- package/dist/cli/commands/prime/types.js +2 -0
- package/dist/cli/commands/prime/types.js.map +1 -0
- package/dist/cli/commands/prime/v1Migration.js +39 -0
- package/dist/cli/commands/prime/v1Migration.js.map +1 -0
- package/dist/cli/commands/prime.js +96 -556
- package/dist/cli/commands/prime.js.map +1 -1
- package/dist/cli/commands/profileGrounding.js +56 -0
- package/dist/cli/commands/profileGrounding.js.map +1 -0
- package/dist/cli/commands/query.js +77 -52
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/report.js +96 -24
- package/dist/cli/commands/report.js.map +1 -1
- package/dist/cli/commands/route.js +142 -0
- package/dist/cli/commands/route.js.map +1 -0
- package/dist/cli/commands/schema.js +258 -105
- package/dist/cli/commands/schema.js.map +1 -1
- package/dist/cli/commands/state/decisions.js +388 -0
- package/dist/cli/commands/state/decisions.js.map +1 -0
- package/dist/cli/commands/state/docs.js +71 -0
- package/dist/cli/commands/state/docs.js.map +1 -0
- package/dist/cli/commands/state/experimentRecords.js +152 -0
- package/dist/cli/commands/state/experimentRecords.js.map +1 -0
- package/dist/cli/commands/state/experiments.js +15 -0
- package/dist/cli/commands/state/experiments.js.map +1 -0
- package/dist/cli/commands/state/get.js +130 -0
- package/dist/cli/commands/state/get.js.map +1 -0
- package/dist/cli/commands/state/health.js +15 -0
- package/dist/cli/commands/state/health.js.map +1 -0
- package/dist/cli/commands/state/index.js +17 -0
- package/dist/cli/commands/state/index.js.map +1 -0
- package/dist/cli/commands/state/list.js +195 -0
- package/dist/cli/commands/state/list.js.map +1 -0
- package/dist/cli/commands/state/objective.js +26 -0
- package/dist/cli/commands/state/objective.js.map +1 -0
- package/dist/cli/commands/state/plan.js +15 -0
- package/dist/cli/commands/state/plan.js.map +1 -0
- package/dist/cli/commands/state/planTasks.js +155 -0
- package/dist/cli/commands/state/planTasks.js.map +1 -0
- package/dist/cli/commands/state/plans.js +155 -0
- package/dist/cli/commands/state/plans.js.map +1 -0
- package/dist/cli/commands/state/progress.js +14 -0
- package/dist/cli/commands/state/progress.js.map +1 -0
- package/dist/cli/commands/state/shared.js +15 -0
- package/dist/cli/commands/state/shared.js.map +1 -0
- package/dist/cli/commands/state/todo.js +43 -0
- package/dist/cli/commands/state/todo.js.map +1 -0
- package/dist/cli/commands/state/write.js +425 -0
- package/dist/cli/commands/state/write.js.map +1 -0
- package/dist/cli/commands/upgrade.js +146 -4
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/upgradeVerify.js +119 -0
- package/dist/cli/commands/upgradeVerify.js.map +1 -0
- package/dist/cli/commands/validate.js +173 -210
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/commands/verify.js +24 -8
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/contracts/bundleStatus.js +2 -0
- package/dist/cli/contracts/bundleStatus.js.map +1 -0
- package/dist/cli/contracts/orientationState.js +2 -0
- package/dist/cli/contracts/orientationState.js.map +1 -0
- package/dist/cli/dispatch/argvParser.js +33 -0
- package/dist/cli/dispatch/argvParser.js.map +1 -0
- package/dist/cli/dispatch/check.js +390 -0
- package/dist/cli/dispatch/check.js.map +1 -0
- package/dist/cli/dispatch/commands.js +27 -0
- package/dist/cli/dispatch/commands.js.map +1 -0
- package/dist/cli/dispatch/index.js +234 -0
- package/dist/cli/dispatch/index.js.map +1 -0
- package/dist/cli/dispatch/lifecycle.js +698 -0
- package/dist/cli/dispatch/lifecycle.js.map +1 -0
- package/dist/cli/dispatch/prime.js +140 -0
- package/dist/cli/dispatch/prime.js.map +1 -0
- package/dist/cli/dispatch/shared.js +64 -0
- package/dist/cli/dispatch/shared.js.map +1 -0
- package/dist/cli/dispatch/state.js +141 -0
- package/dist/cli/dispatch/state.js.map +1 -0
- package/dist/cli/dispatch.js +1 -995
- package/dist/cli/dispatch.js.map +1 -1
- package/dist/cli/errors.js +53 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/help.js +356 -30
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/migrationRequired.js +89 -0
- package/dist/cli/migrationRequired.js.map +1 -0
- package/dist/cli/orientation/attention.js +72 -0
- package/dist/cli/orientation/attention.js.map +1 -0
- package/dist/cli/orientation/corpusCoverage.js +103 -0
- package/dist/cli/orientation/corpusCoverage.js.map +1 -0
- package/dist/cli/orientation.js +443 -172
- package/dist/cli/orientation.js.map +1 -1
- package/dist/cli/planArtifacts.js +351 -0
- package/dist/cli/planArtifacts.js.map +1 -0
- package/dist/cli/planEvidence.js +158 -0
- package/dist/cli/planEvidence.js.map +1 -0
- package/dist/cli/planLifecycleState.js +36 -0
- package/dist/cli/planLifecycleState.js.map +1 -0
- package/dist/cli/planTaskIndex.js +12 -0
- package/dist/cli/planTaskIndex.js.map +1 -0
- package/dist/cli/prime-blob.js +70 -2
- package/dist/cli/prime-blob.js.map +1 -1
- package/dist/cli/profileAcquisition.js +168 -0
- package/dist/cli/profileAcquisition.js.map +1 -0
- package/dist/cli/startupCompletenessContract.js +60 -0
- package/dist/cli/startupCompletenessContract.js.map +1 -0
- package/dist/cli/stateQuery.js +63 -10
- package/dist/cli/stateQuery.js.map +1 -1
- package/dist/cli/structured.js.map +1 -1
- package/dist/cli/todoMarkdown.js +47 -0
- package/dist/cli/todoMarkdown.js.map +1 -0
- package/dist/cli/todoReadinessSelection.js +192 -0
- package/dist/cli/todoReadinessSelection.js.map +1 -0
- package/dist/cli/todoSeverity.js +19 -0
- package/dist/cli/todoSeverity.js.map +1 -0
- package/dist/core/atomicWriter.js +21 -0
- package/dist/core/atomicWriter.js.map +1 -0
- package/dist/core/difflib.js.map +1 -1
- package/dist/core/envPaths.js +21 -0
- package/dist/core/envPaths.js.map +1 -0
- package/dist/core/jsonValue.js +6 -0
- package/dist/core/jsonValue.js.map +1 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/pyjson.js +67 -2
- package/dist/core/pyjson.js.map +1 -1
- package/dist/core/shell.js +5 -0
- package/dist/core/shell.js.map +1 -0
- package/dist/core/skillIdentity.js +24 -0
- package/dist/core/skillIdentity.js.map +1 -0
- package/dist/core/sourceRoot.js.map +1 -1
- package/dist/core/text.js +11 -0
- package/dist/core/text.js.map +1 -0
- package/dist/core/toml.js.map +1 -1
- package/dist/core/yaml.js +8 -0
- package/dist/core/yaml.js.map +1 -1
- package/dist/eval/evalSkills.js +30 -25
- package/dist/eval/evalSkills.js.map +1 -1
- package/dist/eval/hybridRouteEvaluation.js +156 -0
- package/dist/eval/hybridRouteEvaluation.js.map +1 -0
- package/dist/eval/semanticEval.js +43 -19
- package/dist/eval/semanticEval.js.map +1 -1
- package/dist/eval/semanticFixtures.js +16 -4
- package/dist/eval/semanticFixtures.js.map +1 -1
- package/dist/hooks/common.js +10 -27
- package/dist/hooks/common.js.map +1 -1
- package/dist/hooks/compaction/apply.js +447 -0
- package/dist/hooks/compaction/apply.js.map +1 -0
- package/dist/hooks/compaction/dryRun.js +185 -0
- package/dist/hooks/compaction/dryRun.js.map +1 -0
- package/dist/hooks/compaction/index.js +23 -0
- package/dist/hooks/compaction/index.js.map +1 -0
- package/dist/hooks/compaction/parse.js +326 -0
- package/dist/hooks/compaction/parse.js.map +1 -0
- package/dist/hooks/compaction/retention.js +203 -0
- package/dist/hooks/compaction/retention.js.map +1 -0
- package/dist/hooks/compaction/status.js +361 -0
- package/dist/hooks/compaction/status.js.map +1 -0
- package/dist/hooks/compaction/types.js +6 -0
- package/dist/hooks/compaction/types.js.map +1 -0
- package/dist/hooks/cursorPreToolUse.js +1 -1
- package/dist/hooks/cursorPreToolUse.js.map +1 -1
- package/dist/hooks/cursorSessionStart.js +14 -21
- package/dist/hooks/cursorSessionStart.js.map +1 -1
- package/dist/hooks/projectHookInput.js +26 -0
- package/dist/hooks/projectHookInput.js.map +1 -0
- package/dist/hooks/sessionStart.js +55 -170
- package/dist/hooks/sessionStart.js.map +1 -1
- package/dist/hooks/sessionStop.js +12 -26
- package/dist/hooks/sessionStop.js.map +1 -1
- package/dist/hooks/validateArtifact/agentFacing.js +10 -0
- package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
- package/dist/hooks/validateArtifact/index.js +151 -0
- package/dist/hooks/validateArtifact/index.js.map +1 -0
- package/dist/hooks/validateArtifact/markdown.js +146 -0
- package/dist/hooks/validateArtifact/markdown.js.map +1 -0
- package/dist/hooks/validateArtifact/runtime.js +86 -0
- package/dist/hooks/validateArtifact/runtime.js.map +1 -0
- package/dist/hooks/validateArtifact/schema.js +547 -0
- package/dist/hooks/validateArtifact/schema.js.map +1 -0
- package/dist/hooks/validateArtifact/traversal.js +108 -0
- package/dist/hooks/validateArtifact/traversal.js.map +1 -0
- package/dist/hooks/validateArtifact/violations.js +108 -0
- package/dist/hooks/validateArtifact/violations.js.map +1 -0
- package/dist/migrate/v2HandoffManifest.js +455 -0
- package/dist/migrate/v2HandoffManifest.js.map +1 -0
- package/dist/registries/artifactProtocolIds.js +79 -0
- package/dist/registries/artifactProtocolIds.js.map +1 -0
- package/dist/registries/artifactRegistry.js +224 -62
- package/dist/registries/artifactRegistry.js.map +1 -1
- package/dist/registries/artifactSchemaProjection.js +46 -0
- package/dist/registries/artifactSchemaProjection.js.map +1 -0
- package/dist/registries/capabilityContract.js +141 -12
- package/dist/registries/capabilityContract.js.map +1 -1
- package/dist/registries/evaluatorHandoffContract.js +171 -0
- package/dist/registries/evaluatorHandoffContract.js.map +1 -0
- package/dist/registries/evidenceTierContract.js +372 -0
- package/dist/registries/evidenceTierContract.js.map +1 -0
- package/dist/registries/glossaryAdviceContract.js +79 -0
- package/dist/registries/glossaryAdviceContract.js.map +1 -0
- package/dist/registries/glossaryCaveatContract.js +68 -0
- package/dist/registries/glossaryCaveatContract.js.map +1 -0
- package/dist/registries/glossaryConsumerContractValidation.js +788 -0
- package/dist/registries/glossaryConsumerContractValidation.js.map +1 -0
- package/dist/registries/glossaryEntryContract.js +757 -0
- package/dist/registries/glossaryEntryContract.js.map +1 -0
- package/dist/registries/glossaryTermIdentity.js +18 -0
- package/dist/registries/glossaryTermIdentity.js.map +1 -0
- package/dist/registries/glossaryTermOccurrence.js +21 -0
- package/dist/registries/glossaryTermOccurrence.js.map +1 -0
- package/dist/registries/hybridRoute.js +203 -0
- package/dist/registries/hybridRoute.js.map +1 -0
- package/dist/registries/hybridRouteReceipt.js +221 -0
- package/dist/registries/hybridRouteReceipt.js.map +1 -0
- package/dist/registries/packageRegistry.js +90 -230
- package/dist/registries/packageRegistry.js.map +1 -1
- package/dist/registries/todoReadinessContract.js +449 -0
- package/dist/registries/todoReadinessContract.js.map +1 -0
- package/dist/registries/triggerLoader.js +175 -0
- package/dist/registries/triggerLoader.js.map +1 -0
- package/dist/registries/verbosityBudgetContract.js +206 -0
- package/dist/registries/verbosityBudgetContract.js.map +1 -0
- package/dist/release/releaseMetadata.js +319 -0
- package/dist/release/releaseMetadata.js.map +1 -0
- package/dist/runtime/lifecycleAdapterContract.js +458 -0
- package/dist/runtime/lifecycleAdapterContract.js.map +1 -0
- package/dist/runtime/lifecycleAdapters.js +778 -0
- package/dist/runtime/lifecycleAdapters.js.map +1 -0
- package/dist/runtime/lifecycleAuthority.js +454 -0
- package/dist/runtime/lifecycleAuthority.js.map +1 -0
- package/dist/runtime/lifecycleOperationContract.js +114 -0
- package/dist/runtime/lifecycleOperationContract.js.map +1 -0
- package/dist/runtime/lifecycleOperations.js +635 -0
- package/dist/runtime/lifecycleOperations.js.map +1 -0
- package/dist/runtime/lifecycleOwnershipJournal.js +623 -0
- package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -0
- package/dist/runtime/lifecyclePublication.js +416 -0
- package/dist/runtime/lifecyclePublication.js.map +1 -0
- package/dist/runtime/lifecycleSnapshot.js +439 -0
- package/dist/runtime/lifecycleSnapshot.js.map +1 -0
- package/dist/runtime/nativeResourceCleanup.js +317 -0
- package/dist/runtime/nativeResourceCleanup.js.map +1 -0
- package/dist/setup/codex/cli.js +130 -0
- package/dist/setup/codex/cli.js.map +1 -0
- package/dist/setup/codex/configToml.js +558 -0
- package/dist/setup/codex/configToml.js.map +1 -0
- package/dist/setup/codex/constants.js +14 -0
- package/dist/setup/codex/constants.js.map +1 -0
- package/dist/setup/codex/installRoot.js +64 -0
- package/dist/setup/codex/installRoot.js.map +1 -0
- package/dist/setup/codex/state.js +252 -0
- package/dist/setup/codex/state.js.map +1 -0
- package/dist/setup/codex.js +9 -1055
- package/dist/setup/codex.js.map +1 -1
- package/dist/setup/opencode.js +21 -0
- package/dist/setup/opencode.js.map +1 -0
- package/dist/setup/opencodeConstants.js +2 -0
- package/dist/setup/opencodeConstants.js.map +1 -0
- package/dist/setup/sharedSkill.js +46 -0
- package/dist/setup/sharedSkill.js.map +1 -0
- package/dist/setup/smokeChecks.js +24 -53
- package/dist/setup/smokeChecks.js.map +1 -1
- package/dist/state/archiveDiscovery.js +581 -0
- package/dist/state/archiveDiscovery.js.map +1 -0
- package/dist/state/archivePublication.js +226 -0
- package/dist/state/archivePublication.js.map +1 -0
- package/dist/state/archiveRecovery.js +238 -0
- package/dist/state/archiveRecovery.js.map +1 -0
- package/dist/state/archiveReplay.js +54 -0
- package/dist/state/archiveReplay.js.map +1 -0
- package/dist/state/canonicalMigrationRecord.js +37 -0
- package/dist/state/canonicalMigrationRecord.js.map +1 -0
- package/dist/state/changelog.js +222 -0
- package/dist/state/changelog.js.map +1 -0
- package/dist/state/decisionEntities.js +368 -0
- package/dist/state/decisionEntities.js.map +1 -0
- package/dist/state/decisionLegacyValidation.js +216 -0
- package/dist/state/decisionLegacyValidation.js.map +1 -0
- package/dist/state/decisionMigrationProvenance.js +200 -0
- package/dist/state/decisionMigrationProvenance.js.map +1 -0
- package/dist/state/decisionOverlay.js +255 -0
- package/dist/state/decisionOverlay.js.map +1 -0
- package/dist/state/decisionRevision.js +257 -0
- package/dist/state/decisionRevision.js.map +1 -0
- package/dist/state/decisionRevisionMigration.js +90 -0
- package/dist/state/decisionRevisionMigration.js.map +1 -0
- package/dist/state/directRetrieval.js +324 -0
- package/dist/state/directRetrieval.js.map +1 -0
- package/dist/state/durability.js +325 -0
- package/dist/state/durability.js.map +1 -0
- package/dist/state/entityCutover.js +294 -0
- package/dist/state/entityCutover.js.map +1 -0
- package/dist/state/entityCutoverGit.js +128 -0
- package/dist/state/entityCutoverGit.js.map +1 -0
- package/dist/state/entityGlossaryAuthority.js +14 -0
- package/dist/state/entityGlossaryAuthority.js.map +1 -0
- package/dist/state/entityListProjection.js +188 -0
- package/dist/state/entityListProjection.js.map +1 -0
- package/dist/state/entityListRuntimeRegistry.js +50 -0
- package/dist/state/entityListRuntimeRegistry.js.map +1 -0
- package/dist/state/entityMigrationCausality.js +99 -0
- package/dist/state/entityMigrationCausality.js.map +1 -0
- package/dist/state/entityMigrationIdentity.js +6 -0
- package/dist/state/entityMigrationIdentity.js.map +1 -0
- package/dist/state/entityMigrationPreview.js +884 -0
- package/dist/state/entityMigrationPreview.js.map +1 -0
- package/dist/state/entityPublicationContext.js +807 -0
- package/dist/state/entityPublicationContext.js.map +1 -0
- package/dist/state/entityRetrievalHelp.js +476 -0
- package/dist/state/entityRetrievalHelp.js.map +1 -0
- package/dist/state/entityStorage.js +897 -0
- package/dist/state/entityStorage.js.map +1 -0
- package/dist/state/exactReplacementRecovery.js +19 -0
- package/dist/state/exactReplacementRecovery.js.map +1 -0
- package/dist/state/experimentArchive.js +64 -0
- package/dist/state/experimentArchive.js.map +1 -0
- package/dist/state/experimentIdentity.js +203 -0
- package/dist/state/experimentIdentity.js.map +1 -0
- package/dist/state/healthEntities.js +263 -0
- package/dist/state/healthEntities.js.map +1 -0
- package/dist/state/healthEntityValidation.js +19 -0
- package/dist/state/healthEntityValidation.js.map +1 -0
- package/dist/state/healthRepair.js +70 -0
- package/dist/state/healthRepair.js.map +1 -0
- package/dist/state/installRoot.js +64 -24
- package/dist/state/installRoot.js.map +1 -1
- package/dist/state/legacyEntityCutoverEvidence.js +66 -0
- package/dist/state/legacyEntityCutoverEvidence.js.map +1 -0
- package/dist/state/legacyIdentity.js +48 -0
- package/dist/state/legacyIdentity.js.map +1 -0
- package/dist/state/legacySummaryRecord.js +7 -0
- package/dist/state/legacySummaryRecord.js.map +1 -0
- package/dist/state/listAccounting.js +55 -0
- package/dist/state/listAccounting.js.map +1 -0
- package/dist/state/listClassification.js +18 -0
- package/dist/state/listClassification.js.map +1 -0
- package/dist/state/listCursor.js +43 -0
- package/dist/state/listCursor.js.map +1 -0
- package/dist/state/listRetrieval.js +782 -0
- package/dist/state/listRetrieval.js.map +1 -0
- package/dist/state/migrationSourceBinding.js +31 -0
- package/dist/state/migrationSourceBinding.js.map +1 -0
- package/dist/state/objectiveExperimentEntities.js +323 -0
- package/dist/state/objectiveExperimentEntities.js.map +1 -0
- package/dist/state/planEntities.js +531 -0
- package/dist/state/planEntities.js.map +1 -0
- package/dist/state/planIdentity.js +48 -0
- package/dist/state/planIdentity.js.map +1 -0
- package/dist/state/planRetrieval.js +314 -0
- package/dist/state/planRetrieval.js.map +1 -0
- package/dist/state/planTaskRetrieval.js +295 -0
- package/dist/state/planTaskRetrieval.js.map +1 -0
- package/dist/state/progressEntities.js +513 -0
- package/dist/state/progressEntities.js.map +1 -0
- package/dist/state/progressGlossaryCaveat.js +169 -0
- package/dist/state/progressGlossaryCaveat.js.map +1 -0
- package/dist/state/progressPublicationOrder.js +20 -0
- package/dist/state/progressPublicationOrder.js.map +1 -0
- package/dist/state/projectRoot.js +63 -0
- package/dist/state/projectRoot.js.map +1 -0
- package/dist/state/projectionPolicy.js +191 -0
- package/dist/state/projectionPolicy.js.map +1 -0
- package/dist/state/retrievalAuthority.js +157 -0
- package/dist/state/retrievalAuthority.js.map +1 -0
- package/dist/state/safeProjectFile.js +156 -0
- package/dist/state/safeProjectFile.js.map +1 -0
- package/dist/state/startupAnalysis/benchmark.js +433 -0
- package/dist/state/startupAnalysis/benchmark.js.map +1 -0
- package/dist/state/startupAnalysis/contract.js +126 -0
- package/dist/state/startupAnalysis/contract.js.map +1 -0
- package/dist/state/startupAnalysis/helpers.js +287 -0
- package/dist/state/startupAnalysis/helpers.js.map +1 -0
- package/dist/state/startupAnalysis/index.js +7 -0
- package/dist/state/startupAnalysis/index.js.map +1 -0
- package/dist/state/startupAnalysis/metrics.js +341 -0
- package/dist/state/startupAnalysis/metrics.js.map +1 -0
- package/dist/state/startupAnalysis/records.js +199 -0
- package/dist/state/startupAnalysis/records.js.map +1 -0
- package/dist/state/startupAnalysis/report.js +112 -0
- package/dist/state/startupAnalysis/report.js.map +1 -0
- package/dist/state/startupAnalysis/threshold.js +513 -0
- package/dist/state/startupAnalysis/threshold.js.map +1 -0
- package/dist/state/startupAnalysis.js +2 -1952
- package/dist/state/startupAnalysis.js.map +1 -1
- package/dist/state/startupProjection.js +499 -0
- package/dist/state/startupProjection.js.map +1 -0
- package/dist/state/stateMode.js +86 -0
- package/dist/state/stateMode.js.map +1 -0
- package/dist/state/stateStorageAuthority.js +48 -0
- package/dist/state/stateStorageAuthority.js.map +1 -0
- package/dist/state/summaryEntityRead.js +26 -0
- package/dist/state/summaryEntityRead.js.map +1 -0
- package/dist/state/summaryMigrationProvenance.js +67 -0
- package/dist/state/summaryMigrationProvenance.js.map +1 -0
- package/dist/state/summarySourceRowAuthority.js +37 -0
- package/dist/state/summarySourceRowAuthority.js.map +1 -0
- package/dist/state/todoDocsEntities.js +986 -0
- package/dist/state/todoDocsEntities.js.map +1 -0
- package/dist/state/todoDocsEntityValidation.js +159 -0
- package/dist/state/todoDocsEntityValidation.js.map +1 -0
- package/dist/state/todoReconciliationActivation.js +63 -0
- package/dist/state/todoReconciliationActivation.js.map +1 -0
- package/dist/state/todoReconciliationTransaction.js +554 -0
- package/dist/state/todoReconciliationTransaction.js.map +1 -0
- package/dist/state/write/assign.js +21 -0
- package/dist/state/write/assign.js.map +1 -0
- package/dist/state/write/candidateMutation.js +270 -0
- package/dist/state/write/candidateMutation.js.map +1 -0
- package/dist/state/write/errors.js +12 -0
- package/dist/state/write/errors.js.map +1 -0
- package/dist/state/write/experimentPublication.js +193 -0
- package/dist/state/write/experimentPublication.js.map +1 -0
- package/dist/state/write/explain.js +333 -0
- package/dist/state/write/explain.js.map +1 -0
- package/dist/state/write/fields.js +62 -0
- package/dist/state/write/fields.js.map +1 -0
- package/dist/state/write/glossaryPublication.js +264 -0
- package/dist/state/write/glossaryPublication.js.map +1 -0
- package/dist/state/write/grammar.js +271 -0
- package/dist/state/write/grammar.js.map +1 -0
- package/dist/state/write/helpers.js +30 -0
- package/dist/state/write/helpers.js.map +1 -0
- package/dist/state/write/index.js +13 -0
- package/dist/state/write/index.js.map +1 -0
- package/dist/state/write/input.js +368 -0
- package/dist/state/write/input.js.map +1 -0
- package/dist/state/write/lock.js +838 -0
- package/dist/state/write/lock.js.map +1 -0
- package/dist/state/write/mutation.js +235 -0
- package/dist/state/write/mutation.js.map +1 -0
- package/dist/state/write/operations.js +170 -0
- package/dist/state/write/operations.js.map +1 -0
- package/dist/state/write/planEvaluation.js +129 -0
- package/dist/state/write/planEvaluation.js.map +1 -0
- package/dist/state/write/planPublication.js +180 -0
- package/dist/state/write/planPublication.js.map +1 -0
- package/dist/state/write/runtimeOperations.js +65 -0
- package/dist/state/write/runtimeOperations.js.map +1 -0
- package/dist/state/write/serialize.js +2 -0
- package/dist/state/write/serialize.js.map +1 -0
- package/dist/state/write/transaction.js +53 -0
- package/dist/state/write/transaction.js.map +1 -0
- package/dist/state/write/validate.js +8 -0
- package/dist/state/write/validate.js.map +1 -0
- package/dist/upgrade/appContentRefresh.js +384 -0
- package/dist/upgrade/appContentRefresh.js.map +1 -0
- package/dist/upgrade/appModel.js +8 -6
- package/dist/upgrade/appModel.js.map +1 -1
- package/dist/upgrade/atomicWriter.js +2 -0
- package/dist/upgrade/atomicWriter.js.map +1 -0
- package/dist/upgrade/bundleEvidence.js +34 -0
- package/dist/upgrade/bundleEvidence.js.map +1 -0
- package/dist/upgrade/channels.js +12 -7
- package/dist/upgrade/channels.js.map +1 -1
- package/dist/upgrade/coexistenceProbe.js +105 -0
- package/dist/upgrade/coexistenceProbe.js.map +1 -0
- package/dist/upgrade/compatibility.js +56 -20
- package/dist/upgrade/compatibility.js.map +1 -1
- package/dist/upgrade/doctor.js +197 -191
- package/dist/upgrade/doctor.js.map +1 -1
- package/dist/upgrade/doctorClassifier.js +188 -0
- package/dist/upgrade/doctorClassifier.js.map +1 -0
- package/dist/upgrade/installedHooksRetirement.js +197 -0
- package/dist/upgrade/installedHooksRetirement.js.map +1 -0
- package/dist/upgrade/legacyAgentCleanup.js +283 -0
- package/dist/upgrade/legacyAgentCleanup.js.map +1 -0
- package/dist/upgrade/lifecycleUpgrade.js +114 -0
- package/dist/upgrade/lifecycleUpgrade.js.map +1 -0
- package/dist/upgrade/migrateArtifactsV2ToV3.js +363 -137
- package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
- package/dist/upgrade/migrationPublication.js +123 -0
- package/dist/upgrade/migrationPublication.js.map +1 -0
- package/dist/upgrade/nextMajorDoctor.js +156 -0
- package/dist/upgrade/nextMajorDoctor.js.map +1 -0
- package/dist/upgrade/npxPlatformStatus.js +23 -0
- package/dist/upgrade/npxPlatformStatus.js.map +1 -0
- package/dist/upgrade/projectIntegration.js +142 -171
- package/dist/upgrade/projectIntegration.js.map +1 -1
- package/dist/upgrade/projectIntegrationDecision.js +51 -0
- package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
- package/dist/upgrade/runtimeMigration.js +336 -281
- package/dist/upgrade/runtimeMigration.js.map +1 -1
- package/dist/upgrade/upgradeCommands.js +9 -0
- package/dist/upgrade/upgradeCommands.js.map +1 -1
- package/dist/upgrade/upgradeLock.js +86 -0
- package/dist/upgrade/upgradeLock.js.map +1 -0
- package/dist/upgrade/upgradeOrchestrator.js +217 -56
- package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
- package/dist/upgrade/v3CapabilitySurface.js +15 -0
- package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
- package/dist/upgrade/versionResolution.js +12 -4
- package/dist/upgrade/versionResolution.js.map +1 -1
- package/dist/validate/appHomeContract.js +5 -9
- package/dist/validate/appHomeContract.js.map +1 -1
- package/dist/validate/capability.js +144 -14
- package/dist/validate/capability.js.map +1 -1
- package/dist/validate/crossCapability.js +15 -9
- package/dist/validate/crossCapability.js.map +1 -1
- package/dist/validate/selfAudit.js +73 -36
- package/dist/validate/selfAudit.js.map +1 -1
- package/dist/validate/v1LegacyCruft.js +141 -0
- package/dist/validate/v1LegacyCruft.js.map +1 -0
- package/dist/validate/vocabularyAuthority.js +305 -0
- package/dist/validate/vocabularyAuthority.js.map +1 -0
- package/package.json +46 -27
- package/bundle/references/adapters/cursor.md +0 -213
- package/bundle/references/adapters/opencode.md +0 -530
- package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
- package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
- package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
- package/bundle/references/adapters/runtime-feature-parity.md +0 -189
- package/bundle/references/v1-section-mapping.md +0 -47
- package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
- package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
- package/bundle/skills/agentera/agents/hej.toml +0 -6
- package/bundle/skills/agentera/agents/inspektera.toml +0 -6
- package/bundle/skills/agentera/agents/inspirera.toml +0 -6
- package/bundle/skills/agentera/agents/optimera.toml +0 -6
- package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
- package/bundle/skills/agentera/agents/planera.toml +0 -6
- package/bundle/skills/agentera/agents/profilera.toml +0 -6
- package/bundle/skills/agentera/agents/realisera.toml +0 -6
- package/bundle/skills/agentera/agents/resonera.toml +0 -6
- package/bundle/skills/agentera/agents/visionera.toml +0 -6
- package/bundle/skills/agentera/agents/visualisera.toml +0 -6
- package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
- package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
- package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
- package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
- package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
- package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
- package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
- package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
- package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
- package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
- package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
- package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
- package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
- package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
- package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
- package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
- package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
- package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
- package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
- package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
- package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
- package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
- package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
- package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
- package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
- package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
- package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
- package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
- package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
- package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
- package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
- package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
- package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
- package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
- package/bundle/skills/hej/SKILL.md +0 -69
- package/bundle/skills/hej/agents/hej.toml +0 -11
- package/bundle/skills/hej/agents/openai.yaml +0 -8
- package/dist/cli/commands/backfill.js +0 -84
- package/dist/cli/commands/backfill.js.map +0 -1
- package/dist/cli/commands/state.js +0 -1012
- package/dist/cli/commands/state.js.map +0 -1
- package/dist/core/git.js +0 -43
- package/dist/core/git.js.map +0 -1
- package/dist/hooks/compaction.js +0 -935
- package/dist/hooks/compaction.js.map +0 -1
- package/dist/hooks/validateArtifact.js +0 -933
- package/dist/hooks/validateArtifact.js.map +0 -1
- package/dist/registries/runtimeAdapterRegistry.js +0 -315
- package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
- package/dist/setup/copilot.js +0 -227
- package/dist/setup/copilot.js.map +0 -1
- package/dist/setup/cursor.js +0 -127
- package/dist/setup/cursor.js.map +0 -1
- package/dist/setup/doctor.js +0 -1297
- package/dist/setup/doctor.js.map +0 -1
- package/dist/state/progressCommit.js +0 -289
- package/dist/state/progressCommit.js.map +0 -1
- package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
- package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
- package/dist/validate/lifecycleAdapters.js +0 -772
- package/dist/validate/lifecycleAdapters.js.map +0 -1
- /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
- /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { docsPathOverridesFromBytes, loadArtifactRecord, resolveArtifactPath, } from "../registries/artifactRegistry.js";
|
|
3
|
+
import { ARTIFACT_PROTOCOL_PATHS } from "../registries/artifactProtocolIds.js";
|
|
4
|
+
import { validateRealProjectRoot } from "./projectRoot.js";
|
|
5
|
+
import { readProjectFileSnapshot } from "./safeProjectFile.js";
|
|
6
|
+
export const CHANGELOG_QUERY_COMMAND = "agentera state query changelog --format json";
|
|
7
|
+
export const CHANGELOG_SCANNER_ID = "agentera.changelogHeadingScanner.v1";
|
|
8
|
+
export const CHANGELOG_MAX_READ_BYTES = 1_048_576;
|
|
9
|
+
export const CHANGELOG_DOCS_MAX_READ_BYTES = 262_144;
|
|
10
|
+
export const CHANGELOG_MAX_HEADING_BYTES = 256;
|
|
11
|
+
export const CHANGELOG_MAX_SOURCE_PATH_BYTES = 512;
|
|
12
|
+
export const CHANGELOG_MAX_OUTPUT_BYTES = 2_000;
|
|
13
|
+
export const CHANGELOG_CLOSEOUT_RESERVE_BYTES = 400;
|
|
14
|
+
const CHANGELOG_SHARED_MAX_OUTPUT_BYTES = CHANGELOG_MAX_OUTPUT_BYTES - CHANGELOG_CLOSEOUT_RESERVE_BYTES;
|
|
15
|
+
const UNRELEASED_RE = /^## \[Unreleased\]\s*$/i;
|
|
16
|
+
const RELEASE_RE = /^## \[((?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?)\](?:\s+(?:-|·)\s+\d{4}-\d{2}-\d{2})?\s*$/;
|
|
17
|
+
const RECOVERY = {
|
|
18
|
+
strategy: "repair_validate_retry_once",
|
|
19
|
+
repair: "Repair or restore the configured CHANGELOG artifact as a bounded regular project file with unambiguous Keep a Changelog release headings.",
|
|
20
|
+
validate: "Confirm there is at most one Unreleased heading, every release identity is unique, and no arbitrary release-level H2 headings remain.",
|
|
21
|
+
retry: CHANGELOG_QUERY_COMMAND,
|
|
22
|
+
retry_limit: 1,
|
|
23
|
+
};
|
|
24
|
+
/** Classify release-level headings without depending on paths, line endings, or project state. */
|
|
25
|
+
export function scanChangelogHeadings(text) {
|
|
26
|
+
const h2 = text.split(/\r\n|\r|\n/).filter((line) => line.startsWith("## ")).map((line) => line.trim());
|
|
27
|
+
const boundedH2 = h2.filter((heading) => Buffer.byteLength(heading, "utf8") <= CHANGELOG_MAX_HEADING_BYTES);
|
|
28
|
+
const identityBoundExceeded = boundedH2.length !== h2.length;
|
|
29
|
+
const unreleased = boundedH2.filter((heading) => UNRELEASED_RE.test(heading));
|
|
30
|
+
const releases = [];
|
|
31
|
+
let malformedCount = identityBoundExceeded ? 1 : 0;
|
|
32
|
+
for (const heading of boundedH2) {
|
|
33
|
+
if (UNRELEASED_RE.test(heading))
|
|
34
|
+
continue;
|
|
35
|
+
const match = RELEASE_RE.exec(heading);
|
|
36
|
+
if (match)
|
|
37
|
+
releases.push({ heading, version: match[1] });
|
|
38
|
+
else
|
|
39
|
+
malformedCount += 1;
|
|
40
|
+
}
|
|
41
|
+
const releaseVersions = releases.map(({ version }) => version);
|
|
42
|
+
const duplicateRelease = new Set(releaseVersions).size !== releaseVersions.length;
|
|
43
|
+
const available = malformedCount === 0
|
|
44
|
+
&& unreleased.length <= 1
|
|
45
|
+
&& !duplicateRelease
|
|
46
|
+
&& releases.length > 0;
|
|
47
|
+
const unreleasedHeading = unreleased.length === 1 ? unreleased[0] : null;
|
|
48
|
+
const latestReleaseHeading = releases[0]?.heading ?? null;
|
|
49
|
+
const boundary = available ? (unreleasedHeading ?? latestReleaseHeading) : null;
|
|
50
|
+
const recognizedHeadings = available
|
|
51
|
+
? [unreleasedHeading, latestReleaseHeading].filter((heading) => heading !== null)
|
|
52
|
+
: [];
|
|
53
|
+
return {
|
|
54
|
+
status: available ? "available" : "incomplete",
|
|
55
|
+
recognizedHeadings,
|
|
56
|
+
recognizedReleaseVersions: releaseVersions,
|
|
57
|
+
recognizedReleaseCount: releases.length,
|
|
58
|
+
unreleasedHeading,
|
|
59
|
+
latestReleaseHeading,
|
|
60
|
+
boundary,
|
|
61
|
+
identityBoundExceeded,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function source(relativePath) {
|
|
65
|
+
return {
|
|
66
|
+
artifact: "changelog",
|
|
67
|
+
path: relativePath,
|
|
68
|
+
path_resolution: "artifact_registry",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function provenance() {
|
|
72
|
+
return {
|
|
73
|
+
source_family: "changelog",
|
|
74
|
+
command: CHANGELOG_QUERY_COMMAND,
|
|
75
|
+
field: "recognized_headings",
|
|
76
|
+
scanner: CHANGELOG_SCANNER_ID,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function serializedProjectionBytes(projection) {
|
|
80
|
+
return Buffer.byteLength(`${JSON.stringify(projection, null, 2)}\n`, "utf8");
|
|
81
|
+
}
|
|
82
|
+
function projectionResult(projection, recognizedReleaseVersions) {
|
|
83
|
+
if (serializedProjectionBytes(projection) <= CHANGELOG_SHARED_MAX_OUTPUT_BYTES) {
|
|
84
|
+
return { projection, recognizedReleaseVersions };
|
|
85
|
+
}
|
|
86
|
+
return fixedBoundFailure();
|
|
87
|
+
}
|
|
88
|
+
export function boundedChangelogUnavailable(caveat = "CHANGELOG state is unavailable because its bounded identity projection exceeds the supported output limit.") {
|
|
89
|
+
const projection = {
|
|
90
|
+
schemaVersion: "agentera.changelogRead.v1",
|
|
91
|
+
command: "changelog",
|
|
92
|
+
status: "unavailable",
|
|
93
|
+
recognized_headings: [],
|
|
94
|
+
recognized_release_count: 0,
|
|
95
|
+
unreleased_present: false,
|
|
96
|
+
latest_release_heading: null,
|
|
97
|
+
boundary_present: false,
|
|
98
|
+
boundary: null,
|
|
99
|
+
source: source(null),
|
|
100
|
+
source_provenance: provenance(),
|
|
101
|
+
caveats: [caveat],
|
|
102
|
+
recovery: RECOVERY,
|
|
103
|
+
};
|
|
104
|
+
if (serializedProjectionBytes(projection) > CHANGELOG_SHARED_MAX_OUTPUT_BYTES) {
|
|
105
|
+
throw new Error("fixed changelog unavailable projection exceeds its output limit");
|
|
106
|
+
}
|
|
107
|
+
return { projection, recognizedReleaseVersions: [] };
|
|
108
|
+
}
|
|
109
|
+
function fixedBoundFailure() {
|
|
110
|
+
return boundedChangelogUnavailable();
|
|
111
|
+
}
|
|
112
|
+
function unavailable(relativePath, caveat) {
|
|
113
|
+
if (relativePath !== null && Buffer.byteLength(relativePath, "utf8") > CHANGELOG_MAX_SOURCE_PATH_BYTES) {
|
|
114
|
+
return fixedBoundFailure();
|
|
115
|
+
}
|
|
116
|
+
return projectionResult({
|
|
117
|
+
schemaVersion: "agentera.changelogRead.v1",
|
|
118
|
+
command: "changelog",
|
|
119
|
+
status: "unavailable",
|
|
120
|
+
recognized_headings: [],
|
|
121
|
+
recognized_release_count: 0,
|
|
122
|
+
unreleased_present: false,
|
|
123
|
+
latest_release_heading: null,
|
|
124
|
+
boundary_present: false,
|
|
125
|
+
boundary: null,
|
|
126
|
+
source: source(relativePath),
|
|
127
|
+
source_provenance: provenance(),
|
|
128
|
+
caveats: [caveat],
|
|
129
|
+
recovery: RECOVERY,
|
|
130
|
+
}, []);
|
|
131
|
+
}
|
|
132
|
+
function relativeArtifactPath(projectRoot, absolute) {
|
|
133
|
+
const relative = path.relative(projectRoot, absolute);
|
|
134
|
+
if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
|
|
135
|
+
return null;
|
|
136
|
+
return relative.split(path.sep).join("/");
|
|
137
|
+
}
|
|
138
|
+
/** Resolve and safely read the registry-owned CHANGELOG singleton for one project. */
|
|
139
|
+
export function readChangelog(projectRootInput) {
|
|
140
|
+
let projectRoot;
|
|
141
|
+
try {
|
|
142
|
+
projectRoot = validateRealProjectRoot(projectRootInput);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return unavailable("CHANGELOG.md", "CHANGELOG state is unavailable because the project root is unsafe or unreadable.");
|
|
146
|
+
}
|
|
147
|
+
let overrides = {};
|
|
148
|
+
const docsSnapshot = readProjectFileSnapshot(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs, undefined, CHANGELOG_DOCS_MAX_READ_BYTES);
|
|
149
|
+
if (docsSnapshot.kind === "unsafe") {
|
|
150
|
+
return unavailable(null, "CHANGELOG state is unavailable because the configured docs path authority is unsafe, unreadable, or over its read limit.");
|
|
151
|
+
}
|
|
152
|
+
if (docsSnapshot.kind === "file") {
|
|
153
|
+
let docsText;
|
|
154
|
+
try {
|
|
155
|
+
docsText = new TextDecoder("utf-8", { fatal: true }).decode(docsSnapshot.bytes);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return unavailable(null, "CHANGELOG state is unavailable because the configured docs path authority is not valid UTF-8.");
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
overrides = docsPathOverridesFromBytes(docsText, true);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return unavailable(null, "CHANGELOG state is unavailable because the configured docs path authority is malformed.");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
let relativePath = "CHANGELOG.md";
|
|
168
|
+
try {
|
|
169
|
+
const record = loadArtifactRecord("changelog");
|
|
170
|
+
if (!record)
|
|
171
|
+
return unavailable(relativePath, "CHANGELOG state is unavailable because its artifact registry entry could not be resolved.");
|
|
172
|
+
const absolute = resolveArtifactPath(record, projectRoot.path, { docsPathOverrides: overrides, strictWrite: true });
|
|
173
|
+
const resolvedRelative = relativeArtifactPath(projectRoot.path, absolute);
|
|
174
|
+
if (resolvedRelative === null)
|
|
175
|
+
return unavailable(relativePath, "CHANGELOG state is unavailable because its configured path is unsafe.");
|
|
176
|
+
if (Buffer.byteLength(resolvedRelative, "utf8") > CHANGELOG_MAX_SOURCE_PATH_BYTES)
|
|
177
|
+
return fixedBoundFailure();
|
|
178
|
+
relativePath = resolvedRelative;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return unavailable(relativePath, "CHANGELOG state is unavailable because its configured path is unsafe.");
|
|
182
|
+
}
|
|
183
|
+
const snapshot = readProjectFileSnapshot(projectRoot, relativePath, undefined, CHANGELOG_MAX_READ_BYTES);
|
|
184
|
+
if (snapshot.kind === "missing") {
|
|
185
|
+
return unavailable(relativePath, "CHANGELOG state is unavailable because the configured artifact is missing.");
|
|
186
|
+
}
|
|
187
|
+
if (snapshot.kind === "unsafe") {
|
|
188
|
+
const caveat = snapshot.reason === "over_limit"
|
|
189
|
+
? "CHANGELOG state is unavailable because the configured artifact exceeds the bounded read limit."
|
|
190
|
+
: "CHANGELOG state is unavailable because the configured artifact is not a safe readable regular file.";
|
|
191
|
+
return unavailable(relativePath, caveat);
|
|
192
|
+
}
|
|
193
|
+
let text;
|
|
194
|
+
try {
|
|
195
|
+
text = new TextDecoder("utf-8", { fatal: true }).decode(snapshot.bytes);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return unavailable(relativePath, "CHANGELOG state is unavailable because the configured artifact is not valid UTF-8.");
|
|
199
|
+
}
|
|
200
|
+
const scan = scanChangelogHeadings(text);
|
|
201
|
+
if (scan.identityBoundExceeded)
|
|
202
|
+
return fixedBoundFailure();
|
|
203
|
+
const incomplete = scan.status === "incomplete";
|
|
204
|
+
return projectionResult({
|
|
205
|
+
schemaVersion: "agentera.changelogRead.v1",
|
|
206
|
+
command: "changelog",
|
|
207
|
+
status: scan.status,
|
|
208
|
+
recognized_headings: scan.recognizedHeadings,
|
|
209
|
+
recognized_release_count: scan.recognizedReleaseCount,
|
|
210
|
+
unreleased_present: scan.unreleasedHeading !== null,
|
|
211
|
+
latest_release_heading: scan.latestReleaseHeading,
|
|
212
|
+
boundary_present: scan.boundary !== null,
|
|
213
|
+
boundary: scan.boundary,
|
|
214
|
+
source: source(relativePath),
|
|
215
|
+
source_provenance: provenance(),
|
|
216
|
+
caveats: incomplete
|
|
217
|
+
? ["CHANGELOG headings are incomplete or ambiguous; use one optional Unreleased heading and distinct Keep a Changelog release headings only."]
|
|
218
|
+
: [],
|
|
219
|
+
recovery: incomplete ? RECOVERY : null,
|
|
220
|
+
}, scan.recognizedReleaseVersions);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=changelog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../../../../home/jgabor/git/agentera.release-publish-dev40/packages/cli/src/state/changelog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
4
|
+
import { canonicalRecordJson, decisionOverlayContract } from "./archiveDiscovery.js";
|
|
5
|
+
import { requestedSatisfaction, validateTransition } from "./decisionOverlay.js";
|
|
6
|
+
import { decisionRevisionContract } from "./decisionRevision.js";
|
|
7
|
+
import { decisionLegacyCoexistence, knownLegacyConfidenceCaveat } from "./decisionLegacyValidation.js";
|
|
8
|
+
import { StateRetrievalFailure } from "./directRetrieval.js";
|
|
9
|
+
import { allocateAndPublishEntity, allocateEntityId, assertEntityDiscoveryOrigin, discoverEntities, exactDiscoveredEntityBytes, publishEntity, replaceEntity, withEntityWriterLock } from "./entityStorage.js";
|
|
10
|
+
import { localDate } from "./write/assign.js";
|
|
11
|
+
import { detailMetadata, detailProvenance, isSummaryEntity } from "./summaryEntityRead.js";
|
|
12
|
+
import { decodeListCursor, encodeListCursor, projectedListSnapshot } from "./listCursor.js";
|
|
13
|
+
import { loadStateStorageAuthority } from "./stateStorageAuthority.js";
|
|
14
|
+
import { entityListSelectorFlags, entityListSelectorKey, projectEntityList, resolveEntityListSelector } from "./entityListProjection.js";
|
|
15
|
+
import { shellQuoteArgument } from "../core/shell.js";
|
|
16
|
+
import { normalizeDecisionRecordInput } from "./write/input.js";
|
|
17
|
+
import { detectStateModeBinding } from "./stateMode.js";
|
|
18
|
+
const ARTIFACT = "decisions";
|
|
19
|
+
const BASE = "decision";
|
|
20
|
+
const SUMMARY = "decision_summary";
|
|
21
|
+
const SATISFACTION = "decision_satisfaction";
|
|
22
|
+
const REVISION = "decision_revision";
|
|
23
|
+
const ORDER = "date_desc_then_id_asc";
|
|
24
|
+
const ID_PATTERN = /^[a-z]{10}$/;
|
|
25
|
+
function mapping(value) { return value !== null && typeof value === "object" && !Array.isArray(value); }
|
|
26
|
+
function requiredText(value, field) {
|
|
27
|
+
if (typeof value !== "string" || value.length === 0)
|
|
28
|
+
throw new Error(`decision entity requires ${field}`);
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function contract(sourceRoot = resolveSourceRoot()) {
|
|
32
|
+
const { authorityPath, document: authority } = loadStateStorageAuthority(sourceRoot);
|
|
33
|
+
const target = mapping(authority.entity_target) ? authority.entity_target : {};
|
|
34
|
+
const storage = mapping(target.storage_boundary) && mapping(target.storage_boundary.shared_primitives) ? target.storage_boundary.shared_primitives : {};
|
|
35
|
+
const entities = Array.isArray(target.entities) ? target.entities : [];
|
|
36
|
+
const base = entities.find((value) => mapping(value) && value.boundary === BASE);
|
|
37
|
+
const retrieval = mapping(base) && mapping(base.retrieval) ? base.retrieval : {};
|
|
38
|
+
const number = (value, field) => {
|
|
39
|
+
const result = Number(value);
|
|
40
|
+
if (!Number.isSafeInteger(result) || result < 1)
|
|
41
|
+
throw new Error(`invalid decisions entity ${field} authority`);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
return { authorityPath, entityRoot: requiredText(storage.canonical_root, "canonical_root"), defaultLimit: number(retrieval.default_limit, "default_limit"), maximumLimit: number(retrieval.maximum_limit, "maximum_limit"), maxUtf8Bytes: number(retrieval.max_utf8_bytes, "max_utf8_bytes") };
|
|
45
|
+
}
|
|
46
|
+
function failure(kind, message, recovery, id) {
|
|
47
|
+
return new StateRetrievalFailure({ schemaVersion: "agentera.stateFailure.v1", status: "fail", error: { class: kind, message, syntax: "agentera state decisions get --id ID --format json", example: `agentera state decisions get --id ${id ?? "qjtrmnpvka"} --format json`, recovery, artifact: ARTIFACT, ...(id ? { id } : {}) } }, kind === "invalid_request" ? 2 : 1);
|
|
48
|
+
}
|
|
49
|
+
function summaryMutationFailure(id, verb) {
|
|
50
|
+
const syntax = verb === "amend"
|
|
51
|
+
? "agentera state decisions amend --id ID --base-sha256 SHA256 --input PATH --format json"
|
|
52
|
+
: "agentera state decisions update --id ID --satisfaction-state STATE --format json";
|
|
53
|
+
return new StateRetrievalFailure({
|
|
54
|
+
schemaVersion: "agentera.stateFailure.v1",
|
|
55
|
+
status: "fail",
|
|
56
|
+
error: {
|
|
57
|
+
class: "unsupported_state",
|
|
58
|
+
message: `decision '${id}' is an immutable migrated summary: incomplete historical evidence is read-only`,
|
|
59
|
+
syntax,
|
|
60
|
+
example: `agentera state decisions get --id ${id} --format json`,
|
|
61
|
+
recovery: `Run agentera state decisions get --id ${id} --format json to inspect retained evidence and caveats. For new deliberation, run agentera state decisions append --input decision.yaml --format json.`,
|
|
62
|
+
artifact: ARTIFACT,
|
|
63
|
+
id,
|
|
64
|
+
},
|
|
65
|
+
}, 1);
|
|
66
|
+
}
|
|
67
|
+
function relative(root, file) { return path.relative(path.resolve(root), file).split(path.sep).join("/"); }
|
|
68
|
+
function entityRecord(values) {
|
|
69
|
+
const alternatives = mapping(values.alternatives) ? values.alternatives : {};
|
|
70
|
+
const chosen = requiredText(alternatives.chosen, "alternatives.chosen");
|
|
71
|
+
const rejected = Array.isArray(alternatives.rejected) ? alternatives.rejected.map(String) : [];
|
|
72
|
+
const record = {
|
|
73
|
+
date: typeof values.date === "string" ? values.date : localDate(),
|
|
74
|
+
question: requiredText(values.question, "question"),
|
|
75
|
+
context: requiredText(values.context, "context"),
|
|
76
|
+
alternatives: [{ name: chosen, status: "chosen" }, ...rejected.map((name) => ({ name, status: "rejected" }))],
|
|
77
|
+
choice: requiredText(values.choice, "choice"), reasoning: requiredText(values.reasoning, "reasoning"), confidence: requiredText(values.confidence, "confidence"),
|
|
78
|
+
};
|
|
79
|
+
if (typeof values.feeds_into === "string")
|
|
80
|
+
record.feeds_into = values.feeds_into;
|
|
81
|
+
return record;
|
|
82
|
+
}
|
|
83
|
+
function envelope(command, published, record, dryRun = false) {
|
|
84
|
+
return { schemaVersion: "agentera.stateWrite.v1", command, status: "pass", path: published.path, id: published.id, artifact: published.artifact, record, operation: { verb: command.split(" ").at(-1), dry_run: dryRun, idempotent_replay: published.replay }, validation: { status: "pass", violations: [] } };
|
|
85
|
+
}
|
|
86
|
+
function publish(req, boundary, record, options) {
|
|
87
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
88
|
+
if (req.dryRun) {
|
|
89
|
+
const id = options.id ?? allocateEntityId(options.publicationContext?.pinnedPath() ?? req.projectRoot, options.candidate, sourceRoot);
|
|
90
|
+
return envelope(`state decisions ${req.spec.verb}`, { id, artifact: ARTIFACT, path: path.join(req.projectRoot, contract(sourceRoot).entityRoot, ARTIFACT, boundary, `${id}.yaml`), replay: false }, record, true);
|
|
91
|
+
}
|
|
92
|
+
const result = options.id
|
|
93
|
+
? publishEntity({ projectRoot: req.projectRoot, sourceRoot, publicationContext: options.publicationContext, artifact: ARTIFACT, boundary, id: options.id, record })
|
|
94
|
+
: allocateAndPublishEntity({ projectRoot: req.projectRoot, sourceRoot, publicationContext: options.publicationContext, artifact: ARTIFACT, boundary, record }, options.candidate);
|
|
95
|
+
return envelope(`state decisions ${req.spec.verb}`, result, record);
|
|
96
|
+
}
|
|
97
|
+
function decisionLogicalReplay(root, sourceRoot, record) {
|
|
98
|
+
return discoverEntities(root, sourceRoot).entities.find((entity) => entity.artifact === ARTIFACT
|
|
99
|
+
&& entity.boundary === BASE
|
|
100
|
+
&& entity.classification === "valid"
|
|
101
|
+
&& entity.record
|
|
102
|
+
&& canonicalRecordJson(entity.record) === canonicalRecordJson(record));
|
|
103
|
+
}
|
|
104
|
+
function appendDecisionEntityUnderLock(req, options, record) {
|
|
105
|
+
if (!options.id) {
|
|
106
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
107
|
+
const replay = decisionLogicalReplay(options.publicationContext?.pinnedPath() ?? req.projectRoot, sourceRoot, record);
|
|
108
|
+
if (replay?.record) {
|
|
109
|
+
return envelope("state decisions append", { id: replay.id, artifact: ARTIFACT, path: replay.path, replay: true }, replay.record, req.dryRun);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return publish(req, BASE, record, options);
|
|
113
|
+
}
|
|
114
|
+
export function appendDecisionEntity(req, options = {}) {
|
|
115
|
+
const record = entityRecord(req.input ? normalizeDecisionRecordInput(req.input) : req.values);
|
|
116
|
+
if (options.id || options.publicationContext) {
|
|
117
|
+
if (!options.id && options.publicationContext)
|
|
118
|
+
return withEntityWriterLock(options.publicationContext, () => appendDecisionEntityUnderLock(req, options, record));
|
|
119
|
+
return publish(req, BASE, record, options);
|
|
120
|
+
}
|
|
121
|
+
if (req.dryRun)
|
|
122
|
+
return publish(req, BASE, record, options);
|
|
123
|
+
const binding = detectStateModeBinding(req.projectRoot, options.sourceRoot);
|
|
124
|
+
if (binding.mode !== "entities")
|
|
125
|
+
throw new Error("decision publication requires the durable entity-mode marker; legacy mode remains authoritative");
|
|
126
|
+
try {
|
|
127
|
+
return withEntityWriterLock(binding.publicationContext, () => appendDecisionEntityUnderLock(req, { ...options, publicationContext: binding.publicationContext }, record));
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
binding.publicationContext.close();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function decisionEntities(root, sourceRoot, supplied) {
|
|
134
|
+
if (supplied)
|
|
135
|
+
assertEntityDiscoveryOrigin(root, sourceRoot, supplied);
|
|
136
|
+
const discovery = supplied ?? discoverEntities(root, sourceRoot);
|
|
137
|
+
const relevant = discovery.entities.filter((entity) => entity.artifact === ARTIFACT || [BASE, SUMMARY, SATISFACTION, REVISION].includes(entity.boundary ?? ""));
|
|
138
|
+
const bad = relevant.find((entity) => entity.classification !== "valid" || !entity.id || !entity.record);
|
|
139
|
+
if (bad)
|
|
140
|
+
throw failure(bad.classification === "duplicate" ? "ambiguous" : "corrupt", `decision entity '${bad.relativePath}' is not canonical`, "Run agentera check validate state, preserve conflicting values, and repair the entity files.", bad.id ?? undefined);
|
|
141
|
+
return relevant;
|
|
142
|
+
}
|
|
143
|
+
function baseFor(root, id, sourceRoot, mutation) {
|
|
144
|
+
if (!ID_PATTERN.test(id))
|
|
145
|
+
throw failure("invalid_request", `decision ID '${id}' must be ten lowercase letters`, "Use an ID returned by decisions append or list.", id);
|
|
146
|
+
const all = decisionEntities(root, sourceRoot);
|
|
147
|
+
const summary = all.find((entity) => entity.id === id && entity.boundary === SUMMARY);
|
|
148
|
+
if (summary)
|
|
149
|
+
throw mutation ? summaryMutationFailure(id, mutation) : failure("unsupported_state", `decision '${id}' is an immutable migrated summary: incomplete historical evidence is read-only`, "Use agentera state decisions get --id " + id + " --format json to inspect its retained caveat and provenance.", id);
|
|
150
|
+
const matches = all.filter((entity) => entity.id === id && entity.boundary === BASE);
|
|
151
|
+
if (matches.length !== 1)
|
|
152
|
+
throw failure(matches.length ? "ambiguous" : "not_found", matches.length ? `decision ID '${id}' has multiple base entities` : `decision ID '${id}' was not found`, "Run agentera check validate state and resolve duplicate ownership, or use an ID returned by list.", id);
|
|
153
|
+
return { base: matches[0], all };
|
|
154
|
+
}
|
|
155
|
+
export function applyDecisionChanges(record, changes) {
|
|
156
|
+
const result = structuredClone(record);
|
|
157
|
+
for (const [field, value] of Object.entries(changes)) {
|
|
158
|
+
if (field === "alternatives") {
|
|
159
|
+
result.alternatives = structuredClone(value);
|
|
160
|
+
}
|
|
161
|
+
else if (field === "alternatives.chosen" || field === "alternatives.rejected") {
|
|
162
|
+
const alternatives = Array.isArray(result.alternatives) ? structuredClone(result.alternatives).filter(mapping) : [];
|
|
163
|
+
if (field.endsWith("chosen")) {
|
|
164
|
+
const chosen = alternatives.find((entry) => entry.status === "chosen");
|
|
165
|
+
if (chosen)
|
|
166
|
+
chosen.name = structuredClone(value);
|
|
167
|
+
else
|
|
168
|
+
alternatives.unshift({ name: structuredClone(value), status: "chosen" });
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const names = Array.isArray(value) ? value.map(String) : [String(value)];
|
|
172
|
+
for (const name of names)
|
|
173
|
+
if (!alternatives.some((entry) => entry.status === "rejected" && entry.name === name))
|
|
174
|
+
alternatives.push({ name, status: "rejected" });
|
|
175
|
+
}
|
|
176
|
+
result.alternatives = alternatives;
|
|
177
|
+
}
|
|
178
|
+
else
|
|
179
|
+
result[field] = structuredClone(value);
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
function compose(root, base, all, sourceRoot) {
|
|
184
|
+
let effective = structuredClone(base.record);
|
|
185
|
+
let hash = createHash("sha256").update(canonicalRecordJson(effective)).digest("hex");
|
|
186
|
+
let legacyConfidenceEvidence = base.migrationProvenance?.kind === "inherited_decision_confidence"
|
|
187
|
+
&& base.migrationProvenance.confidence === effective.confidence;
|
|
188
|
+
const revisions = [];
|
|
189
|
+
const candidates = all.filter((entity) => entity.boundary === REVISION && entity.record?.decision === base.id);
|
|
190
|
+
const unused = new Set(candidates);
|
|
191
|
+
while (true) {
|
|
192
|
+
const next = [...unused].filter((entity) => entity.record?.base_sha256 === hash);
|
|
193
|
+
if (next.length > 1)
|
|
194
|
+
throw failure("ambiguous", `decision '${base.id}' has competing revisions for base ${hash}`, "Preserve both revision entities and resolve their ownership explicitly.", base.id);
|
|
195
|
+
if (next.length === 0)
|
|
196
|
+
break;
|
|
197
|
+
const revision = next[0];
|
|
198
|
+
unused.delete(revision);
|
|
199
|
+
if (!mapping(revision.record.changes))
|
|
200
|
+
throw failure("corrupt", `decision revision '${revision.id}' has invalid changes`, "Repair the canonical revision entity.", base.id);
|
|
201
|
+
if ("confidence" in revision.record.changes) {
|
|
202
|
+
legacyConfidenceEvidence = revision.migrationProvenance?.kind === "inherited_decision_revision_confidence"
|
|
203
|
+
&& revision.migrationProvenance.confidence === revision.record.changes.confidence;
|
|
204
|
+
}
|
|
205
|
+
effective = applyDecisionChanges(effective, revision.record.changes);
|
|
206
|
+
hash = createHash("sha256").update(canonicalRecordJson(effective)).digest("hex");
|
|
207
|
+
revisions.push({ id: revision.id, artifact: ARTIFACT, base_sha256: revision.record.base_sha256, effective_sha256: hash, fields: Object.keys(revision.record.changes), path: relative(root, revision.path) });
|
|
208
|
+
}
|
|
209
|
+
if (unused.size)
|
|
210
|
+
throw failure("ambiguous", `decision '${base.id}' has stale or disconnected revision ownership`, "Preserve every revision and repair the revision chain explicitly.", base.id);
|
|
211
|
+
const satisfactions = all.filter((entity) => entity.boundary === SATISFACTION && entity.record?.decision === base.id);
|
|
212
|
+
if (satisfactions.length > 1)
|
|
213
|
+
throw failure("ambiguous", `decision '${base.id}' has competing satisfaction owners`, "Preserve both satisfaction entities and resolve ownership explicitly.", base.id);
|
|
214
|
+
let satisfactionProvenance = null;
|
|
215
|
+
if (satisfactions[0]) {
|
|
216
|
+
const { decision: _decision, ...satisfaction } = satisfactions[0].record;
|
|
217
|
+
effective.satisfaction = satisfaction;
|
|
218
|
+
satisfactionProvenance = { id: satisfactions[0].id, artifact: ARTIFACT, path: relative(root, satisfactions[0].path) };
|
|
219
|
+
}
|
|
220
|
+
const inherited = base.migrationProvenance;
|
|
221
|
+
const caveatSource = inherited?.source === "verified_archive" ? "archive" : "active";
|
|
222
|
+
const legacyCaveat = legacyConfidenceEvidence
|
|
223
|
+
? knownLegacyConfidenceCaveat(effective, decisionLegacyCoexistence(sourceRoot), caveatSource)
|
|
224
|
+
: null;
|
|
225
|
+
return { id: base.id, artifact: ARTIFACT, ...detailMetadata(base), record: effective, effective_sha256: hash, provenance: { ...detailProvenance(relative(root, base.path), base), base: { id: base.id, artifact: ARTIFACT, path: relative(root, base.path), ...(inherited ? { migration_provenance: inherited } : {}) }, revisions, satisfaction: satisfactionProvenance }, ...(legacyCaveat ? { caveats: [legacyCaveat.caveat] } : {}), retrieval: { get: `agentera state decisions get --id ${base.id} --format json` } };
|
|
226
|
+
}
|
|
227
|
+
export function getDecisionEntity(root, id, sourceRoot = resolveSourceRoot()) {
|
|
228
|
+
if (!ID_PATTERN.test(id))
|
|
229
|
+
throw failure("invalid_request", `decision ID '${id}' must be ten lowercase letters`, "Use an ID returned by decisions append or list.", id);
|
|
230
|
+
const all = decisionEntities(root, sourceRoot);
|
|
231
|
+
const summary = all.filter((entity) => entity.id === id && entity.boundary === SUMMARY);
|
|
232
|
+
const bases = all.filter((entity) => entity.id === id && entity.boundary === BASE);
|
|
233
|
+
if (summary.length || bases.length > 1) {
|
|
234
|
+
if (summary.length !== 1 || bases.length)
|
|
235
|
+
throw failure("ambiguous", `decision ID '${id}' has multiple base entities`, "Run agentera check validate state and resolve duplicate ownership.", id);
|
|
236
|
+
const entity = summary[0];
|
|
237
|
+
return { schemaVersion: "agentera.stateRetrieval.v1", command: "state decisions get", status: "degraded", entry: { id, artifact: ARTIFACT, ...detailMetadata(entity), record: entity.record, provenance: detailProvenance(relative(root, entity.path), entity), retrieval: { get: `agentera state decisions get --id ${id} --format json` } }, source: { artifact: ARTIFACT, authority: "canonical_entity_files" }, source_contract: { authority: "references/artifacts/state-storage-authority.yaml", detail: "summary" } };
|
|
238
|
+
}
|
|
239
|
+
if (bases.length !== 1)
|
|
240
|
+
throw failure("not_found", `decision ID '${id}' was not found`, "Run agentera state decisions list --format json and retry with a returned ID.", id);
|
|
241
|
+
return { schemaVersion: "agentera.stateRetrieval.v1", command: "state decisions get", status: "ok", entry: compose(root, bases[0], all, sourceRoot), source: { artifact: ARTIFACT, authority: "canonical_entity_files" }, source_contract: { authority: "references/artifacts/state-storage-authority.yaml", detail: "full" } };
|
|
242
|
+
}
|
|
243
|
+
export function updateDecisionSatisfactionEntity(req, options = {}) {
|
|
244
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
245
|
+
const id = requiredText(req.values.id, "id");
|
|
246
|
+
const { all } = baseFor(req.projectRoot, id, sourceRoot, "update");
|
|
247
|
+
const owners = all.filter((entity) => entity.boundary === SATISFACTION && entity.record?.decision === id);
|
|
248
|
+
if (owners.length > 1)
|
|
249
|
+
throw failure("ambiguous", `decision '${id}' has competing satisfaction owners`, "Preserve both entities and resolve ownership explicitly.", id);
|
|
250
|
+
const requested = requestedSatisfaction(mapping(req.values.satisfaction) ? req.values.satisfaction : {}, decisionOverlayContract(sourceRoot));
|
|
251
|
+
const current = owners[0];
|
|
252
|
+
const historical = current ? { ...current.record } : undefined;
|
|
253
|
+
if (mapping(historical))
|
|
254
|
+
delete historical.decision;
|
|
255
|
+
validateTransition(requested, historical ? { satisfaction: historical } : undefined, undefined, decisionOverlayContract(sourceRoot));
|
|
256
|
+
const record = { decision: id, ...requested };
|
|
257
|
+
if (!current)
|
|
258
|
+
return publish(req, SATISFACTION, record, options);
|
|
259
|
+
if (req.dryRun)
|
|
260
|
+
return envelope("state decisions update", { id: current.id, artifact: ARTIFACT, path: current.path, replay: canonicalRecordJson(current.record) === canonicalRecordJson(record) }, record, true);
|
|
261
|
+
const result = replaceEntity({ projectRoot: req.projectRoot, sourceRoot, publicationContext: options.publicationContext, artifact: ARTIFACT, boundary: SATISFACTION, id: current.id, expectedRecord: current.record, expectedBytes: exactDiscoveredEntityBytes(current), migrationProvenance: current.migrationProvenance, record });
|
|
262
|
+
return envelope("state decisions update", result, record);
|
|
263
|
+
}
|
|
264
|
+
export function amendDecisionEntity(req, options = {}) {
|
|
265
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
266
|
+
const id = requiredText(req.values.id, "id");
|
|
267
|
+
const expected = requiredText(req.values.base_sha256, "base_sha256");
|
|
268
|
+
const allowed = new Set(decisionRevisionContract(sourceRoot).amendablePaths);
|
|
269
|
+
const content = req.input ? normalizeDecisionRecordInput(req.input) : req.values;
|
|
270
|
+
const changes = {};
|
|
271
|
+
for (const [field, value] of Object.entries(content))
|
|
272
|
+
if (!["id", "base_sha256"].includes(field)) {
|
|
273
|
+
if (field === "alternatives" && mapping(value)) {
|
|
274
|
+
for (const [name, alternative] of Object.entries(value)) {
|
|
275
|
+
const target = `alternatives.${name}`;
|
|
276
|
+
if (!allowed.has(target))
|
|
277
|
+
throw failure("invalid_request", `'${target}' is not amendable decision content`, "Use only authority-declared content fields.", id);
|
|
278
|
+
changes[target] = structuredClone(alternative);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
if (!allowed.has(field) || field === "satisfaction")
|
|
283
|
+
throw failure("invalid_request", `'${field}' is not amendable decision content`, "Use only authority-declared content fields; update satisfaction separately.", id);
|
|
284
|
+
changes[field] = structuredClone(value);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (!Object.keys(changes).length)
|
|
288
|
+
throw failure("invalid_request", "decision amendment requires at least one content field", "Supply one amendable content field.", id);
|
|
289
|
+
const { all } = baseFor(req.projectRoot, id, sourceRoot, "amend");
|
|
290
|
+
const existingClaims = all.filter((entity) => entity.boundary === REVISION && entity.record?.decision === id && entity.record?.base_sha256 === expected);
|
|
291
|
+
const replay = existingClaims.find((entity) => canonicalRecordJson(entity.record?.changes) === canonicalRecordJson(changes));
|
|
292
|
+
if (replay)
|
|
293
|
+
return envelope("state decisions amend", { id: replay.id, artifact: ARTIFACT, path: replay.path, replay: true }, replay.record, req.dryRun);
|
|
294
|
+
if (existingClaims.length)
|
|
295
|
+
throw failure("immutable_conflict", `decision '${id}' already has a divergent revision for requested base ${expected}`, "Preserve both requested values and resolve the same-base amendment explicitly.", id);
|
|
296
|
+
const current = getDecisionEntity(req.projectRoot, id, sourceRoot).entry;
|
|
297
|
+
if (current.effective_sha256 !== expected)
|
|
298
|
+
throw failure("immutable_conflict", `decision '${id}' changed from requested base ${expected}`, "Get the decision again, review the effective provenance, and retry with its current effective_sha256.", id);
|
|
299
|
+
const effective = current.record;
|
|
300
|
+
const projected = applyDecisionChanges(effective, changes);
|
|
301
|
+
if (canonicalRecordJson(projected) === canonicalRecordJson(effective))
|
|
302
|
+
return { schemaVersion: "agentera.stateWrite.v1", command: "state decisions amend", status: "pass", path: String(current.provenance.base.path), id, artifact: ARTIFACT, record: changes, operation: { verb: "amend", dry_run: req.dryRun, idempotent_replay: true }, validation: { status: "pass", violations: [] } };
|
|
303
|
+
return publish(req, REVISION, { decision: id, date: localDate(), provenance: "historical_revision", base_sha256: expected, changes }, options);
|
|
304
|
+
}
|
|
305
|
+
function key(entity) { return `${String(entity.record.date ?? "")}\0${entity.id}`; }
|
|
306
|
+
function listEntry(root, entity, all, sourceRoot) {
|
|
307
|
+
return entity.boundary === SUMMARY
|
|
308
|
+
? { id: entity.id, artifact: ARTIFACT, ...detailMetadata(entity), record: entity.record, provenance: detailProvenance(relative(root, entity.path), entity), retrieval: { get: `agentera state decisions get --id ${entity.id} --format json` } }
|
|
309
|
+
: compose(root, entity, all, sourceRoot);
|
|
310
|
+
}
|
|
311
|
+
function snapshot(root, bases, all, sourceRoot, topic, entityRoot) {
|
|
312
|
+
return projectedListSnapshot({
|
|
313
|
+
schemaVersion: "agentera.stateList.v1",
|
|
314
|
+
command: "state decisions list",
|
|
315
|
+
order: ORDER,
|
|
316
|
+
filters: { topic: topic ?? null },
|
|
317
|
+
source: { artifact: ARTIFACT, authority: "canonical_entity_files", root: entityRoot },
|
|
318
|
+
source_contract: { authority: "references/artifacts/state-storage-authority.yaml", detail: bases.some(isSummaryEntity) ? "mixed" : "full", cursor: "opaque_snapshot_cursor" },
|
|
319
|
+
entries: bases.map((entity) => listEntry(root, entity, all, sourceRoot)),
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
function encode(payload, root, authorityPath) { return encodeListCursor(payload, root, authorityPath); }
|
|
323
|
+
function decode(token, root, authorityPath) {
|
|
324
|
+
try {
|
|
325
|
+
return decodeListCursor(token, root, authorityPath);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
throw failure("cursor_invalid", "decisions cursor is malformed or belongs to another project", "Copy next_cursor exactly, or omit --cursor to restart.");
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
export function listDecisionEntities(root, limit, topic, cursor, options = {}) {
|
|
332
|
+
const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
|
|
333
|
+
const declared = contract(sourceRoot);
|
|
334
|
+
const effectiveLimit = limit ?? declared.defaultLimit;
|
|
335
|
+
if (!Number.isSafeInteger(effectiveLimit) || effectiveLimit < 1 || effectiveLimit > declared.maximumLimit)
|
|
336
|
+
throw failure("invalid_request", `decisions list limit must be 1..${declared.maximumLimit}`, "Use a limit in the declared range.");
|
|
337
|
+
const all = decisionEntities(root, sourceRoot, options.discovery);
|
|
338
|
+
let bases = all.filter((entity) => [BASE, SUMMARY].includes(entity.boundary ?? "")).sort((a, b) => String(b.record.date ?? "").localeCompare(String(a.record.date ?? "")) || a.id.localeCompare(b.id));
|
|
339
|
+
if (topic) {
|
|
340
|
+
const needle = topic.toLowerCase();
|
|
341
|
+
bases = bases.filter((entity) => canonicalRecordJson(entity.record).toLowerCase().includes(needle));
|
|
342
|
+
}
|
|
343
|
+
const format = options.format ?? "json";
|
|
344
|
+
const projectionOptions = { family: "decisions", artifact: ARTIFACT, boundary: BASE, format, maxUtf8Bytes: declared.maxUtf8Bytes, selector: options.selector };
|
|
345
|
+
const selector = resolveEntityListSelector(options.selector, bases.map((entity) => listEntry(root, entity, all, sourceRoot)), projectionOptions);
|
|
346
|
+
const selectorKey = entityListSelectorKey(selector);
|
|
347
|
+
const snap = snapshot(root, bases, all, sourceRoot, topic, declared.entityRoot);
|
|
348
|
+
let start = 0;
|
|
349
|
+
if (cursor) {
|
|
350
|
+
const value = decode(cursor, root, declared.authorityPath);
|
|
351
|
+
if (value.selector !== selectorKey)
|
|
352
|
+
throw failure("cursor_invalid", "decisions cursor selectors do not match this request", "Repeat the original selector, or omit --cursor to restart from the current snapshot.");
|
|
353
|
+
if (value.version !== 1 || value.artifact !== ARTIFACT || value.order !== ORDER || value.snapshot_id !== snap || value.topic !== (topic ?? null))
|
|
354
|
+
throw failure("cursor_snapshot_unavailable", "decisions state or filters changed after this cursor snapshot", "Repeat the original filters, or omit --cursor to restart from the current snapshot.");
|
|
355
|
+
const found = bases.findIndex((entity) => key(entity) === value.after_key);
|
|
356
|
+
if (found < 0)
|
|
357
|
+
throw failure("cursor_snapshot_unavailable", "decisions cursor continuation is unavailable", "Omit --cursor to restart.");
|
|
358
|
+
start = found + 1;
|
|
359
|
+
}
|
|
360
|
+
const selected = bases.slice(start, start + effectiveLimit);
|
|
361
|
+
const remaining = bases.length - start - selected.length;
|
|
362
|
+
const next = remaining && selected.length ? encode({ version: 1, artifact: ARTIFACT, order: ORDER, snapshot_id: snap, selector: selectorKey, topic: topic ?? null, after_key: key(selected.at(-1)) }, root, declared.authorityPath) : undefined;
|
|
363
|
+
const selectorFlags = entityListSelectorFlags(selector);
|
|
364
|
+
const filterFlags = topic ? ` --topic ${shellQuoteArgument(topic)}` : "";
|
|
365
|
+
const response = { schemaVersion: "agentera.stateList.v1", command: "state decisions list", status: remaining || bases.some(isSummaryEntity) ? "degraded" : "ok", entries: selected.map((entity) => listEntry(root, entity, all, sourceRoot)), counts: { total: bases.length, returned: selected.length, remaining }, filters: { topic: topic ?? null }, snapshot: { id: snap, first_page: !cursor, order: ORDER, has_more: Boolean(remaining), candidate_count: bases.length }, source: { artifact: ARTIFACT, authority: "canonical_entity_files", root: declared.entityRoot }, source_contract: { authority: "references/artifacts/state-storage-authority.yaml", detail: bases.some(isSummaryEntity) ? "mixed" : "full", cursor: "opaque_snapshot_cursor" }, retrieval: { ...(next ? { continue: `agentera state decisions list${filterFlags}${selectorFlags} --limit ${effectiveLimit} --cursor ${next} --format json` } : {}) }, ...(remaining ? { omitted: true, omitted_count: remaining, omission_reason: "page_limit", next_cursor: next } : {}) };
|
|
366
|
+
return projectEntityList(response, selector, projectionOptions);
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=decisionEntities.js.map
|