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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -22
  3. package/bundle/CHANGELOG.md +1351 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +236 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +437 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -189
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +191 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3022 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -1
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +326 -361
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +224 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +458 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +190 -0
  95. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  96. package/dist/analytics/extractCorpus/core.js +392 -0
  97. package/dist/analytics/extractCorpus/corpus.js +167 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  103. package/dist/analytics/extractCorpus/index.js +14 -0
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +2 -1791
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +56 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +565 -0
  134. package/dist/cli/capabilityContext/bespoke.js +44 -0
  135. package/dist/cli/capabilityContext/build.js +242 -0
  136. package/dist/cli/capabilityContext/closeout.js +233 -0
  137. package/dist/cli/capabilityContext/contract.js +179 -0
  138. package/dist/cli/capabilityContext/evidence.js +463 -0
  139. package/dist/cli/capabilityContext/index.js +3 -0
  140. package/dist/cli/capabilityContext/orchestration.js +131 -0
  141. package/dist/cli/capabilityContext/planState.js +260 -0
  142. package/dist/cli/capabilityContext/progress.js +142 -0
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +83 -0
  145. package/dist/cli/capabilityContext/slim.js +152 -0
  146. package/dist/cli/capabilityContext/startup.js +150 -0
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +56 -0
  149. package/dist/cli/capabilityContext.js +1 -2487
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +164 -14
  153. package/dist/cli/commands/doctor.js +122 -97
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +26 -44
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +399 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +78 -53
  169. package/dist/cli/commands/report.js +96 -25
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -143
  172. package/dist/cli/commands/state/decisions.js +387 -0
  173. package/dist/cli/commands/state/docs.js +70 -0
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +14 -0
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +14 -0
  178. package/dist/cli/commands/state/index.js +16 -0
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +25 -0
  181. package/dist/cli/commands/state/plan.js +14 -0
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +13 -0
  185. package/dist/cli/commands/state/shared.js +14 -0
  186. package/dist/cli/commands/state/todo.js +42 -0
  187. package/dist/cli/commands/state/write.js +430 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +272 -223
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +372 -0
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +207 -0
  198. package/dist/cli/dispatch/lifecycle.js +652 -0
  199. package/dist/cli/dispatch/prime.js +139 -0
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +63 -0
  202. package/dist/cli/dispatch/state.js +140 -0
  203. package/dist/cli/dispatch.js +1 -1294
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +394 -43
  206. package/dist/cli/migrationRequired.js +87 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +11 -79
  242. package/dist/hooks/compaction/apply.js +446 -0
  243. package/dist/hooks/compaction/dryRun.js +184 -0
  244. package/dist/hooks/compaction/index.js +22 -0
  245. package/dist/hooks/compaction/parse.js +325 -0
  246. package/dist/hooks/compaction/retention.js +202 -0
  247. package/dist/hooks/compaction/status.js +360 -0
  248. package/dist/hooks/compaction/types.js +5 -0
  249. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  250. package/dist/hooks/validateArtifact/index.js +92 -0
  251. package/dist/hooks/validateArtifact/markdown.js +145 -0
  252. package/dist/hooks/validateArtifact/schema.js +546 -0
  253. package/dist/hooks/validateArtifact/traversal.js +107 -0
  254. package/dist/hooks/validateArtifact/violations.js +107 -0
  255. package/dist/migrate/v2HandoffManifest.js +452 -0
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +107 -0
  258. package/dist/registries/artifactProtocolIds.js +78 -0
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +229 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +385 -0
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -0
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +846 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +806 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +982 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/projectRoot.js +62 -0
  343. package/dist/state/projectionPolicy.js +190 -0
  344. package/dist/state/retrievalAuthority.js +156 -0
  345. package/dist/state/safeProjectFile.js +155 -0
  346. package/dist/state/startupAnalysis/benchmark.js +432 -0
  347. package/dist/state/startupAnalysis/contract.js +160 -0
  348. package/dist/state/startupAnalysis/helpers.js +286 -0
  349. package/dist/state/startupAnalysis/index.js +6 -0
  350. package/dist/state/startupAnalysis/metrics.js +340 -0
  351. package/dist/state/startupAnalysis/records.js +198 -0
  352. package/dist/state/startupAnalysis/report.js +111 -0
  353. package/dist/state/startupAnalysis/threshold.js +512 -0
  354. package/dist/state/startupAnalysis.js +2 -1953
  355. package/dist/state/startupProjection.js +499 -0
  356. package/dist/state/stateMode.js +85 -0
  357. package/dist/state/stateStorageAuthority.js +47 -0
  358. package/dist/state/summaryEntityRead.js +25 -0
  359. package/dist/state/summaryMigrationProvenance.js +66 -0
  360. package/dist/state/summarySourceRowAuthority.js +36 -0
  361. package/dist/state/todoActivationSafety.js +58 -0
  362. package/dist/state/todoDocsEntities.js +1069 -0
  363. package/dist/state/todoDocsEntityValidation.js +158 -0
  364. package/dist/state/todoMarkdownProjection.js +51 -0
  365. package/dist/state/todoReconciliationActivation.js +140 -0
  366. package/dist/state/todoReconciliationInspection.js +169 -0
  367. package/dist/state/todoReconciliationRepair.js +170 -0
  368. package/dist/state/todoReconciliationTransaction.js +582 -0
  369. package/dist/state/write/assign.js +20 -0
  370. package/dist/state/write/candidateMutation.js +269 -0
  371. package/dist/state/write/errors.js +11 -0
  372. package/dist/state/write/experimentPublication.js +192 -0
  373. package/dist/state/write/explain.js +363 -0
  374. package/dist/state/write/fields.js +61 -0
  375. package/dist/state/write/glossaryPublication.js +263 -0
  376. package/dist/state/write/grammar.js +285 -0
  377. package/dist/state/write/helpers.js +29 -0
  378. package/dist/state/write/index.js +12 -0
  379. package/dist/state/write/input.js +367 -0
  380. package/dist/state/write/lock.js +837 -0
  381. package/dist/state/write/mutation.js +234 -0
  382. package/dist/state/write/operations.js +170 -0
  383. package/dist/state/write/planEvaluation.js +128 -0
  384. package/dist/state/write/planPublication.js +179 -0
  385. package/dist/state/write/runtimeOperations.js +144 -0
  386. package/dist/state/write/serialize.js +1 -0
  387. package/dist/state/write/transaction.js +52 -0
  388. package/dist/state/write/validate.js +7 -0
  389. package/dist/upgrade/appContentRefresh.js +383 -0
  390. package/dist/upgrade/appModel.js +8 -7
  391. package/dist/upgrade/atomicWriter.js +1 -0
  392. package/dist/upgrade/bundleEvidence.js +33 -0
  393. package/dist/upgrade/channels.js +12 -8
  394. package/dist/upgrade/compatibility.js +56 -21
  395. package/dist/upgrade/doctor.js +197 -192
  396. package/dist/upgrade/doctorClassifier.js +187 -0
  397. package/dist/upgrade/installedHooksRetirement.js +196 -0
  398. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  399. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  400. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  401. package/dist/upgrade/migrationPublication.js +122 -0
  402. package/dist/upgrade/nextMajorDoctor.js +42 -8
  403. package/dist/upgrade/npxPlatformStatus.js +22 -0
  404. package/dist/upgrade/projectIntegration.js +145 -187
  405. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  406. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  407. package/dist/upgrade/runtimeMigration.js +273 -363
  408. package/dist/upgrade/upgradeCommands.js +14 -1
  409. package/dist/upgrade/upgradeLock.js +85 -0
  410. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  411. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  412. package/dist/upgrade/versionResolution.js +8 -1
  413. package/dist/validate/activationArtifactEvidence.js +844 -0
  414. package/dist/validate/activationConjunction.js +816 -0
  415. package/dist/validate/activationEvidenceManifest.js +515 -0
  416. package/dist/validate/activationPackageSemantics.js +29 -0
  417. package/dist/validate/appHomeContract.js +5 -11
  418. package/dist/validate/bootstrapAuthority.js +44 -0
  419. package/dist/validate/capability.js +133 -12
  420. package/dist/validate/crossCapability.js +15 -10
  421. package/dist/validate/retainedReferenceAuthority.js +879 -0
  422. package/dist/validate/selfAudit.js +73 -37
  423. package/dist/validate/v1LegacyCruft.js +131 -0
  424. package/dist/validate/vocabularyAuthority.js +303 -0
  425. package/package.json +53 -27
  426. package/bundle/references/adapters/cursor.md +0 -213
  427. package/bundle/references/adapters/opencode.md +0 -530
  428. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  429. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  430. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  431. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  432. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  433. package/bundle/references/analysis/benchmark.md +0 -267
  434. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  435. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  436. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  437. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  438. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  439. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  440. package/bundle/references/meta/documentation-inventory.md +0 -43
  441. package/bundle/references/v1-section-mapping.md +0 -47
  442. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  443. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  444. package/bundle/skills/agentera/agents/hej.toml +0 -6
  445. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  446. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  447. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  448. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  449. package/bundle/skills/agentera/agents/planera.toml +0 -6
  450. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  451. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  452. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  453. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  454. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  456. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  461. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  462. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  463. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  464. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  465. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  466. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  467. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  468. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  469. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  470. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  471. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  472. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  473. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  474. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  475. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  476. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  477. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  478. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  479. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  480. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  481. package/bundle/skills/agentera/references/contract.md +0 -1039
  482. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  483. package/bundle/skills/hej/SKILL.md +0 -69
  484. package/bundle/skills/hej/agents/hej.toml +0 -11
  485. package/bundle/skills/hej/agents/openai.yaml +0 -8
  486. package/dist/analytics/extractCorpus.js.map +0 -1
  487. package/dist/analytics/usageStats.js.map +0 -1
  488. package/dist/bin/agentera.js.map +0 -1
  489. package/dist/capabilities/dokumentera/instructions.js +0 -6
  490. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  491. package/dist/capabilities/hej/instructions.js +0 -6
  492. package/dist/capabilities/hej/instructions.js.map +0 -1
  493. package/dist/capabilities/index.js.map +0 -1
  494. package/dist/capabilities/inspektera/instructions.js +0 -6
  495. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  496. package/dist/capabilities/inspirera/instructions.js +0 -6
  497. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  498. package/dist/capabilities/optimera/instructions.js +0 -6
  499. package/dist/capabilities/optimera/instructions.js.map +0 -1
  500. package/dist/capabilities/orkestrera/instructions.js +0 -6
  501. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  502. package/dist/capabilities/planera/instructions.js +0 -6
  503. package/dist/capabilities/planera/instructions.js.map +0 -1
  504. package/dist/capabilities/profilera/instructions.js +0 -6
  505. package/dist/capabilities/profilera/instructions.js.map +0 -1
  506. package/dist/capabilities/realisera/instructions.js +0 -6
  507. package/dist/capabilities/realisera/instructions.js.map +0 -1
  508. package/dist/capabilities/resonera/instructions.js +0 -6
  509. package/dist/capabilities/resonera/instructions.js.map +0 -1
  510. package/dist/capabilities/visionera/instructions.js +0 -6
  511. package/dist/capabilities/visionera/instructions.js.map +0 -1
  512. package/dist/capabilities/visualisera/instructions.js +0 -6
  513. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  514. package/dist/cli/appContext.js.map +0 -1
  515. package/dist/cli/argvalidate.js.map +0 -1
  516. package/dist/cli/capabilityContext.js.map +0 -1
  517. package/dist/cli/commands/capability.js.map +0 -1
  518. package/dist/cli/commands/compact.js.map +0 -1
  519. package/dist/cli/commands/doctor.js.map +0 -1
  520. package/dist/cli/commands/lint.js.map +0 -1
  521. package/dist/cli/commands/prime.js.map +0 -1
  522. package/dist/cli/commands/query.js.map +0 -1
  523. package/dist/cli/commands/report.js.map +0 -1
  524. package/dist/cli/commands/schema.js.map +0 -1
  525. package/dist/cli/commands/state.js +0 -1023
  526. package/dist/cli/commands/state.js.map +0 -1
  527. package/dist/cli/commands/upgrade.js.map +0 -1
  528. package/dist/cli/commands/validate.js.map +0 -1
  529. package/dist/cli/commands/verify.js.map +0 -1
  530. package/dist/cli/dispatch.js.map +0 -1
  531. package/dist/cli/errors.js.map +0 -1
  532. package/dist/cli/help.js.map +0 -1
  533. package/dist/cli/orientation.js.map +0 -1
  534. package/dist/cli/prime-blob.js.map +0 -1
  535. package/dist/cli/stateQuery.js.map +0 -1
  536. package/dist/cli/structured.js.map +0 -1
  537. package/dist/cli/todoMarkdown.js.map +0 -1
  538. package/dist/core/difflib.js.map +0 -1
  539. package/dist/core/paths.js.map +0 -1
  540. package/dist/core/pyjson.js.map +0 -1
  541. package/dist/core/sourceRoot.js.map +0 -1
  542. package/dist/core/toml.js.map +0 -1
  543. package/dist/core/yaml.js.map +0 -1
  544. package/dist/eval/evalSkills.js.map +0 -1
  545. package/dist/eval/semanticEval.js.map +0 -1
  546. package/dist/eval/semanticFixtures.js.map +0 -1
  547. package/dist/hooks/common.js.map +0 -1
  548. package/dist/hooks/compaction.js +0 -935
  549. package/dist/hooks/compaction.js.map +0 -1
  550. package/dist/hooks/cursorPreToolUse.js +0 -19
  551. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  552. package/dist/hooks/cursorSessionStart.js +0 -71
  553. package/dist/hooks/cursorSessionStart.js.map +0 -1
  554. package/dist/hooks/sessionStart.js +0 -209
  555. package/dist/hooks/sessionStart.js.map +0 -1
  556. package/dist/hooks/sessionStop.js +0 -212
  557. package/dist/hooks/sessionStop.js.map +0 -1
  558. package/dist/hooks/validateArtifact.js +0 -935
  559. package/dist/hooks/validateArtifact.js.map +0 -1
  560. package/dist/registries/artifactRegistry.js.map +0 -1
  561. package/dist/registries/capabilityContract.js.map +0 -1
  562. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  563. package/dist/registries/packageRegistry.js.map +0 -1
  564. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  565. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  566. package/dist/setup/codex.js +0 -1197
  567. package/dist/setup/codex.js.map +0 -1
  568. package/dist/setup/copilot.js +0 -227
  569. package/dist/setup/copilot.js.map +0 -1
  570. package/dist/setup/cursor.js +0 -127
  571. package/dist/setup/cursor.js.map +0 -1
  572. package/dist/setup/doctor.js +0 -1297
  573. package/dist/setup/doctor.js.map +0 -1
  574. package/dist/setup/smokeChecks.js.map +0 -1
  575. package/dist/state/installRoot.js.map +0 -1
  576. package/dist/state/startupAnalysis.js.map +0 -1
  577. package/dist/upgrade/appModel.js.map +0 -1
  578. package/dist/upgrade/channels.js.map +0 -1
  579. package/dist/upgrade/compatibility.js.map +0 -1
  580. package/dist/upgrade/doctor.js.map +0 -1
  581. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  582. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  583. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  584. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  585. package/dist/upgrade/projectIntegration.js.map +0 -1
  586. package/dist/upgrade/runtimeMigration.js.map +0 -1
  587. package/dist/upgrade/upgradeCommands.js.map +0 -1
  588. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  589. package/dist/upgrade/versionResolution.js.map +0 -1
  590. package/dist/validate/appHomeContract.js.map +0 -1
  591. package/dist/validate/capability.js.map +0 -1
  592. package/dist/validate/crossCapability.js.map +0 -1
  593. package/dist/validate/lifecycleAdapters.js +0 -772
  594. package/dist/validate/lifecycleAdapters.js.map +0 -1
  595. package/dist/validate/selfAudit.js.map +0 -1
  596. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  597. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  598. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,512 @@
