agentera 3.0.0-dev.5 → 3.0.0-dev.51

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 (598) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -22
  3. package/bundle/CHANGELOG.md +1351 -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 +236 -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 +437 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -189
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  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 +191 -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 +3022 -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 -1
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +326 -361
  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 +224 -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 +102 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -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 +458 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
  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 +190 -0
  95. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  96. package/dist/analytics/extractCorpus/core.js +392 -0
  97. package/dist/analytics/extractCorpus/corpus.js +167 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  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 +118 -0
  103. package/dist/analytics/extractCorpus/index.js +14 -0
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +2 -1791
  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 +56 -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 +565 -0
  134. package/dist/cli/capabilityContext/bespoke.js +44 -0
  135. package/dist/cli/capabilityContext/build.js +242 -0
  136. package/dist/cli/capabilityContext/closeout.js +233 -0
  137. package/dist/cli/capabilityContext/contract.js +179 -0
  138. package/dist/cli/capabilityContext/evidence.js +463 -0
  139. package/dist/cli/capabilityContext/index.js +3 -0
  140. package/dist/cli/capabilityContext/orchestration.js +131 -0
  141. package/dist/cli/capabilityContext/planState.js +260 -0
  142. package/dist/cli/capabilityContext/progress.js +142 -0
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +83 -0
  145. package/dist/cli/capabilityContext/slim.js +152 -0
  146. package/dist/cli/capabilityContext/startup.js +150 -0
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +56 -0
  149. package/dist/cli/capabilityContext.js +1 -2487
  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 +164 -14
  153. package/dist/cli/commands/doctor.js +122 -97
  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 +26 -44
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +747 -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 +212 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +399 -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 +78 -53
  169. package/dist/cli/commands/report.js +96 -25
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -143
  172. package/dist/cli/commands/state/decisions.js +387 -0
  173. package/dist/cli/commands/state/docs.js +70 -0
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +14 -0
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +14 -0
  178. package/dist/cli/commands/state/index.js +16 -0
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +25 -0
  181. package/dist/cli/commands/state/plan.js +14 -0
  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 +13 -0
  185. package/dist/cli/commands/state/shared.js +14 -0
  186. package/dist/cli/commands/state/todo.js +42 -0
  187. package/dist/cli/commands/state/write.js +430 -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 +272 -223
  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 +372 -0
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +207 -0
  198. package/dist/cli/dispatch/lifecycle.js +652 -0
  199. package/dist/cli/dispatch/prime.js +139 -0
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +63 -0
  202. package/dist/cli/dispatch/state.js +140 -0
  203. package/dist/cli/dispatch.js +1 -1294
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +394 -43
  206. package/dist/cli/migrationRequired.js +87 -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 +11 -79
  242. package/dist/hooks/compaction/apply.js +446 -0
  243. package/dist/hooks/compaction/dryRun.js +184 -0
  244. package/dist/hooks/compaction/index.js +22 -0
  245. package/dist/hooks/compaction/parse.js +325 -0
  246. package/dist/hooks/compaction/retention.js +202 -0
  247. package/dist/hooks/compaction/status.js +360 -0
  248. package/dist/hooks/compaction/types.js +5 -0
  249. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  250. package/dist/hooks/validateArtifact/index.js +92 -0
  251. package/dist/hooks/validateArtifact/markdown.js +145 -0
  252. package/dist/hooks/validateArtifact/schema.js +546 -0
  253. package/dist/hooks/validateArtifact/traversal.js +107 -0
  254. package/dist/hooks/validateArtifact/violations.js +107 -0
  255. package/dist/migrate/v2HandoffManifest.js +452 -0
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +107 -0
  258. package/dist/registries/artifactProtocolIds.js +78 -0
  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 +229 -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 +385 -0
  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 -0
  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 +846 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +806 -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 +982 -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/projectRoot.js +62 -0
  343. package/dist/state/projectionPolicy.js +190 -0
  344. package/dist/state/retrievalAuthority.js +156 -0
  345. package/dist/state/safeProjectFile.js +155 -0
  346. package/dist/state/startupAnalysis/benchmark.js +432 -0
  347. package/dist/state/startupAnalysis/contract.js +160 -0
  348. package/dist/state/startupAnalysis/helpers.js +286 -0
  349. package/dist/state/startupAnalysis/index.js +6 -0
  350. package/dist/state/startupAnalysis/metrics.js +340 -0
  351. package/dist/state/startupAnalysis/records.js +198 -0
  352. package/dist/state/startupAnalysis/report.js +111 -0
  353. package/dist/state/startupAnalysis/threshold.js +512 -0
  354. package/dist/state/startupAnalysis.js +2 -1953
  355. package/dist/state/startupProjection.js +499 -0
  356. package/dist/state/stateMode.js +85 -0
  357. package/dist/state/stateStorageAuthority.js +47 -0
  358. package/dist/state/summaryEntityRead.js +25 -0
  359. package/dist/state/summaryMigrationProvenance.js +66 -0
  360. package/dist/state/summarySourceRowAuthority.js +36 -0
  361. package/dist/state/todoActivationSafety.js +58 -0
  362. package/dist/state/todoDocsEntities.js +1069 -0
  363. package/dist/state/todoDocsEntityValidation.js +158 -0
  364. package/dist/state/todoMarkdownProjection.js +51 -0
  365. package/dist/state/todoReconciliationActivation.js +140 -0
  366. package/dist/state/todoReconciliationInspection.js +169 -0
  367. package/dist/state/todoReconciliationRepair.js +170 -0
  368. package/dist/state/todoReconciliationTransaction.js +582 -0
  369. package/dist/state/write/assign.js +20 -0
  370. package/dist/state/write/candidateMutation.js +269 -0
  371. package/dist/state/write/errors.js +11 -0
  372. package/dist/state/write/experimentPublication.js +192 -0
  373. package/dist/state/write/explain.js +363 -0
  374. package/dist/state/write/fields.js +61 -0
  375. package/dist/state/write/glossaryPublication.js +263 -0
  376. package/dist/state/write/grammar.js +285 -0
  377. package/dist/state/write/helpers.js +29 -0
  378. package/dist/state/write/index.js +12 -0
  379. package/dist/state/write/input.js +367 -0
  380. package/dist/state/write/lock.js +837 -0
  381. package/dist/state/write/mutation.js +234 -0
  382. package/dist/state/write/operations.js +170 -0
  383. package/dist/state/write/planEvaluation.js +128 -0
  384. package/dist/state/write/planPublication.js +179 -0
  385. package/dist/state/write/runtimeOperations.js +144 -0
  386. package/dist/state/write/serialize.js +1 -0
  387. package/dist/state/write/transaction.js +52 -0
  388. package/dist/state/write/validate.js +7 -0
  389. package/dist/upgrade/appContentRefresh.js +383 -0
  390. package/dist/upgrade/appModel.js +8 -7
  391. package/dist/upgrade/atomicWriter.js +1 -0
  392. package/dist/upgrade/bundleEvidence.js +33 -0
  393. package/dist/upgrade/channels.js +12 -8
  394. package/dist/upgrade/compatibility.js +56 -21
  395. package/dist/upgrade/doctor.js +197 -192
  396. package/dist/upgrade/doctorClassifier.js +187 -0
  397. package/dist/upgrade/installedHooksRetirement.js +196 -0
  398. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  399. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  400. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  401. package/dist/upgrade/migrationPublication.js +122 -0
  402. package/dist/upgrade/nextMajorDoctor.js +42 -8
  403. package/dist/upgrade/npxPlatformStatus.js +22 -0
  404. package/dist/upgrade/projectIntegration.js +145 -187
  405. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  406. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  407. package/dist/upgrade/runtimeMigration.js +273 -363
  408. package/dist/upgrade/upgradeCommands.js +14 -1
  409. package/dist/upgrade/upgradeLock.js +85 -0
  410. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  411. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  412. package/dist/upgrade/versionResolution.js +8 -1
  413. package/dist/validate/activationArtifactEvidence.js +844 -0
  414. package/dist/validate/activationConjunction.js +816 -0
  415. package/dist/validate/activationEvidenceManifest.js +515 -0
  416. package/dist/validate/activationPackageSemantics.js +29 -0
  417. package/dist/validate/appHomeContract.js +5 -11
  418. package/dist/validate/bootstrapAuthority.js +44 -0
  419. package/dist/validate/capability.js +133 -12
  420. package/dist/validate/crossCapability.js +15 -10
  421. package/dist/validate/retainedReferenceAuthority.js +879 -0
  422. package/dist/validate/selfAudit.js +73 -37
  423. package/dist/validate/v1LegacyCruft.js +131 -0
  424. package/dist/validate/vocabularyAuthority.js +303 -0
  425. package/package.json +53 -27
  426. package/bundle/references/adapters/cursor.md +0 -213
  427. package/bundle/references/adapters/opencode.md +0 -530
  428. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  429. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  430. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  431. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  432. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  433. package/bundle/references/analysis/benchmark.md +0 -267
  434. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  435. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  436. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  437. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  438. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  439. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  440. package/bundle/references/meta/documentation-inventory.md +0 -43
  441. package/bundle/references/v1-section-mapping.md +0 -47
  442. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  443. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  444. package/bundle/skills/agentera/agents/hej.toml +0 -6
  445. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  446. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  447. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  448. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  449. package/bundle/skills/agentera/agents/planera.toml +0 -6
  450. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  451. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  452. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  453. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  454. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  456. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  461. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  462. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  463. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  464. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  465. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  466. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  467. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  468. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  469. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  470. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  471. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  472. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  473. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  474. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  475. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  476. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  477. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  478. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  479. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  480. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  481. package/bundle/skills/agentera/references/contract.md +0 -1039
  482. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  483. package/bundle/skills/hej/SKILL.md +0 -69
  484. package/bundle/skills/hej/agents/hej.toml +0 -11
  485. package/bundle/skills/hej/agents/openai.yaml +0 -8
  486. package/dist/analytics/extractCorpus.js.map +0 -1
  487. package/dist/analytics/usageStats.js.map +0 -1
  488. package/dist/bin/agentera.js.map +0 -1
  489. package/dist/capabilities/dokumentera/instructions.js +0 -6
  490. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  491. package/dist/capabilities/hej/instructions.js +0 -6
  492. package/dist/capabilities/hej/instructions.js.map +0 -1
  493. package/dist/capabilities/index.js.map +0 -1
  494. package/dist/capabilities/inspektera/instructions.js +0 -6
  495. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  496. package/dist/capabilities/inspirera/instructions.js +0 -6
  497. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  498. package/dist/capabilities/optimera/instructions.js +0 -6
  499. package/dist/capabilities/optimera/instructions.js.map +0 -1
  500. package/dist/capabilities/orkestrera/instructions.js +0 -6
  501. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  502. package/dist/capabilities/planera/instructions.js +0 -6
  503. package/dist/capabilities/planera/instructions.js.map +0 -1
  504. package/dist/capabilities/profilera/instructions.js +0 -6
  505. package/dist/capabilities/profilera/instructions.js.map +0 -1
  506. package/dist/capabilities/realisera/instructions.js +0 -6
  507. package/dist/capabilities/realisera/instructions.js.map +0 -1
  508. package/dist/capabilities/resonera/instructions.js +0 -6
  509. package/dist/capabilities/resonera/instructions.js.map +0 -1
  510. package/dist/capabilities/visionera/instructions.js +0 -6
  511. package/dist/capabilities/visionera/instructions.js.map +0 -1
  512. package/dist/capabilities/visualisera/instructions.js +0 -6
  513. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  514. package/dist/cli/appContext.js.map +0 -1
  515. package/dist/cli/argvalidate.js.map +0 -1
  516. package/dist/cli/capabilityContext.js.map +0 -1
  517. package/dist/cli/commands/capability.js.map +0 -1
  518. package/dist/cli/commands/compact.js.map +0 -1
  519. package/dist/cli/commands/doctor.js.map +0 -1
  520. package/dist/cli/commands/lint.js.map +0 -1
  521. package/dist/cli/commands/prime.js.map +0 -1
  522. package/dist/cli/commands/query.js.map +0 -1
  523. package/dist/cli/commands/report.js.map +0 -1
  524. package/dist/cli/commands/schema.js.map +0 -1
  525. package/dist/cli/commands/state.js +0 -1023
  526. package/dist/cli/commands/state.js.map +0 -1
  527. package/dist/cli/commands/upgrade.js.map +0 -1
  528. package/dist/cli/commands/validate.js.map +0 -1
  529. package/dist/cli/commands/verify.js.map +0 -1
  530. package/dist/cli/dispatch.js.map +0 -1
  531. package/dist/cli/errors.js.map +0 -1
  532. package/dist/cli/help.js.map +0 -1
  533. package/dist/cli/orientation.js.map +0 -1
  534. package/dist/cli/prime-blob.js.map +0 -1
  535. package/dist/cli/stateQuery.js.map +0 -1
  536. package/dist/cli/structured.js.map +0 -1
  537. package/dist/cli/todoMarkdown.js.map +0 -1
  538. package/dist/core/difflib.js.map +0 -1
  539. package/dist/core/paths.js.map +0 -1
  540. package/dist/core/pyjson.js.map +0 -1
  541. package/dist/core/sourceRoot.js.map +0 -1
  542. package/dist/core/toml.js.map +0 -1
  543. package/dist/core/yaml.js.map +0 -1
  544. package/dist/eval/evalSkills.js.map +0 -1
  545. package/dist/eval/semanticEval.js.map +0 -1
  546. package/dist/eval/semanticFixtures.js.map +0 -1
  547. package/dist/hooks/common.js.map +0 -1
  548. package/dist/hooks/compaction.js +0 -935
  549. package/dist/hooks/compaction.js.map +0 -1
  550. package/dist/hooks/cursorPreToolUse.js +0 -19
  551. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  552. package/dist/hooks/cursorSessionStart.js +0 -71
  553. package/dist/hooks/cursorSessionStart.js.map +0 -1
  554. package/dist/hooks/sessionStart.js +0 -209
  555. package/dist/hooks/sessionStart.js.map +0 -1
  556. package/dist/hooks/sessionStop.js +0 -212
  557. package/dist/hooks/sessionStop.js.map +0 -1
  558. package/dist/hooks/validateArtifact.js +0 -935
  559. package/dist/hooks/validateArtifact.js.map +0 -1
  560. package/dist/registries/artifactRegistry.js.map +0 -1
  561. package/dist/registries/capabilityContract.js.map +0 -1
  562. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  563. package/dist/registries/packageRegistry.js.map +0 -1
  564. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  565. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  566. package/dist/setup/codex.js +0 -1197
  567. package/dist/setup/codex.js.map +0 -1
  568. package/dist/setup/copilot.js +0 -227
  569. package/dist/setup/copilot.js.map +0 -1
  570. package/dist/setup/cursor.js +0 -127
  571. package/dist/setup/cursor.js.map +0 -1
  572. package/dist/setup/doctor.js +0 -1297
  573. package/dist/setup/doctor.js.map +0 -1
  574. package/dist/setup/smokeChecks.js.map +0 -1
  575. package/dist/state/installRoot.js.map +0 -1
  576. package/dist/state/startupAnalysis.js.map +0 -1
  577. package/dist/upgrade/appModel.js.map +0 -1
  578. package/dist/upgrade/channels.js.map +0 -1
  579. package/dist/upgrade/compatibility.js.map +0 -1
  580. package/dist/upgrade/doctor.js.map +0 -1
  581. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  582. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  583. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  584. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  585. package/dist/upgrade/projectIntegration.js.map +0 -1
  586. package/dist/upgrade/runtimeMigration.js.map +0 -1
  587. package/dist/upgrade/upgradeCommands.js.map +0 -1
  588. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  589. package/dist/upgrade/versionResolution.js.map +0 -1
  590. package/dist/validate/appHomeContract.js.map +0 -1
  591. package/dist/validate/capability.js.map +0 -1
  592. package/dist/validate/crossCapability.js.map +0 -1
  593. package/dist/validate/lifecycleAdapters.js +0 -772
  594. package/dist/validate/lifecycleAdapters.js.map +0 -1
  595. package/dist/validate/selfAudit.js.map +0 -1
  596. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  597. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  598. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,22 @@
