agentera 3.0.0-dev.6 → 3.0.0-dev.69

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.
Files changed (696) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -22
  3. package/bundle/CHANGELOG.md +1361 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +252 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +488 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -188
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -34
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +266 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -2
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +325 -362
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +226 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +103 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +8 -6
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +184 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +461 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +133 -20
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +101 -12
  95. package/dist/analytics/extractCorpus/copilotSessions.js +53 -9
  96. package/dist/analytics/extractCorpus/core.js +59 -24
  97. package/dist/analytics/extractCorpus/corpus.js +58 -23
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +12 -7
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
  103. package/dist/analytics/extractCorpus/index.js +6 -1
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +98 -6
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +0 -1
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +59 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +25 -17
  134. package/dist/cli/capabilityContext/bespoke.js +31 -12
  135. package/dist/cli/capabilityContext/build.js +251 -0
  136. package/dist/cli/capabilityContext/closeout.js +33 -30
  137. package/dist/cli/capabilityContext/contract.js +39 -46
  138. package/dist/cli/capabilityContext/evidence.js +90 -73
  139. package/dist/cli/capabilityContext/index.js +1 -2
  140. package/dist/cli/capabilityContext/orchestration.js +45 -21
  141. package/dist/cli/capabilityContext/planState.js +93 -100
  142. package/dist/cli/capabilityContext/progress.js +60 -14
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +9 -20
  145. package/dist/cli/capabilityContext/slim.js +56 -10
  146. package/dist/cli/capabilityContext/startup.js +57 -115
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +37 -24
  149. package/dist/cli/capabilityContext.js +1 -2
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +163 -13
  153. package/dist/cli/commands/doctor.js +122 -114
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +22 -8
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +746 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +219 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +421 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +77 -52
  169. package/dist/cli/commands/report.js +88 -26
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -142
  172. package/dist/cli/commands/state/decisions.js +51 -61
  173. package/dist/cli/commands/state/docs.js +63 -86
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +11 -64
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +11 -111
  178. package/dist/cli/commands/state/index.js +6 -41
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +21 -64
  181. package/dist/cli/commands/state/plan.js +11 -169
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +11 -45
  185. package/dist/cli/commands/state/shared.js +0 -1
  186. package/dist/cli/commands/state/todo.js +29 -108
  187. package/dist/cli/commands/state/write.js +433 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +246 -211
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +94 -50
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +82 -52
  198. package/dist/cli/dispatch/lifecycle.js +268 -108
  199. package/dist/cli/dispatch/prime.js +68 -29
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +1 -2
  202. package/dist/cli/dispatch/state.js +68 -77
  203. package/dist/cli/dispatch.js +0 -1
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +395 -41
  206. package/dist/cli/migrationRequired.js +122 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +3 -56
  242. package/dist/hooks/compaction/apply.js +252 -50
  243. package/dist/hooks/compaction/dryRun.js +7 -4
  244. package/dist/hooks/compaction/index.js +5 -6
  245. package/dist/hooks/compaction/parse.js +201 -5
  246. package/dist/hooks/compaction/retention.js +30 -25
  247. package/dist/hooks/compaction/status.js +149 -32
  248. package/dist/hooks/compaction/types.js +0 -1
  249. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  250. package/dist/hooks/validateArtifact/index.js +7 -64
  251. package/dist/hooks/validateArtifact/markdown.js +57 -7
  252. package/dist/hooks/validateArtifact/schema.js +110 -19
  253. package/dist/hooks/validateArtifact/traversal.js +13 -11
  254. package/dist/hooks/validateArtifact/violations.js +7 -5
  255. package/dist/migrate/v2HandoffManifest.js +127 -8
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +108 -0
  258. package/dist/registries/artifactProtocolIds.js +2 -1
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +273 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +156 -6
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -13
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +840 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +859 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +1027 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/progressWritePolicy.js +33 -0
  343. package/dist/state/projectRoot.js +62 -0
  344. package/dist/state/projectionPolicy.js +190 -0
  345. package/dist/state/retrievalAuthority.js +156 -0
  346. package/dist/state/safeProjectFile.js +155 -0
  347. package/dist/state/startupAnalysis/benchmark.js +92 -27
  348. package/dist/state/startupAnalysis/contract.js +48 -10
  349. package/dist/state/startupAnalysis/helpers.js +27 -73
  350. package/dist/state/startupAnalysis/index.js +0 -1
  351. package/dist/state/startupAnalysis/metrics.js +25 -19
  352. package/dist/state/startupAnalysis/records.js +13 -10
  353. package/dist/state/startupAnalysis/report.js +26 -38
  354. package/dist/state/startupAnalysis/threshold.js +19 -7
  355. package/dist/state/startupAnalysis.js +0 -1
  356. package/dist/state/startupProjection.js +499 -0
  357. package/dist/state/stateMode.js +222 -0
  358. package/dist/state/stateStorageAuthority.js +47 -0
  359. package/dist/state/summaryEntityRead.js +25 -0
  360. package/dist/state/summaryMigrationProvenance.js +66 -0
  361. package/dist/state/summarySourceRowAuthority.js +36 -0
  362. package/dist/state/todoActivationSafety.js +58 -0
  363. package/dist/state/todoDocsEntities.js +1124 -0
  364. package/dist/state/todoDocsEntityValidation.js +158 -0
  365. package/dist/state/todoMarkdownProjection.js +51 -0
  366. package/dist/state/todoReconciliationActivation.js +182 -0
  367. package/dist/state/todoReconciliationInspection.js +171 -0
  368. package/dist/state/todoReconciliationRepair.js +318 -0
  369. package/dist/state/todoReconciliationTransaction.js +595 -0
  370. package/dist/state/write/assign.js +20 -0
  371. package/dist/state/write/candidateMutation.js +269 -0
  372. package/dist/state/write/errors.js +11 -0
  373. package/dist/state/write/experimentPublication.js +192 -0
  374. package/dist/state/write/explain.js +377 -0
  375. package/dist/state/write/fields.js +61 -0
  376. package/dist/state/write/glossaryPublication.js +263 -0
  377. package/dist/state/write/grammar.js +285 -0
  378. package/dist/state/write/helpers.js +29 -0
  379. package/dist/state/write/index.js +12 -0
  380. package/dist/state/write/input.js +391 -0
  381. package/dist/state/write/lock.js +837 -0
  382. package/dist/state/write/mutation.js +234 -0
  383. package/dist/state/write/operations.js +170 -0
  384. package/dist/state/write/planEvaluation.js +128 -0
  385. package/dist/state/write/planPublication.js +179 -0
  386. package/dist/state/write/runtimeOperations.js +146 -0
  387. package/dist/state/write/serialize.js +1 -0
  388. package/dist/state/write/transaction.js +57 -0
  389. package/dist/state/write/validate.js +7 -0
  390. package/dist/upgrade/appContentRefresh.js +383 -0
  391. package/dist/upgrade/appModel.js +8 -7
  392. package/dist/upgrade/atomicWriter.js +1 -0
  393. package/dist/upgrade/bundleEvidence.js +33 -0
  394. package/dist/upgrade/channels.js +12 -8
  395. package/dist/upgrade/compatibility.js +56 -21
  396. package/dist/upgrade/doctor.js +165 -199
  397. package/dist/upgrade/doctorClassifier.js +187 -0
  398. package/dist/upgrade/installedHooksRetirement.js +196 -0
  399. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  400. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  401. package/dist/upgrade/migrateArtifactsV2ToV3.js +375 -79
  402. package/dist/upgrade/migrationPublication.js +122 -0
  403. package/dist/upgrade/nextMajorDoctor.js +29 -10
  404. package/dist/upgrade/npxPlatformStatus.js +22 -0
  405. package/dist/upgrade/projectIntegration.js +145 -189
  406. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  407. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  408. package/dist/upgrade/runtimeMigration.js +272 -373
  409. package/dist/upgrade/upgradeCommands.js +14 -1
  410. package/dist/upgrade/upgradeLock.js +85 -0
  411. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  412. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  413. package/dist/upgrade/versionResolution.js +2 -3
  414. package/dist/validate/activationArtifactEvidence.js +852 -0
  415. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  416. package/dist/validate/activationConjunction.js +816 -0
  417. package/dist/validate/activationEvidenceManifest.js +531 -0
  418. package/dist/validate/activationPackageSemantics.js +29 -0
  419. package/dist/validate/appHomeContract.js +2 -8
  420. package/dist/validate/bootstrapAuthority.js +44 -0
  421. package/dist/validate/capability.js +133 -12
  422. package/dist/validate/crossCapability.js +15 -10
  423. package/dist/validate/retainedReferenceAuthority.js +879 -0
  424. package/dist/validate/selfAudit.js +39 -45
  425. package/dist/validate/v1LegacyCruft.js +131 -0
  426. package/dist/validate/vocabularyAuthority.js +18 -13
  427. package/package.json +60 -29
  428. package/bundle/references/adapters/cursor.md +0 -213
  429. package/bundle/references/adapters/opencode.md +0 -530
  430. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  431. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  432. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  433. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  434. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  435. package/bundle/references/analysis/benchmark.md +0 -267
  436. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  437. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  438. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  439. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  440. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  441. package/bundle/references/cli/coexistence-probe.yaml +0 -9
  442. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  443. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  444. package/bundle/references/cli/upgrade-repair-wording.md +0 -31
  445. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  446. package/bundle/references/meta/documentation-inventory.md +0 -49
  447. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  448. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  449. package/bundle/skills/agentera/agents/hej.toml +0 -6
  450. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  451. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  452. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  453. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  454. package/bundle/skills/agentera/agents/planera.toml +0 -6
  455. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  456. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  457. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  458. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  459. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  460. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  461. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  462. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  463. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  464. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  465. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  466. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  467. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  468. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  471. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  478. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  479. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  481. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  482. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  483. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  484. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  485. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  486. package/bundle/skills/agentera/references/contract.md +0 -1039
  487. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  488. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  489. package/dist/analytics/extractCorpus/core.js.map +0 -1
  490. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  491. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  492. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  493. package/dist/analytics/extractCorpus/index.js.map +0 -1
  494. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  495. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/capabilities/dokumentera/instructions.js +0 -6
  500. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  501. package/dist/capabilities/hej/instructions.js +0 -6
  502. package/dist/capabilities/hej/instructions.js.map +0 -1
  503. package/dist/capabilities/index.js.map +0 -1
  504. package/dist/capabilities/inspektera/instructions.js +0 -6
  505. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  506. package/dist/capabilities/inspirera/instructions.js +0 -6
  507. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  508. package/dist/capabilities/optimera/instructions.js +0 -6
  509. package/dist/capabilities/optimera/instructions.js.map +0 -1
  510. package/dist/capabilities/orkestrera/instructions.js +0 -6
  511. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  512. package/dist/capabilities/planera/instructions.js +0 -6
  513. package/dist/capabilities/planera/instructions.js.map +0 -1
  514. package/dist/capabilities/profilera/instructions.js +0 -6
  515. package/dist/capabilities/profilera/instructions.js.map +0 -1
  516. package/dist/capabilities/realisera/instructions.js +0 -6
  517. package/dist/capabilities/realisera/instructions.js.map +0 -1
  518. package/dist/capabilities/resonera/instructions.js +0 -6
  519. package/dist/capabilities/resonera/instructions.js.map +0 -1
  520. package/dist/capabilities/visionera/instructions.js +0 -6
  521. package/dist/capabilities/visionera/instructions.js.map +0 -1
  522. package/dist/capabilities/visualisera/instructions.js +0 -6
  523. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  524. package/dist/cli/appContext.js.map +0 -1
  525. package/dist/cli/argvalidate.js.map +0 -1
  526. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  527. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  528. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  529. package/dist/cli/capabilityContext/contract.js.map +0 -1
  530. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  531. package/dist/cli/capabilityContext/index.js.map +0 -1
  532. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  533. package/dist/cli/capabilityContext/planState.js.map +0 -1
  534. package/dist/cli/capabilityContext/progress.js.map +0 -1
  535. package/dist/cli/capabilityContext/realisera.js +0 -174
  536. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  537. package/dist/cli/capabilityContext/shared.js.map +0 -1
  538. package/dist/cli/capabilityContext/slim.js.map +0 -1
  539. package/dist/cli/capabilityContext/startup.js.map +0 -1
  540. package/dist/cli/capabilityContext/types.js.map +0 -1
  541. package/dist/cli/capabilityContext.js.map +0 -1
  542. package/dist/cli/commands/backfill.js +0 -84
  543. package/dist/cli/commands/backfill.js.map +0 -1
  544. package/dist/cli/commands/capability.js.map +0 -1
  545. package/dist/cli/commands/compact.js.map +0 -1
  546. package/dist/cli/commands/doctor.js.map +0 -1
  547. package/dist/cli/commands/lint.js.map +0 -1
  548. package/dist/cli/commands/prime.js.map +0 -1
  549. package/dist/cli/commands/query.js.map +0 -1
  550. package/dist/cli/commands/report.js.map +0 -1
  551. package/dist/cli/commands/schema.js.map +0 -1
  552. package/dist/cli/commands/state/decisions.js.map +0 -1
  553. package/dist/cli/commands/state/docs.js.map +0 -1
  554. package/dist/cli/commands/state/experiments.js.map +0 -1
  555. package/dist/cli/commands/state/health.js.map +0 -1
  556. package/dist/cli/commands/state/index.js.map +0 -1
  557. package/dist/cli/commands/state/objective.js.map +0 -1
  558. package/dist/cli/commands/state/plan.js.map +0 -1
  559. package/dist/cli/commands/state/progress.js.map +0 -1
  560. package/dist/cli/commands/state/shared.js.map +0 -1
  561. package/dist/cli/commands/state/todo.js.map +0 -1
  562. package/dist/cli/commands/state.js +0 -1023
  563. package/dist/cli/commands/state.js.map +0 -1
  564. package/dist/cli/commands/upgrade.js.map +0 -1
  565. package/dist/cli/commands/validate.js.map +0 -1
  566. package/dist/cli/commands/verify.js.map +0 -1
  567. package/dist/cli/dispatch/check.js.map +0 -1
  568. package/dist/cli/dispatch/index.js.map +0 -1
  569. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  570. package/dist/cli/dispatch/prime.js.map +0 -1
  571. package/dist/cli/dispatch/shared.js.map +0 -1
  572. package/dist/cli/dispatch/state.js.map +0 -1
  573. package/dist/cli/dispatch.js.map +0 -1
  574. package/dist/cli/errors.js.map +0 -1
  575. package/dist/cli/help.js.map +0 -1
  576. package/dist/cli/orientation.js.map +0 -1
  577. package/dist/cli/prime-blob.js.map +0 -1
  578. package/dist/cli/stateQuery.js.map +0 -1
  579. package/dist/cli/structured.js.map +0 -1
  580. package/dist/cli/todoMarkdown.js.map +0 -1
  581. package/dist/core/difflib.js.map +0 -1
  582. package/dist/core/git.js +0 -43
  583. package/dist/core/git.js.map +0 -1
  584. package/dist/core/paths.js.map +0 -1
  585. package/dist/core/pyjson.js.map +0 -1
  586. package/dist/core/sourceRoot.js.map +0 -1
  587. package/dist/core/toml.js.map +0 -1
  588. package/dist/core/yaml.js.map +0 -1
  589. package/dist/eval/evalSkills.js.map +0 -1
  590. package/dist/eval/semanticEval.js.map +0 -1
  591. package/dist/eval/semanticFixtures.js.map +0 -1
  592. package/dist/hooks/common.js.map +0 -1
  593. package/dist/hooks/compaction/apply.js.map +0 -1
  594. package/dist/hooks/compaction/dryRun.js.map +0 -1
  595. package/dist/hooks/compaction/index.js.map +0 -1
  596. package/dist/hooks/compaction/parse.js.map +0 -1
  597. package/dist/hooks/compaction/retention.js.map +0 -1
  598. package/dist/hooks/compaction/status.js.map +0 -1
  599. package/dist/hooks/compaction/types.js.map +0 -1
  600. package/dist/hooks/compaction.js +0 -935
  601. package/dist/hooks/compaction.js.map +0 -1
  602. package/dist/hooks/cursorPreToolUse.js +0 -19
  603. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  604. package/dist/hooks/cursorSessionStart.js +0 -71
  605. package/dist/hooks/cursorSessionStart.js.map +0 -1
  606. package/dist/hooks/sessionStart.js +0 -209
  607. package/dist/hooks/sessionStart.js.map +0 -1
  608. package/dist/hooks/sessionStop.js +0 -203
  609. package/dist/hooks/sessionStop.js.map +0 -1
  610. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  611. package/dist/hooks/validateArtifact/index.js.map +0 -1
  612. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  613. package/dist/hooks/validateArtifact/runtime.js +0 -83
  614. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  615. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  616. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  617. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  618. package/dist/hooks/validateArtifact.js +0 -924
  619. package/dist/hooks/validateArtifact.js.map +0 -1
  620. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  621. package/dist/registries/artifactProtocolIds.js.map +0 -1
  622. package/dist/registries/artifactRegistry.js.map +0 -1
  623. package/dist/registries/capabilityContract.js.map +0 -1
  624. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  625. package/dist/registries/packageRegistry.js.map +0 -1
  626. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  627. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  628. package/dist/release/releaseMetadata.js.map +0 -1
  629. package/dist/setup/codex/agents.js +0 -96
  630. package/dist/setup/codex/agents.js.map +0 -1
  631. package/dist/setup/codex/cli.js +0 -161
  632. package/dist/setup/codex/cli.js.map +0 -1
  633. package/dist/setup/codex/configToml.js +0 -644
  634. package/dist/setup/codex/configToml.js.map +0 -1
  635. package/dist/setup/codex/constants.js +0 -29
  636. package/dist/setup/codex/constants.js.map +0 -1
  637. package/dist/setup/codex/installRoot.js +0 -64
  638. package/dist/setup/codex/installRoot.js.map +0 -1
  639. package/dist/setup/codex/state.js +0 -270
  640. package/dist/setup/codex/state.js.map +0 -1
  641. package/dist/setup/codex.js +0 -12
  642. package/dist/setup/codex.js.map +0 -1
  643. package/dist/setup/copilot.js +0 -227
  644. package/dist/setup/copilot.js.map +0 -1
  645. package/dist/setup/cursor.js +0 -127
  646. package/dist/setup/cursor.js.map +0 -1
  647. package/dist/setup/doctor/core.js +0 -300
  648. package/dist/setup/doctor/core.js.map +0 -1
  649. package/dist/setup/doctor/diagnostics.js +0 -247
  650. package/dist/setup/doctor/diagnostics.js.map +0 -1
  651. package/dist/setup/doctor/opencode.js +0 -281
  652. package/dist/setup/doctor/opencode.js.map +0 -1
  653. package/dist/setup/doctor/report.js +0 -474
  654. package/dist/setup/doctor/report.js.map +0 -1
  655. package/dist/setup/doctor.js +0 -10
  656. package/dist/setup/doctor.js.map +0 -1
  657. package/dist/setup/opencode.js.map +0 -1
  658. package/dist/setup/smokeChecks.js.map +0 -1
  659. package/dist/state/installRoot.js.map +0 -1
  660. package/dist/state/progressCommit.js +0 -289
  661. package/dist/state/progressCommit.js.map +0 -1
  662. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  663. package/dist/state/startupAnalysis/contract.js.map +0 -1
  664. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  665. package/dist/state/startupAnalysis/index.js.map +0 -1
  666. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  667. package/dist/state/startupAnalysis/records.js.map +0 -1
  668. package/dist/state/startupAnalysis/report.js.map +0 -1
  669. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  670. package/dist/state/startupAnalysis.js.map +0 -1
  671. package/dist/upgrade/appModel.js.map +0 -1
  672. package/dist/upgrade/channels.js.map +0 -1
  673. package/dist/upgrade/coexistenceProbe.js +0 -83
  674. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  675. package/dist/upgrade/compatibility.js.map +0 -1
  676. package/dist/upgrade/doctor.js.map +0 -1
  677. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  678. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  679. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  680. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  681. package/dist/upgrade/projectIntegration.js.map +0 -1
  682. package/dist/upgrade/runtimeMigration.js.map +0 -1
  683. package/dist/upgrade/upgradeCommands.js.map +0 -1
  684. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  685. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  686. package/dist/upgrade/versionResolution.js.map +0 -1
  687. package/dist/validate/appHomeContract.js.map +0 -1
  688. package/dist/validate/capability.js.map +0 -1
  689. package/dist/validate/crossCapability.js.map +0 -1
  690. package/dist/validate/lifecycleAdapters.js +0 -772
  691. package/dist/validate/lifecycleAdapters.js.map +0 -1
  692. package/dist/validate/selfAudit.js.map +0 -1
  693. package/dist/validate/vocabularyAuthority.js.map +0 -1
  694. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  695. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  696. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,167 @@
