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
@@ -1,6 +1,108 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import YAML, { isMap, isScalar, isSeq } from "yaml";
1
4
  import { resolvePath } from "../../core/paths.js";
2
5
  import { runCompaction } from "../../hooks/compaction/index.js";
3
6
  import { emitStructured } from "../structured.js";
7
+ import { boundStructuredProjection } from "../../state/projectionPolicy.js";
8
+ const TODO_REFERENCE_DIAGNOSTIC_LIMIT = 20;
9
+ function compareText(left, right) {
10
+ return left < right ? -1 : left > right ? 1 : 0;
11
+ }
12
+ function isDirectory(directory) {
13
+ try {
14
+ const stat = fs.lstatSync(directory);
15
+ return stat.isDirectory() && !stat.isSymbolicLink();
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ function yamlFilesBelow(directory) {
22
+ if (!isDirectory(directory))
23
+ return [];
24
+ return fs.readdirSync(directory, { withFileTypes: true })
25
+ .sort((left, right) => compareText(left.name, right.name))
26
+ .flatMap((entry) => {
27
+ const candidate = path.join(directory, entry.name);
28
+ if (entry.isDirectory() && !entry.isSymbolicLink())
29
+ return yamlFilesBelow(candidate);
30
+ return entry.isFile() && path.extname(entry.name) === ".yaml" ? [candidate] : [];
31
+ });
32
+ }
33
+ function activeStateYamlFiles(project) {
34
+ const stateRoot = path.join(project, ".agentera");
35
+ if (!isDirectory(stateRoot))
36
+ return [];
37
+ const topLevel = fs.readdirSync(stateRoot, { withFileTypes: true })
38
+ .filter((entry) => entry.isFile() && path.extname(entry.name) === ".yaml")
39
+ .map((entry) => path.join(stateRoot, entry.name));
40
+ return [...topLevel, ...yamlFilesBelow(path.join(stateRoot, "entities"))]
41
+ .sort(compareText);
42
+ }
43
+ function stringScalarValues(node) {
44
+ if (isScalar(node))
45
+ return typeof node.value === "string" ? [node.value] : [];
46
+ if (isMap(node))
47
+ return node.items.flatMap((pair) => stringScalarValues(pair.value));
48
+ if (isSeq(node))
49
+ return node.items.flatMap(stringScalarValues);
50
+ return [];
51
+ }
52
+ function volatileTodoReferenceDiagnostics(project) {
53
+ const matches = [];
54
+ for (const file of activeStateYamlFiles(project)) {
55
+ const relativePath = path.relative(project, file).split(path.sep).join("/");
56
+ const contents = fs.readFileSync(file, "utf8");
57
+ let order = 0;
58
+ for (const document of YAML.parseAllDocuments(contents)) {
59
+ for (const value of stringScalarValues(document.contents)) {
60
+ for (const match of value.matchAll(/TODO line \d+|TODO\.md:\d+/g)) {
61
+ matches.push({ path: relativePath, reference: match[0], order: order++ });
62
+ }
63
+ }
64
+ }
65
+ }
66
+ matches.sort((left, right) => compareText(left.path, right.path) || left.order - right.order);
67
+ return {
68
+ diagnostics: matches.slice(0, TODO_REFERENCE_DIAGNOSTIC_LIMIT).map(({ path, reference }) => ({ path, reference })),
69
+ omitted_count: Math.max(0, matches.length - TODO_REFERENCE_DIAGNOSTIC_LIMIT),
70
+ };
71
+ }
72
+ function volatileTodoReferenceGate(project, mode) {
73
+ const { diagnostics, omitted_count } = volatileTodoReferenceDiagnostics(project);
74
+ if (!diagnostics.length)
75
+ return null;
76
+ const count = diagnostics.length + omitted_count;
77
+ return {
78
+ status: {
79
+ artifact: "state_todo_references",
80
+ path: path.join(project, ".agentera"),
81
+ classification: "hygiene",
82
+ active_count: count,
83
+ archive_count: 0,
84
+ total_count: count,
85
+ over_limit_count: 0,
86
+ protected_overflow_count: 0,
87
+ exists: true,
88
+ reason: `${count} active state TODO reference${count === 1 ? "" : "s"} use volatile line syntax`,
89
+ },
90
+ mode,
91
+ action: "volatile_todo_reference",
92
+ changed: false,
93
+ result: null,
94
+ message: "replace TODO line references with stable TODO anchors",
95
+ diagnostics,
96
+ omitted_count,
97
+ };
98
+ }
99
+ function gatedCompactionOperations(project, mode) {
100
+ const hygiene = volatileTodoReferenceGate(project, mode);
101
+ if (mode === "fix" && hygiene)
102
+ return [hygiene];
103
+ const operations = runCompaction(project, mode);
104
+ return hygiene ? [...operations, hygiene] : operations;
105
+ }
4
106
  function pyStr(value) {
5
107
  if (value === null || value === undefined)
6
108
  return "None";
@@ -21,34 +123,59 @@ function compactionOperationPayload(op) {
21
123
  archive_count: status.archive_count,
22
124
  total_count: status.total_count,
23
125
  over_limit_count: status.over_limit_count,
126
+ ...(status.pending_summarization_count !== undefined
127
+ ? { pending_summarization_count: status.pending_summarization_count }
128
+ : {}),
129
+ ...(status.projection_state ? { projection_state: status.projection_state } : {}),
24
130
  protected_overflow_count: status.protected_overflow_count ?? 0,
25
131
  mode: op.mode,
26
132
  action: op.action,
27
133
  changed: op.changed,
28
134
  message: op.message,
29
135
  reason: status.reason,
136
+ ...(status.projection_recovery ? { recovery: status.projection_recovery } : {}),
137
+ ...(op.diagnostics
138
+ ? {
139
+ diagnostics: op.diagnostics.map(({ path, reference }) => ({ path, reference })),
140
+ omitted_count: op.omitted_count ?? 0,
141
+ }
142
+ : {}),
30
143
  };
31
144
  if (op.result !== null) {
145
+ const recovery = op.result.recovery;
32
146
  payload.result = {
33
147
  active_before: op.result.full_before,
34
148
  archive_before: op.result.oneline_before,
35
149
  active_after: op.result.full_after,
36
150
  archive_after: op.result.oneline_after,
37
151
  dropped: op.result.dropped,
152
+ omitted_count: op.result.omitted_count ?? 0,
153
+ ...(op.result.omission_reason ? { omission_reason: op.result.omission_reason } : {}),
38
154
  changed: op.result.changed,
155
+ ...(recovery ? { recovery } : {}),
39
156
  };
40
157
  }
41
158
  return payload;
42
159
  }
43
160
  function compactionGuidance(mode, operations) {
44
161
  const over = operations.filter((op) => op.action === "over_limit" || op.action === "pending_fix");
162
+ const projections = operations.filter((op) => op.action === "projection" || op.action === "pending_projection");
163
+ const formatting = operations.filter((op) => op.action === "formatting" || op.action === "pending_formatting");
45
164
  const protectedOps = operations.filter((op) => op.action === "protected_overflow");
46
165
  const errors = operations.filter((op) => op.action === "error");
47
- const checkCommand = "npx -y agentera compact --mode check --format json";
48
- const fixCommand = "npx -y agentera compact --mode fix --format json";
166
+ const refused = operations.filter((op) => op.action === "refused");
167
+ const volatileTodoReferences = operations.filter((op) => op.action === "volatile_todo_reference");
168
+ const checkCommand = "npx -y agentera check compact --mode check --format json";
169
+ const fixCommand = "npx -y agentera check compact --mode fix --format json";
49
170
  if (errors.length > 0) {
50
171
  return `Inspect the reported errors, repair invalid artifacts, then rerun \`${checkCommand}\`.`;
51
172
  }
173
+ if (volatileTodoReferences.length > 0) {
174
+ return `Replace volatile TODO line references in active state with stable anchors, then rerun \`${checkCommand}\`.`;
175
+ }
176
+ if (refused.length > 0) {
177
+ return "Projection changes were safely refused until each full entry has a verified numbered archive; inspect recovery metadata and retry after recovery.";
178
+ }
52
179
  if (protectedOps.length > 0) {
53
180
  const artifacts = protectedOps.map((op) => op.status.artifact).join(", ");
54
181
  return (`Protected-overflow review pressure blocks compaction for: ${artifacts}. ` +
@@ -61,23 +188,37 @@ function compactionGuidance(mode, operations) {
61
188
  if (mode === "fix" && over.length > 0) {
62
189
  return "Some artifacts remain over limit; inspect skipped or unsupported artifacts before manual remediation.";
63
190
  }
64
- return "No repair needed. Compactable artifacts are within uniform_10_40_50 limits.";
191
+ if (formatting.length > 0) {
192
+ const artifacts = formatting.map((op) => op.status.artifact).join(", ");
193
+ return mode === "check"
194
+ ? `Summary formatting is pending for: ${artifacts}. Safe fix: \`${fixCommand}\`.`
195
+ : `Summary formatting remains pending for: ${artifacts}; inspect the artifact diagnostics.`;
196
+ }
197
+ if (projections.length > 0) {
198
+ return "Projection defaults are bounded; numbered archive records remain complete and authoritative.";
199
+ }
200
+ return "No repair needed. Compactable artifacts are within the configured projection defaults.";
65
201
  }
66
202
  function compactionSummary(mode, operations) {
67
203
  const counts = {};
68
204
  for (const op of operations)
69
205
  counts[op.action] = (counts[op.action] ?? 0) + 1;
70
206
  const overLimit = operations.filter((op) => op.action === "over_limit" || op.action === "pending_fix").length;
207
+ const projections = operations.filter((op) => op.action === "projection" || op.action === "pending_projection").length;
208
+ const formatting = operations.filter((op) => op.action === "formatting" || op.action === "pending_formatting").length;
71
209
  const protectedOverflow = operations.filter((op) => op.action === "protected_overflow").length;
72
210
  const errors = operations.filter((op) => op.action === "error").length;
211
+ const volatileTodoReferences = operations.filter((op) => op.action === "volatile_todo_reference").length;
73
212
  const changed = operations.filter((op) => op.changed).length;
74
- const status = errors || protectedOverflow || (mode === "check" && overLimit) ? "fail" : "pass";
213
+ const status = errors || volatileTodoReferences || (mode === "check" && (overLimit || formatting)) ? "fail" : "pass";
75
214
  return {
76
215
  status,
77
216
  mode,
78
217
  artifact_count: operations.length,
79
218
  over_limit_count: overLimit,
219
+ formatting_count: formatting,
80
220
  protected_overflow_count: protectedOverflow,
221
+ projection_count: projections,
81
222
  error_count: errors,
82
223
  changed_count: changed,
83
224
  action_counts: counts,
@@ -87,9 +228,10 @@ function compactionSummary(mode, operations) {
87
228
  function compactionExitCode(mode, operations) {
88
229
  if (operations.some((op) => op.action === "error"))
89
230
  return 2;
90
- if (operations.some((op) => op.action === "protected_overflow"))
231
+ if (operations.some((op) => op.action === "volatile_todo_reference"))
91
232
  return 1;
92
- if (mode === "check" && operations.some((op) => op.action === "over_limit"))
233
+ if (mode === "check" &&
234
+ operations.some((op) => op.action === "over_limit" || op.action === "formatting"))
93
235
  return 1;
94
236
  return 0;
95
237
  }
@@ -107,13 +249,14 @@ function emitCompactionPayload(payload, mode, format, out) {
107
249
  const summary = payload.summary;
108
250
  const project = payload.project;
109
251
  if (format === "json") {
110
- emitStructured(payload, "json", out);
252
+ emitStructured(boundStructuredProjection(payload, "compact", "json"), "json", out);
111
253
  return;
112
254
  }
113
255
  out(`status=${summary.status} | mode=${mode} | project=${project}\n`);
114
256
  out("counts=" +
115
257
  `artifacts:${summary.artifact_count} ` +
116
258
  `over_limit:${summary.over_limit_count} ` +
259
+ `formatting:${summary.formatting_count} ` +
117
260
  `protected_overflow:${summary.protected_overflow_count} ` +
118
261
  `errors:${summary.error_count} ` +
119
262
  `changed:${summary.changed_count}\n`);
@@ -122,8 +265,17 @@ function emitCompactionPayload(payload, mode, format, out) {
122
265
  `classification=${item.classification} | path=${item.path} | ` +
123
266
  `active=${pyStr(item.active_count)} | archive=${pyStr(item.archive_count)} | ` +
124
267
  `total=${pyStr(item.total_count)} | over=${pyStr(item.over_limit_count)} | ` +
268
+ `pending_summarization=${pyStr(item.pending_summarization_count)} | ` +
125
269
  `protected_overflow=${item.protected_overflow_count} | ` +
126
270
  `message=${item.message}\n`);
271
+ if (Array.isArray(item.diagnostics)) {
272
+ for (const diagnostic of item.diagnostics) {
273
+ if (!diagnostic || typeof diagnostic !== "object" || Array.isArray(diagnostic))
274
+ continue;
275
+ out(` diagnostic=${String(diagnostic.path)}: ${String(diagnostic.reference)}\n`);
276
+ }
277
+ out(` omitted_count=${pyStr(item.omitted_count)}\n`);
278
+ }
127
279
  }
128
280
  out(`guidance=${summary.guidance}\n`);
129
281
  }
@@ -131,18 +283,16 @@ export function cmdCompact(args, io = {}) {
131
283
  const out = io.out ?? ((t) => process.stdout.write(t));
132
284
  const mode = args.mode ?? "check";
133
285
  const project = resolvePath(args.project ?? process.cwd());
134
- const operations = runCompaction(project, mode);
135
- const payload = compactionPayload("compact", project, mode, operations);
286
+ const operations = gatedCompactionOperations(project, mode);
287
+ const payload = compactionPayload("check compact", project, mode, operations);
136
288
  emitCompactionPayload(payload, mode, args.format ?? "text", out);
137
289
  return compactionExitCode(mode, operations);
138
290
  }
139
291
  export function cmdGate(args, io = {}) {
140
292
  const out = io.out ?? ((t) => process.stdout.write(t));
141
293
  const project = resolvePath(args.project ?? process.cwd());
142
- const operations = runCompaction(project, "check");
143
- const payload = compactionPayload("gate", project, "check", operations);
144
- payload.gate = "compaction";
294
+ const operations = gatedCompactionOperations(project, "check");
295
+ const payload = compactionPayload("check compact", project, "check", operations);
145
296
  emitCompactionPayload(payload, "check", args.format ?? "text", out);
146
297
  return compactionExitCode("check", operations);
147
298
  }
148
- //# sourceMappingURL=compact.js.map
@@ -1,11 +1,15 @@
1
1
  import os from "node:os";
2
2
  import { expanduser, resolvePath } from "../../core/paths.js";
3
+ import { pyJsonIndentSorted } from "../../core/pyjson.js";
3
4
  import { resolveDoctorInstallRoot, resolveSourceRootStrict, } from "../../upgrade/appModel.js";
4
5
  import { runNpmSmokeChecks } from "../../setup/smokeChecks.js";
5
- import { APP_MANUAL_REVIEW_NEEDED, APP_MIGRATION_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, APP_UP_TO_DATE, buildDoctorStatus, EXPECTED_STATE_COMMANDS, doctorParityJsonEnvelope, } from "../../upgrade/doctor.js";
6
+ import { APP_MANUAL_REVIEW_NEEDED, APP_MIGRATION_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, APP_UP_TO_DATE, appLifecycleActionNoun, buildDoctorStatus, EXPECTED_STATE_COMMANDS, doctorParityJsonEnvelope, } from "../../upgrade/doctor.js";
6
7
  import { classifyInstall } from "../../upgrade/compatibility.js";
7
- import { prependCoexistenceDoctorSection, resolveCoexistenceDoctorLines, } from "../../upgrade/coexistenceProbe.js";
8
8
  import { prependNextMajorDoctorSection, resolveNextMajorDoctorLines, } from "../../upgrade/nextMajorDoctor.js";
9
+ import { diagnoseCanonicalSkill } from "../../setup/sharedSkill.js";
10
+ import { diagnoseRetiredResources } from "../../upgrade/retiredResourceDiagnostics.js";
11
+ import { commandText } from "../../upgrade/upgradeCommands.js";
12
+ import { inspectTodoReconciliationState } from "../../state/todoReconciliationInspection.js";
9
13
  const PLAIN_STATUS = {
10
14
  pending: "ready to fix",
11
15
  applied: "fixed",
@@ -19,52 +23,40 @@ const PLAIN_STATUS = {
19
23
  [APP_MIGRATION_NEEDED]: "needs migration",
20
24
  [APP_MANUAL_REVIEW_NEEDED]: "needs manual review",
21
25
  };
22
- /** Commands the TS dispatcher exposes (used by the in-process CLI probe). */
23
- const DISPATCHER_COMMANDS = new Set([
24
- "prime",
25
- "schema",
26
- "state",
27
- "query",
28
- "check",
29
- "lint",
30
- "compact",
31
- "validate",
32
- "verify",
33
- "stats",
34
- "upgrade",
35
- "doctor",
36
- "report",
37
- "usage",
38
- "hook",
39
- ]);
40
26
  function plainStatus(value) {
41
27
  return PLAIN_STATUS[value] ?? value.replace(/_/g, " ").replace(/-/g, " ");
42
28
  }
43
- function doctorActionNoun(status) {
44
- if (status.status === APP_OUTDATED)
45
- return "update";
46
- if (status.status === APP_MIGRATION_NEEDED)
47
- return "migration";
48
- return "repair";
29
+ function previewCommand(resource, context) {
30
+ return commandText([
31
+ "npx",
32
+ "-y",
33
+ "agentera@next",
34
+ "doctor",
35
+ "--home",
36
+ context.home,
37
+ "--project",
38
+ context.project,
39
+ "--install-root",
40
+ context.installRoot,
41
+ "--retired-resource",
42
+ resource.id,
43
+ "--format",
44
+ "json",
45
+ ]);
49
46
  }
50
- /** In-process probe: confirm the TS CLI exposes the expected state commands. */
51
- function inProcessProbe(args) {
52
- const missing = args.expectedCommands.filter((name) => !DISPATCHER_COMMANDS.has(name));
53
- const command = ["npx", "-y", "agentera", "--help"];
47
+ function doctorRetiredResources(diagnosis, context) {
54
48
  return {
55
- ok: missing.length === 0,
56
- command,
57
- returnCode: 0,
58
- stdoutTail: [],
59
- stderrTail: [],
60
- missingCommands: missing,
61
- message: missing.length === 0
62
- ? "CLI exposes expected state commands"
63
- : "CLI is missing expected state commands",
49
+ ...diagnosis,
50
+ resources: diagnosis.resources.map((resource) => ({
51
+ id: resource.id,
52
+ status: resource.status,
53
+ evidence: resource.evidence,
54
+ preview_command: previewCommand(resource, context),
55
+ })),
64
56
  };
65
57
  }
66
- export function renderDoctorStatus(status) {
67
- const actionNoun = doctorActionNoun(status);
58
+ export function renderDoctorStatus(status, retiredResources) {
59
+ const actionNoun = appLifecycleActionNoun(String(status.status));
68
60
  const lines = [
69
61
  "Agentera doctor",
70
62
  `status: ${plainStatus(status.status)}`,
@@ -81,6 +73,34 @@ export function renderDoctorStatus(status) {
81
73
  if (signal.missingCommands && signal.missingCommands.length > 0) {
82
74
  lines.push(` Missing command: ${signal.missingCommands.join(", ")}`);
83
75
  }
76
+ if (signal.kind === "todo_reconciliation") {
77
+ if (signal.reconciliationState)
78
+ lines.push(` Reconciliation state: ${signal.reconciliationState}`);
79
+ if (signal.reconciliationCounts) {
80
+ const counts = ["matched", "converted", "retained", "duplicate", "stale", "conflicting"]
81
+ .filter((name) => name in signal.reconciliationCounts)
82
+ .map((name) => `${name}=${signal.reconciliationCounts[name]}`)
83
+ .join(" | ");
84
+ lines.push(` Counts: ${counts} | omitted=${String(signal.reconciliationOmittedCount ?? 0)}`);
85
+ }
86
+ if (signal.previewCommand)
87
+ lines.push(` Preview: ${signal.previewCommand}`);
88
+ if (signal.applyCommand)
89
+ lines.push(` Apply: ${signal.applyCommand}`);
90
+ if (signal.reconciliationState === "unsafe_inactive" && signal.recoveryCommand)
91
+ lines.push(` Recovery: ${signal.recoveryCommand}`);
92
+ }
93
+ }
94
+ }
95
+ const resources = Array.isArray(retiredResources?.resources) ? retiredResources.resources : [];
96
+ const todoReconciliation = status.signals?.some((signal) => signal.kind === "todo_reconciliation") ?? false;
97
+ const unsafeInactiveTodo = status.signals?.some((signal) => signal.kind === "todo_reconciliation" && signal.reconciliationState === "unsafe_inactive") ?? false;
98
+ if (resources.length > 0) {
99
+ lines.push("");
100
+ lines.push("Retired native resources:");
101
+ for (const resource of resources) {
102
+ lines.push(` - action required: ${String(resource.id)}`);
103
+ lines.push(` Preview: ${String(resource.preview_command)}`);
84
104
  }
85
105
  }
86
106
  if (status.status === APP_UP_TO_DATE) {
@@ -92,7 +112,24 @@ export function renderDoctorStatus(status) {
92
112
  lines.push("Next:");
93
113
  lines.push(` 1. Preview the ${actionNoun}: ${status.dryRunCommand}`);
94
114
  lines.push(` 2. If the preview looks right, apply the ${actionNoun}: ${status.applyCommand}`);
95
- lines.push(` 3. Then retry Agentera: ${status.retryCommand}`);
115
+ if (status.retryCommand) {
116
+ lines.push(` 3. Then retry Agentera: ${status.retryCommand}`);
117
+ }
118
+ else {
119
+ lines.push(" 3. Then retry Agentera once a retry command is available.");
120
+ }
121
+ }
122
+ else if (unsafeInactiveTodo) {
123
+ lines.push("");
124
+ lines.push("Next: supply the complete owner mapping, preview the reported correction, then use its exact apply_command.");
125
+ }
126
+ else if (todoReconciliation) {
127
+ lines.push("");
128
+ lines.push("Next: run the reported TODO reconciliation preview, review its bounded effect, then use its exact apply_command.");
129
+ }
130
+ else if (resources.length > 0) {
131
+ lines.push("");
132
+ lines.push("Next: review each read-only retirement preview before any explicit cleanup.");
96
133
  }
97
134
  else {
98
135
  lines.push("");
@@ -112,67 +149,6 @@ function renderDoctorSmoke(smoke) {
112
149
  }
113
150
  return lines.join("\n");
114
151
  }
115
- export function pyJsonIndentSorted(value) {
116
- return jsonIndent(value, 0);
117
- }
118
- function jsonAscii(str) {
119
- let out = '"';
120
- for (const ch of str) {
121
- const cp = ch.codePointAt(0);
122
- if (ch === '"')
123
- out += '\\"';
124
- else if (ch === "\\")
125
- out += "\\\\";
126
- else if (cp === 0x08)
127
- out += "\\b";
128
- else if (cp === 0x09)
129
- out += "\\t";
130
- else if (cp === 0x0a)
131
- out += "\\n";
132
- else if (cp === 0x0c)
133
- out += "\\f";
134
- else if (cp === 0x0d)
135
- out += "\\r";
136
- else if (cp < 0x20)
137
- out += "\\u" + cp.toString(16).padStart(4, "0");
138
- else if (cp < 0x80)
139
- out += ch;
140
- else if (cp > 0xffff) {
141
- const v = cp - 0x10000;
142
- out += "\\u" + (0xd800 + (v >> 10)).toString(16).padStart(4, "0");
143
- out += "\\u" + (0xdc00 + (v & 0x3ff)).toString(16).padStart(4, "0");
144
- }
145
- else
146
- out += "\\u" + cp.toString(16).padStart(4, "0");
147
- }
148
- return out + '"';
149
- }
150
- function jsonIndent(value, level) {
151
- const pad = " ".repeat(level);
152
- const padIn = " ".repeat(level + 1);
153
- if (value === null || value === undefined)
154
- return "null";
155
- if (value === true)
156
- return "true";
157
- if (value === false)
158
- return "false";
159
- if (typeof value === "number")
160
- return String(value);
161
- if (typeof value === "string")
162
- return jsonAscii(value);
163
- if (Array.isArray(value)) {
164
- if (value.length === 0)
165
- return "[]";
166
- return "[\n" + value.map((v) => padIn + jsonIndent(v, level + 1)).join(",\n") + "\n" + pad + "]";
167
- }
168
- if (typeof value === "object") {
169
- const keys = Object.keys(value).sort();
170
- if (keys.length === 0)
171
- return "{}";
172
- return "{\n" + keys.map((k) => padIn + jsonAscii(k) + ": " + jsonIndent(value[k], level + 1)).join(",\n") + "\n" + pad + "}";
173
- }
174
- return "null";
175
- }
176
152
  export function cmdDoctor(args, io = {}) {
177
153
  const out = io.out ?? ((t) => process.stdout.write(t));
178
154
  const err = io.err ?? ((t) => process.stderr.write(t));
@@ -185,18 +161,52 @@ export function cmdDoctor(args, io = {}) {
185
161
  return 2;
186
162
  }
187
163
  const home = resolvePath(expanduser(args.home ?? os.homedir()));
164
+ const project = resolvePath(expanduser(args.project ?? process.cwd()));
188
165
  const [installRoot, rootSource] = resolveDoctorInstallRoot(args.installRoot ?? null, { home, sourceRoot });
189
166
  const expectedCommands = args.expectCommand && args.expectCommand.length > 0 ? args.expectCommand : [...EXPECTED_STATE_COMMANDS];
190
167
  const status = buildDoctorStatus(installRoot, {
191
168
  rootSource,
192
169
  sourceRoot,
193
170
  home,
194
- project: resolvePath(expanduser(args.project ?? process.cwd())),
171
+ project,
195
172
  expectedVersion: args.expectedVersion ?? null,
196
173
  expectedCommands,
197
- probeCli: true,
198
- probeRunner: inProcessProbe,
199
174
  });
175
+ const todoReconciliation = inspectTodoReconciliationState(project, sourceRoot);
176
+ if (todoReconciliation?.status === "action_required") {
177
+ status.signals.push({
178
+ status: APP_MANUAL_REVIEW_NEEDED,
179
+ kind: "todo_reconciliation",
180
+ message: `action-required: TODO reconciliation is ${todoReconciliation.state === "inactive" ? "inactive" : todoReconciliation.state === "unsafe_inactive" ? "unsafe inactive" : todoReconciliation.state === "unsafe_active" ? "unsafe active" : "in an invalid lifecycle state"}`,
181
+ reconciliationState: todoReconciliation.state,
182
+ reconciliationCounts: todoReconciliation.counts,
183
+ reconciliationOmittedCount: todoReconciliation.omitted_count,
184
+ previewCommand: todoReconciliation.preview_command,
185
+ applyCommand: todoReconciliation.apply_command,
186
+ recoveryCommand: todoReconciliation.recovery_command,
187
+ });
188
+ if (status.status === APP_UP_TO_DATE)
189
+ status.status = APP_MANUAL_REVIEW_NEEDED;
190
+ }
191
+ const retiredDiagnosis = diagnoseRetiredResources({
192
+ home,
193
+ project,
194
+ installRoot,
195
+ resourceId: args.retiredResource ?? null,
196
+ });
197
+ const retiredResources = doctorRetiredResources(retiredDiagnosis, { home, project, installRoot });
198
+ if (retiredDiagnosis.status === "action_required") {
199
+ status.signals.push({
200
+ status: APP_MANUAL_REVIEW_NEEDED,
201
+ kind: "retired_native_resources",
202
+ message: "retired native resource candidates need ownership review before cleanup",
203
+ resourceIds: retiredDiagnosis.resources.map((resource) => resource.id),
204
+ omittedResourceCount: retiredDiagnosis.omittedResourceCount,
205
+ });
206
+ if (status.status === APP_UP_TO_DATE)
207
+ status.status = APP_MANUAL_REVIEW_NEEDED;
208
+ }
209
+ const sharedSkill = diagnoseCanonicalSkill(home);
200
210
  let smokeReport = null;
201
211
  if (args.smoke) {
202
212
  smokeReport = runNpmSmokeChecks(sourceRoot, process.env, {
@@ -205,17 +215,14 @@ export function cmdDoctor(args, io = {}) {
205
215
  }
206
216
  if ((args.format ?? "text") === "json") {
207
217
  const payload = doctorParityJsonEnvelope(status);
218
+ payload.shared_skill = sharedSkill;
219
+ payload.retired_resources = retiredResources;
208
220
  if (smokeReport)
209
221
  payload.smoke = smokeReport;
210
222
  out(pyJsonIndentSorted(payload) + "\n");
211
223
  }
212
224
  else {
213
225
  const install = classifyInstall({ appHome: installRoot, sourceRoot });
214
- const coexistenceLines = resolveCoexistenceDoctorLines({
215
- home,
216
- sourceRoot,
217
- env: { ...process.env, HOME: home },
218
- });
219
226
  const nextMajorLines = resolveNextMajorDoctorLines({
220
227
  sourceRoot,
221
228
  home,
@@ -223,7 +230,9 @@ export function cmdDoctor(args, io = {}) {
223
230
  install,
224
231
  env: process.env,
225
232
  });
226
- const body = prependCoexistenceDoctorSection(prependNextMajorDoctorSection(renderDoctorStatus(status), nextMajorLines), coexistenceLines) + (smokeReport ? renderDoctorSmoke(smokeReport) : "");
233
+ const body = prependNextMajorDoctorSection(renderDoctorStatus(status, retiredResources), nextMajorLines) +
234
+ `\nShared skill\n ${String(sharedSkill.status)}: ${String(sharedSkill.message)}\n path: ${String(sharedSkill.path)}\n` +
235
+ (smokeReport ? renderDoctorSmoke(smokeReport) : "");
227
236
  out(body + "\n");
228
237
  }
229
238
  if (args.smoke) {
@@ -231,6 +240,5 @@ export function cmdDoctor(args, io = {}) {
231
240
  if (failCount > 0)
232
241
  return 1;
233
242
  }
234
- return status.status === APP_UP_TO_DATE ? 0 : 1;
243
+ return status.status === APP_UP_TO_DATE && sharedSkill.status === "pass" ? 0 : 1;
235
244
  }
236
- //# sourceMappingURL=doctor.js.map