1
+ import os from "node:os";
2
+ import { formatResolvedAppHome } from "../../state/installRoot.js";
3
+ import { expanduser } from "../../core/paths.js";
4
+ export function cmdAppHome(args, io = {}) {
5
+ const out = io.out ?? ((t) => process.stdout.write(t));
6
+ const resolvedHome = args.home ? expanduser(args.home) : os.homedir();
7
+ let env = process.env;
8
+ if (args.home) {
9
+ env = { ...process.env, HOME: resolvedHome };
10
+ delete env.XDG_DATA_HOME;
11
+ delete env.APPDATA;
12
+ delete env.AGENTERA_HOME;
13
+ delete env.AGENTERA_DEFAULT_INSTALL_ROOT;
14
+ }
15
+ const output = formatResolvedAppHome(args.installRoot, {
16
+ env,
17
+ home: resolvedHome,
18
+ format: args.format,
19
+ });
20
+ out(output + "\n");
21
+ return 0;
22
+ }
@@ -1,9 +1,10 @@
1
1
  import { emitStructured } from "../structured.js";
2
+ import { preCutoverCommand } from "../preCutoverCommand.js";
2
3
  export const CAPABILITY_ROUTING_NAMES = [
3
- "visionera", "resonera", "inspirera", "planera", "realisera",
4
- "optimera", "inspektera", "dokumentera", "profilera", "visualisera", "orkestrera",
4
+ "vision", "discuss", "research", "plan", "build",
5
+ "optimize", "audit", "document", "profile", "design", "orchestrate",
5
6
  ];
