agentera 3.0.0-dev.4 → 3.0.0-dev.46

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 (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  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/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  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/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  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/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,212 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { detectV1ArtifactPairs } from "../../../upgrade/migrateArtifactsV2ToV3.js";
5
+ import { summarizeProjectIntegration } from "../../../upgrade/projectIntegration.js";
6
+ import { selectStatusReadiness, statePresence, } from "../../orientation.js";
7
+ import { buildOrientationAttention } from "../../orientation/attention.js";
8
+ import { corpusCoverageSummary } from "../../orientation/corpusCoverage.js";
9
+ import { profileSignalsStatus } from "../../../analytics/profileSignals.js";
10
+ import { statusBundleContext } from "./bundleStatus.js";
11
+ import { v1MigrationSummary } from "./v1Migration.js";
12
+ import { diagnoseCanonicalSkill } from "../../../setup/sharedSkill.js";
13
+ import { collectEntityOrientation } from "./collectEntityOrientation.js";
14
+ import { acquireProfile } from "../../profileAcquisition.js";
15
+ import { fullEntityUpgradeCommand } from "../../../upgrade/upgradeCommands.js";
16
+ import { classifyEntityCutoverProject } from "../../../state/entityMigrationPreview.js";
17
+ import { preCutoverCommand } from "../../preCutoverCommand.js";
18
+ const EMPTY_SCHEMAS = Object.freeze({});
19
+ function stateCutover(project, sourceRoot) {
20
+ try {
21
+ const projectState = classifyEntityCutoverProject(project, sourceRoot);
22
+ if (projectState === "v3") {
23
+ return { status: "complete", project_state: "v3", recovery_command: null };
24
+ }
25
+ return { status: "required", project_state: projectState, recovery_command: fullEntityUpgradeCommand(project) };
26
+ }
27
+ catch {
28
+ return { status: "invalid_lifecycle", project_state: "invalid_lifecycle", recovery_command: preCutoverCommand("check validate state --format json") };
29
+ }
30
+ }
31
+ export function collectOrientationState(opts) {
32
+ const env = opts.env ?? process.env;
33
+ const home = opts.home ? opts.home : os.homedir();
34
+ const project = path.resolve(opts.projectRoot ?? process.cwd());
35
+ const { bundle, channel, install, successorAnnounced } = statusBundleContext(opts);
36
+ const sourceRoot = bundle.sourceRoot;
37
+ const schemasDir = path.join(sourceRoot, "skills", "agentera", "schemas", "artifacts");
38
+ const schemas = EMPTY_SCHEMAS;
39
+ let savedContext = false;
40
+ try {
41
+ savedContext = fs.readdirSync(path.join(project, ".agentera")).some((f) => f.endsWith(".yaml"));
42
+ }
43
+ catch {
44
+ savedContext = false;
45
+ }
46
+ const mode = savedContext ? "returning" : "fresh";
47
+ const acquiredProfile = acquireProfile(schemasDir, env);
48
+ const profile = acquiredProfile.profilePath ?? "";
49
+ const profileStatus = acquiredProfile.validity.status;
50
+ const profileDict = {
51
+ status: profileStatus,
52
+ validity: acquiredProfile.validity,
53
+ freshness: acquiredProfile.freshness,
54
+ };
55
+ if (acquiredProfile.validity.status === "valid" && acquiredProfile.freshness.state !== "unknown") {
56
+ profileDict.days_since_generated = acquiredProfile.freshness.days_since_generated ?? undefined;
57
+ profileDict.stale = acquiredProfile.freshness.state === "stale";
58
+ profileDict.stale_threshold_days = acquiredProfile.freshness.stale_threshold_days;
59
+ if (acquiredProfile.freshness.generated_date)
60
+ profileDict.generated_date = acquiredProfile.freshness.generated_date;
61
+ if (acquiredProfile.freshness.validated_date)
62
+ profileDict.validated_date = acquiredProfile.freshness.validated_date;
63
+ }
64
+ const boundedSignals = profileSignalsStatus(env, process.platform);
65
+ const { tiers_dir: _tiersDir, signal_path: _signalPath, ...publicBoundedSignals } = boundedSignals;
66
+ profileDict.bounded_signals = publicBoundedSignals;
67
+ const v1Artifacts = detectV1ArtifactPairs(project);
68
+ const v1Migration = v1MigrationSummary(v1Artifacts, { sourceRoot, home, env });
69
+ const entity = collectEntityOrientation(project, sourceRoot);
70
+ const cutover = stateCutover(project, sourceRoot);
71
+ const plan = entity.plan;
72
+ const docs = entity.docs;
73
+ const progress = entity.progress;
74
+ const health = entity.health;
75
+ const history = entity.history;
76
+ const objective = entity.objective;
77
+ const presence = statePresence(plan, docs, progress, health, objective);
78
+ const todoItems = entity.todoItems;
79
+ const counts = entity.todoCounts;
80
+ const decision = entity.decision;
81
+ const decisionAttention = entity.decisionAttention;
82
+ const corpusCoverage = corpusCoverageSummary(env, process.platform);
83
+ const sharedSkill = diagnoseCanonicalSkill(home);
84
+ const projectIntegration = summarizeProjectIntegration({
85
+ project,
86
+ sourceRoot,
87
+ home,
88
+ env,
89
+ installRoot: String(bundle.appHome),
90
+ bundleStatus: String(bundle.status),
91
+ retryCommand: bundle.retryCommand,
92
+ crossMajorBoundaryDetected: bundle.crossMajorBoundaryDetected ?? false,
93
+ channel: bundle.updateChannel ?? null,
94
+ resolvedChannel: channel,
95
+ installClassification: install,
96
+ successorAnnounced,
97
+ precomputedV1Artifacts: v1Artifacts,
98
+ });
99
+ const readiness = selectStatusReadiness(plan, health, objective, todoItems, decision, savedContext, entity.todoReadiness);
100
+ const reconciliationReadiness = entity.todoReconciliation?.status === "action_required"
101
+ ? withRecommended(readiness, {
102
+ object: entity.todoReconciliation.state === "inactive" ? "Activate TODO reconciliation" : "Repair TODO reconciliation",
103
+ capability: "build",
104
+ reason: entity.todoReconciliation.recovery_command,
105
+ phase: entity.todoReconciliation.state === "invalid_lifecycle" ? "audit" : "build",
106
+ })
107
+ : readiness;
108
+ const nextAction = cutover.status !== "complete"
109
+ ? withRecommended(readiness, {
110
+ object: "Complete Agentera entity-state cutover",
111
+ capability: "status",
112
+ reason: `Status startup is blocked until entity-state cutover completes. Exact recovery: ${cutover.recovery_command}`,
113
+ phase: "build",
114
+ })
115
+ : selectProjectIntegrationNextAction(reconciliationReadiness, projectIntegration);
116
+ const attention = buildOrientationAttention({
117
+ project_root: project,
118
+ schemas_dir: schemasDir,
119
+ schemas,
120
+ app: bundle,
121
+ mode,
122
+ profile_dict: profileDict,
123
+ profile_status: profileStatus,
124
+ profile,
125
+ v1_migration: v1Migration,
126
+ project_integration: projectIntegration,
127
+ state_cutover: cutover,
128
+ shared_skill: sharedSkill,
129
+ plan,
130
+ docs,
131
+ progress,
132
+ health,
133
+ objective,
134
+ state_presence: presence,
135
+ corpus_coverage: corpusCoverage,
136
+ todo_items: todoItems,
137
+ todo_detail: entity.todoDetail,
138
+ todo_reconciliation: entity.todoReconciliation,
139
+ counts,
140
+ decision_attention: decisionAttention,
141
+ glossary_caveat_attention: entity.glossaryCaveatAttention,
142
+ glossary_caveat_attention_policy: entity.glossaryCaveatAttentionPolicy,
143
+ next_action: nextAction,
144
+ attention: [],
145
+ history,
146
+ });
147
+ return {
148
+ project_root: project,
149
+ schemas_dir: schemasDir,
150
+ schemas,
151
+ app: bundle,
152
+ mode,
153
+ profile_dict: profileDict,
154
+ profile_status: profileStatus,
155
+ profile,
156
+ v1_migration: v1Migration,
157
+ project_integration: projectIntegration,
158
+ state_cutover: cutover,
159
+ shared_skill: sharedSkill,
160
+ plan,
161
+ docs,
162
+ progress,
163
+ health,
164
+ objective,
165
+ state_presence: presence,
166
+ corpus_coverage: corpusCoverage,
167
+ todo_items: todoItems,
168
+ todo_detail: entity.todoDetail,
169
+ todo_reconciliation: entity.todoReconciliation,
170
+ counts,
171
+ decision_attention: decisionAttention,
172
+ glossary_caveat_attention: entity.glossaryCaveatAttention,
173
+ glossary_caveat_attention_policy: entity.glossaryCaveatAttentionPolicy,
174
+ next_action: nextAction,
175
+ attention,
176
+ history,
177
+ };
178
+ }
179
+ /** Promote `newRecommended` to position 1, demoting the prior recommendation
180
+ * (and its alternatives) into `alternatives`. Used when a project-integration
181
+ * override (upgrade, major-boundary block) takes precedence over the
182
+ * state-derived cascade; the demoted candidates remain visible as what to do
183
+ * once the override is resolved. */
184
+ export function selectProjectIntegrationNextAction(readiness, projectIntegration) {
185
+ if (projectIntegration.recommendation === "upgrade") {
186
+ return withRecommended(readiness, {
187
+ object: projectIntegration.pending_artifacts > 0
188
+ ? "Upgrade Agentera artifacts"
189
+ : "Upgrade Agentera",
190
+ capability: "status",
191
+ reason: projectIntegration.dry_run_command
192
+ ? `${projectIntegration.message} Exact preview: ${projectIntegration.dry_run_command}`
193
+ : projectIntegration.message,
194
+ phase: "build",
195
+ });
196
+ }
197
+ if (projectIntegration.major_boundary_block) {
198
+ return withRecommended(readiness, {
199
+ object: "Await v3 successor announcement",
200
+ capability: "status",
201
+ reason: projectIntegration.major_boundary_block,
202
+ phase: "audit",
203
+ });
204
+ }
205
+ return readiness;
206
+ }
207
+ function withRecommended(hint, newRecommended) {
208
+ return {
209
+ recommended: newRecommended,
210
+ alternatives: [hint.recommended, ...hint.alternatives],
211
+ };
212
+ }
@@ -0,0 +1,397 @@
1
+ import { publicDoctorStatus } from "../../../upgrade/doctor.js";
2
+ import { projectInstallTrack } from "../../../upgrade/compatibility.js";
3
+ import { formatNextAction, startupPlanSummary } from "../../orientation.js";
4
+ import { requestedFields, REQUIRED_SPARSE_CONTEXT_FIELDS, PRIME_STRUCTURED_FIELDS, RETIRED_PRIME_FIELD_CORRECTIONS, availablePrimeFields, } from "../../stateQuery.js";
5
+ import { emitStructured } from "../../structured.js";
6
+ import { emitInvalidInput } from "../../errors.js";
7
+ import { preCutoverCommand } from "../../preCutoverCommand.js";
8
+ import { truncateCodePoints } from "../../../core/text.js";
9
+ import { briefOrientationPayload, briefUtf8Bytes } from "./briefOrientation.js";
10
+ import { capabilityContext } from "../../capabilityContext/contract.js";
11
+ import { startupAggregation } from "../../capabilityContext/startupAggregation.js";
12
+ export { briefOrientationPayload, PRIME_BRIEF_MAX_UTF8_BYTES } from "./briefOrientation.js";
13
+ /** Authority for the complete status startup capsule, including instructions. */
14
+ export const PRIME_STATUS_CONTEXT_MAX_UTF8_BYTES = 22500;
15
+ /** Project a single {@link NextAction} to its JSON record shape. */
16
+ function nextActionEntry(action) {
17
+ return {
18
+ object: action.object,
19
+ capability: action.capability,
20
+ reason: action.reason,
21
+ phase: action.phase,
22
+ ...(action.id ? { id: action.id } : {}),
23
+ ...(action.artifact ? { artifact: action.artifact } : {}),
24
+ ...(action.outcome ? { outcome: action.outcome } : {}),
25
+ ...(typeof action.eligible === "boolean" ? { eligible: action.eligible } : {}),
26
+ ...(action.retrieval ? { retrieval: action.retrieval } : {}),
27
+ };
28
+ }
29
+ /** Ranked state-readiness hint for the prime JSON `next_action` field (D76).
30
+ * The recommended entry is flattened to top-level `object`/`capability`/
31
+ * `reason`/`phase` so consumers reading `next_action.object` keep working,
32
+ * and `alternatives` carries the cascade branches the early-return model
33
+ * would have skipped, each with the same `{object, capability, reason, phase}`
34
+ * shape. */
35
+ function nextActionPayload(state) {
36
+ const { recommended, alternatives } = state.next_action;
37
+ return {
38
+ ...nextActionEntry(recommended),
39
+ alternatives: alternatives.map(nextActionEntry),
40
+ };
41
+ }
42
+ const STATUS_STRUCTURED_FIELDS = PRIME_STRUCTURED_FIELDS;
43
+ const DEFAULT_PUBLIC_ATTENTION_LIMIT = 6;
44
+ export function projectPublicOrientationAttention(state) {
45
+ const glossary = state.glossary_caveat_attention;
46
+ const policy = state.glossary_caveat_attention_policy;
47
+ if (!glossary || !policy)
48
+ return state.attention.slice(0, DEFAULT_PUBLIC_ATTENTION_LIMIT);
49
+ const unrelated = state.attention.filter((item) => item !== glossary);
50
+ const unrelatedLimit = Math.max(0, policy.public_limit - policy.reserved_slots);
51
+ return [...unrelated.slice(0, unrelatedLimit), glossary].slice(0, policy.public_limit);
52
+ }
53
+ /** Top-level conditional fields whose default/inactive payload is omitted from
54
+ * the default bare briefing so startup does not carry default-only adjective
55
+ * noise. They remain declared in PRIME_STRUCTURED_FIELDS (selectable via
56
+ * `--fields` and advertised in `source_contract.fields`) and are recovered
57
+ * through `state_presence` (missing-vs-empty semantics) plus a named
58
+ * authoritative command. The full payload kept by `buildOrientationJsonPayload`
59
+ * still populates them, so explicit `--fields <name>` selection, the text
60
+ * briefing, and downstream state consumers are unaffected. */
61
+ const OMITTABLE_DEFAULT_CONDITIONAL_TOP_FIELDS = [
62
+ "v1_migration",
63
+ "docs",
64
+ "objective",
65
+ ];
66
+ /** Whether a conditional top-level field carries present/active payload (not the
67
+ * default-only state that should be omitted from the default briefing). The
68
+ * activity predicate mirrors each summary's "default" branch so absence stays
69
+ * non-ambiguous: a survivor key is present exactly when the field is active. */
70
+ function isConditionalFieldPresent(field, payload) {
71
+ const value = payload[field];
72
+ if (value === null || value === undefined)
73
+ return false;
74
+ if (typeof value !== "object" || Array.isArray(value))
75
+ return true;
76
+ const obj = value;
77
+ // v1_migration: present when v1 artifacts are detected (detected !== true is
78
+ // the default state; recover via `agentera upgrade --dry-run`).
79
+ if (field === "v1_migration")
80
+ return obj.detected === true;
81
+ // docs: present when a docs mapping artifact exists (exists !== true is the
82
+ // absent state; recover via the canonical docs list command).
83
+ if (field === "docs")
84
+ return obj.exists === true;
85
+ // objective: present when an objective is active (active !== true is the
86
+ // none-active state; state_presence.active.objective disambiguates).
87
+ if (field === "objective")
88
+ return obj.active === true;
89
+ return true;
90
+ }
91
+ /** Return a default-briefing copy of `payload` with inactive conditional
92
+ * top-level fields removed. Required fields and `state_presence` (the
93
+ * missing-vs-empty authority) are always retained. Used only by the default
94
+ * bare emission path; explicit `--fields` selection keeps the full payload. */
95
+ function omitInactiveConditionalDefaults(payload) {
96
+ const out = {};
97
+ for (const [key, value] of Object.entries(payload)) {
98
+ if (OMITTABLE_DEFAULT_CONDITIONAL_TOP_FIELDS.includes(key) &&
99
+ !isConditionalFieldPresent(key, payload)) {
100
+ continue;
101
+ }
102
+ out[key] = value;
103
+ }
104
+ return out;
105
+ }
106
+ function orientationAppHome(bundle) {
107
+ return {
108
+ install_track: projectInstallTrack(bundle.installKind),
109
+ status: bundle.status,
110
+ home: bundle.appHome,
111
+ source: bundle.appHomeSource,
112
+ managed_app_root: bundle.managedAppRoot,
113
+ user_data_root: bundle.userDataRoot,
114
+ };
115
+ }
116
+ function capabilityContextPointer(requiredBeforeRendering = true) {
117
+ return {
118
+ capability: "status",
119
+ fetch_command: preCutoverCommand("prime --context status --format json"),
120
+ required_before_rendering: requiredBeforeRendering,
121
+ note: requiredBeforeRendering
122
+ ? "Dashboard rendering instructions (template, field rules, exit marker) are owned by the status capability. Run the fetch_command before rendering."
123
+ : "Includes dashboard instructions and bounded state; no second prime call.",
124
+ };
125
+ }
126
+ export function buildOrientationJsonPayload(state, command, options = {}) {
127
+ const bundle = state.app;
128
+ const schemasDir = state.schemas_dir;
129
+ const bundlePublic = publicDoctorStatus(bundle);
130
+ const appHome = orientationAppHome(bundle);
131
+ const todoReconciliation = state.todo_reconciliation ?? null;
132
+ const startup = startupAggregation(capabilityContext("status") ?? {}, state.health, state.state_cutover, todoReconciliation);
133
+ const bespoke = {
134
+ orchestration_context: null,
135
+ closeout_context: null,
136
+ evidence_context: null,
137
+ benchmark_context: null,
138
+ execution_context: null,
139
+ };
140
+ const render = command === "status"
141
+ ? "caller-owned README-style prime orientation dashboard"
142
+ : "caller-owned README-style prime orientation dashboard";
143
+ const access = command === "status"
144
+ ? "single installed CLI call; app/v1/profile safety included; no preflight glob/read/import/doctor calls during normal prime"
145
+ : "single installed CLI call; app/v1/profile safety included; no preflight glob/read/import/doctor calls during normal prime";
146
+ return {
147
+ command,
148
+ outcome: startup.outcome,
149
+ app_home: appHome,
150
+ app: bundlePublic,
151
+ mode: state.mode,
152
+ v1_migration: state.v1_migration,
153
+ shared_skill: state.shared_skill,
154
+ project_integration: state.project_integration,
155
+ ...(state.todo_reconciliation?.status === "action_required" ? { todo_reconciliation: state.todo_reconciliation } : {}),
156
+ health: state.health,
157
+ todo: { ...state.counts, detail: state.todo_detail },
158
+ plan: startupPlanSummary(state.plan),
159
+ docs: state.docs,
160
+ progress: state.progress,
161
+ objective: state.objective,
162
+ state_presence: state.state_presence,
163
+ attention: projectPublicOrientationAttention(state).map((item) => truncateCodePoints(item, 200, "…")),
164
+ decision_attention: state.decision_attention,
165
+ history: state.history,
166
+ next_action: nextActionPayload(state),
167
+ startup,
168
+ orchestration_context: bespoke.orchestration_context,
169
+ closeout_context: bespoke.closeout_context,
170
+ evidence_context: bespoke.evidence_context,
171
+ benchmark_context: bespoke.benchmark_context,
172
+ execution_context: bespoke.execution_context,
173
+ source: {
174
+ schemas_dir: schemasDir,
175
+ project: process.cwd(),
176
+ artifacts_present: state.mode === "returning",
177
+ },
178
+ source_contract: {
179
+ fields: state.todo_reconciliation?.status === "action_required" ? [...STATUS_STRUCTURED_FIELDS, "todo_reconciliation"] : STATUS_STRUCTURED_FIELDS,
180
+ render,
181
+ access,
182
+ empty_state: "fresh: summaries absent; zero TODO items",
183
+ capability_context: capabilityContextPointer(options.capabilityContextRequiredBeforeRendering ?? true),
184
+ },
185
+ };
186
+ }
187
+ /** The status dashboard consumes a compact view of the one startup aggregation. */
188
+ export function buildStatusContextState(state, _command = "prime", _options = {}) {
189
+ const todoReconciliation = state.todo_reconciliation ?? null;
190
+ const startup = startupAggregation(capabilityContext("status") ?? {}, state.health, state.state_cutover, todoReconciliation);
191
+ const plan = state.plan;
192
+ const firstPending = plan.first_pending && typeof plan.first_pending === "object" && !Array.isArray(plan.first_pending)
193
+ ? plan.first_pending
194
+ : null;
195
+ return {
196
+ outcome: startup.outcome,
197
+ mode: state.mode,
198
+ project_integration: {
199
+ recommendation: state.project_integration.recommendation,
200
+ ...(state.project_integration.message ? { message: state.project_integration.message } : {}),
201
+ ...(state.project_integration.dry_run_command ? { dry_run_command: state.project_integration.dry_run_command } : {}),
202
+ ...(state.project_integration.apply_command ? { apply_command: state.project_integration.apply_command } : {}),
203
+ },
204
+ health: {
205
+ exists: state.health.exists,
206
+ status: state.health.status ?? null,
207
+ id: state.health.id ?? null,
208
+ grade: state.health.grade ?? null,
209
+ worst: state.health.worst ?? null,
210
+ trajectory: state.health.trajectory ?? null,
211
+ degrading: Boolean(state.health.degrading),
212
+ },
213
+ todo: { ...state.counts, detail: state.todo_detail },
214
+ plan: {
215
+ exists: plan.exists,
216
+ active: plan.active ?? false,
217
+ status: plan.status,
218
+ title: plan.title ?? null,
219
+ complete: plan.complete ?? 0,
220
+ total: plan.total ?? 0,
221
+ complete_plan: plan.complete_plan ?? false,
222
+ first_pending: firstPending ? {
223
+ id: firstPending.id ?? null,
224
+ artifact: firstPending.artifact ?? "plan",
225
+ name: firstPending.name ?? firstPending.title ?? null,
226
+ status: firstPending.status ?? null,
227
+ } : null,
228
+ },
229
+ progress: { exists: state.progress.exists, status: state.progress.status ?? null, latest: state.progress.latest ?? null },
230
+ objective: { exists: state.objective.exists, active: state.objective.active ?? false, title: state.objective.title ?? null },
231
+ state_presence: state.state_presence,
232
+ attention: projectPublicOrientationAttention(state).map((item) => truncateCodePoints(item, 200, "…")),
233
+ next_action: nextActionPayload(state),
234
+ };
235
+ }
236
+ export function emitPrime(command, payload, format, fieldsArg, out, err, options = {}) {
237
+ const retiredRejection = rejectRetiredPrimeFields(command, format, fieldsArg, out, err);
238
+ if (retiredRejection !== null)
239
+ return retiredRejection;
240
+ const requested = requestedFields(fieldsArg);
241
+ // The default bare briefing first omits inactive conditional top-level fields
242
+ // (v1_migration/docs/objective when default) so startup does not carry
243
+ // default-only payload, then — for the bare default only — projects the full
244
+ // payload to a bounded decision brief (Plan Task 3). Explicit `--fields`
245
+ // selection and `--context` use their governed payloads. Dashboard history is
246
+ // already projected at collection time so ordinary list detail is not copied
247
+ // into startup (see default_emission_omission_contract + brief_omission_contract).
248
+ const conditional = requested.length === 0 && options.bareBrief ? omitInactiveConditionalDefaults(payload) : payload;
249
+ const effectivePayload = requested.length === 0 && options.bareBrief
250
+ ? briefOrientationPayload(conditional, { budgetBytes: options.briefBudgetBytes })
251
+ : conditional;
252
+ if (requested.length === 0) {
253
+ if (format === "json" && options.maxUtf8Bytes !== undefined) {
254
+ const bytes = briefUtf8Bytes(effectivePayload);
255
+ if (bytes > options.maxUtf8Bytes) {
256
+ err(`Error: ${command} JSON output is ${bytes} UTF-8 bytes, over the ${options.maxUtf8Bytes}-byte startup budget; use the named recovery commands in the projected output contract.\n`);
257
+ return 1;
258
+ }
259
+ }
260
+ emitStructured(effectivePayload, format, out);
261
+ return 0;
262
+ }
263
+ const available = availablePrimeFields(command);
264
+ const unsupported = requested.filter((f) => !available.includes(f));
265
+ if (unsupported.length > 0) {
266
+ err(`Error: unsupported field '${unsupported[0]}' for ${command}. Available fields: ${available.join(", ")}\n`);
267
+ return 1;
268
+ }
269
+ const selected = {};
270
+ for (const field of [...REQUIRED_SPARSE_CONTEXT_FIELDS, ...requested]) {
271
+ if (field in payload && !(field in selected))
272
+ selected[field] = payload[field];
273
+ }
274
+ if (format === "json" && options.maxUtf8Bytes !== undefined) {
275
+ const bytes = briefUtf8Bytes(selected);
276
+ if (bytes > options.maxUtf8Bytes) {
277
+ err(`Error: ${command} JSON output is ${bytes} UTF-8 bytes, over the ${options.maxUtf8Bytes}-byte startup budget; use the named recovery commands in the projected output contract.\n`);
278
+ return 1;
279
+ }
280
+ }
281
+ emitStructured(selected, format, out);
282
+ return 0;
283
+ }
284
+ /** Reject a retired selector before state collection or output projection. Text
285
+ * mode uses JSON because a retired-field request is an automation-shaped
286
+ * selector and must return one machine-readable correction, not a briefing. */
287
+ export function rejectRetiredPrimeFields(command, format, fieldsArg, out, err) {
288
+ const requested = requestedFields(fieldsArg);
289
+ const retired = requested.find((field) => field in RETIRED_PRIME_FIELD_CORRECTIONS);
290
+ if (retired === undefined)
291
+ return null;
292
+ const replacement = RETIRED_PRIME_FIELD_CORRECTIONS[retired];
293
+ return emitInvalidInput({ out, err }, {
294
+ format: format === "yaml" ? "yaml" : "json",
295
+ body: {
296
+ class: "invalid_choice",
297
+ message: `prime field '${retired}' is retired; use '${replacement}'`,
298
+ valid_values: [replacement],
299
+ syntax: preCutoverCommand(`${command} --fields ${replacement} --format json`),
300
+ example: preCutoverCommand(`${command} --fields ${replacement} --format json`),
301
+ recovery: `Replace '${retired}' with '${replacement}' and retry; no state was changed.`,
302
+ },
303
+ });
304
+ }
305
+ export function printOrientationTextBriefing(state, command, out) {
306
+ const bundle = state.app;
307
+ const mode = state.mode;
308
+ const health = state.health;
309
+ const counts = state.counts;
310
+ const plan = state.plan;
311
+ const objective = state.objective;
312
+ const presence = state.state_presence;
313
+ const attention = state.attention;
314
+ const nextAction = state.next_action;
315
+ const dashboardLabel = command === "prime" ? "prime orientation dashboard" : "prime orientation dashboard";
316
+ out(`${preCutoverCommand(command)}\n`);
317
+ out(`app_home: install_track=${projectInstallTrack(bundle.installKind)} | status=${bundle.status} | home=${bundle.appHome} | ` +
318
+ `source=${bundle.appHomeSource} | managed_app=${bundle.managedAppRoot} | user_data=${bundle.userDataRoot} | expected=${bundle.expectedVersion} | ` +
319
+ `expected_source=${bundle.expectedVersionSource ?? "-"} | current=${bundle.markerVersion || "-"}\n`);
320
+ out(`mode: ${mode}\n`);
321
+ const projectIntegration = state.project_integration;
322
+ out(`project_integration: recommendation=${projectIntegration.recommendation} | ` +
323
+ `channel=${projectIntegration.update_channel} | pending_artifacts=${projectIntegration.pending_artifacts}\n`);
324
+ if (projectIntegration.recommendation === "upgrade" && projectIntegration.message) {
325
+ out(`project_integration_message: ${projectIntegration.message}\n`);
326
+ }
327
+ out(`shared_skill: status=${String(state.shared_skill.status)} | path=${String(state.shared_skill.path)}\n`);
328
+ const todoReconciliation = state.todo_reconciliation ?? null;
329
+ const startup = startupAggregation(capabilityContext("status") ?? {}, state.health, state.state_cutover, todoReconciliation);
330
+ out(`outcome: ${String(startup.outcome)}\n`);
331
+ if (health.exists && health.id) {
332
+ const worst = health.worst;
333
+ const worstText = worst ? `${worst[0]}:${worst[1]}` : "none";
334
+ out(`health: id=${health.id} | artifact=${health.artifact ?? "health"} | grade=${health.grade || "unknown"} | ` +
335
+ `trajectory=${health.trajectory || "unknown"} | worst=${worstText}\n`);
336
+ }
337
+ if (health.degraded_history) {
338
+ const degraded = health.degraded_history;
339
+ out(`health: degraded_history | summaries=${String(degraded.summary_count ?? 0)} | returned=${String(degraded.returned_count ?? 0)} | omitted=${String(degraded.omitted_count ?? 0)} | ` +
340
+ `detail=summary-only | recovery=${preCutoverCommand("state health list --limit 20 --format json")}\n`);
341
+ }
342
+ const latestProgress = state.progress.latest;
343
+ if (latestProgress) {
344
+ out(`progress: id=${String(latestProgress.id ?? "unknown")} | artifact=${String(latestProgress.artifact ?? "progress")} | ` +
345
+ `what=${String(latestProgress.what ?? "unknown")}\n`);
346
+ }
347
+ if (state.progress.degraded_history) {
348
+ const degraded = state.progress.degraded_history;
349
+ out(`progress: degraded_history | summaries=${String(degraded.summary_count ?? 0)} | returned=${String(degraded.returned_count ?? 0)} | omitted=${String(degraded.omitted_count ?? 0)} | ` +
350
+ `detail=summary-only | recovery=${preCutoverCommand("state progress list --limit 20 --format json")}\n`);
351
+ }
352
+ const decisionHistory = state.history.decisions?.degraded_history;
353
+ if (decisionHistory) {
354
+ out(`decisions: degraded_history | summaries=${String(decisionHistory.summary_count ?? 0)} | returned=${String(decisionHistory.returned_count ?? 0)} | omitted=${String(decisionHistory.omitted_count ?? 0)} | ` +
355
+ `detail=summary-only | recovery=${preCutoverCommand("state decisions list --limit 20 --format json")}\n`);
356
+ }
357
+ out(`todo: critical=${counts.critical} | degraded=${counts.degraded} | normal=${counts.normal} | annoying=${counts.annoying}\n`);
358
+ if (!presence.any_active) {
359
+ const missing = Object.keys(presence.absence).sort().join(", ") || "none";
360
+ out(`state: no active plan or objective | missing=${missing}\n`);
361
+ }
362
+ if (plan.exists && !plan.complete_plan) {
363
+ out(`plan: status=${plan.status || "unknown"} | progress=${plan.complete ?? 0}/${plan.total ?? 0}\n`);
364
+ }
365
+ if (objective.active) {
366
+ const target = objective.target ? ` | target=${objective.target}` : "";
367
+ out(`objective: active | name=${objective.name} | metric=${objective.metric}${target}\n`);
368
+ }
369
+ else if (objective.exists) {
370
+ out(`objective: none active | closed=${objective.closed_count ?? 0}\n`);
371
+ }
372
+ else {
373
+ out("objective: none active\n");
374
+ }
375
+ if (attention.length > 0) {
376
+ out("attention:\n");
377
+ for (const item of projectPublicOrientationAttention(state))
378
+ out(`- ${item}\n`);
379
+ }
380
+ out("next_action:\n");
381
+ out(`- ${formatNextAction(nextAction.recommended)}\n`);
382
+ for (const alt of nextAction.alternatives) {
383
+ out(`- alt: ${formatNextAction(alt)}\n`);
384
+ }
385
+ out("source_contract:\n");
386
+ out(`- fields=${PRIME_STRUCTURED_FIELDS.join(", ")}\n`);
387
+ out(`- render=caller-owned README-style ${dashboardLabel}\n`);
388
+ out("- access=single installed CLI call; app/v1/profile safety included; no preflight glob/read/import/doctor calls\n");
389
+ out(`- startup_outcome=${String(startup.outcome)}\n`);
390
+ out(`- capability_context: fetch rendering instructions via \`${preCutoverCommand("prime --context status --format json")}\`\n`);
391
+ out(`- detail_discovery=${String(startup.detail_discovery.schema)}\n`);
392
+ out(`- raw_artifact_reads_required=${String(startup.raw_artifact_reads_required).toLowerCase()}; policy=${startup.raw_artifact_read_policy}\n`);
393
+ const deferred = startup.availability
394
+ .filter((entry) => entry.availability === "deferred")
395
+ .map((entry) => String(entry.family));
396
+ out(`- deferred_detail=${deferred.join(", ") || "none"}\n`);
397
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolveInvokedUpdateChannel } from "../../../upgrade/channels.js";
4
+ import { buildUpgradeCommands } from "../../../upgrade/upgradeCommands.js";
5
+ export function isLocalCheckout(root) {
6
+ return ["skills/agentera/SKILL.md", "registry.json"].every((rel) => fs.existsSync(path.join(root, rel)));
7
+ }
8
+ export function v1MigrationSummary(v1Artifacts, opts) {
9
+ const detected = v1Artifacts.length > 0;
10
+ const channel = resolveInvokedUpdateChannel({
11
+ channel: null,
12
+ sourceRoot: opts.sourceRoot,
13
+ home: opts.home,
14
+ env: opts.env,
15
+ });
16
+ const cmds = detected
17
+ ? buildUpgradeCommands({
18
+ project: process.cwd(),
19
+ installRoot: null,
20
+ channel,
21
+ only: ["artifacts"],
22
+ cwdDefault: true,
23
+ })
24
+ : null;
25
+ const summary = {
26
+ detected,
27
+ affected_files: v1Artifacts,
28
+ dry_run_command: cmds?.dryRunCommand ?? null,
29
+ apply_command: cmds?.applyCommand ?? null,
30
+ requires_confirmation: detected,
31
+ update_channel: channel.channel,
32
+ };
33
+ if (detected && isLocalCheckout(process.cwd())) {
34
+ summary.local_dry_run_command = cmds?.dryRunCommand ?? null;
35
+ summary.local_apply_command = cmds?.applyCommand ?? null;
36
+ }
37
+ return summary;
38
+ }