1
+ import path from "node:path";
2
+ import { randomInt } from "node:crypto";
3
+ import YAML from "yaml";
4
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
5
+ import { canonicalRecordJson } from "./archiveDiscovery.js";
6
+ import { StateRetrievalFailure } from "./directRetrieval.js";
7
+ import { allocateAndPublishEntity, allocateEntityId, assertEntityDiscoveryOrigin, discoverEntities, publishEntity, publishEntityUnderLock, withEntityWriterLock, } from "./entityStorage.js";
8
+ import { detailMetadata, detailProvenance, isSummaryEntity } from "./summaryEntityRead.js";
9
+ import { decodeListCursor, encodeListCursor, projectedListSnapshot } from "./listCursor.js";
10
+ import { localTimestamp } from "./write/assign.js";
11
+ import { glossaryCaveatPairAllowed, glossaryCaveatContract, } from "../registries/glossaryCaveatContract.js";
12
+ import { validateProgressGlossaryCaveat, } from "./progressGlossaryCaveat.js";
13
+ import { nextProgressPublicationOrder, progressPublicationOrder, PROGRESS_PUBLICATION_ORDER_FIELD, } from "./progressPublicationOrder.js";
14
+ import { detectStateModeBinding } from "./stateMode.js";
15
+ import { loadStateStorageAuthority } from "./stateStorageAuthority.js";
16
+ import { entityListSelectorFlags, entityListSelectorKey, projectEntityList, resolveEntityListSelector } from "./entityListProjection.js";
17
+ import { shellQuoteArgument } from "../core/shell.js";
18
+ const ARTIFACT = "progress";
19
+ const BOUNDARY = "progress_cycle";
20
+ const SUMMARY = "progress_summary";
21
+ const ORDER = "timestamp_desc_then_publication_order_desc_then_id_asc";
22
+ const CURSOR_VERSION = 2;
23
+ function mapping(value) {
24
+ return value !== null && typeof value === "object" && !Array.isArray(value);
25
+ }
26
+ function opaqueCaveatId(existing, contract) {
27
+ const alphabet = contract.idAlphabet;
28
+ for (;;) {
29
+ let id = "";
30
+ for (let index = 0; index < contract.idLength; index += 1)
31
+ id += alphabet[randomInt(alphabet.length)];
32
+ if (!existing.has(id))
33
+ return id;
34
+ }
35
+ }
36
+ function prepareGlossaryCaveat(values, discovery, contract) {
37
+ if (!Object.prototype.hasOwnProperty.call(values, "glossary_caveat"))
38
+ return {};
39
+ if (!mapping(values.glossary_caveat))
40
+ throw new Error("glossary caveat mutation must be one privacy-safe mapping");
41
+ const requested = values.glossary_caveat;
42
+ const mutationFields = contract.fields.filter((field) => field !== "capability");
43
+ if (Object.keys(requested).some((field) => !mutationFields.includes(field)))
44
+ throw new Error("glossary caveat mutation contains a non-contract field");
45
+ const event = String(requested.event ?? "");
46
+ const reason = String(requested.reason ?? "");
47
+ const ownership = String(requested.ownership_state ?? "");
48
+ if (!contract.events.includes(event) ||
49
+ !contract.reasons.includes(reason) ||
50
+ !contract.ownershipStates.includes(ownership) ||
51
+ !glossaryCaveatPairAllowed(contract, reason, ownership))
52
+ throw new Error("glossary caveat requires one contract-declared reason and ownership state pair");
53
+ const entities = discovery.entities.filter((entity) => entity.classification === "valid" && entity.artifact === ARTIFACT && entity.boundary === BOUNDARY);
54
+ const rows = entities.flatMap((entity) => {
55
+ const parsed = validateProgressGlossaryCaveat(entity.record, contract);
56
+ return parsed.status === "valid" ? [{ entity, caveat: parsed.caveat }] : [];
57
+ });
58
+ const terminalIds = new Set(rows.filter(({ caveat }) => caveat.event !== "current").map(({ caveat }) => caveat.caveat_id));
59
+ const open = rows.filter(({ caveat }) => caveat.event === "current" && !terminalIds.has(caveat.caveat_id));
60
+ if (event === "current") {
61
+ if (requested.caveat_id !== undefined || requested.transition_id !== undefined)
62
+ throw new Error("current glossary caveat identity is CLI-assigned and has no transition identity");
63
+ const replay = open.find(({ caveat }) => caveat.reason === reason && caveat.ownership_state === ownership);
64
+ if (replay)
65
+ return { replay: replay.entity };
66
+ const caveat_id = opaqueCaveatId(new Set(rows.flatMap(({ caveat }) => [caveat.caveat_id, caveat.transition_id].filter((id) => id !== null))), contract);
67
+ return { caveat: { ...requested, caveat_id, event, capability: "build", reason, ownership_state: ownership, transition_id: null } };
68
+ }
69
+ const caveatId = String(requested.caveat_id ?? "");
70
+ if (!contract.idPattern.test(caveatId))
71
+ throw new Error("terminal glossary caveat requires one opaque caveat ID");
72
+ const existingTerminal = rows.find(({ caveat }) => caveat.caveat_id === caveatId && caveat.event === event && caveat.reason === reason && caveat.ownership_state === ownership && caveat.transition_id === (requested.transition_id ?? null));
73
+ if (existingTerminal)
74
+ return { replay: existingTerminal.entity };
75
+ const current = open.find(({ caveat }) => caveat.caveat_id === caveatId);
76
+ if (!current || current.caveat.reason !== reason || current.caveat.ownership_state !== ownership)
77
+ throw new Error("terminal glossary caveat must match one current caveat identity and vocabulary");
78
+ if (event === "resolved") {
79
+ if (requested.transition_id !== undefined)
80
+ throw new Error("resolved glossary caveat cannot have a transition identity");
81
+ return { caveat: { ...requested, ...current.caveat, event, transition_id: null } };
82
+ }
83
+ if (event !== "superseded")
84
+ throw new Error("glossary caveat event is invalid");
85
+ const transitionId = String(requested.transition_id ?? "");
86
+ if (!contract.idPattern.test(transitionId) || transitionId === caveatId || !open.some(({ caveat }) => caveat.caveat_id === transitionId))
87
+ throw new Error("superseded glossary caveat requires one different current successor identity");
88
+ return { caveat: { ...requested, ...current.caveat, event, transition_id: transitionId } };
89
+ }
90
+ function positive(value, field) {
91
+ const number = Number(value);
92
+ if (!Number.isSafeInteger(number) || number < 1)
93
+ throw new Error(`invalid progress entity ${field} in state storage authority`);
94
+ return number;
95
+ }
96
+ function progressContract(sourceRoot = resolveSourceRoot()) {
97
+ const { authorityPath, document: authority } = loadStateStorageAuthority(sourceRoot);
98
+ const target = authority.entity_target;
99
+ const storage = mapping(target) && mapping(target.storage_boundary)
100
+ ? target.storage_boundary.shared_primitives
101
+ : null;
102
+ const entities = mapping(target) && Array.isArray(target.entities) ? target.entities : [];
103
+ const progress = entities.find((entity) => mapping(entity) && entity.boundary === BOUNDARY && entity.artifact === ARTIFACT);
104
+ const retrieval = mapping(progress) ? progress.retrieval : null;
105
+ if (!mapping(storage) || typeof storage.canonical_root !== "string" || !mapping(retrieval)) {
106
+ throw new Error(`invalid progress entity contract in '${authorityPath}'`);
107
+ }
108
+ return {
109
+ authorityPath,
110
+ entityRoot: storage.canonical_root,
111
+ defaultLimit: positive(retrieval.default_limit, "default_limit"),
112
+ maximumLimit: positive(retrieval.maximum_limit, "maximum_limit"),
113
+ maxUtf8Bytes: positive(retrieval.max_utf8_bytes, "max_utf8_bytes"),
114
+ };
115
+ }
116
+ function failure(className, message, recovery, id, exitCode = 1) {
117
+ return new StateRetrievalFailure({
118
+ schemaVersion: "agentera.stateFailure.v1",
119
+ status: "fail",
120
+ error: {
121
+ class: className,
122
+ message,
123
+ syntax: "agentera state progress get --id ID --format json",
124
+ example: `agentera state progress get --id ${id ?? "qjtrmnpvka"} --format json`,
125
+ recovery,
126
+ artifact: ARTIFACT,
127
+ ...(id ? { id } : {}),
128
+ },
129
+ }, exitCode);
130
+ }
131
+ function listFailure(className, message, recovery, exitCode = 1) {
132
+ const result = failure(className, message, recovery, undefined, exitCode);
133
+ result.body.error.syntax =
134
+ "agentera state progress list [--limit N] [--cursor TOKEN] --format json";
135
+ result.body.error.example = "agentera state progress list --limit 20 --format json";
136
+ return result;
137
+ }
138
+ function progressRecord(values, caveatContract) {
139
+ const context = mapping(values.context) ? values.context : {};
140
+ const record = {
141
+ timestamp: typeof values.timestamp === "string" ? values.timestamp : localTimestamp(),
142
+ type: String(values.type ?? ""),
143
+ phase: String(values.phase ?? ""),
144
+ what: String(values.what ?? ""),
145
+ context: { intent: String(context.intent ?? "") },
146
+ };
147
+ for (const field of ["inspiration", "discovered", "verified", "next"]) {
148
+ if (typeof values[field] === "string")
149
+ record[field] = values[field];
150
+ }
151
+ for (const field of ["constraints", "unknowns", "scope"]) {
152
+ if (typeof context[field] === "string")
153
+ record.context[field] = context[field];
154
+ }
155
+ if (Object.prototype.hasOwnProperty.call(values, "glossary_caveat"))
156
+ record.glossary_caveat = values.glossary_caveat;
157
+ const caveat = validateProgressGlossaryCaveat(record, caveatContract);
158
+ if (caveat.status === "invalid")
159
+ throw new Error(caveat.violations.join("; "));
160
+ if (!/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(String(record.timestamp)))
161
+ throw new Error("progress entity timestamp must use YYYY-MM-DD HH:MM");
162
+ if (!record.type || !record.phase || !record.what || !record.context.intent)
163
+ throw new Error("progress entity requires type, phase, what, and context.intent");
164
+ return record;
165
+ }
166
+ function relative(projectRoot, candidate) {
167
+ return path.relative(path.resolve(projectRoot), candidate).split(path.sep).join("/");
168
+ }
169
+ function logicalProgressRecord(record) {
170
+ const { [PROGRESS_PUBLICATION_ORDER_FIELD]: _publicationOrder, ...logical } = record;
171
+ return logical;
172
+ }
173
+ export function appendProgressEntity(req, options = {}) {
174
+ const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
175
+ if (!req.dryRun && !options.publicationContext) {
176
+ const binding = detectStateModeBinding(req.projectRoot, sourceRoot);
177
+ if (binding.mode !== "entities") {
178
+ throw new Error("progress publication requires the durable entity-mode marker; legacy mode remains authoritative");
179
+ }
180
+ try {
181
+ return withEntityWriterLock(binding.publicationContext, () => appendProgressEntity(req, {
182
+ ...options,
183
+ publicationContext: binding.publicationContext,
184
+ }));
185
+ }
186
+ finally {
187
+ binding.publicationContext.close();
188
+ }
189
+ }
190
+ if (Object.prototype.hasOwnProperty.call(req.values, PROGRESS_PUBLICATION_ORDER_FIELD) ||
191
+ Object.prototype.hasOwnProperty.call(req.callerPayload, PROGRESS_PUBLICATION_ORDER_FIELD)) {
192
+ throw new Error("progress publication_order is writer-owned and cannot be supplied by callers");
193
+ }
194
+ const contract = progressContract(sourceRoot);
195
+ const discovery = discoverEntities(req.projectRoot, sourceRoot);
196
+ const existing = sortedProgress(discovery);
197
+ const caveatContract = glossaryCaveatContract(path.join(sourceRoot, "references", "artifacts", "glossary-entry-contract.yaml"));
198
+ const values = req.input ?? req.values;
199
+ const prepared = prepareGlossaryCaveat(values, discovery, caveatContract);
200
+ if (prepared.replay) {
201
+ return { schemaVersion: "agentera.stateWrite.v1", command: "state progress append", status: "pass", path: prepared.replay.path, id: prepared.replay.id, artifact: ARTIFACT, record: prepared.replay.record, operation: { verb: "append", dry_run: req.dryRun, idempotent_replay: true }, validation: { status: "pass", violations: [] } };
202
+ }
203
+ if (prepared.caveat)
204
+ values.glossary_caveat = prepared.caveat;
205
+ const unsequencedRecord = progressRecord(values, caveatContract);
206
+ if (!options.id) {
207
+ const logicalReplay = existing.find((entity) => entity.record && canonicalRecordJson(logicalProgressRecord(entity.record)) === canonicalRecordJson(unsequencedRecord));
208
+ if (logicalReplay?.record) {
209
+ return {
210
+ schemaVersion: "agentera.stateWrite.v1",
211
+ command: "state progress append",
212
+ status: "pass",
213
+ path: logicalReplay.path,
214
+ id: logicalReplay.id,
215
+ artifact: ARTIFACT,
216
+ record: logicalReplay.record,
217
+ operation: { verb: "append", dry_run: req.dryRun, idempotent_replay: true },
218
+ validation: { status: "pass", violations: [] },
219
+ };
220
+ }
221
+ }
222
+ const exactReplay = options.id
223
+ ? existing.find(({ id }) => id === options.id)
224
+ : undefined;
225
+ if (exactReplay?.record) {
226
+ const { publication_order: _publicationOrder, ...existingCallerFields } = exactReplay.record;
227
+ if (canonicalRecordJson(existingCallerFields) === canonicalRecordJson(unsequencedRecord)) {
228
+ return {
229
+ schemaVersion: "agentera.stateWrite.v1",
230
+ command: "state progress append",
231
+ status: "pass",
232
+ path: exactReplay.path,
233
+ id: exactReplay.id,
234
+ artifact: ARTIFACT,
235
+ record: exactReplay.record,
236
+ operation: { verb: "append", dry_run: req.dryRun, idempotent_replay: true },
237
+ validation: { status: "pass", violations: [] },
238
+ };
239
+ }
240
+ }
241
+ const record = req.dryRun
242
+ ? unsequencedRecord
243
+ : {
244
+ ...unsequencedRecord,
245
+ [PROGRESS_PUBLICATION_ORDER_FIELD]: nextProgressPublicationOrder(existing.flatMap(({ record }) => record ? [record] : [])),
246
+ };
247
+ if (req.dryRun) {
248
+ options.publicationContext?.assertValid();
249
+ const allocationRoot = options.publicationContext?.pinnedPath() ?? req.projectRoot;
250
+ const id = options.id ?? allocateEntityId(allocationRoot, options.candidate, sourceRoot);
251
+ const target = path.join(path.resolve(req.projectRoot), contract.entityRoot, ARTIFACT, BOUNDARY, `${id}.yaml`);
252
+ options.publicationContext?.assertValid();
253
+ return {
254
+ schemaVersion: "agentera.stateWrite.v1",
255
+ command: "state progress append",
256
+ status: "pass",
257
+ path: target,
258
+ id,
259
+ artifact: ARTIFACT,
260
+ record,
261
+ operation: { verb: "append", dry_run: true, idempotent_replay: false },
262
+ validation: { status: "pass", violations: [] },
263
+ };
264
+ }
265
+ const publicationRequest = {
266
+ projectRoot: req.projectRoot,
267
+ sourceRoot,
268
+ publicationContext: options.publicationContext,
269
+ artifact: ARTIFACT,
270
+ boundary: BOUNDARY,
271
+ record,
272
+ };
273
+ const published = options.publicationContext
274
+ ? publishEntityUnderLock({ ...publicationRequest, id: options.id ?? allocateEntityId(options.publicationContext.pinnedPath(), options.candidate, sourceRoot) })
275
+ : options.id
276
+ ? publishEntity({ ...publicationRequest, id: options.id })
277
+ : allocateAndPublishEntity({
278
+ ...publicationRequest,
279
+ }, options.candidate);
280
+ return {
281
+ schemaVersion: "agentera.stateWrite.v1",
282
+ command: "state progress append",
283
+ status: "pass",
284
+ path: published.path,
285
+ id: published.id,
286
+ artifact: published.artifact,
287
+ record,
288
+ operation: { verb: "append", dry_run: false, idempotent_replay: published.replay },
289
+ validation: { status: "pass", violations: [] },
290
+ };
291
+ }
292
+ function sortKey(entity) {
293
+ return canonicalRecordJson([
294
+ String(entity.record?.timestamp ?? ""),
295
+ progressPublicationOrder(entity.record),
296
+ entity.id,
297
+ ]);
298
+ }
299
+ function sortedProgress(discovery) {
300
+ const progress = discovery.entities.filter((entity) => entity.boundary === BOUNDARY || entity.artifact === ARTIFACT);
301
+ const duplicate = progress.find((entity) => entity.classification === "duplicate");
302
+ if (duplicate)
303
+ throw listFailure("ambiguous", "canonical progress evidence has conflicting identities", "Run agentera check validate state, assign unique IDs, and retry.");
304
+ const corrupt = progress.find((entity) => entity.classification !== "valid" ||
305
+ !entity.id ||
306
+ !entity.record ||
307
+ (entity.boundary === BOUNDARY && typeof entity.record.timestamp !== "string"));
308
+ if (corrupt)
309
+ throw listFailure("corrupt", "canonical progress evidence is corrupt or violates the progress record contract", "Run agentera check validate state, repair the canonical entity file, and retry.");
310
+ return progress.sort((left, right) => {
311
+ const timestamp = String(right.record.timestamp ?? "").localeCompare(String(left.record.timestamp ?? ""));
312
+ if (timestamp)
313
+ return timestamp;
314
+ const leftOrder = progressPublicationOrder(left.record);
315
+ const rightOrder = progressPublicationOrder(right.record);
316
+ if (leftOrder !== null && rightOrder !== null && leftOrder !== rightOrder)
317
+ return rightOrder - leftOrder;
318
+ if (leftOrder !== null && rightOrder === null)
319
+ return -1;
320
+ if (leftOrder === null && rightOrder !== null)
321
+ return 1;
322
+ return left.id.localeCompare(right.id);
323
+ });
324
+ }
325
+ function entry(projectRoot, entity) {
326
+ const id = entity.id;
327
+ return {
328
+ id,
329
+ artifact: ARTIFACT,
330
+ record: entity.record,
331
+ ...detailMetadata(entity),
332
+ provenance: detailProvenance(relative(projectRoot, entity.path), entity),
333
+ retrieval: { get: `agentera state progress get --id ${id} --format json` },
334
+ };
335
+ }
336
+ function snapshotId(projectRoot, entities, filters, entityRoot) {
337
+ return projectedListSnapshot({
338
+ schemaVersion: "agentera.stateList.v1",
339
+ command: "state progress list",
340
+ order: ORDER,
341
+ filters,
342
+ source: { artifact: ARTIFACT, authority: "canonical_entity_files", root: entityRoot },
343
+ source_contract: { authority: "references/artifacts/state-storage-authority.yaml", detail: entities.some(isSummaryEntity) ? "mixed" : "full", cursor: "opaque_snapshot_cursor_v2" },
344
+ entries: entities.map((entity) => entry(projectRoot, entity)),
345
+ });
346
+ }
347
+ function encodeCursor(payload, projectRoot, authorityPath) {
348
+ return encodeListCursor(payload, projectRoot, authorityPath);
349
+ }
350
+ function decodeCursor(token, projectRoot, authorityPath) {
351
+ const [encoded, signed, extra] = token.split(".");
352
+ if (!encoded || !signed || extra)
353
+ throw listFailure("cursor_invalid", "progress cursor is malformed or was issued for a prior ordering contract", "Omit --cursor to establish a new version 2 progress snapshot.");
354
+ let payload;
355
+ try {
356
+ payload = decodeListCursor(token, projectRoot, authorityPath);
357
+ }
358
+ catch {
359
+ throw listFailure("cursor_invalid", "progress cursor is malformed or was issued for a prior ordering contract", "Omit --cursor to establish a new version 2 progress snapshot.");
360
+ }
361
+ if (!mapping(payload) ||
362
+ payload.version !== CURSOR_VERSION ||
363
+ payload.artifact !== ARTIFACT ||
364
+ payload.order !== ORDER ||
365
+ !mapping(payload.filters) ||
366
+ typeof payload.snapshot_id !== "string" ||
367
+ typeof payload.selector !== "string" ||
368
+ typeof payload.after_key !== "string") {
369
+ throw listFailure("cursor_invalid", "progress cursor does not match the version 2 progress ordering contract", "Omit --cursor to establish a new version 2 snapshot.");
370
+ }
371
+ return payload;
372
+ }
373
+ function values(value) {
374
+ if (typeof value === "string")
375
+ return [value];
376
+ if (Array.isArray(value))
377
+ return value.flatMap(values);
378
+ if (mapping(value))
379
+ return Object.entries(value).flatMap(([key, child]) => [key, ...values(child)]);
380
+ return [];
381
+ }
382
+ function filtersObject(filters) {
383
+ return { topic: filters.topic ?? null, status: filters.status ?? null };
384
+ }
385
+ export function getProgressEntity(projectRoot, id, sourceRoot = resolveSourceRoot()) {
386
+ if (!/^[a-z]{10}$/.test(id))
387
+ throw failure("invalid_request", `progress ID '${id}' must be ten lowercase letters`, "Use the bare ID returned by progress append or list.", id, 2);
388
+ const discovery = discoverEntities(projectRoot, sourceRoot);
389
+ const matches = discovery.entities.filter((entity) => entity.id === id);
390
+ if (matches.length > 1 || matches.some((entity) => entity.classification === "duplicate"))
391
+ throw failure("ambiguous", `progress entity ID '${id}' has multiple canonical candidates`, "Run agentera check validate state, assign unique IDs, and retry.", id);
392
+ const selected = matches[0];
393
+ const expectedPath = path.join(path.resolve(projectRoot), progressContract(sourceRoot).entityRoot, ARTIFACT, selected?.boundary === SUMMARY ? SUMMARY : BOUNDARY, `${id}.yaml`);
394
+ const corruptAtCanonicalPath = discovery.entities.find((entity) => entity.path === expectedPath);
395
+ if (!selected && corruptAtCanonicalPath)
396
+ throw failure("corrupt", "canonical progress evidence is corrupt or does not match its identity envelope", "Run agentera check validate state, repair the canonical entity file, and retry.", id);
397
+ if (!selected || selected.artifact !== ARTIFACT || ![BOUNDARY, SUMMARY].includes(selected.boundary ?? ""))
398
+ throw failure("not_found", `no progress entity exists with ID '${id}'`, "Copy an ID from agentera state progress list --format json and retry.", id);
399
+ if (selected.classification !== "valid" ||
400
+ !selected.record ||
401
+ (selected.boundary === BOUNDARY && typeof selected.record.timestamp !== "string"))
402
+ throw failure("corrupt", "canonical progress evidence is corrupt or violates the progress record contract", "Run agentera check validate state, repair the canonical entity file, and retry.", id);
403
+ return {
404
+ schemaVersion: "agentera.stateRetrieval.v1",
405
+ command: "state progress get",
406
+ status: isSummaryEntity(selected) ? "degraded" : "ok",
407
+ entry: entry(projectRoot, selected),
408
+ source: { artifact: ARTIFACT, authority: "canonical_entity_file" },
409
+ source_contract: {
410
+ authority: "references/artifacts/state-storage-authority.yaml",
411
+ detail: isSummaryEntity(selected) ? "summary" : "full",
412
+ },
413
+ };
414
+ }
415
+ export function listProgressEntities(projectRoot, limit, filters = {}, cursor, options = {}) {
416
+ const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
417
+ const contract = progressContract(sourceRoot);
418
+ const effectiveLimit = limit ?? contract.defaultLimit;
419
+ if (!Number.isSafeInteger(effectiveLimit) ||
420
+ effectiveLimit < 1 ||
421
+ effectiveLimit > contract.maximumLimit) {
422
+ throw listFailure("invalid_request", `--limit must be between 1 and ${contract.maximumLimit}`, `Use --limit ${contract.defaultLimit} or another value in the declared range.`, 2);
423
+ }
424
+ if (options.discovery)
425
+ assertEntityDiscoveryOrigin(projectRoot, sourceRoot, options.discovery);
426
+ const all = sortedProgress(options.discovery ?? discoverEntities(projectRoot, sourceRoot));
427
+ const filterState = filtersObject(filters);
428
+ const filtered = all.filter((entity) => {
429
+ if (filters.status &&
430
+ String(entity.record.type).toLowerCase() !== filters.status.toLowerCase())
431
+ return false;
432
+ return (!filters.topic ||
433
+ values(entity.record).some((value) => value.toLowerCase().includes(filters.topic.toLowerCase())));
434
+ });
435
+ const snapshot = snapshotId(projectRoot, filtered, filterState, contract.entityRoot);
436
+ const format = options.format ?? "json";
437
+ const projectionOptions = { family: "progress", artifact: ARTIFACT, boundary: BOUNDARY, format, maxUtf8Bytes: contract.maxUtf8Bytes, selector: options.selector };
438
+ const selector = resolveEntityListSelector(options.selector, filtered.map((entity) => entry(projectRoot, entity)), projectionOptions);
439
+ const selectorKey = entityListSelectorKey(selector);
440
+ let afterKey = "";
441
+ if (cursor) {
442
+ const parsed = decodeCursor(cursor, projectRoot, contract.authorityPath);
443
+ if (canonicalRecordJson(parsed.filters) !== canonicalRecordJson(filterState))
444
+ throw listFailure("cursor_invalid", "progress cursor filters do not match this request", "Repeat the original filters or omit --cursor to establish a new snapshot.");
445
+ if (parsed.selector !== selectorKey)
446
+ throw listFailure("cursor_invalid", "progress cursor selectors do not match this request", "Repeat the original selector or omit --cursor to establish a new snapshot.");
447
+ if (parsed.snapshot_id !== snapshot)
448
+ throw listFailure("cursor_snapshot_unavailable", "progress entity source changed after this cursor snapshot", "Omit --cursor to restart from the current canonical entity snapshot.");
449
+ afterKey = parsed.after_key;
450
+ }
451
+ const start = afterKey ? filtered.findIndex((entity) => sortKey(entity) === afterKey) + 1 : 0;
452
+ if (afterKey && start === 0)
453
+ throw listFailure("cursor_snapshot_unavailable", "progress cursor continuation no longer exists in the canonical snapshot", "Omit --cursor to restart from the current canonical entity snapshot.");
454
+ const selected = filtered.slice(start, start + effectiveLimit);
455
+ const makeResponse = () => {
456
+ const remaining = filtered.length - start - selected.length;
457
+ const nextCursor = remaining > 0 && selected.length > 0
458
+ ? encodeCursor({
459
+ version: CURSOR_VERSION,
460
+ artifact: ARTIFACT,
461
+ order: ORDER,
462
+ filters: filterState,
463
+ snapshot_id: snapshot,
464
+ selector: selectorKey,
465
+ after_key: sortKey(selected.at(-1)),
466
+ }, projectRoot, contract.authorityPath)
467
+ : undefined;
468
+ const filterFlags = `${filters.topic ? ` --topic ${shellQuoteArgument(filters.topic)}` : ""}${filters.status ? ` --status ${shellQuoteArgument(filters.status)}` : ""}`;
469
+ const selectorFlags = entityListSelectorFlags(selector);
470
+ return {
471
+ schemaVersion: "agentera.stateList.v1",
472
+ command: "state progress list",
473
+ status: remaining > 0 || filtered.some(isSummaryEntity) ? "degraded" : "ok",
474
+ entries: selected.map((entity) => entry(projectRoot, entity)),
475
+ counts: { total: filtered.length, returned: selected.length, remaining },
476
+ filters: filterState,
477
+ snapshot: {
478
+ id: snapshot,
479
+ first_page: !cursor,
480
+ order: ORDER,
481
+ has_more: remaining > 0,
482
+ candidate_count: filtered.length,
483
+ },
484
+ source: {
485
+ artifact: ARTIFACT,
486
+ authority: "canonical_entity_files",
487
+ root: contract.entityRoot,
488
+ },
489
+ source_contract: {
490
+ authority: "references/artifacts/state-storage-authority.yaml",
491
+ detail: filtered.some(isSummaryEntity) ? "mixed" : "full",
492
+ cursor: "opaque_snapshot_cursor_v2",
493
+ },
494
+ ...(remaining > 0
495
+ ? {
496
+ omitted: true,
497
+ omitted_count: remaining,
498
+ omission_reason: "page_limit",
499
+ retrieval: {
500
+ continue: `agentera state progress list${filterFlags}${selectorFlags} --limit ${effectiveLimit} --cursor ${nextCursor} --format json`,
501
+ get: "agentera state progress get --id ID --format json",
502
+ },
503
+ next_cursor: nextCursor,
504
+ }
505
+ : {}),
506
+ };
507
+ };
508
+ return projectEntityList(makeResponse(), selector, projectionOptions);
509
+ }
510
+ export function renderProgressEntityListText(response) {
511
+ return YAML.stringify(response);
512
+ }