6
- const PRIME_CAPABILITY_CONTEXT_COMMAND = "agentera prime --context {capability} --format json";
7
+ const PRIME_CAPABILITY_CONTEXT_COMMAND = preCutoverCommand("prime --context {capability} --format json");
7
8
  export function cmdCapability(capability, args, io) {
8
9
  const out = io.out ?? ((t) => process.stdout.write(t));
9
10
  const instructionsPath = `packages/cli/src/capabilities/${capability}/instructions.ts`;
@@ -34,4 +35,3 @@ export function cmdCapability(capability, args, io) {
34
35
  }
35
36
  return 0;
36
37
  }
37
- //# sourceMappingURL=capability.js.map
@@ -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
- import { runCompaction } from "../../hooks/compaction.js";
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,10 +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, publicDoctorStatus, } 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
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";
8
13
  const PLAIN_STATUS = {
9
14
  pending: "ready to fix",
10
15
  applied: "fixed",
@@ -18,40 +23,40 @@ const PLAIN_STATUS = {
18
23
  [APP_MIGRATION_NEEDED]: "needs migration",
19
24
  [APP_MANUAL_REVIEW_NEEDED]: "needs manual review",
20
25
  };
21
- /** Commands the TS dispatcher exposes (used by the in-process CLI probe). */
22
- const DISPATCHER_COMMANDS = new Set([
23
- "prime", "hej", "schema", "describe", "state", "query", "check", "lint",
24
- "compact", "gate", "validate", "decisions", "health", "todo", "plan", "progress",
25
- "docs", "objective", "experiments",
26
- ]);
27
26
  function plainStatus(value) {
28
27
  return PLAIN_STATUS[value] ?? value.replace(/_/g, " ").replace(/-/g, " ");
29
28
  }
30
- function doctorActionNoun(status) {
31
- if (status.status === APP_OUTDATED)
32
- return "update";
33
- if (status.status === APP_MIGRATION_NEEDED)
34
- return "migration";
35
- 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
+ ]);
36
46
  }
