agentera 3.0.0-dev.3 → 3.0.0-dev.31
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 +96 -6
- package/bundle/.agentera-npx-bundle.json +1 -1
- package/bundle/CHANGELOG.md +1144 -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-registry.yaml +20 -188
- package/bundle/references/adapters/package-surface-characterization.md +36 -37
- 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 +516 -0
- package/bundle/references/analysis/startup-measurement-contract.yaml +37 -26
- package/bundle/references/analysis/verification-policy.yaml +142 -0
- package/bundle/references/artifacts/artifact-registry-interface-model.yaml +9 -8
- package/bundle/references/artifacts/state-storage-authority.yaml +2167 -0
- package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
- package/bundle/references/cli/agent-ready-state-contract.yaml +64 -81
- package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
- package/bundle/references/cli/audience-namespace-cli-migration.yaml +58 -29
- 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 +651 -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 +45 -7
- 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 +346 -331
- package/bundle/references/meta/documentation-inventory.md +10 -3
- package/bundle/registry.json +14 -14
- package/bundle/skills/agentera/SKILL.md +182 -407
- 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 +20 -19
- package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +85 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +3 -3
- package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
- package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/validation.yaml +16 -16
- 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 +49 -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/{resonera → discuss}/schemas/validation.yaml +9 -8
- 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 +63 -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 +89 -0
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/artifacts.yaml +4 -4
- package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +3 -3
- package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
- package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +85 -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 +72 -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/health.yaml +58 -21
- package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
- package/bundle/skills/agentera/schemas/artifacts/plan.yaml +327 -15
- package/bundle/skills/agentera/schemas/artifacts/progress.yaml +51 -53
- package/bundle/skills/agentera/schemas/artifacts/todo.yaml +257 -28
- 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 +561 -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/profileSignals.js +212 -0
- package/dist/analytics/profileSignals.js.map +1 -0
- package/dist/analytics/usageStats.js +191 -41
- package/dist/analytics/usageStats.js.map +1 -1
- package/dist/bin/agentera.js +3 -1
- package/dist/bin/agentera.js.map +1 -1
- package/dist/capabilities/audit/instructions.js +16 -0
- package/dist/capabilities/audit/instructions.js.map +1 -0
- package/dist/capabilities/build/instructions.js +18 -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 +16 -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 +14 -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 +15 -0
- package/dist/capabilities/plan/instructions.js.map +1 -0
- package/dist/capabilities/profile/instructions.js +5 -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 +5 -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 +564 -0
- package/dist/cli/capabilityContext/benchmark.js.map +1 -0
- package/dist/cli/capabilityContext/bespoke.js +44 -0
- package/dist/cli/capabilityContext/bespoke.js.map +1 -0
- package/dist/cli/capabilityContext/build.js +191 -0
- package/dist/cli/capabilityContext/build.js.map +1 -0
- package/dist/cli/capabilityContext/closeout.js +231 -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 +469 -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 +128 -0
- package/dist/cli/capabilityContext/orchestration.js.map +1 -0
- package/dist/cli/capabilityContext/planState.js +280 -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/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 +257 -0
- package/dist/cli/capabilityContext/startup.js.map +1 -0
- package/dist/cli/capabilityContext/types.js +51 -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 +59 -97
- 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/lint.js +26 -43
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/prime/briefOrientation.js +592 -0
- package/dist/cli/commands/prime/briefOrientation.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 +266 -0
- package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -0
- package/dist/cli/commands/prime/collectOrientationState.js +180 -0
- package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
- package/dist/cli/commands/prime/orientationOutput.js +360 -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 +61 -556
- package/dist/cli/commands/prime.js.map +1 -1
- package/dist/cli/commands/query.js +66 -51
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/report.js +100 -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 +260 -78
- 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 +139 -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 +127 -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 +60 -0
- package/dist/cli/commands/state/index.js.map +1 -0
- package/dist/cli/commands/state/list.js +176 -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 +142 -0
- package/dist/cli/commands/state/planTasks.js.map +1 -0
- package/dist/cli/commands/state/plans.js +143 -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 +42 -0
- package/dist/cli/commands/state/todo.js.map +1 -0
- package/dist/cli/commands/state/write.js +418 -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 +133 -210
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/commands/verify.js +30 -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 +226 -0
- package/dist/cli/dispatch/index.js.map +1 -0
- package/dist/cli/dispatch/lifecycle.js +653 -0
- package/dist/cli/dispatch/lifecycle.js.map +1 -0
- package/dist/cli/dispatch/prime.js +119 -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 +174 -0
- package/dist/cli/dispatch/state.js.map +1 -0
- package/dist/cli/dispatch.js +1 -957
- 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 +419 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/migrationRequired.js +87 -0
- package/dist/cli/migrationRequired.js.map +1 -0
- package/dist/cli/orientation/attention.js +67 -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 +407 -159
- 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 +34 -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 +69 -2
- package/dist/cli/prime-blob.js.map +1 -1
- package/dist/cli/startupCompletenessContract.js +57 -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 +33 -0
- package/dist/cli/todoMarkdown.js.map +1 -0
- package/dist/cli/todoReadinessSelection.js +157 -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/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 +541 -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 +77 -0
- package/dist/registries/artifactProtocolIds.js.map +1 -0
- package/dist/registries/artifactRegistry.js +222 -62
- package/dist/registries/artifactRegistry.js.map +1 -1
- 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 +362 -0
- package/dist/registries/evidenceTierContract.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 +406 -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 +82 -0
- package/dist/setup/smokeChecks.js.map +1 -0
- package/dist/state/archiveDiscovery.js +578 -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/decisionEntities.js +322 -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 +117 -0
- package/dist/state/decisionMigrationProvenance.js.map +1 -0
- package/dist/state/decisionOverlay.js +278 -0
- package/dist/state/decisionOverlay.js.map +1 -0
- package/dist/state/decisionRevision.js +632 -0
- package/dist/state/decisionRevision.js.map +1 -0
- package/dist/state/decisionRevisionPublication.js +532 -0
- package/dist/state/decisionRevisionPublication.js.map +1 -0
- package/dist/state/directRetrieval.js +373 -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/entityMigrationCausality.js +99 -0
- package/dist/state/entityMigrationCausality.js.map +1 -0
- package/dist/state/entityMigrationPreview.js +864 -0
- package/dist/state/entityMigrationPreview.js.map +1 -0
- package/dist/state/entityPublicationContext.js +662 -0
- package/dist/state/entityPublicationContext.js.map +1 -0
- package/dist/state/entityStorage.js +881 -0
- package/dist/state/entityStorage.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/experimentRetrieval.js +447 -0
- package/dist/state/experimentRetrieval.js.map +1 -0
- package/dist/state/healthEntities.js +266 -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 +813 -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 +444 -0
- package/dist/state/planEntities.js.map +1 -0
- package/dist/state/planIdentity.js +45 -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 +285 -0
- package/dist/state/planTaskRetrieval.js.map +1 -0
- package/dist/state/progressEntities.js +360 -0
- package/dist/state/progressEntities.js.map +1 -0
- package/dist/state/projectRoot.js +63 -0
- package/dist/state/projectRoot.js.map +1 -0
- package/dist/state/projectionPolicy.js +184 -0
- package/dist/state/projectionPolicy.js.map +1 -0
- package/dist/state/retrievalAuthority.js +343 -0
- package/dist/state/retrievalAuthority.js.map +1 -0
- package/dist/state/safeProjectFile.js +153 -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 +567 -0
- package/dist/state/startupProjection.js.map +1 -0
- package/dist/state/stateMode.js +83 -0
- package/dist/state/stateMode.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 +267 -0
- package/dist/state/todoDocsEntities.js.map +1 -0
- package/dist/state/todoDocsEntityValidation.js +34 -0
- package/dist/state/todoDocsEntityValidation.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 +281 -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 +303 -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/helpers.js +30 -0
- package/dist/state/write/helpers.js.map +1 -0
- package/dist/state/write/index.js +12 -0
- package/dist/state/write/index.js.map +1 -0
- package/dist/state/write/input.js +22 -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 +375 -0
- package/dist/state/write/operations.js.map +1 -0
- package/dist/state/write/planEvaluation.js +121 -0
- package/dist/state/write/planEvaluation.js.map +1 -0
- package/dist/state/write/planPublication.js +135 -0
- package/dist/state/write/planPublication.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 +44 -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 +21 -10
- 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 +212 -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 +12 -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/vocabularyAuthority.js +303 -0
- package/dist/validate/vocabularyAuthority.js.map +1 -0
- package/package.json +45 -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/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/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/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 -1276
- 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
package/dist/cli/orientation.js
CHANGED
|
@@ -1,40 +1,35 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { resolveArtifactPath, } from "../registries/artifactRegistry.js";
|
|
4
|
-
import { activeObjectiveName, artifactPath,
|
|
3
|
+
import { loadArtifactRecord, resolveArtifactPath, } from "../registries/artifactRegistry.js";
|
|
4
|
+
import { activeObjectiveName, artifactPath, resolveRegistryModelPath, } from "./appContext.js";
|
|
5
5
|
import { asList, extractEntries, firstPresent, loadArtifact, recentCycles, truncate, } from "./stateQuery.js";
|
|
6
|
-
import {
|
|
6
|
+
import { normalizeSeverity } from "./commands/state/index.js";
|
|
7
|
+
import { isResolvedTodoMarkdownStatus, parseTodoMarkdownListItem } from "./todoMarkdown.js";
|
|
8
|
+
import { truncateCodePoints } from "../core/text.js";
|
|
9
|
+
import { TODO_SEVERITY_ORDER_KEYS } from "./todoSeverity.js";
|
|
10
|
+
import { evaluateTodoReadinessQueue, } from "./todoReadinessSelection.js";
|
|
11
|
+
import { capabilityStartupComplete } from "./startupCompletenessContract.js";
|
|
12
|
+
import { discoverPlanArtifacts, planCatalogEntry, planDocumentParts } from "./planArtifacts.js";
|
|
13
|
+
import { planLifecycleState } from "./planLifecycleState.js";
|
|
14
|
+
import { dependencyReadyTasks } from "./capabilityContext/planState.js";
|
|
15
|
+
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
16
|
+
import { scanYamlCollection } from "../state/startupProjection.js";
|
|
17
|
+
import { numberedArchiveContract } from "../state/archiveDiscovery.js";
|
|
18
|
+
/**
|
|
19
|
+
* Orientation summaries layer for prime/status. Faithful port of the
|
|
20
|
+
* scripts/agentera `_*_summary`, `_load_todo_items`, `_issue_counts`,
|
|
21
|
+
* `_decision_*`, `_select_status_next_action`, and staleness helpers.
|
|
22
|
+
*/
|
|
7
23
|
export const DONE_STATUSES = new Set(["complete", "completed", "closed", "done", "resolved", "retired"]);
|
|
8
24
|
export const BLOCKED_STATUSES = new Set(["blocked", "stuck"]);
|
|
9
25
|
export const DECISION_ATTENTION_MAX_ENTRIES = 3;
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
annoying: 3,
|
|
18
|
-
};
|
|
19
|
-
const TODO_SECTION_SEVERITIES = {
|
|
20
|
-
critical: "critical",
|
|
21
|
-
degraded: "degraded",
|
|
22
|
-
warning: "warning",
|
|
23
|
-
normal: "normal",
|
|
24
|
-
info: "info",
|
|
25
|
-
annoying: "annoying",
|
|
26
|
-
};
|
|
27
|
-
const TODO_ITEM_RE = /^- \[([^\]]+)\]\s+(.*)/;
|
|
28
|
-
const TODO_PLANERA_SIGNALS = new Set([
|
|
29
|
-
"acceptance", "artifact", "capability", "capability-context", "compatibility", "contract",
|
|
30
|
-
"cross-capability", "docs", "metadata", "migration", "schema", "startup", "surface", "test", "validation",
|
|
31
|
-
]);
|
|
32
|
-
const PROFILERA_STALE_DAYS_ENV = "AGENTERA_PROFILERA_MAX_AGE_DAYS";
|
|
33
|
-
const DEFAULT_PROFILERA_STALE_DAYS = 7;
|
|
34
|
-
const INSPEKTERA_STALE_DAYS_ENV = "AGENTERA_INSPEKTERA_MAX_AGE_DAYS";
|
|
35
|
-
const DEFAULT_INSPEKTERA_STALE_DAYS = 30;
|
|
36
|
-
const INSPEKTERA_STALE_CYCLES_ENV = "AGENTERA_INSPEKTERA_MAX_CYCLES";
|
|
37
|
-
const DEFAULT_INSPEKTERA_STALE_CYCLES = 10;
|
|
26
|
+
const TODO_SECTION_SEVERITIES = Object.fromEntries(TODO_SEVERITY_ORDER_KEYS.map((key) => [key, key]));
|
|
27
|
+
const PROFILE_STALE_DAYS_ENV = "AGENTERA_PROFILE_MAX_AGE_DAYS";
|
|
28
|
+
const DEFAULT_PROFILE_STALE_DAYS = 7;
|
|
29
|
+
const AUDIT_STALE_DAYS_ENV = "AGENTERA_AUDIT_MAX_AGE_DAYS";
|
|
30
|
+
const DEFAULT_AUDIT_STALE_DAYS = 30;
|
|
31
|
+
const AUDIT_STALE_CYCLES_ENV = "AGENTERA_AUDIT_MAX_CYCLES";
|
|
32
|
+
const DEFAULT_AUDIT_STALE_CYCLES = 10;
|
|
38
33
|
function intEnv(env, key, def) {
|
|
39
34
|
const raw = env[key] ?? String(def);
|
|
40
35
|
const n = parseInt(raw, 10);
|
|
@@ -77,14 +72,47 @@ export function loadNamedArtifact(schemas, name) {
|
|
|
77
72
|
return null;
|
|
78
73
|
return loadArtifact(artifactPath(info, name));
|
|
79
74
|
}
|
|
80
|
-
export function registryArtifactPath(artifactId, schemasDir) {
|
|
81
|
-
|
|
75
|
+
export function registryArtifactPath(artifactId, schemasDir, env = process.env) {
|
|
76
|
+
// Targeted lookup: resolving a single identity (e.g. `profile` against a
|
|
77
|
+
// v2-shaped install) must not walk the full registry and warn about every
|
|
78
|
+
// required schema that happens to be absent from this install. Only the
|
|
79
|
+
// requested identity is inspected; model/schemas authority is shared with the
|
|
80
|
+
// full loader via `resolveRegistryModelPath`.
|
|
81
|
+
let record;
|
|
82
|
+
try {
|
|
83
|
+
record = loadArtifactRecord(artifactId, schemasDir, resolveRegistryModelPath(schemasDir));
|
|
84
|
+
}
|
|
85
|
+
catch (exc) {
|
|
86
|
+
process.stderr.write(`warning: failed to load artifact registry for schemas: ${exc.message}\n`);
|
|
87
|
+
record = undefined;
|
|
88
|
+
}
|
|
82
89
|
if (record === undefined)
|
|
83
90
|
throw new Error(`artifact registry does not define '${artifactId}'`);
|
|
84
|
-
return resolveArtifactPath(record, process.cwd(), activeObjectiveName());
|
|
91
|
+
return resolveArtifactPath(record, process.cwd(), activeObjectiveName(), env);
|
|
85
92
|
}
|
|
86
93
|
// ── staleness ───────────────────────────────────────────────────────
|
|
87
|
-
|
|
94
|
+
const PROFILE_GENERATED_RE = /<!-- Generated:\s*(\d{4}-\d{2}-\d{2})/;
|
|
95
|
+
const PROFILE_VALIDATED_RE = /Validated:\s*(\d{4}-\d{2}-\d{2})/;
|
|
96
|
+
export function parseProfileHeaderDates(text) {
|
|
97
|
+
const genMatch = PROFILE_GENERATED_RE.exec(text);
|
|
98
|
+
const generatedDate = genMatch ? genMatch[1] : null;
|
|
99
|
+
const generatedUtc = generatedDate ? dateFromIso(generatedDate) : null;
|
|
100
|
+
const valMatch = PROFILE_VALIDATED_RE.exec(text);
|
|
101
|
+
const validatedDate = valMatch ? valMatch[1] : null;
|
|
102
|
+
const validatedUtc = validatedDate ? dateFromIso(validatedDate) : null;
|
|
103
|
+
return { generatedDate, validatedDate, generatedUtc, validatedUtc };
|
|
104
|
+
}
|
|
105
|
+
function profileRefreshAnchorUtc(text) {
|
|
106
|
+
const { generatedUtc, validatedUtc } = parseProfileHeaderDates(text);
|
|
107
|
+
if (generatedUtc === null && validatedUtc === null)
|
|
108
|
+
return null;
|
|
109
|
+
if (generatedUtc === null)
|
|
110
|
+
return validatedUtc;
|
|
111
|
+
if (validatedUtc === null)
|
|
112
|
+
return generatedUtc;
|
|
113
|
+
return Math.max(generatedUtc, validatedUtc);
|
|
114
|
+
}
|
|
115
|
+
export function checkProfileStaleness(profilePath, env = process.env) {
|
|
88
116
|
if (!fs.existsSync(profilePath))
|
|
89
117
|
return null;
|
|
90
118
|
let text;
|
|
@@ -95,14 +123,11 @@ export function checkProfileraStaleness(profilePath, env = process.env) {
|
|
|
95
123
|
process.stderr.write(`warning: failed to read profile path ${profilePath}: ${exc.message}\n`);
|
|
96
124
|
return null;
|
|
97
125
|
}
|
|
98
|
-
const
|
|
99
|
-
if (
|
|
100
|
-
return null;
|
|
101
|
-
const gen = dateFromIso(m[1]);
|
|
102
|
-
if (gen === null)
|
|
126
|
+
const anchor = profileRefreshAnchorUtc(text);
|
|
127
|
+
if (anchor === null)
|
|
103
128
|
return null;
|
|
104
|
-
const staleDays = intEnv(env,
|
|
105
|
-
const since = daysSince(
|
|
129
|
+
const staleDays = intEnv(env, PROFILE_STALE_DAYS_ENV, DEFAULT_PROFILE_STALE_DAYS);
|
|
130
|
+
const since = daysSince(anchor);
|
|
106
131
|
return [since >= staleDays, since, staleDays];
|
|
107
132
|
}
|
|
108
133
|
export function healthAuditDate(entry) {
|
|
@@ -127,8 +152,25 @@ function progressEntryDate(entry) {
|
|
|
127
152
|
}
|
|
128
153
|
return null;
|
|
129
154
|
}
|
|
155
|
+
function scanSchemaArtifact(schemas, artifactId) {
|
|
156
|
+
const info = schemas[artifactId];
|
|
157
|
+
const contract = numberedArchiveContract(artifactId, resolveSourceRoot());
|
|
158
|
+
const currentPath = info ? artifactPath(info, artifactId) : path.join(process.cwd(), ".agentera", `${artifactId}.yaml`);
|
|
159
|
+
const primary = scanYamlCollection(currentPath, contract.entryCollection, artifactId, contract.entryNumberField);
|
|
160
|
+
const active = artifactId === "progress" && !primary.collection_found
|
|
161
|
+
? scanYamlCollection(currentPath, "progress", artifactId, contract.entryNumberField)
|
|
162
|
+
: primary;
|
|
163
|
+
return {
|
|
164
|
+
active,
|
|
165
|
+
archive: scanYamlCollection(currentPath, "archive", artifactId, contract.entryNumberField),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
130
168
|
function cyclesSinceHealthAudit(schemas, auditDate) {
|
|
131
|
-
const
|
|
169
|
+
const info = schemas.progress;
|
|
170
|
+
if (!info)
|
|
171
|
+
return null;
|
|
172
|
+
const scan = scanSchemaArtifact(schemas, "progress").active;
|
|
173
|
+
const entries = scan.entries.map((entry) => entry.fields);
|
|
132
174
|
if (entries.length === 0)
|
|
133
175
|
return null;
|
|
134
176
|
let count = 0;
|
|
@@ -139,11 +181,11 @@ function cyclesSinceHealthAudit(schemas, auditDate) {
|
|
|
139
181
|
}
|
|
140
182
|
return count;
|
|
141
183
|
}
|
|
142
|
-
function
|
|
184
|
+
function checkAuditStaleness(schemas, latest, auditDate, env = process.env) {
|
|
143
185
|
if (latest === null || auditDate === null)
|
|
144
186
|
return null;
|
|
145
|
-
const staleDaysThreshold = intEnv(env,
|
|
146
|
-
const staleCyclesThreshold = intEnv(env,
|
|
187
|
+
const staleDaysThreshold = intEnv(env, AUDIT_STALE_DAYS_ENV, DEFAULT_AUDIT_STALE_DAYS);
|
|
188
|
+
const staleCyclesThreshold = intEnv(env, AUDIT_STALE_CYCLES_ENV, DEFAULT_AUDIT_STALE_CYCLES);
|
|
147
189
|
const since = daysSince(auditDate);
|
|
148
190
|
const cyclesSince = cyclesSinceHealthAudit(schemas, auditDate);
|
|
149
191
|
const timeStale = since >= staleDaysThreshold;
|
|
@@ -168,7 +210,7 @@ function checkInspekteraAuditStaleness(schemas, latest, auditDate, env = process
|
|
|
168
210
|
if (cyclesSince !== null)
|
|
169
211
|
result.cycles_since_audit = cyclesSince;
|
|
170
212
|
if (isStale)
|
|
171
|
-
result.suggested_action = "Run
|
|
213
|
+
result.suggested_action = "Run audit to refresh health audit";
|
|
172
214
|
return result;
|
|
173
215
|
}
|
|
174
216
|
// ── todo items + issue counts ───────────────────────────────────────
|
|
@@ -217,9 +259,12 @@ export function loadTodoItems(schemas) {
|
|
|
217
259
|
continue;
|
|
218
260
|
}
|
|
219
261
|
if (currentSeverity) {
|
|
220
|
-
const
|
|
221
|
-
if (
|
|
222
|
-
|
|
262
|
+
const parsed = parseTodoMarkdownListItem(stripped);
|
|
263
|
+
if (!parsed || isResolvedTodoMarkdownStatus(parsed.status))
|
|
264
|
+
continue;
|
|
265
|
+
if (!parsed.description)
|
|
266
|
+
continue;
|
|
267
|
+
items.push({ severity: currentSeverity, status: parsed.status, text: parsed.description });
|
|
223
268
|
}
|
|
224
269
|
}
|
|
225
270
|
return items;
|
|
@@ -239,123 +284,228 @@ export function issueCounts(todoItems) {
|
|
|
239
284
|
}
|
|
240
285
|
return counts;
|
|
241
286
|
}
|
|
242
|
-
function todoNeedsPlanera(item) {
|
|
243
|
-
const text = item.text.toLowerCase();
|
|
244
|
-
let signalCount = 0;
|
|
245
|
-
for (const signal of TODO_PLANERA_SIGNALS)
|
|
246
|
-
if (text.includes(signal))
|
|
247
|
-
signalCount += 1;
|
|
248
|
-
return signalCount >= 2 || (signalCount >= 1 && text.length > 180);
|
|
249
|
-
}
|
|
250
287
|
// ── per-artifact summaries ──────────────────────────────────────────
|
|
251
288
|
export function planSummary(schemas) {
|
|
252
|
-
const
|
|
253
|
-
if (!
|
|
254
|
-
|
|
289
|
+
const info = schemas.plan;
|
|
290
|
+
if (!info) {
|
|
291
|
+
const summary = {
|
|
255
292
|
exists: false,
|
|
256
293
|
active: false,
|
|
257
294
|
tasks: [],
|
|
258
295
|
status: "absent",
|
|
259
296
|
title: "",
|
|
260
|
-
|
|
297
|
+
active_path: "",
|
|
298
|
+
absence_reason: "No active plan artifact is available from agentera state plan.",
|
|
261
299
|
};
|
|
300
|
+
summary.lifecycle_state = planLifecycleState(summary);
|
|
301
|
+
return summary;
|
|
262
302
|
}
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
303
|
+
const discovery = discoverPlanArtifacts(artifactPath(info, "plan"));
|
|
304
|
+
const activeDiagnostics = discovery.diagnostics.filter((diagnostic) => diagnostic.path === discovery.activePath && diagnostic.category !== "legacy");
|
|
305
|
+
const archivedPlans = discovery.archived.map((artifact) => planCatalogEntry(artifact, discovery.activePath));
|
|
306
|
+
if (!discovery.active) {
|
|
307
|
+
const summary = {
|
|
308
|
+
exists: activeDiagnostics.length === 0 && archivedPlans.length > 0,
|
|
309
|
+
active: false,
|
|
310
|
+
tasks: [],
|
|
311
|
+
status: activeDiagnostics.length > 0 ? "invalid" : archivedPlans.length > 0 ? "archived" : "absent",
|
|
312
|
+
title: "",
|
|
313
|
+
active_path: discovery.activePath,
|
|
314
|
+
absence_reason: activeDiagnostics.length > 0
|
|
315
|
+
? "Current plan artifact is invalid; see diagnostics."
|
|
316
|
+
: archivedPlans.length > 0
|
|
317
|
+
? "No active plan artifact is available; archived plan state is history only."
|
|
318
|
+
: "No active plan artifact is available from agentera state plan.",
|
|
319
|
+
complete: 0,
|
|
320
|
+
total: 0,
|
|
321
|
+
complete_plan: false,
|
|
322
|
+
first_pending: null,
|
|
323
|
+
archived_plans: archivedPlans,
|
|
324
|
+
archive_count: archivedPlans.length,
|
|
325
|
+
invalid_archive_paths: discovery.invalidArchivePaths,
|
|
326
|
+
...(activeDiagnostics.length > 0 ? { invalid_path: discovery.activePath } : {}),
|
|
327
|
+
diagnostics: discovery.diagnostics,
|
|
328
|
+
};
|
|
329
|
+
summary.lifecycle_state = planLifecycleState(summary);
|
|
330
|
+
return summary;
|
|
278
331
|
}
|
|
332
|
+
const d = discovery.active.data;
|
|
333
|
+
const parts = planDocumentParts(d);
|
|
334
|
+
const tasks = parts.tasks;
|
|
335
|
+
const status = parts.legacyEntries ? entryStatusPy(tasks[0], "") : parts.status;
|
|
336
|
+
const title = parts.legacyEntries
|
|
337
|
+
? String(firstPresent(tasks[0] ?? {}, ["title", "name"], ""))
|
|
338
|
+
: parts.title;
|
|
279
339
|
const complete = tasks.filter((task) => DONE_STATUSES.has(entryStatusPy(task, ""))).length;
|
|
280
340
|
const total = tasks.length;
|
|
281
341
|
const completePlan = DONE_STATUSES.has(status.toLowerCase()) && complete === total;
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
if (DONE_STATUSES.has(ts) || BLOCKED_STATUSES.has(ts))
|
|
287
|
-
continue;
|
|
288
|
-
firstPending = task;
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
return {
|
|
342
|
+
const firstPending = completePlan
|
|
343
|
+
? null
|
|
344
|
+
: dependencyReadyTasks(tasks).find((task) => entryStatusPy(task, "pending") === "pending") ?? null;
|
|
345
|
+
const summary = {
|
|
293
346
|
exists: true,
|
|
294
347
|
status,
|
|
295
348
|
title,
|
|
349
|
+
active_path: discovery.activePath,
|
|
296
350
|
constraints: d.constraints ?? null,
|
|
297
351
|
scope: d.scope ?? null,
|
|
298
352
|
design: d.design ?? null,
|
|
299
353
|
tasks,
|
|
300
354
|
complete,
|
|
301
355
|
total,
|
|
302
|
-
active:
|
|
356
|
+
active: true,
|
|
303
357
|
complete_plan: completePlan,
|
|
304
358
|
first_pending: firstPending,
|
|
359
|
+
archived_plans: archivedPlans,
|
|
360
|
+
archive_count: archivedPlans.length,
|
|
361
|
+
invalid_archive_paths: discovery.invalidArchivePaths,
|
|
362
|
+
diagnostics: discovery.diagnostics,
|
|
363
|
+
};
|
|
364
|
+
summary.lifecycle_state = planLifecycleState(summary);
|
|
365
|
+
return summary;
|
|
366
|
+
}
|
|
367
|
+
/** Startup keeps plan routing metadata, not the full active plan body. */
|
|
368
|
+
export function startupPlanSummary(plan) {
|
|
369
|
+
const tasks = asList(plan.tasks).filter((task) => task && typeof task === "object" && !Array.isArray(task));
|
|
370
|
+
const boundedTasks = tasks.slice(0, 10).map((task) => {
|
|
371
|
+
const item = {};
|
|
372
|
+
for (const key of ["id", "artifact", "name", "title", "status", "depends_on", "acceptance_summary", "evidence_summary", "blocked_reasons", "evaluation_state"]) {
|
|
373
|
+
if (!(key in task))
|
|
374
|
+
continue;
|
|
375
|
+
if (key === "acceptance_summary" || key === "evidence_summary") {
|
|
376
|
+
const summary = task[key];
|
|
377
|
+
item[key] = summary && typeof summary === "object" && !Array.isArray(summary)
|
|
378
|
+
? { count: summary.count ?? asList(summary.items).length }
|
|
379
|
+
: null;
|
|
380
|
+
}
|
|
381
|
+
else if (key === "evaluation_state") {
|
|
382
|
+
const evaluation = task[key];
|
|
383
|
+
item[key] = evaluation && typeof evaluation === "object" && !Array.isArray(evaluation)
|
|
384
|
+
? Object.fromEntries(Object.entries(evaluation).filter(([name]) => ["attempt_count", "failure_count", "last_verdict"].includes(name)))
|
|
385
|
+
: null;
|
|
386
|
+
}
|
|
387
|
+
else if (key === "depends_on") {
|
|
388
|
+
item[key] = asList(task[key]).slice(0, 20);
|
|
389
|
+
}
|
|
390
|
+
else if (key === "blocked_reasons") {
|
|
391
|
+
item[key] = asList(task[key]).slice(0, 3).map((reason) => truncateCodePoints(String(reason), 160));
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
item[key] = typeof task[key] === "string" ? truncateCodePoints(task[key], 256) : task[key];
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return item;
|
|
398
|
+
});
|
|
399
|
+
const archived = asList(plan.archived_plans).slice(0, 10);
|
|
400
|
+
const diagnostics = asList(plan.diagnostics).slice(0, 10);
|
|
401
|
+
const totalTasks = Number(plan.total ?? tasks.length);
|
|
402
|
+
const taskOmission = plan.task_omission && typeof plan.task_omission === "object" && !Array.isArray(plan.task_omission) ? plan.task_omission : {};
|
|
403
|
+
const finalTaskOmission = {
|
|
404
|
+
...taskOmission,
|
|
405
|
+
omitted: totalTasks > boundedTasks.length,
|
|
406
|
+
total: totalTasks,
|
|
407
|
+
returned_count: boundedTasks.length,
|
|
408
|
+
omitted_count: Math.max(0, totalTasks - boundedTasks.length),
|
|
409
|
+
omission_reason: totalTasks > boundedTasks.length ? taskOmission.omission_reason ?? "startup_detail_capacity" : "none",
|
|
410
|
+
retrieval: taskOmission.retrieval ?? { list: plan.id ? `agentera state plan tasks list ${String(plan.id)} --limit 100 --format json` : "agentera state plan tasks list --limit 100 --format json", restart: plan.id ? `agentera state plan tasks list ${String(plan.id)} --limit 100 --format json` : "agentera state plan tasks list --limit 100 --format json", get: "agentera state plan tasks get --id ID --format json" },
|
|
411
|
+
};
|
|
412
|
+
return {
|
|
413
|
+
id: plan.id ?? null,
|
|
414
|
+
artifact: plan.artifact ?? "plan",
|
|
415
|
+
exists: Boolean(plan.exists),
|
|
416
|
+
active: Boolean(plan.active),
|
|
417
|
+
status: plan.status,
|
|
418
|
+
title: plan.title ?? "",
|
|
419
|
+
complete: plan.complete ?? 0,
|
|
420
|
+
superseded: plan.superseded ?? 0,
|
|
421
|
+
total: totalTasks,
|
|
422
|
+
task_status_counts: plan.task_status_counts ?? {},
|
|
423
|
+
task_omission: finalTaskOmission,
|
|
424
|
+
complete_plan: Boolean(plan.complete_plan),
|
|
425
|
+
first_pending: plan.first_pending && typeof plan.first_pending === "object" && !Array.isArray(plan.first_pending)
|
|
426
|
+
? { id: plan.first_pending.id ?? null, artifact: plan.first_pending.artifact ?? "plan", name: plan.first_pending.name ?? plan.first_pending.title ?? "", status: plan.first_pending.status ?? "pending" }
|
|
427
|
+
: null,
|
|
428
|
+
tasks: boundedTasks,
|
|
429
|
+
task_count: totalTasks,
|
|
430
|
+
omitted_task_count: Math.max(0, totalTasks - boundedTasks.length),
|
|
431
|
+
archived_plans: archived,
|
|
432
|
+
archive_count: plan.archive_count ?? archived.length,
|
|
433
|
+
omitted_archive_count: Math.max(0, Number(plan.archive_count ?? archived.length) - archived.length),
|
|
434
|
+
invalid_archive_paths: (plan.invalid_archive_paths ?? []).slice(0, 10),
|
|
435
|
+
diagnostics,
|
|
436
|
+
omitted_diagnostic_count: Math.max(0, (plan.diagnostics ?? []).length - diagnostics.length),
|
|
437
|
+
source_contract: {
|
|
438
|
+
detail_availability: totalTasks > boundedTasks.length ? "summary" : "full",
|
|
439
|
+
retrieval: "agentera state plan --format json",
|
|
440
|
+
raw_archive_records: false,
|
|
441
|
+
},
|
|
442
|
+
lifecycle_state: plan.lifecycle_state ?? null,
|
|
305
443
|
};
|
|
306
444
|
}
|
|
307
|
-
export function docsSummary(schemas) {
|
|
308
|
-
const
|
|
309
|
-
if (!
|
|
310
|
-
return { exists: false, status: "absent", absence_reason: "No docs mapping artifact is available from agentera docs." };
|
|
445
|
+
export function docsSummary(schemas, startupInput = {}) {
|
|
446
|
+
const info = schemas.docs;
|
|
447
|
+
if (!info) {
|
|
448
|
+
return { exists: false, status: "absent", absence_reason: "No docs mapping artifact is available from agentera state docs." };
|
|
311
449
|
}
|
|
312
|
-
const
|
|
313
|
-
const mapping =
|
|
314
|
-
const index =
|
|
315
|
-
const
|
|
316
|
-
const
|
|
450
|
+
const docsPath = artifactPath(info, "docs");
|
|
451
|
+
const mapping = scanYamlCollection(docsPath, "mapping", "docs", "artifact");
|
|
452
|
+
const index = scanYamlCollection(docsPath, "index", "docs", "artifact");
|
|
453
|
+
const exists = fs.existsSync(docsPath);
|
|
454
|
+
const header = exists ? truncateCodePoints(fs.readFileSync(docsPath, "utf8"), 4096) : "";
|
|
455
|
+
const lastAudit = /^last_audit:\s*(.+)$/m.exec(header)?.[1]?.trim().replace(/^['"]|['"]$/g, "") ?? null;
|
|
317
456
|
return {
|
|
318
|
-
exists
|
|
457
|
+
exists,
|
|
319
458
|
status: "available",
|
|
320
|
-
last_audit:
|
|
321
|
-
conventions,
|
|
322
|
-
mapping,
|
|
323
|
-
mapping_entries: mapping.length,
|
|
324
|
-
coverage,
|
|
459
|
+
last_audit: lastAudit,
|
|
460
|
+
conventions: {},
|
|
461
|
+
mapping: mapping.entries.slice(0, 10).map((entry) => entry.fields),
|
|
462
|
+
mapping_entries: mapping.entries.length,
|
|
463
|
+
coverage: {},
|
|
325
464
|
source_contract: {
|
|
326
|
-
capability_startup_complete:
|
|
465
|
+
capability_startup_complete: capabilityStartupComplete(startupInput),
|
|
327
466
|
raw_artifact_reads_required: false,
|
|
328
467
|
state_families: [
|
|
329
468
|
"plan task details, dependencies, acceptance criteria, and evidence summaries",
|
|
330
469
|
"docs artifact mapping and source-contract completeness metadata",
|
|
331
|
-
"latest progress verification metadata needed for
|
|
332
|
-
"
|
|
470
|
+
"latest progress verification metadata needed for Orchestrate evaluation",
|
|
471
|
+
"Document closeout context metadata for docs/TODO/changelog/progress synchronization",
|
|
333
472
|
],
|
|
334
473
|
},
|
|
335
|
-
indexed_documents: index.length,
|
|
474
|
+
indexed_documents: index.entries.length,
|
|
336
475
|
};
|
|
337
476
|
}
|
|
338
477
|
export function progressSummary(schemas) {
|
|
339
|
-
const
|
|
340
|
-
|
|
478
|
+
const info = schemas.progress;
|
|
479
|
+
if (!info)
|
|
480
|
+
return { exists: false, status: "absent", absence_reason: "No progress cycles are available from agentera progress." };
|
|
481
|
+
const scan = scanSchemaArtifact(schemas, "progress").active;
|
|
482
|
+
const entries = scan.entries.map((entry) => entry.fields);
|
|
341
483
|
if (entries.length === 0) {
|
|
342
484
|
return { exists: false, status: "absent", absence_reason: "No progress cycles are available from agentera progress." };
|
|
343
485
|
}
|
|
344
|
-
const latest = recentCycles(entries, 1)[0];
|
|
486
|
+
const latest = recentCycles(entries, 1)[0] ?? {};
|
|
487
|
+
const latestCycle = {};
|
|
488
|
+
for (const key of ["number", "timestamp", "type", "phase", "what", "status"]) {
|
|
489
|
+
if (key in latest)
|
|
490
|
+
latestCycle[key] = latest[key];
|
|
491
|
+
}
|
|
345
492
|
return {
|
|
346
493
|
exists: true,
|
|
347
494
|
status: "available",
|
|
348
|
-
latest,
|
|
349
|
-
latest_verification: latest.
|
|
495
|
+
latest: latestCycle,
|
|
496
|
+
latest_verification: latest.verified_present ? { present: true } : null,
|
|
350
497
|
cycle_count: entries.length,
|
|
351
498
|
};
|
|
352
499
|
}
|
|
353
500
|
export function healthSummary(schemas, env = process.env) {
|
|
354
|
-
const
|
|
355
|
-
|
|
501
|
+
const info = schemas.health;
|
|
502
|
+
if (!info)
|
|
503
|
+
return { exists: false };
|
|
504
|
+
const scan = scanSchemaArtifact(schemas, "health").active;
|
|
505
|
+
const entries = scan.entries.map((entry) => entry.fields);
|
|
356
506
|
if (entries.length === 0)
|
|
357
507
|
return { exists: false };
|
|
358
|
-
const latest =
|
|
508
|
+
const latest = [...entries].sort((left, right) => Number(right.number ?? 0) - Number(left.number ?? 0))[0] ?? null;
|
|
359
509
|
if (!latest)
|
|
360
510
|
return { exists: false };
|
|
361
511
|
const grades = latest.grades && typeof latest.grades === "object" && !Array.isArray(latest.grades) ? latest.grades : {};
|
|
@@ -370,18 +520,20 @@ export function healthSummary(schemas, env = process.env) {
|
|
|
370
520
|
const trajectory = String(latest.trajectory ?? "");
|
|
371
521
|
const auditDate = healthAuditDate(latest);
|
|
372
522
|
const dateStr = auditDate !== null ? isoFromUtc(auditDate) : null;
|
|
523
|
+
const latestTimestamp = typeof latest.timestamp === "string" ? latest.timestamp : null;
|
|
373
524
|
const summary = {
|
|
374
525
|
exists: true,
|
|
375
|
-
|
|
526
|
+
id: latest.id ?? null,
|
|
527
|
+
artifact: "health",
|
|
376
528
|
date: dateStr,
|
|
377
|
-
timestamp: dateStr ??
|
|
529
|
+
timestamp: dateStr ?? latestTimestamp,
|
|
378
530
|
trajectory,
|
|
379
531
|
grade: worst ? worst[1] : "",
|
|
380
532
|
worst,
|
|
381
533
|
degrading: ["degrading", "declining", "worse"].includes(trajectory.toLowerCase()) ||
|
|
382
534
|
(worst !== null && worst[2] >= gradeRank.D),
|
|
383
535
|
};
|
|
384
|
-
const staleness =
|
|
536
|
+
const staleness = checkAuditStaleness(schemas, latest, auditDate, env);
|
|
385
537
|
if (staleness !== null)
|
|
386
538
|
Object.assign(summary, staleness);
|
|
387
539
|
return summary;
|
|
@@ -399,7 +551,7 @@ function objectiveStatus(data) {
|
|
|
399
551
|
return String(firstPresent(header, ["status"], data.status ?? objective.status ?? "") || "").toLowerCase();
|
|
400
552
|
}
|
|
401
553
|
export function activeObjectiveSummary() {
|
|
402
|
-
const root = path.join(process.cwd(), ".agentera", "
|
|
554
|
+
const root = path.join(process.cwd(), ".agentera", "optimize");
|
|
403
555
|
let isDir = false;
|
|
404
556
|
try {
|
|
405
557
|
isDir = fs.statSync(root).isDirectory();
|
|
@@ -462,7 +614,11 @@ export function statePresence(plan, docs, progress, health, objective) {
|
|
|
462
614
|
objective: Boolean(objective.exists),
|
|
463
615
|
};
|
|
464
616
|
const absence = {};
|
|
465
|
-
for (const [name, summary] of [
|
|
617
|
+
for (const [name, summary] of [
|
|
618
|
+
["plan", plan],
|
|
619
|
+
["docs", docs],
|
|
620
|
+
["progress", progress],
|
|
621
|
+
]) {
|
|
466
622
|
if (!summary.exists && summary.absence_reason)
|
|
467
623
|
absence[name] = summary.absence_reason;
|
|
468
624
|
}
|
|
@@ -477,43 +633,49 @@ export function statePresence(plan, docs, progress, health, objective) {
|
|
|
477
633
|
}
|
|
478
634
|
// ── decisions follow-up + attention ─────────────────────────────────
|
|
479
635
|
export function decisionFollowUp(schemas) {
|
|
480
|
-
const
|
|
481
|
-
for (const rawEntry of extractEntries(data)) {
|
|
482
|
-
const entry = decisionContextEntry(rawEntry);
|
|
636
|
+
for (const entry of startupDecisionEntries(schemas)) {
|
|
483
637
|
const satisfaction = entry.satisfaction;
|
|
484
|
-
if (!satisfaction || typeof satisfaction !== "object" || !satisfaction.review_needed)
|
|
638
|
+
if (!satisfaction || typeof satisfaction !== "object" || Array.isArray(satisfaction) || !satisfaction.review_needed)
|
|
485
639
|
continue;
|
|
486
|
-
const number = entry.number
|
|
640
|
+
const number = typeof entry.number === "string" || typeof entry.number === "number" ? entry.number : "?";
|
|
487
641
|
const title = firstPresent(entry, ["question", "choice"], "decision follow-up");
|
|
488
|
-
return { object: `DECISION ${number} follow-up`, title };
|
|
642
|
+
return { object: `DECISION ${number} follow-up`, title: String(title) };
|
|
489
643
|
}
|
|
490
644
|
return null;
|
|
491
645
|
}
|
|
646
|
+
export function startupDecisionEntries(schemas) {
|
|
647
|
+
if (!schemas.decisions)
|
|
648
|
+
return [];
|
|
649
|
+
const scans = scanSchemaArtifact(schemas, "decisions");
|
|
650
|
+
return [...scans.active.entries, ...scans.archive.entries].map((candidate) => ({
|
|
651
|
+
...candidate.fields,
|
|
652
|
+
...(candidate.identity.number !== null && candidate.fields.number === undefined ? { number: candidate.identity.number } : {}),
|
|
653
|
+
}));
|
|
654
|
+
}
|
|
492
655
|
function decisionAttentionState(satisfaction) {
|
|
493
656
|
const state = satisfaction.state;
|
|
494
657
|
if (state === null || state === undefined || state === "")
|
|
495
658
|
return "missing";
|
|
496
659
|
if (state === "user_confirmed_satisfied" && satisfaction.review_needed)
|
|
497
660
|
return "unconfirmed_user_confirmed_satisfied";
|
|
498
|
-
if (["open", "provisionally_satisfied", "review_needed"].includes(state))
|
|
661
|
+
if (["open", "provisionally_satisfied", "review_needed"].includes(String(state)))
|
|
499
662
|
return String(state);
|
|
500
663
|
if (state === "user_confirmed_satisfied")
|
|
501
664
|
return "user_confirmed_satisfied";
|
|
502
665
|
return "unrecognized";
|
|
503
666
|
}
|
|
504
667
|
export function decisionReviewAttention(schemas) {
|
|
505
|
-
const data = loadNamedArtifact(schemas, "decisions");
|
|
506
668
|
const reviewEntries = [];
|
|
507
669
|
const stateCounts = {};
|
|
508
|
-
for (const
|
|
509
|
-
const entry = decisionContextEntry(rawEntry);
|
|
670
|
+
for (const entry of startupDecisionEntries(schemas)) {
|
|
510
671
|
const satisfaction = entry.satisfaction;
|
|
511
|
-
if (!satisfaction || typeof satisfaction !== "object" || !satisfaction.review_needed)
|
|
672
|
+
if (!satisfaction || typeof satisfaction !== "object" || Array.isArray(satisfaction) || !satisfaction.review_needed)
|
|
512
673
|
continue;
|
|
513
674
|
const state = decisionAttentionState(satisfaction);
|
|
514
675
|
stateCounts[state] = (stateCounts[state] ?? 0) + 1;
|
|
515
676
|
reviewEntries.push({
|
|
516
|
-
|
|
677
|
+
id: String(entry.stable_id ?? entry.number ?? "legacy-unaddressable"),
|
|
678
|
+
artifact: "decisions",
|
|
517
679
|
title: truncate(firstPresent(entry, ["question", "choice", "summary"], "decision review"), 80),
|
|
518
680
|
state,
|
|
519
681
|
source: satisfaction.source ?? null,
|
|
@@ -526,7 +688,7 @@ export function decisionReviewAttention(schemas) {
|
|
|
526
688
|
.sort()
|
|
527
689
|
.map((name) => `${name}=${stateCounts[name]}`)
|
|
528
690
|
.join(", ");
|
|
529
|
-
const refs = boundedEntries.map((entry) => `Decision ${entry.
|
|
691
|
+
const refs = boundedEntries.map((entry) => `Decision ${entry.id}: ${entry.title}`).join("; ");
|
|
530
692
|
const more = reviewEntries.length - boundedEntries.length;
|
|
531
693
|
const suffix = more > 0 ? `; +${more} more` : "";
|
|
532
694
|
return {
|
|
@@ -541,55 +703,141 @@ export function decisionReviewAttention(schemas) {
|
|
|
541
703
|
}
|
|
542
704
|
export function formatNextAction(action) {
|
|
543
705
|
if (!action)
|
|
544
|
-
return "object=VISION refresh | capability=
|
|
545
|
-
|
|
706
|
+
return "object=VISION refresh | capability=vision | reason=no executable follow-up | phase=envision";
|
|
707
|
+
const fields = [
|
|
708
|
+
`object=${truncate(action.object)}`,
|
|
709
|
+
`capability=${action.capability}`,
|
|
710
|
+
`reason=${action.reason}`,
|
|
711
|
+
];
|
|
712
|
+
if ("phase" in action && action.phase)
|
|
713
|
+
fields.push(`phase=${action.phase}`);
|
|
714
|
+
if ("id" in action && action.id)
|
|
715
|
+
fields.push(`id=${action.id}`);
|
|
716
|
+
if ("artifact" in action && action.artifact)
|
|
717
|
+
fields.push(`artifact=${action.artifact}`);
|
|
718
|
+
if ("outcome" in action && action.outcome)
|
|
719
|
+
fields.push(`outcome=${action.outcome}`);
|
|
720
|
+
if ("eligible" in action && typeof action.eligible === "boolean")
|
|
721
|
+
fields.push(`eligible=${String(action.eligible)}`);
|
|
722
|
+
if ("retrieval" in action
|
|
723
|
+
&& action.retrieval
|
|
724
|
+
&& typeof action.retrieval === "object"
|
|
725
|
+
&& "exact" in action.retrieval
|
|
726
|
+
&& typeof action.retrieval.exact === "string")
|
|
727
|
+
fields.push(`retrieval=${action.retrieval.exact}`);
|
|
728
|
+
return fields.join(" | ");
|
|
546
729
|
}
|
|
547
|
-
|
|
730
|
+
/**
|
|
731
|
+
* Evolved state-readiness hint (Decision 76). Evaluates every cascade branch
|
|
732
|
+
* (no early-return); each candidate carries a protocol.yaml phase tag (PH1
|
|
733
|
+
* envision → PH5 audit). Position 1 (`recommended`) is the branch that would
|
|
734
|
+
* have won under the legacy early-return cascade.
|
|
735
|
+
*/
|
|
736
|
+
export function selectStatusReadiness(plan, health, objective, todoItems, decision, savedContext, completeTodoReadiness) {
|
|
737
|
+
const candidates = [];
|
|
548
738
|
const pending = plan.first_pending;
|
|
549
739
|
if (pending && typeof pending === "object" && !Array.isArray(pending)) {
|
|
550
740
|
const number = pending.number ?? "?";
|
|
551
741
|
const title = firstPresent(pending, ["name", "title"], "pending task");
|
|
552
|
-
|
|
742
|
+
candidates.push({
|
|
743
|
+
object: `PLAN Task ${number}: ${title}`,
|
|
744
|
+
capability: "orchestrate",
|
|
745
|
+
reason: "first pending plan task",
|
|
746
|
+
phase: "build",
|
|
747
|
+
});
|
|
553
748
|
}
|
|
554
749
|
if (health.degrading) {
|
|
555
750
|
const worst = health.worst;
|
|
556
751
|
const target = worst ? `${worst[0]}:${worst[1]}` : "degrading health";
|
|
557
|
-
|
|
752
|
+
candidates.push({
|
|
753
|
+
object: `HEALTH: ${target}`,
|
|
754
|
+
capability: "audit",
|
|
755
|
+
reason: "critical or degrading health",
|
|
756
|
+
phase: "audit",
|
|
757
|
+
});
|
|
558
758
|
}
|
|
559
759
|
if (objective.active) {
|
|
560
|
-
|
|
760
|
+
candidates.push({
|
|
561
761
|
object: `OBJECTIVE: ${objective.metric || objective.title}`,
|
|
562
|
-
capability: "
|
|
762
|
+
capability: "optimize",
|
|
563
763
|
reason: "active non-closed objective",
|
|
564
|
-
|
|
764
|
+
phase: "build",
|
|
765
|
+
});
|
|
565
766
|
}
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
767
|
+
const todoReadiness = completeTodoReadiness ?? evaluateTodoReadinessQueue(todoItems.map((item) => ({
|
|
768
|
+
id: String(item.id ?? ""),
|
|
769
|
+
artifact: String(item.artifact ?? "todo"),
|
|
770
|
+
record: { ...item, description: item.text },
|
|
771
|
+
})));
|
|
772
|
+
if (todoReadiness.selected) {
|
|
773
|
+
const item = todoReadiness.selected;
|
|
774
|
+
candidates.push({
|
|
775
|
+
object: `TODO ${item.id}: ${truncate(item.description, 120)}`,
|
|
776
|
+
capability: item.capability,
|
|
777
|
+
reason: item.reason,
|
|
778
|
+
phase: item.phase,
|
|
779
|
+
id: item.id,
|
|
780
|
+
artifact: item.artifact,
|
|
781
|
+
outcome: item.result,
|
|
782
|
+
eligible: item.eligible,
|
|
783
|
+
retrieval: item.retrieval,
|
|
784
|
+
});
|
|
785
|
+
if (todoReadiness.triage.count > 0) {
|
|
786
|
+
candidates.push({
|
|
787
|
+
object: `TODO triage: ${todoReadiness.triage.count} item(s)`,
|
|
788
|
+
capability: "status",
|
|
789
|
+
reason: todoReadiness.triage.recovery,
|
|
790
|
+
phase: "audit",
|
|
791
|
+
outcome: "needs-triage",
|
|
792
|
+
eligible: false,
|
|
793
|
+
});
|
|
570
794
|
}
|
|
571
|
-
|
|
795
|
+
}
|
|
796
|
+
else if (todoReadiness.abstainRecovery) {
|
|
797
|
+
candidates.push({
|
|
798
|
+
object: "TODO queue: no actionable item",
|
|
799
|
+
capability: "status",
|
|
800
|
+
reason: todoReadiness.abstainRecovery,
|
|
801
|
+
phase: "audit",
|
|
802
|
+
outcome: "needs-triage",
|
|
803
|
+
eligible: false,
|
|
804
|
+
});
|
|
572
805
|
}
|
|
573
806
|
if (health.stale && !health.degrading) {
|
|
574
|
-
|
|
575
|
-
object: `HEALTH:
|
|
576
|
-
capability: "
|
|
807
|
+
candidates.push({
|
|
808
|
+
object: `HEALTH: audit ${String(health.id ?? "unknown")} stale`,
|
|
809
|
+
capability: "audit",
|
|
577
810
|
reason: "stale health audit",
|
|
578
|
-
|
|
811
|
+
phase: "audit",
|
|
812
|
+
});
|
|
579
813
|
}
|
|
580
814
|
if (decision) {
|
|
581
|
-
|
|
815
|
+
candidates.push({
|
|
816
|
+
object: String(decision.object),
|
|
817
|
+
capability: "discuss",
|
|
818
|
+
reason: "unresolved decision follow-up",
|
|
819
|
+
phase: "deliberate",
|
|
820
|
+
});
|
|
582
821
|
}
|
|
583
822
|
const visionExists = fs.existsSync(path.join(process.cwd(), ".agentera", "vision.yaml"));
|
|
584
|
-
if (plan.exists && !plan.complete_plan) {
|
|
585
|
-
|
|
823
|
+
if ((plan.exists && !plan.complete_plan) || visionExists) {
|
|
824
|
+
candidates.push({ object: "VISION refresh", capability: "plan", reason: "no executable follow-up", phase: "envision" });
|
|
586
825
|
}
|
|
587
|
-
if (visionExists) {
|
|
588
|
-
|
|
826
|
+
if (savedContext && !visionExists) {
|
|
827
|
+
candidates.push({ object: "Direction clarification", capability: "discuss", reason: "saved context without vision", phase: "envision" });
|
|
589
828
|
}
|
|
590
|
-
|
|
591
|
-
|
|
829
|
+
candidates.push({ object: "VISION refresh", capability: "vision", reason: "fresh project direction", phase: "envision" });
|
|
830
|
+
// Guarantee at least one alternative so the hint never collapses to a single entry.
|
|
831
|
+
if (candidates.length < 2) {
|
|
832
|
+
candidates.push({ object: "Direction clarification", capability: "discuss", reason: "clarify project direction", phase: "envision" });
|
|
592
833
|
}
|
|
593
|
-
|
|
834
|
+
const [recommended, ...alternatives] = candidates;
|
|
835
|
+
return { recommended, alternatives };
|
|
836
|
+
}
|
|
837
|
+
/** Legacy single-entry projection of {@link selectStatusReadiness}: the
|
|
838
|
+
* top-priority candidate as `{object, capability, reason}` (no `phase`). */
|
|
839
|
+
export function selectStatusNextAction(plan, health, objective, todoItems, decision, savedContext, completeTodoReadiness) {
|
|
840
|
+
const { recommended } = selectStatusReadiness(plan, health, objective, todoItems, decision, savedContext, completeTodoReadiness);
|
|
841
|
+
return { object: recommended.object, capability: recommended.capability, reason: recommended.reason };
|
|
594
842
|
}
|
|
595
843
|
//# sourceMappingURL=orientation.js.map
|