1
+ import fs from "node:fs";
2
+ import { TextDecoder } from "node:util";
3
+ import { personalProfileGrounding, PersonalGlossaryBoundaryError, } from "../analytics/personalGlossaryProfile.js";
4
+ import { personalProfileGroundingContract } from "../registries/glossaryEntryContract.js";
5
+ import { discoverSchemasDir } from "./appContext.js";
6
+ import { parseProfileHeaderDates, registryArtifactPath } from "./orientation.js";
7
+ const DEFAULT_STALE_DAYS = 7;
8
+ const STALE_DAYS_ENV = "AGENTERA_PROFILE_MAX_AGE_DAYS";
9
+ function errorCode(error) {
10
+ return typeof error === "object" && error !== null && "code" in error
11
+ ? String(error.code)
12
+ : undefined;
13
+ }
14
+ function sameIdentity(left, right) {
15
+ return left.dev === right.dev && left.ino === right.ino && left.mode === right.mode;
16
+ }
17
+ function sameSnapshot(left, right) {
18
+ return sameIdentity(left, right)
19
+ && left.size === right.size
20
+ && left.mtimeNs === right.mtimeNs
21
+ && left.ctimeNs === right.ctimeNs;
22
+ }
23
+ /** Read one path without following a final symlink and reject source changes. */
24
+ export function readProfileSourceSafely(profilePath, maxBytes, hooks = {}) {
25
+ let pathSnapshot;
26
+ try {
27
+ pathSnapshot = fs.lstatSync(profilePath, { bigint: true });
28
+ }
29
+ catch (error) {
30
+ return { status: errorCode(error) === "ENOENT" ? "absent" : "unreadable" };
31
+ }
32
+ if (!pathSnapshot.isFile() || pathSnapshot.isSymbolicLink())
33
+ return { status: "unsafe" };
34
+ hooks.afterPathSnapshot?.();
35
+ let fd;
36
+ try {
37
+ const noFollow = hooks.noFollowFlag ?? (fs.constants.O_NOFOLLOW ?? 0);
38
+ fd = fs.openSync(profilePath, fs.constants.O_RDONLY | noFollow);
39
+ }
40
+ catch (error) {
41
+ return { status: errorCode(error) === "ELOOP" ? "unsafe" : "unreadable" };
42
+ }
43
+ try {
44
+ const opened = fs.fstatSync(fd, { bigint: true });
45
+ if (!opened.isFile() || !sameIdentity(pathSnapshot, opened))
46
+ return { status: "unsafe" };
47
+ if (opened.size > BigInt(maxBytes))
48
+ return { status: "oversized" };
49
+ hooks.afterOpen?.();
50
+ const bytes = Buffer.alloc(maxBytes + 1);
51
+ let offset = 0;
52
+ while (offset < bytes.length) {
53
+ const read = fs.readSync(fd, bytes, offset, bytes.length - offset, offset);
54
+ if (read === 0)
55
+ break;
56
+ offset += read;
57
+ }
58
+ hooks.afterRead?.();
59
+ const afterRead = fs.fstatSync(fd, { bigint: true });
60
+ let currentPath;
61
+ try {
62
+ currentPath = fs.lstatSync(profilePath, { bigint: true });
63
+ }
64
+ catch {
65
+ return { status: "unsafe" };
66
+ }
67
+ if (!sameSnapshot(opened, afterRead) || !sameSnapshot(afterRead, currentPath)) {
68
+ return { status: "unsafe" };
69
+ }
70
+ if (offset > maxBytes)
71
+ return { status: "oversized" };
72
+ return { status: "ok", bytes: bytes.subarray(0, offset) };
73
+ }
74
+ catch {
75
+ return { status: "unreadable" };
76
+ }
77
+ finally {
78
+ try {
79
+ fs.closeSync(fd);
80
+ }
81
+ catch {
82
+ // The acquisition already has a bounded result; close diagnostics are private.
83
+ }
84
+ }
85
+ }
86
+ function staleThreshold(env) {
87
+ const parsed = Number.parseInt(env[STALE_DAYS_ENV] ?? String(DEFAULT_STALE_DAYS), 10);
88
+ return Number.isNaN(parsed) || parsed < 0 ? DEFAULT_STALE_DAYS : parsed;
89
+ }
90
+ function unknownFreshness(env) {
91
+ return {
92
+ state: "unknown",
93
+ days_since_generated: null,
94
+ stale_threshold_days: staleThreshold(env),
95
+ generated_date: null,
96
+ validated_date: null,
97
+ };
98
+ }
99
+ function freshness(text, env) {
100
+ const dates = parseProfileHeaderDates(text);
101
+ const anchor = dates.generatedUtc === null
102
+ ? dates.validatedUtc
103
+ : dates.validatedUtc === null
104
+ ? dates.generatedUtc
105
+ : Math.max(dates.generatedUtc, dates.validatedUtc);
106
+ const threshold = staleThreshold(env);
107
+ if (anchor === null) {
108
+ return { ...unknownFreshness(env), generated_date: dates.generatedDate, validated_date: dates.validatedDate };
109
+ }
110
+ const now = new Date();
111
+ const today = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate());
112
+ const days = Math.round((today - anchor) / 86_400_000);
113
+ return {
114
+ state: days >= threshold ? "stale" : "current",
115
+ days_since_generated: days,
116
+ stale_threshold_days: threshold,
117
+ generated_date: dates.generatedDate,
118
+ validated_date: dates.validatedDate,
119
+ };
120
+ }
121
+ function result(profilePath, env, status, validityClass, recovery) {
122
+ return {
123
+ validity: { status, class: validityClass, recovery },
124
+ freshness: unknownFreshness(env),
125
+ profilePath,
126
+ groundingContent: null,
127
+ };
128
+ }
129
+ export function acquireProfile(schemasDir, env = process.env, hooks = {}) {
130
+ const contract = personalProfileGroundingContract();
131
+ let profilePath;
132
+ try {
133
+ profilePath = registryArtifactPath("profile", schemasDir ?? discoverSchemasDir(), env, { warn: false });
134
+ }
135
+ catch {
136
+ return result(null, env, "repair_needed", "unsafe", contract.repairRecovery);
137
+ }
138
+ const source = readProfileSourceSafely(profilePath, contract.maxProfileUtf8Bytes, hooks);
139
+ if (source.status === "absent") {
140
+ return result(profilePath, env, "absent", "absent", contract.absentRecovery);
141
+ }
142
+ if (source.status !== "ok") {
143
+ return result(profilePath, env, "repair_needed", source.status, contract.repairRecovery);
144
+ }
145
+ let decoded;
146
+ try {
147
+ decoded = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(source.bytes);
148
+ }
149
+ catch {
150
+ return result(profilePath, env, "repair_needed", "invalid_utf8", contract.repairRecovery);
151
+ }
152
+ try {
153
+ const groundingContent = personalProfileGrounding(decoded);
154
+ return {
155
+ validity: { status: "valid", class: "valid", recovery: null },
156
+ freshness: freshness(decoded, env),
157
+ profilePath,
158
+ groundingContent,
159
+ };
160
+ }
161
+ catch (error) {
162
+ const validityClass = error instanceof PersonalGlossaryBoundaryError
163
+ ? error.availability
164
+ : "malformed";
165
+ return result(profilePath, env, "repair_needed", validityClass, contract.repairRecovery);
166
+ }
167
+ }
@@ -0,0 +1,59 @@
1
+ import { STATE_FAMILY_FALLBACK_COMMANDS, STATE_FAMILY_LIST_COMMANDS } from "./capabilityContext/types.js";
2
+ export const STARTUP_AVAILABLE_STATE_FIELDS = [
3
+ "app_home",
4
+ "mode",
5
+ "profile",
6
+ "v1_migration",
7
+ "health",
8
+ "todo",
9
+ "plan",
10
+ "docs",
11
+ "progress",
12
+ "objective",
13
+ "state_presence",
14
+ "project_integration",
15
+ "attention",
16
+ "decision_attention",
17
+ "next_action",
18
+ "orchestration_context",
19
+ "closeout_context",
20
+ "evidence_context",
21
+ "benchmark_context",
22
+ "execution_context",
23
+ ];
24
+ export const STARTUP_COMPLETENESS_CONFIDENCE_CAVEATS = [
25
+ "representative benchmark evidence exists, but some source products remain degraded by schema divergence",
26
+ "Audit evidence context uses existing status, plan, progress, docs, health, TODO, and decisions state outputs",
27
+ ];
28
+ export const STARTUP_COMPLETENESS_CLI_FALLBACK = [
29
+ STATE_FAMILY_FALLBACK_COMMANDS.plan,
30
+ STATE_FAMILY_FALLBACK_COMMANDS.docs,
31
+ STATE_FAMILY_LIST_COMMANDS.progress,
32
+ ];
33
+ export function startupCompletenessContract(input = {}) {
34
+ const missingState = [];
35
+ const schemaError = input.schemaError ?? null;
36
+ if (schemaError) {
37
+ missingState.push(schemaError);
38
+ }
39
+ if (input.profileStatus === "not found")
40
+ missingState.push("profile not found");
41
+ if (input.profileStatus === "absent")
42
+ missingState.push("profile absent");
43
+ if (input.profileStatus === "repair_needed")
44
+ missingState.push("profile repair needed");
45
+ const complete = missingState.length === 0;
46
+ return {
47
+ complete_for_capability_startup: complete,
48
+ raw_artifact_reads_required: false,
49
+ raw_artifact_read_policy: "Do not read raw artifacts when complete_for_capability_startup is true. " +
50
+ "When incomplete, try cli_fallback first; raw reads are permitted only for a named corruption or CLI-defect diagnostic.",
51
+ available_state: [...STARTUP_AVAILABLE_STATE_FIELDS],
52
+ missing_state: missingState,
53
+ confidence_caveats: [...STARTUP_COMPLETENESS_CONFIDENCE_CAVEATS],
54
+ cli_fallback: [...STARTUP_COMPLETENESS_CLI_FALLBACK],
55
+ };
56
+ }
57
+ export function capabilityStartupComplete(input = {}) {
58
+ return Boolean(startupCompletenessContract(input).complete_for_capability_startup);
59
+ }
@@ -5,7 +5,11 @@ import { loadYamlMapping } from "../core/yaml.js";
5
5
  import { activeAppModel, discoverSchemasDir } from "./appContext.js";