37
- /** In-process probe: confirm the TS CLI exposes the expected state commands. */
38
- function inProcessProbe(args) {
39
- const missing = args.expectedCommands.filter((name) => !DISPATCHER_COMMANDS.has(name));
40
- const command = ["npx", "-y", "agentera", "--help"];
47
+ function doctorRetiredResources(diagnosis, context) {
41
48
  return {
42
- ok: missing.length === 0,
43
- command,
44
- returnCode: 0,
45
- stdoutTail: [],
46
- stderrTail: [],
47
- missingCommands: missing,
48
- message: missing.length === 0
49
- ? "CLI exposes expected state commands"
50
- : "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
+ })),
51
56
  };
52
57
  }
53
- export function renderDoctorStatus(status) {
54
- const actionNoun = doctorActionNoun(status);
58
+ export function renderDoctorStatus(status, retiredResources) {
59
+ const actionNoun = appLifecycleActionNoun(String(status.status));
55
60
  const lines = [
56
61
  "Agentera doctor",
57
62
  `status: ${plainStatus(status.status)}`,
@@ -68,6 +73,34 @@ export function renderDoctorStatus(status) {
68
73
  if (signal.missingCommands && signal.missingCommands.length > 0) {
69
74
  lines.push(` Missing command: ${signal.missingCommands.join(", ")}`);
70
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)}`);
71
104
  }
72
105
  }
73
106
  if (status.status === APP_UP_TO_DATE) {
@@ -79,7 +112,24 @@ export function renderDoctorStatus(status) {
79
112
  lines.push("Next:");
80
113
  lines.push(` 1. Preview the ${actionNoun}: ${status.dryRunCommand}`);
81
114
  lines.push(` 2. If the preview looks right, apply the ${actionNoun}: ${status.applyCommand}`);
82
- 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: complete the owner correction and replan before any TODO mutation.");
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.");
83
133
  }
84
134
  else {
85
135
  lines.push("");
@@ -99,67 +149,6 @@ function renderDoctorSmoke(smoke) {
99
149
  }
100
150
  return lines.join("\n");
101
151
  }
102
- export function pyJsonIndentSorted(value) {
103
- return jsonIndent(value, 0);
104
- }
105
- function jsonAscii(str) {
106
- let out = '"';
107
- for (const ch of str) {
108
- const cp = ch.codePointAt(0);
109
- if (ch === '"')
110
- out += '\\"';
111
- else if (ch === "\\")
112
- out += "\\\\";
113
- else if (cp === 0x08)
114
- out += "\\b";
115
- else if (cp === 0x09)
116
- out += "\\t";
117
- else if (cp === 0x0a)
118
- out += "\\n";
119
- else if (cp === 0x0c)
120
- out += "\\f";
121
- else if (cp === 0x0d)
122
- out += "\\r";
123
- else if (cp < 0x20)
124
- out += "\\u" + cp.toString(16).padStart(4, "0");
125
- else if (cp < 0x80)
126
- out += ch;
127
- else if (cp > 0xffff) {
128
- const v = cp - 0x10000;
129
- out += "\\u" + (0xd800 + (v >> 10)).toString(16).padStart(4, "0");
130
- out += "\\u" + (0xdc00 + (v & 0x3ff)).toString(16).padStart(4, "0");
131
- }
132
- else
133
- out += "\\u" + cp.toString(16).padStart(4, "0");
134
- }
135
- return out + '"';
136
- }
137
- function jsonIndent(value, level) {
138
- const pad = " ".repeat(level);
139
- const padIn = " ".repeat(level + 1);
140
- if (value === null || value === undefined)
141
- return "null";
142
- if (value === true)
143
- return "true";
144
- if (value === false)
145
- return "false";
146
- if (typeof value === "number")
147
- return String(value);
148
- if (typeof value === "string")
149
- return jsonAscii(value);
150
- if (Array.isArray(value)) {
151
- if (value.length === 0)
152
- return "[]";
153
- return "[\n" + value.map((v) => padIn + jsonIndent(v, level + 1)).join(",\n") + "\n" + pad + "]";
154
- }
155
- if (typeof value === "object") {
156
- const keys = Object.keys(value).sort();
157
- if (keys.length === 0)
158
- return "{}";
159
- return "{\n" + keys.map((k) => padIn + jsonAscii(k) + ": " + jsonIndent(value[k], level + 1)).join(",\n") + "\n" + pad + "}";
160
- }
161
- return "null";
162
- }
163
152
  export function cmdDoctor(args, io = {}) {
164
153
  const out = io.out ?? ((t) => process.stdout.write(t));
165
154
  const err = io.err ?? ((t) => process.stderr.write(t));
@@ -172,18 +161,52 @@ export function cmdDoctor(args, io = {}) {
172
161
  return 2;
173
162
  }
174
163
  const home = resolvePath(expanduser(args.home ?? os.homedir()));
164
+ const project = resolvePath(expanduser(args.project ?? process.cwd()));
175
165
  const [installRoot, rootSource] = resolveDoctorInstallRoot(args.installRoot ?? null, { home, sourceRoot });
176
166
  const expectedCommands = args.expectCommand && args.expectCommand.length > 0 ? args.expectCommand : [...EXPECTED_STATE_COMMANDS];
177
167
  const status = buildDoctorStatus(installRoot, {
178
168
  rootSource,
179
169
  sourceRoot,
180
170
  home,
181
- project: resolvePath(expanduser(args.project ?? process.cwd())),
171
+ project,
182
172
  expectedVersion: args.expectedVersion ?? null,
183
173
  expectedCommands,
184
- probeCli: true,
185
- probeRunner: inProcessProbe,
186
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);
187
210
  let smokeReport = null;
188
211
  if (args.smoke) {
189
212
  smokeReport = runNpmSmokeChecks(sourceRoot, process.env, {
@@ -191,7 +214,9 @@ export function cmdDoctor(args, io = {}) {
191
214
  });
192
215
  }
193
216
  if ((args.format ?? "text") === "json") {
194
- const payload = publicDoctorStatus(status);
217
+ const payload = doctorParityJsonEnvelope(status);
218
+ payload.shared_skill = sharedSkill;
219
+ payload.retired_resources = retiredResources;
195
220
  if (smokeReport)
196
221
  payload.smoke = smokeReport;
197
222
  out(pyJsonIndentSorted(payload) + "\n");
@@ -205,7 +230,8 @@ export function cmdDoctor(args, io = {}) {
205
230
  install,
206
231
  env: process.env,
207
232
  });
208
- const body = prependNextMajorDoctorSection(renderDoctorStatus(status), nextMajorLines) +
233
+ const body = prependNextMajorDoctorSection(renderDoctorStatus(status, retiredResources), nextMajorLines) +
234
+ `\nShared skill\n ${String(sharedSkill.status)}: ${String(sharedSkill.message)}\n path: ${String(sharedSkill.path)}\n` +
209
235
  (smokeReport ? renderDoctorSmoke(smokeReport) : "");
210
236
  out(body + "\n");
211
237
  }
@@ -214,6 +240,5 @@ export function cmdDoctor(args, io = {}) {
214
240
  if (failCount > 0)
215
241
  return 1;
216
242
  }
217
- return status.status === APP_UP_TO_DATE ? 0 : 1;
243
+ return status.status === APP_UP_TO_DATE && sharedSkill.status === "pass" ? 0 : 1;
218
244
  }
219
- //# sourceMappingURL=doctor.js.map