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,367 @@
1
+ import fs from "node:fs";
2
+ import { loadYamlMapping } from "../../core/yaml.js";
3
+ import { glossaryCaveatContract } from "../../registries/glossaryCaveatContract.js";
4
+ const caveat = glossaryCaveatContract();
5
+ const field = (path, type, description, options = { required: false, update: "replace" }) => ({ path, type, description, ...options });
6
+ const PROGRESS_INPUT_SCHEMA = {
7
+ root: "one progress cycle record",
8
+ fields: [
9
+ field("timestamp", "datetime", "Writer-defaulted cycle timestamp.", { required: false, update: "defaulted" }),
10
+ field("type", "string", "Conventional change type.", { required: true, enum: ["feat", "fix", "docs", "refactor", "chore", "test"], update: "replace" }),
11
+ field("phase", "string", "Lifecycle phase.", { required: true, enum: ["envision", "deliberate", "plan", "build", "audit"], update: "replace" }),
12
+ field("what", "string", "Non-empty summary of the cycle.", { required: true, update: "replace" }),
13
+ field("inspiration", "string", "Optional inspiration evidence.", { required: false, update: "replace" }),
14
+ field("discovered", "string", "Optional discovery evidence.", { required: false, update: "replace" }),
15
+ field("verified", "string", "Optional verification evidence.", { required: false, update: "replace" }),
16
+ field("next", "string", "Optional next-step evidence.", { required: false, update: "replace" }),
17
+ field("context", "mapping", "Required context mapping.", { required: true, shape: "intent:string, constraints?:string, unknowns?:string, scope?:string", update: "replace" }),
18
+ field("context.intent", "string", "Required cycle intent.", { required: true, update: "replace" }),
19
+ field("context.constraints", "string", "Optional constraints.", { required: false, update: "replace" }),
20
+ field("context.unknowns", "string", "Optional unknowns.", { required: false, update: "replace" }),
21
+ field("context.scope", "string", "Optional scope.", { required: false, update: "replace" }),
22
+ field("glossary_caveat", "mapping", "Optional bounded glossary-caveat lifecycle envelope.", { required: false, shape: "event, reason, ownership_state, caveat_id?, transition_id?", update: "replace" }),
23
+ field("glossary_caveat.event", "string", "Caveat lifecycle event.", { required: false, enum: caveat.events, update: "replace" }),
24
+ field("glossary_caveat.reason", "string", "Authority-declared caveat reason.", { required: false, enum: caveat.reasons, update: "replace" }),
25
+ field("glossary_caveat.ownership_state", "string", "Authority-declared ownership state.", { required: false, enum: caveat.ownershipStates, update: "replace" }),
26
+ field("glossary_caveat.caveat_id", "string", "Existing opaque caveat selector for terminal events.", { required: false, update: "replace" }),
27
+ field("glossary_caveat.transition_id", "string", "Existing opaque successor selector for supersession.", { required: false, update: "replace" }),
28
+ ],
29
+ semantics: {
30
+ mode: "append_record",
31
+ omitted_fields: "not present in the canonical record except writer-defaulted timestamp",
32
+ writer_metadata: "id, artifact, and publication_order are assigned by the writer and excluded from logical replay comparison",
33
+ glossary_caveat: "current events deduplicate by the existing caveat lifecycle contract; resolved and superseded events remain distinct",
34
+ },
35
+ ownedFields: ["id", "artifact", "publication_order"],
36
+ immutableFields: [],
37
+ bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 },
38
+ examples: ["agentera state progress append --input progress.yaml --format json"],
39
+ };
40
+ const DECISION_APPEND_INPUT_SCHEMA = {
41
+ root: "one decision record",
42
+ fields: [
43
+ field("date", "date", "Writer-defaulted decision date.", { required: false, update: "defaulted" }),
44
+ field("question", "string", "Question under deliberation.", { required: true, update: "replace" }),
45
+ field("context", "string", "Decision context.", { required: true, update: "replace" }),
46
+ field("alternatives", "mapping", "Alternatives mapping or ordered canonical alternative list.", { required: true, acceptedForms: ["mapping", "ordered_alternative_list"], shape: "chosen:string, rejected?:string[]", update: "replace" }),
47
+ field("alternatives.chosen", "string", "Exactly one chosen alternative.", { required: true, update: "replace" }),
48
+ field("alternatives.rejected", "list", "Optional rejected alternatives in caller order.", { required: false, itemType: "string", update: "replace" }),
49
+ field("choice", "string", "Selected choice.", { required: true, update: "replace" }),
50
+ field("reasoning", "string", "Decision reasoning.", { required: true, update: "replace" }),
51
+ field("confidence", "string", "Current confidence vocabulary.", { required: true, enum: ["firm", "provisional", "exploratory"], update: "replace" }),
52
+ field("feeds_into", "string", "Optional downstream relationship.", { required: false, update: "replace" }),
53
+ ],
54
+ semantics: {
55
+ mode: "append_record",
56
+ alternatives: "ordered list ordering is significant; mapping input is normalized to the canonical ordered list",
57
+ writer_metadata: "id and artifact are assigned by the writer and excluded from logical replay comparison",
58
+ },
59
+ ownedFields: ["id", "artifact"],
60
+ immutableFields: ["number", "satisfaction"],
61
+ bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 },
62
+ examples: ["agentera state decisions append --input decision.yaml --format json"],
63
+ };
64
+ const DECISION_AMEND_INPUT_SCHEMA = {
65
+ root: "amendable decision content",
66
+ fields: DECISION_APPEND_INPUT_SCHEMA.fields
67
+ .filter((entry) => entry.path !== "date")
68
+ .map((entry) => ({ ...entry, required: entry.path === "alternatives.chosen" ? false : false, update: entry.path === "alternatives.rejected" ? "append_unique" : "patch" })),
69
+ semantics: {
70
+ mode: "patch",
71
+ omitted_fields: "preserve the effective record",
72
+ alternatives: "alternatives.chosen replaces the chosen value; alternatives.rejected appends unique rejected values in input order",
73
+ immutable_fields: "date, number, satisfaction, id, artifact, and base_sha256 are not amendment content",
74
+ },
75
+ ownedFields: ["id", "artifact", "base_sha256"],
76
+ immutableFields: ["date", "number", "satisfaction"],
77
+ bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 },
78
+ examples: ["agentera state decisions amend --id qjtrmnpvka --base-sha256 HASH --input amendment.yaml --format json"],
79
+ };
80
+ const PLAN_TASK_APPEND_INPUT_SCHEMA = {
81
+ root: "one plan task record",
82
+ fields: [
83
+ field("name", "string", "Short task name.", { required: true, update: "replace" }),
84
+ field("depends_on", "list", "Bare ten-letter task IDs in the same plan; use an empty list for a root task.", { required: true, itemType: "string", update: "replace" }),
85
+ field("acceptance", "list", "Task acceptance criteria.", { required: true, itemType: "string", update: "replace" }),
86
+ field("evidence", "string", "Optional task evidence as a string or list of strings.", { required: false, acceptedForms: ["string", "list"], update: "replace" }),
87
+ field("blocked_reason", "string", "Optional task blocker explanation.", { required: false, update: "replace" }),
88
+ ],
89
+ semantics: {
90
+ mode: "append_record",
91
+ omitted_fields: "only writer-defaulted status is omitted; plan, id, and artifact are assigned by the writer",
92
+ identities: "depends_on contains bare ten-letter task IDs and every target must belong to the selected plan",
93
+ lifecycle: "status, supersession, evaluation, and plan lifecycle are separate flag-only transitions",
94
+ },
95
+ ownedFields: ["id", "artifact", "plan", "status", "superseded_by", "superseded_reason", "evaluation", "header.status", "header.id", "previous_plan_archived", "task_ids"],
96
+ immutableFields: [],
97
+ bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 },
98
+ examples: ["agentera state plan append --plan qjtrmnpvka --input task.yaml --format json"],
99
+ };
100
+ const PLAN_TASK_UPDATE_INPUT_SCHEMA = {
101
+ root: "plan task patch",
102
+ fields: [
103
+ field("name", "string", "Replacement task name.", { required: false, update: "patch" }),
104
+ field("depends_on", "list", "Replacement list of bare ten-letter task IDs in the same plan; null clears to an empty list.", { required: false, itemType: "string", update: "patch" }),
105
+ field("acceptance", "list", "Replacement task acceptance criteria; null clears to an empty list.", { required: false, itemType: "string", update: "patch" }),
106
+ field("evidence", "string", "Replacement task evidence as a string or list of strings; null clears it.", { required: false, acceptedForms: ["string", "list"], update: "patch" }),
107
+ field("blocked_reason", "string", "Replacement blocker explanation; null clears it.", { required: false, update: "patch" }),
108
+ field("surprise", "string", "Plan-level surprise; it is not written to the task entity.", { required: false, update: "patch" }),
109
+ ],
110
+ semantics: {
111
+ mode: "patch",
112
+ omitted_fields: "preserve the effective task record",
113
+ clearable_fields: ["depends_on", "acceptance", "evidence", "blocked_reason"],
114
+ surprise: "surprise remains plan-level content and cannot be combined with task-field changes",
115
+ identities: "depends_on contains bare ten-letter task IDs and every target must belong to the selected plan",
116
+ lifecycle: "status, supersession, evaluation, and plan lifecycle are separate flag-only transitions",
117
+ },
118
+ ownedFields: ["id", "artifact", "plan", "status", "superseded_by", "superseded_reason", "evaluation", "header.status", "header.id", "previous_plan_archived", "task_ids"],
119
+ immutableFields: ["status", "superseded_by", "superseded_reason", "evaluation", "plan"],
120
+ bounds: { max_input_utf8_bytes: 32768, max_collection_items: 1 },
121
+ examples: ["agentera state plan update --id qjtrmnpvka --plan abcdefghij --input task-patch.yaml --format json"],
122
+ };
123
+ const STRUCTURED_INPUT_SCHEMAS = {
124
+ "progress.append": PROGRESS_INPUT_SCHEMA,
125
+ "decisions.append": DECISION_APPEND_INPUT_SCHEMA,
126
+ "decisions.amend": DECISION_AMEND_INPUT_SCHEMA,
127
+ "plan.append": PLAN_TASK_APPEND_INPUT_SCHEMA,
128
+ "plan.update": PLAN_TASK_UPDATE_INPUT_SCHEMA,
129
+ };
130
+ export function structuredInputDescriptor(artifact, verb) {
131
+ return STRUCTURED_INPUT_SCHEMAS[`${artifact}.${verb}`] ?? null;
132
+ }
133
+ export function structuredInputSchemaProjection(schema) {
134
+ return {
135
+ root: schema.root,
136
+ fields: schema.fields.map((entry) => ({
137
+ path: entry.path,
138
+ type: entry.type,
139
+ required: entry.required,
140
+ ...(entry.enum ? { enum: [...entry.enum] } : {}),
141
+ ...(entry.itemType ? { item_type: entry.itemType } : {}),
142
+ ...(entry.acceptedForms ? { accepted_forms: [...entry.acceptedForms] } : {}),
143
+ ...(entry.shape ? { shape: entry.shape } : {}),
144
+ update: entry.update,
145
+ description: entry.description,
146
+ })),
147
+ semantics: structuredClone(schema.semantics),
148
+ owned_fields: [...schema.ownedFields],
149
+ immutable_fields: [...schema.immutableFields],
150
+ bounds: structuredClone(schema.bounds),
151
+ examples: [...schema.examples],
152
+ };
153
+ }
154
+ function mapping(value) {
155
+ return value !== null && typeof value === "object" && !Array.isArray(value);
156
+ }
157
+ function requiredString(value, field, violations) {
158
+ if (typeof value !== "string" || value.length === 0)
159
+ violations.push(`${field} must be a non-empty string`);
160
+ }
161
+ function optionalString(value, field, violations) {
162
+ if (value !== undefined && (typeof value !== "string" || value.length === 0))
163
+ violations.push(`${field} must be a non-empty string when present`);
164
+ }
165
+ function unknownFields(input, allowed, violations) {
166
+ for (const field of Object.keys(input))
167
+ if (!allowed.has(field))
168
+ violations.push(`input field '${field}' is not accepted for this mutation`);
169
+ }
170
+ function descriptorsFor(schema, prefix) {
171
+ return schema.fields.filter((entry) => entry.path === prefix || entry.path.startsWith(`${prefix}.`));
172
+ }
173
+ function descriptor(schema, path) {
174
+ const found = schema.fields.find((entry) => entry.path === path);
175
+ if (!found)
176
+ throw new Error(`structured input schema is missing '${path}'`);
177
+ return found;
178
+ }
179
+ function topLevelFields(schema) {
180
+ return new Set(schema.fields.map((entry) => entry.path.split(".")[0]));
181
+ }
182
+ function enumValues(schema, path) {
183
+ return descriptor(schema, path).enum ?? [];
184
+ }
185
+ function alternativesViolations(value, violations, requireChosen, schema) {
186
+ if (Array.isArray(value)) {
187
+ const chosen = value.filter((entry) => mapping(entry) && entry.status === "chosen");
188
+ if (chosen.length !== 1 || value.some((entry) => !mapping(entry) || typeof entry.name !== "string" || entry.name.length === 0 || !["chosen", "rejected"].includes(String(entry.status)))) {
189
+ violations.push("alternatives must be a mapping or a list with exactly one named chosen alternative");
190
+ }
191
+ if (!requireChosen && value.length === 0)
192
+ violations.push("alternatives must not be empty");
193
+ return;
194
+ }
195
+ if (!mapping(value)) {
196
+ violations.push("alternatives must be a mapping with chosen and rejected fields");
197
+ return;
198
+ }
199
+ unknownFields(value, new Set(descriptorsFor(schema, "alternatives").map((entry) => entry.path.split(".").at(-1))), violations);
200
+ if (requireChosen)
201
+ requiredString(value.chosen, "alternatives.chosen", violations);
202
+ else if (value.chosen !== undefined)
203
+ optionalString(value.chosen, "alternatives.chosen", violations);
204
+ if (value.rejected !== undefined && (!Array.isArray(value.rejected) || value.rejected.some((entry) => typeof entry !== "string" || entry.length === 0)))
205
+ violations.push("alternatives.rejected must be a list of non-empty strings when present");
206
+ }
207
+ function progressInputViolations(input) {
208
+ const violations = [];
209
+ const schema = structuredInputDescriptor("progress", "append");
210
+ unknownFields(input, topLevelFields(schema), violations);
211
+ requiredString(input.type, "type", violations);
212
+ requiredString(input.phase, "phase", violations);
213
+ requiredString(input.what, "what", violations);
214
+ if (typeof input.type === "string" && !enumValues(schema, "type").includes(input.type))
215
+ violations.push(`type must be one of ${enumValues(schema, "type").join(", ")}`);
216
+ if (typeof input.phase === "string" && !enumValues(schema, "phase").includes(input.phase))
217
+ violations.push(`phase must be one of ${enumValues(schema, "phase").join(", ")}`);
218
+ if (input.timestamp !== undefined && (typeof input.timestamp !== "string" || !/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(input.timestamp)))
219
+ violations.push("timestamp must use YYYY-MM-DD HH:MM when present");
220
+ for (const field of ["inspiration", "discovered", "verified", "next"])
221
+ optionalString(input[field], field, violations);
222
+ if (!mapping(input.context))
223
+ violations.push("context must be a mapping with intent");
224
+ else {
225
+ unknownFields(input.context, new Set(descriptorsFor(schema, "context").map((entry) => entry.path.split(".").at(-1))), violations);
226
+ requiredString(input.context.intent, "context.intent", violations);
227
+ for (const field of ["constraints", "unknowns", "scope"])
228
+ optionalString(input.context[field], `context.${field}`, violations);
229
+ }
230
+ if (input.glossary_caveat !== undefined) {
231
+ if (!mapping(input.glossary_caveat))
232
+ violations.push("glossary_caveat must be a mapping");
233
+ else {
234
+ unknownFields(input.glossary_caveat, new Set(descriptorsFor(schema, "glossary_caveat").map((entry) => entry.path.split(".").at(-1))), violations);
235
+ for (const field of descriptorsFor(schema, "glossary_caveat").map((entry) => entry.path.split(".").at(-1)).filter((entry) => entry !== "glossary_caveat"))
236
+ if (input.glossary_caveat[field] !== undefined && input.glossary_caveat[field] !== null)
237
+ optionalString(input.glossary_caveat[field], `glossary_caveat.${field}`, violations);
238
+ }
239
+ }
240
+ return violations;
241
+ }
242
+ function decisionInputViolations(input, verb) {
243
+ const violations = [];
244
+ const schema = structuredInputDescriptor("decisions", verb);
245
+ unknownFields(input, topLevelFields(schema), violations);
246
+ if (verb === "append") {
247
+ requiredString(input.question, "question", violations);
248
+ requiredString(input.context, "context", violations);
249
+ requiredString(input.choice, "choice", violations);
250
+ requiredString(input.reasoning, "reasoning", violations);
251
+ requiredString(input.confidence, "confidence", violations);
252
+ if (input.date !== undefined && (typeof input.date !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(input.date)))
253
+ violations.push("date must use YYYY-MM-DD when present");
254
+ }
255
+ else {
256
+ if (Object.keys(input).length === 0)
257
+ violations.push("decision amendment requires at least one content field");
258
+ for (const field of ["question", "context", "choice", "reasoning", "confidence", "feeds_into"])
259
+ optionalString(input[field], field, violations);
260
+ }
261
+ if (input.confidence !== undefined && (typeof input.confidence !== "string" || !enumValues(schema, "confidence").includes(input.confidence)))
262
+ violations.push(`confidence must be one of ${enumValues(schema, "confidence").join(", ")}`);
263
+ if (input.alternatives !== undefined)
264
+ alternativesViolations(input.alternatives, violations, verb === "append", schema);
265
+ else if (verb === "append")
266
+ violations.push("alternatives is required");
267
+ return violations;
268
+ }
269
+ const BARE_ID = /^[a-z]{10}$/;
270
+ function stringList(value, field, violations, options) {
271
+ if (value === undefined) {
272
+ if (options.required)
273
+ violations.push(`${field} is required`);
274
+ return;
275
+ }
276
+ if (value === null && !options.required)
277
+ return;
278
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
279
+ violations.push(`${field} must be a list of strings${options.ids ? " containing bare ten-letter IDs" : ""}`);
280
+ return;
281
+ }
282
+ if (options.ids && value.some((entry) => !BARE_ID.test(entry)))
283
+ violations.push(`${field} must contain only bare ten-letter task IDs`);
284
+ }
285
+ function planTaskInputViolations(input, verb) {
286
+ const schema = structuredInputDescriptor("plan", verb);
287
+ const violations = [];
288
+ unknownFields(input, topLevelFields(schema), violations);
289
+ if (verb === "append") {
290
+ requiredString(input.name, "name", violations);
291
+ stringList(input.depends_on, "depends_on", violations, { required: true, ids: true });
292
+ stringList(input.acceptance, "acceptance", violations, { required: true });
293
+ }
294
+ else if (Object.keys(input).length === 0) {
295
+ violations.push("plan task patch requires at least one content field");
296
+ }
297
+ if (input.name !== undefined && (typeof input.name !== "string" || input.name.length === 0))
298
+ violations.push("name must be a non-empty string when present");
299
+ stringList(input.depends_on, "depends_on", violations, { required: false, ids: true });
300
+ stringList(input.acceptance, "acceptance", violations, { required: false });
301
+ if (input.evidence !== undefined && input.evidence !== null && typeof input.evidence !== "string" && (!Array.isArray(input.evidence) || input.evidence.some((entry) => typeof entry !== "string")))
302
+ violations.push("evidence must be a string, list of strings, or null when present");
303
+ if (input.blocked_reason !== undefined && input.blocked_reason !== null && typeof input.blocked_reason !== "string")
304
+ violations.push("blocked_reason must be a string or null when present");
305
+ if (verb === "append" && (input.evidence === null || input.blocked_reason === null))
306
+ violations.push("null clears are available only for plan task updates");
307
+ if (verb === "update" && input.surprise !== undefined && (typeof input.surprise !== "string" || input.surprise.length === 0))
308
+ violations.push("surprise must be a non-empty string when present");
309
+ if (verb === "append" && input.surprise !== undefined)
310
+ violations.push("surprise is plan-level content and is not accepted when appending a task");
311
+ return violations;
312
+ }
313
+ export function structuredRecordInputViolations(artifact, verb, input) {
314
+ if (!input || (artifact !== "progress" && artifact !== "decisions" && artifact !== "plan"))
315
+ return [];
316
+ if (artifact === "progress" && verb === "append")
317
+ return progressInputViolations(input);
318
+ if (artifact === "decisions" && (verb === "append" || verb === "amend"))
319
+ return decisionInputViolations(input, verb);
320
+ if (artifact === "plan" && (verb === "append" || verb === "update"))
321
+ return planTaskInputViolations(input, verb);
322
+ return [];
323
+ }
324
+ export function normalizeDecisionRecordInput(input) {
325
+ const result = structuredClone(input);
326
+ if (!Array.isArray(result.alternatives))
327
+ return result;
328
+ const alternatives = result.alternatives;
329
+ const chosen = alternatives.find((entry) => mapping(entry) && entry.status === "chosen");
330
+ result.alternatives = {
331
+ chosen: chosen?.name,
332
+ rejected: alternatives
333
+ .filter((entry) => mapping(entry) && entry.status === "rejected")
334
+ .map((entry) => entry.name),
335
+ };
336
+ return result;
337
+ }
338
+ export function loadStructuredInput(source, readStdin, maxBytes) {
339
+ let bytes;
340
+ if (source === "-") {
341
+ const input = readStdin();
342
+ bytes = Buffer.isBuffer(input) ? input : Buffer.from(input, "utf8");
343
+ }
344
+ else {
345
+ try {
346
+ bytes = fs.readFileSync(source);
347
+ }
348
+ catch {
349
+ throw new Error(`input file '${source}' is not readable`);
350
+ }
351
+ }
352
+ if (maxBytes !== undefined && maxBytes > 0 && bytes.byteLength > maxBytes)
353
+ throw new Error(`input exceeds the ${maxBytes}-byte UTF-8 limit`);
354
+ let text;
355
+ try {
356
+ text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
357
+ }
358
+ catch {
359
+ throw new Error("input is not valid UTF-8");
360
+ }
361
+ try {
362
+ return loadYamlMapping(text);
363
+ }
364
+ catch (error) {
365
+ throw new Error(`input is not valid YAML or JSON: ${error.message}`);
366
+ }
367
+ }