6
6
  import { validateAgentString, validateIdentifier } from "./argvalidate.js";
7
7
  import { emitStructured } from "./structured.js";
8
- export const REQUIRED_SPARSE_CONTEXT_FIELDS = ["command", "status"];
8
+ import { truncateCodePoints } from "../core/text.js";
9
+ import { boundStructuredProjection } from "../state/projectionPolicy.js";
10
+ import { preCutoverCommand } from "./preCutoverCommand.js";
11
+ /** Shared state-query infrastructure ported from scripts/agentera. */
12
+ export const REQUIRED_SPARSE_CONTEXT_FIELDS = ["command", "outcome"];
9
13
  export const ROUTINE_STRUCTURED_FIELDS = [
10
14
  "command",
11
15
  "status",
@@ -14,18 +18,51 @@ export const ROUTINE_STRUCTURED_FIELDS = [
14
18
  "source",
15
19
  "filters",
16
20
  "summary",
21
+ "plans",
17
22
  "source_contract",
18
23
  ];
24
+ /** Canonical structured field set for the bare prime orientation briefing.
25
+ * `agentera schema` discovery, the emitted prime JSON `source_contract.fields`,
26
+ * and the text-mode source-contract line derive from this list. The shared skill
27
+ * is the permanent host integration authority. The published bare-prime shape
28
+ * stays stable: omission of default-only conditional payload is governed by
29
+ * `state_presence` (missing-vs-empty) and named recovery commands, not by
30
+ * trimming this set. */
31
+ export const PRIME_STRUCTURED_FIELDS = [
32
+ "command", "outcome", "app_home", "app", "mode", "v1_migration", "health",
33
+ "todo", "plan", "docs", "progress", "objective", "state_presence", "shared_skill", "project_integration", "attention",
34
+ "history",
35
+ "decision_attention", "next_action", "orchestration_context", "closeout_context",
36
+ "evidence_context", "benchmark_context", "execution_context", "startup", "source", "source_contract",
37
+ ];
38
+ /** Retired prime fields that receive one structured correction instead of
39
+ * falling through to the generic unsupported-field error. */
40
+ export const RETIRED_PRIME_FIELD_CORRECTIONS = {
41
+ issues: "todo",
42
+ };
43
+ /** Field declared available on the prime selector but emitted only by the
44
+ * `prime --context <capability>` surface, not by the bare default briefing.
45
+ * The bare briefing carries it as a `source_contract.capability_context`
46
+ * pointer with a `fetch_command`. */
47
+ export const PRIME_CONTEXT_ONLY_FIELDS = ["capability_context"];
48
+ /** Fields selectable via `prime [--context <cap>] --fields`. Derives the
49
+ * canonical structured set and the context-only `capability_context` pointer
50
+ * from one authority, so schema discovery and the prime selector cannot drift. */
51
+ export function availablePrimeFields(command) {
52
+ return command === "prime"
53
+ ? [...PRIME_STRUCTURED_FIELDS, ...PRIME_CONTEXT_ONLY_FIELDS]
54
+ : [...PRIME_STRUCTURED_FIELDS];
55
+ }
19
56
  export const COMMAND_FILTERS = {
20
- hej: [],
21
- plan: ["status"],
22
- progress: ["topic", "status", "limit"],
23
- health: ["dimension"],
57
+ prime: [],
58
+ plan: ["status", "limit", "cursor"],
59
+ progress: ["topic", "status", "limit", "cursor"],
60
+ health: ["dimension", "limit", "cursor"],
24
61
  todo: ["severity", "status"],
25
- decisions: ["topic"],
62
+ decisions: ["topic", "limit", "cursor"],
26
63
  docs: ["topic", "status"],
27
64
  objective: ["status"],
28
- experiments: ["topic", "status", "limit"],
65
+ experiments: ["topic", "status", "limit", "cursor", "objective"],
29
66
  query: ["list_artifacts", "topic", "severity", "dimension", "status", "limit"],
30
67
  };
31
68
  export function appModelPayload(model = activeAppModel()) {
@@ -39,8 +76,8 @@ export function surfaceMissingMessage(surface, p, model = activeAppModel()) {
39
76
  return (`${surface} is missing. Agentera cannot find it at ${p}. ` +
40
77
  `Agentera directory: ${payload.appHome}. ` +
41
78
  `App files directory: ${payload.managedAppRoot}. ` +
42
- "Run `agentera doctor` to preview the repair; run " +
43
- "`agentera doctor --format json` for structured details. " +
79
+ `Run \`${preCutoverCommand("doctor")}\` to preview the repair; run ` +
80
+ `\`${preCutoverCommand("doctor --format json")}\` for structured details. ` +
44
81
  `Technical details: appHome=${payload.appHome} managedAppRoot=${payload.managedAppRoot} ` +
45
82
  `skillRoot=${payload.skillRoot} runtimeRoot=${payload.runtimeRoot}.`);
46
83
  }
@@ -72,13 +109,16 @@ export function extractEntries(data) {
72
109
  if (Array.isArray(data))
73
110
  return data.filter((e) => e && typeof e === "object" && !Array.isArray(e));
74
111
  if (typeof data === "object") {
112
+ // cast: data is the parsed artifact body from loadArtifact (YAML/JSON IO boundary)
75
113
  for (const [key, val] of Object.entries(data)) {
76
114
  if (key === "archive")
77
115
  continue;
78
116
  if (Array.isArray(val) && val.length > 0 && val[0] && typeof val[0] === "object" && !Array.isArray(val[0])) {
117
+ // cast: val is an entries array selected from the parsed artifact (IO boundary)
79
118
  return val;
80
119
  }
81
120
  }
121
+ // cast: single-object artifact body from loadArtifact (IO boundary)
82
122
  return [data];
83
123
  }
84
124
  return [];
@@ -94,6 +134,7 @@ function pyStr(val) {
94
134
  if (Array.isArray(val))
95
135
  return "[" + val.map((v) => pyReprInner(v)).join(", ") + "]";
96
136
  if (typeof val === "object") {
137
+ // cast: val is an artifact-scalar object being rendered for display (IO boundary)
97
138
  return "{" + Object.entries(val).map(([k, v]) => `${pyReprInner(k)}: ${pyReprInner(v)}`).join(", ") + "}";
98
139
  }
99
140
  return String(val);
@@ -106,13 +147,13 @@ function pyReprInner(val) {
106
147
  export function formatScalar(val) {
107
148
  if (Array.isArray(val) || (val !== null && typeof val === "object")) {
108
149
  const s = pyStr(val);
109
- return s.length > 80 ? s.slice(0, 80) + "..." : s;
150
+ return truncateCodePoints(s, 80, "...");
110
151
  }
111
152
  return pyStr(val);
112
153
  }
113
154
  export function truncate(value, limit = 110) {
114
155
  const text = formatScalar(value).replace(/\n/g, " ");
115
- return text.length > limit ? text.slice(0, limit - 3) + "..." : text;
156
+ return truncateCodePoints(text, limit, "...");
116
157
  }
117
158
  export function asList(value) {
118
159
  return Array.isArray(value) ? value : [];
@@ -137,6 +178,7 @@ export function printStatusCounts(prefix, counts, out) {
137
178
  }
138
179
  export function stringFieldNames(fields) {
139
180
  return Object.entries(fields)
181
+ // cast: field descriptor read from a parsed artifact schema (YAML IO boundary)
140
182
  .filter(([, d]) => d?.type === "string")
141
183
  .map(([n]) => n);
142
184
  }
@@ -162,6 +204,7 @@ export function filterByFieldValue(entries, fieldName, value, substring = false)
162
204
  result.push(e);
163
205
  }
164
206
  else if (v && typeof v === "object") {
207
+ // cast: v is a field value drawn from a parsed artifact entry (IO boundary)
165
208
  const keys = Object.keys(v);
166
209
  if (keys.includes(value) || (substring && keys.some((k) => k.toLowerCase().includes(vl))))
167
210
  result.push(e);
@@ -257,7 +300,7 @@ export function requestedFields(fieldsArg) {
257
300
  return fields;
258
301
  }
259
302
  function availableStructuredFields(command) {
260
- // State commands only; prime/hej/capability handled by their own commands.
303
+ // State commands only; prime/capability handled by their own commands.
261
304
  return ROUTINE_STRUCTURED_FIELDS;
262
305
  }
263
306
  export function selectStructuredFields(command, value, fieldsArg, err) {
@@ -282,7 +325,7 @@ export function emitStateStructured(command, value, format, fieldsArg, out, err)
282
325
  const selected = selectStructuredFields(command, value, fieldsArg, err);
283
326
  if (selected === null)
284
327
  return 1;
285
- emitStructured(selected, format, out);
328
+ emitStructured(boundStructuredProjection(selected, command, format), format, out);
286
329
  return 0;
287
330
  }
288
331
  export function validateFilterValues(args, names) {
@@ -296,4 +339,3 @@ export function validateFilterValues(args, names) {
296
339
  }
297
340
  }
298
341
  }
299
- //# sourceMappingURL=stateQuery.js.map
@@ -15,4 +15,3 @@ export function emitStructured(value, outputFormat, out) {
15
15
  out(YAML.stringify(value, { sortMapEntries: false }));
16
16
  }
17
17
  }
18
- //# sourceMappingURL=structured.js.map
@@ -2,10 +2,9 @@
2
2
  * Markdown TODO list-item parsing for GitHub checkboxes and Agentera type tags.
3
3
  */
4
4
  const TODO_LIST_ITEM_RE = /^- \[([^\]]+)\]\s+(.*)/;
5
- /** GitHub task-list checkbox tokens (inner bracket content). */
6
- function isGithubCheckboxOpen(token) {
7
- return token === " ";
8
- }
5
+ const TODO_TYPE_TAG_RE = /^\[([a-z][a-z0-9_-]*)(?::([^\]\s]+))?\]\s+(.*)$/;
6
+ const TODO_LEGACY_ID_RE = /^(?:(\[[a-z][a-z0-9_-]*(?::[^\]\s]+)?\]\s+))?`([a-z]{10})`\s+(.*)$/;
7
+ const TODO_ID_TAG_RE = /^\[id:([a-z]{10})\]\s+(.*)$/;
9
8
  function isGithubCheckboxResolved(token) {
10
9
  return token.toLowerCase() === "x";
11
10
  }
@@ -19,15 +18,29 @@ export function parseTodoMarkdownListItem(line) {
19
18
  return null;
20
19
  const token = m[1];
21
20
  const rest = m[2].trim();
22
- if (isGithubCheckboxResolved(token)) {
23
- return { status: "resolved", description: rest };
24
- }
25
- if (isGithubCheckboxOpen(token)) {
26
- return { status: "open", description: rest };
27
- }
28
- return { status: "open", description: rest };
21
+ const explicitId = TODO_ID_TAG_RE.exec(rest);
22
+ const legacyId = explicitId ? null : TODO_LEGACY_ID_RE.exec(rest);
23
+ const id = explicitId?.[1] ?? legacyId?.[2];
24
+ const publicRest = explicitId?.[2]?.trim()
25
+ ?? (legacyId ? `${legacyId[1] ?? ""}${legacyId[3]}`.trim() : rest);
26
+ const typed = TODO_TYPE_TAG_RE.exec(publicRest) ?? TODO_TYPE_TAG_RE.exec(`[${token}] ${publicRest}`);
27
+ const status = isGithubCheckboxResolved(token) ? "resolved" : "open";
28
+ return {
29
+ status,
30
+ description: rest,
31
+ ...(typed ? { kind: typed[1], target_version: typed[2] ?? null, title: typed[3].trim() } : { title: publicRest }),
32
+ ...(id ? { id } : {}),
33
+ ...(publicRest !== rest ? { public_description: publicRest } : {}),
34
+ };
29
35
  }
30
36
  export function isResolvedTodoMarkdownStatus(status) {
31
37
  return status === "resolved";
32
38
  }
33
- //# sourceMappingURL=todoMarkdown.js.map
39
+ export function renderTodoPublicRecord(record) {
40
+ if (typeof record.title === "string" && record.title.trim()) {
41
+ const kind = typeof record.kind === "string" && record.kind.trim() ? record.kind : "task";
42
+ const target = typeof record.target_version === "string" && record.target_version.trim() ? `:${record.target_version}` : "";
43
+ return `[${kind}${target}] ${record.title.trim()}`;
44
+ }
45
+ return String(record.description ?? "");
46
+ }
@@ -0,0 +1,192 @@
1
+ import path from "node:path";
2
+ import { preCutoverCommand } from "./preCutoverCommand.js";
3
+ import { loadTodoReadinessContract } from "../registries/todoReadinessContract.js";
4
+ import { TODO_SEVERITY_ORDER } from "./todoSeverity.js";
5
+ import { renderTodoPublicRecord } from "./todoMarkdown.js";
6
+ function mapping(value) {
7
+ return value !== null && typeof value === "object" && !Array.isArray(value);
8
+ }
9
+ function validProjectedOrder(value) {
10
+ if (!mapping(value))
11
+ return false;
12
+ if (value.kind === "absent")
13
+ return Object.keys(value).length === 1;
14
+ return value.kind === "managed"
15
+ && Object.keys(value).sort().join(",") === "kind,markdownOrder"
16
+ && Number.isSafeInteger(value.markdownOrder)
17
+ && Number(value.markdownOrder) > 0;
18
+ }
19
+ function projectedMode(entities) {
20
+ const declared = entities.filter((entity) => Object.hasOwn(entity, "projectedOrder"));
21
+ if (!declared.length)
22
+ return false;
23
+ if (declared.length !== entities.length || declared.some((entity) => !validProjectedOrder(entity.projectedOrder))) {
24
+ throw new Error("projected TODO readiness requires one valid projectedOrder for every entity");
25
+ }
26
+ return true;
27
+ }
28
+ function compareProjectedOrder(left, right) {
29
+ const a = left.projectedOrder;
30
+ const b = right.projectedOrder;
31
+ if (a.kind !== b.kind)
32
+ return a.kind === "managed" ? -1 : 1;
33
+ if (a.kind === "managed" && b.kind === "managed")
34
+ return a.markdownOrder - b.markdownOrder || left.id.localeCompare(right.id);
35
+ return (left.queueRank ?? Number.MAX_SAFE_INTEGER) - (right.queueRank ?? Number.MAX_SAFE_INTEGER) || left.id.localeCompare(right.id);
36
+ }
37
+ function dependencies(readiness) {
38
+ return Array.isArray(readiness.dependencies)
39
+ ? readiness.dependencies.filter(mapping)
40
+ : [];
41
+ }
42
+ function hasDependencyCycle(itemId, byId) {
43
+ const visit = (id, visiting, visited) => {
44
+ if (visiting.has(id))
45
+ return true;
46
+ if (visited.has(id))
47
+ return false;
48
+ const entity = byId.get(id);
49
+ const readiness = mapping(entity?.record.readiness) ? entity.record.readiness : null;
50
+ if (!readiness)
51
+ return false;
52
+ visiting.add(id);
53
+ for (const dependency of dependencies(readiness)) {
54
+ if (dependency.artifact === "todo" && typeof dependency.id === "string") {
55
+ if (visit(dependency.id, visiting, visited))
56
+ return true;
57
+ }
58
+ }
59
+ visiting.delete(id);
60
+ visited.add(id);
61
+ return false;
62
+ };
63
+ return visit(itemId, new Set(), new Set());
64
+ }
65
+ export function evaluateTodoReadinessQueue(entities, sourceRoot) {
66
+ if (entities.length === 0) {
67
+ return {
68
+ selected: null,
69
+ evaluations: [],
70
+ triage: { count: 0, bounded: true, recovery: null },
71
+ abstainRecovery: null,
72
+ };
73
+ }
74
+ const contract = sourceRoot
75
+ ? loadTodoReadinessContract(path.join(sourceRoot, "skills/agentera/schemas/artifacts/todo.yaml"), path.join(sourceRoot, "skills/agentera/protocol.yaml"), path.join(sourceRoot, "skills/agentera/capability_schema_contract.yaml"))
76
+ : loadTodoReadinessContract();
77
+ const projected = projectedMode(entities);
78
+ const byId = new Map(entities.map((entity) => [entity.id, entity]));
79
+ const evaluate = (entity) => {
80
+ const { record } = entity;
81
+ const readiness = mapping(record.readiness) ? record.readiness : null;
82
+ const dependencyList = readiness ? dependencies(readiness) : [];
83
+ let outcome = "actionable";
84
+ let declaredRecovery = null;
85
+ if (record.status === "resolved")
86
+ outcome = "todo_resolved";
87
+ else if (!readiness)
88
+ outcome = "readiness_absent";
89
+ else if (readiness.blocked !== null) {
90
+ outcome = "blocked";
91
+ declaredRecovery = mapping(readiness.blocked) && typeof readiness.blocked.recovery === "string"
92
+ ? readiness.blocked.recovery
93
+ : null;
94
+ }
95
+ else if (mapping(readiness.gate) && readiness.gate.state === "pending") {
96
+ outcome = "gate_pending";
97
+ declaredRecovery = typeof readiness.gate.recovery === "string" ? readiness.gate.recovery : null;
98
+ }
99
+ else if (dependencyList.some((dependency) => dependency.artifact !== "todo")) {
100
+ outcome = "dependency_cross_artifact";
101
+ }
102
+ else if (dependencyList.some((dependency) => typeof dependency.id !== "string" || !byId.has(dependency.id))) {
103
+ outcome = "dependency_missing";
104
+ }
105
+ else if (hasDependencyCycle(entity.id, byId)) {
106
+ outcome = "dependency_cycle";
107
+ }
108
+ else if (dependencyList.some((dependency) => byId.get(String(dependency.id))?.record.status !== "resolved")) {
109
+ outcome = "dependency_open";
110
+ }
111
+ const authority = contract.outcomes[outcome];
112
+ const capability = readiness && typeof readiness.capability === "string" ? readiness.capability : undefined;
113
+ const queueRank = readiness && Number.isInteger(readiness.queue_rank) ? Number(readiness.queue_rank) : undefined;
114
+ return {
115
+ id: entity.id,
116
+ artifact: entity.artifact,
117
+ severity: String(record.severity ?? "normal"),
118
+ description: renderTodoPublicRecord(record),
119
+ outcome,
120
+ result: String(authority.result),
121
+ eligible: authority.eligible === true,
122
+ attention: String(authority.attention),
123
+ recovery: declaredRecovery ?? (typeof authority.recovery === "string" ? authority.recovery : null),
124
+ retrieval: { exact: preCutoverCommand(`state todo get --id ${entity.id} --format json`) },
125
+ ...(capability ? {
126
+ capability,
127
+ phase: contract.phaseByCapability.get(capability),
128
+ reason: typeof readiness?.reason === "string" ? readiness.reason : "",
129
+ } : {}),
130
+ ...(queueRank === undefined ? {} : { queueRank }),
131
+ ...(projected ? { projectedOrder: entity.projectedOrder } : {}),
132
+ };
133
+ };
134
+ const evaluations = entities.map(evaluate);
135
+ const actionable = evaluations.filter((entry) => entry.eligible);
136
+ if (!projected) {
137
+ const ranks = new Map();
138
+ for (const entry of actionable) {
139
+ const key = `${entry.severity}\0${String(entry.queueRank)}`;
140
+ ranks.set(key, [...(ranks.get(key) ?? []), entry]);
141
+ }
142
+ for (const conflicts of ranks.values()) {
143
+ if (conflicts.length < 2)
144
+ continue;
145
+ const authority = contract.outcomes.ordering_conflict;
146
+ for (const entry of conflicts) {
147
+ entry.outcome = "ordering_conflict";
148
+ entry.result = String(authority.result);
149
+ entry.eligible = false;
150
+ entry.attention = String(authority.attention);
151
+ entry.recovery = typeof authority.recovery === "string" ? authority.recovery : null;
152
+ }
153
+ }
154
+ }
155
+ const selected = evaluations
156
+ .filter((entry) => entry.eligible)
157
+ .sort((left, right) => (TODO_SEVERITY_ORDER[left.severity] ?? TODO_SEVERITY_ORDER.normal)
158
+ - (TODO_SEVERITY_ORDER[right.severity] ?? TODO_SEVERITY_ORDER.normal)
159
+ || (projected
160
+ ? compareProjectedOrder(left, right)
161
+ : (left.queueRank ?? Number.MAX_SAFE_INTEGER) - (right.queueRank ?? Number.MAX_SAFE_INTEGER) || left.id.localeCompare(right.id)))[0] ?? null;
162
+ const triageCount = evaluations.filter((entry) => entry.attention === "item").length;
163
+ const mixedRecovery = contract.queueOutcomes.mixed_actionable_and_triage?.recovery;
164
+ const queueRecovery = contract.queueOutcomes.all_non_actionable?.recovery;
165
+ const nonActionable = evaluations
166
+ .filter((entry) => !entry.eligible && entry.result !== "resolved")
167
+ .sort((left, right) => (TODO_SEVERITY_ORDER[left.severity] ?? TODO_SEVERITY_ORDER.normal)
168
+ - (TODO_SEVERITY_ORDER[right.severity] ?? TODO_SEVERITY_ORDER.normal)
169
+ || contract.precedence.indexOf(left.outcome) - contract.precedence.indexOf(right.outcome)
170
+ || (left.queueRank ?? Number.MAX_SAFE_INTEGER) - (right.queueRank ?? Number.MAX_SAFE_INTEGER));
171
+ const recoveryCandidate = nonActionable[0];
172
+ const equallyRankedRecoveries = recoveryCandidate
173
+ ? new Set(nonActionable
174
+ .filter((entry) => entry.severity === recoveryCandidate.severity
175
+ && entry.outcome === recoveryCandidate.outcome
176
+ && entry.queueRank === recoveryCandidate.queueRank)
177
+ .map((entry) => entry.recovery))
178
+ : new Set();
179
+ const abstainRecovery = equallyRankedRecoveries.size === 1
180
+ ? recoveryCandidate?.recovery ?? null
181
+ : typeof queueRecovery === "string" ? queueRecovery : null;
182
+ return {
183
+ selected,
184
+ evaluations,
185
+ triage: {
186
+ count: triageCount,
187
+ bounded: true,
188
+ recovery: triageCount > 0 && typeof mixedRecovery === "string" ? mixedRecovery : null,
189
+ },
190
+ abstainRecovery: !selected ? abstainRecovery : null,
191
+ };
192
+ }
@@ -0,0 +1,18 @@
1
+ /** Severity band keys for TODO.md sections — shared by state todo, prime, and orientation. */
2
+ export const TODO_SEVERITY_ORDER_KEYS = [
3
+ "critical",
4
+ "degraded",
5
+ "warning",
6
+ "normal",
7
+ "info",
8
+ "annoying",
9
+ ];
10
+ /** Sort priority for TODO severity bands (lower = higher priority). */
11
+ export const TODO_SEVERITY_ORDER = {
12
+ critical: 0,
13
+ degraded: 1,
14
+ warning: 1,
15
+ normal: 2,
16
+ info: 3,
17
+ annoying: 3,
18
+ };