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