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,387 @@
1
+ /**
2
+ * `state decisions` query (decisions.yaml + archive) plus the
3
+ * decision context enrichment utilities consumed by prime.
4
+ *
5
+ * The contract for decision context: never infer satisfaction from
6
+ * downstream references, commits, or compacted history. Only
7
+ * `state == user_confirmed_satisfied` with explicit
8
+ * `user_confirmation` metadata is reported as user-confirmed
9
+ * satisfied; everything else carries a `review_needed` flag and
10
+ * a `caveats` array.
11
+ */
12
+ import { extractEntries, } from "../../stateQuery.js";
13
+ import { out } from "./shared.js";
14
+ import { hydrateDecisionRecords, } from "../../../state/decisionOverlay.js";
15
+ import { listDecisionEntities } from "../../../state/decisionEntities.js";
16
+ import { emitStructured } from "../../structured.js";
17
+ import YAML from "yaml";
18
+ const DECISION_CONTEXT_FIELDS = [
19
+ "number",
20
+ "date",
21
+ "question",
22
+ "context",
23
+ "alternatives",
24
+ "choice",
25
+ "reasoning",
26
+ "confidence",
27
+ "feeds_into",
28
+ "satisfaction",
29
+ ];
30
+ const PRIORITY_FIELDS = [
31
+ "number", "name", "title", "date", "timestamp", "status",
32
+ "phase", "choice", "grade", "type", "label", "trajectory", "confidence",
33
+ ];
34
+ const DECISION_ARCHIVE_RE = /Decision\s+(?<number>\d+)(?:\s+\((?<date>\d{4}-\d{2}-\d{2})\))?:\s*(?<summary>.*)/;
35
+ export function displayFields(fields, limit = 6) {
36
+ const ordered = PRIORITY_FIELDS.filter((p) => p in fields);
37
+ for (const fn of Object.keys(fields)) {
38
+ if (!ordered.includes(fn))
39
+ ordered.push(fn);
40
+ }
41
+ return ordered.slice(0, limit);
42
+ }
43
+ function isEmptyValue(v) {
44
+ // cast: v is a field value from a parsed decisions.yaml entry (IO boundary)
45
+ return (v === null ||
46
+ v === undefined ||
47
+ v === "" ||
48
+ (Array.isArray(v) && v.length === 0) ||
49
+ (typeof v === "object" && !Array.isArray(v) && Object.keys(v).length === 0));
50
+ }
51
+ function decisionArchiveEntry(entry) {
52
+ // cast: entry comes from the parsed decisions archive array (YAML IO boundary)
53
+ const archiveEntry = entry && typeof entry === "object" && !Array.isArray(entry) ? { ...entry } : { summary: String(entry) };
54
+ archiveEntry.compacted = true;
55
+ const summary = String(archiveEntry.summary ?? "");
56
+ const match = DECISION_ARCHIVE_RE.exec(summary);
57
+ if (match && match.groups) {
58
+ if (!("number" in archiveEntry))
59
+ archiveEntry.number = parseInt(match.groups.number, 10);
60
+ if (match.groups.date && !("date" in archiveEntry))
61
+ archiveEntry.date = match.groups.date;
62
+ }
63
+ return archiveEntry;
64
+ }
65
+ export function extractDecisionEntries(data) {
66
+ if (!data || typeof data !== "object" || Array.isArray(data))
67
+ return extractEntries(data);
68
+ // cast: data is the parsed decisions artifact from loadArtifact (YAML IO boundary)
69
+ const d = data;
70
+ const decisions = d.decisions ?? [];
71
+ const archive = d.archive ?? [];
72
+ const entries = Array.isArray(decisions)
73
+ ? decisions.filter((e) => Boolean(e && typeof e === "object" && !Array.isArray(e)))
74
+ : [];
75
+ if (Array.isArray(archive)) {
76
+ for (const entry of archive)
77
+ entries.push(decisionArchiveEntry(entry));
78
+ }
79
+ return entries;
80
+ }
81
+ export function hydrateDecisionEntries(entries, projectRoot = process.cwd()) {
82
+ return hydrateDecisionRecords(entries, projectRoot);
83
+ }
84
+ function decisionFieldMissing(entry, field) {
85
+ return isEmptyValue(entry[field]);
86
+ }
87
+ function decisionDownstreamReferences(entry) {
88
+ const value = entry.feeds_into;
89
+ if (value === null || value === undefined || value === "")
90
+ return null;
91
+ let refs;
92
+ if (Array.isArray(value)) {
93
+ refs = value.map((item) => String(item).trim()).filter((s) => s);
94
+ }
95
+ else {
96
+ refs = String(value)
97
+ .split(",")
98
+ .map((part) => part.trim())
99
+ .filter((s) => s);
100
+ }
101
+ if (refs.length === 0)
102
+ return null;
103
+ return refs.map((ref) => ({ source_field: "feeds_into", reference: ref }));
104
+ }
105
+ export function decisionSatisfactionContext(entry) {
106
+ const satisfaction = entry.satisfaction;
107
+ if (!satisfaction || typeof satisfaction !== "object" || Array.isArray(satisfaction)) {
108
+ return {
109
+ state: null,
110
+ evidence: null,
111
+ user_confirmation: null,
112
+ review_needed: true,
113
+ source: "missing_legacy_state",
114
+ caveats: ["Missing legacy satisfaction state is not treated as satisfied."],
115
+ };
116
+ }
117
+ // cast: satisfaction is read from a parsed decisions.yaml entry (IO boundary)
118
+ const sat = satisfaction;
119
+ const state = sat.state;
120
+ const evidence = sat.evidence ?? null;
121
+ const userConfirmation = sat.user_confirmation ?? null;
122
+ const explicitReviewNeeded = sat.review_needed === true;
123
+ let caveats = [];
124
+ let reviewNeeded = true;
125
+ let source = "decision.satisfaction";
126
+ if (state === null || state === undefined || state === "") {
127
+ source = "missing_legacy_state";
128
+ caveats.push("Missing legacy satisfaction state is not treated as satisfied.");
129
+ }
130
+ else if (state === "user_confirmed_satisfied") {
131
+ // cast: user_confirmation is read from a parsed decisions.yaml entry (IO boundary)
132
+ const confirmation = userConfirmation && typeof userConfirmation === "object" && !Array.isArray(userConfirmation)
133
+ ? userConfirmation
134
+ : {};
135
+ reviewNeeded =
136
+ !isNonEmptyText(confirmation.confirmed_by) || !isNonEmptyText(confirmation.confirmed_at);
137
+ if (reviewNeeded)
138
+ caveats.push("User-confirmed satisfaction is missing explicit user confirmation metadata.");
139
+ }
140
+ else if (state === "provisionally_satisfied") {
141
+ if (!isNonEmptyText(evidence))
142
+ caveats.push("Provisional satisfaction is missing concrete evidence.");
143
+ caveats.push("Provisional satisfaction still requires user confirmation.");
144
+ }
145
+ else if (state === "open") {
146
+ caveats.push("Satisfaction state is open and requires review.");
147
+ }
148
+ else {
149
+ caveats.push("Satisfaction state is missing or unrecognized and requires review.");
150
+ }
151
+ if (explicitReviewNeeded) {
152
+ reviewNeeded = true;
153
+ caveats.push("Decision satisfaction is explicitly marked review_needed.");
154
+ }
155
+ const originalCaveats = sat.caveats;
156
+ if (Array.isArray(originalCaveats))
157
+ caveats = [...originalCaveats.map((c) => String(c)), ...caveats];
158
+ else if (typeof originalCaveats === "string")
159
+ caveats = [originalCaveats, ...caveats];
160
+ const enriched = { ...sat };
161
+ if (!("evidence" in enriched))
162
+ enriched.evidence = evidence;
163
+ if (!("user_confirmation" in enriched))
164
+ enriched.user_confirmation = userConfirmation;
165
+ enriched.review_needed = reviewNeeded;
166
+ enriched.source = source;
167
+ enriched.caveats = caveats;
168
+ return enriched;
169
+ }
170
+ function isNonEmptyText(value) {
171
+ return typeof value === "string" && value.trim().length > 0;
172
+ }
173
+ export function decisionContextEntry(entry, options = {}) {
174
+ const enriched = { ...entry };
175
+ const inferOutcome = options.inferOutcome !== false;
176
+ if (inferOutcome &&
177
+ (enriched.outcome === null || enriched.outcome === undefined || enriched.outcome === "") &&
178
+ enriched.choice !== null && enriched.choice !== undefined && enriched.choice !== "") {
179
+ enriched.outcome = enriched.choice;
180
+ }
181
+ const compacted = Boolean(enriched.compacted) ||
182
+ ("summary" in enriched &&
183
+ ["question", "reasoning", "confidence"].some((field) => decisionFieldMissing(enriched, field)));
184
+ const missingFields = DECISION_CONTEXT_FIELDS.filter((field) => decisionFieldMissing(enriched, field));
185
+ if ((inferOutcome && decisionFieldMissing(enriched, "choice") && decisionFieldMissing(enriched, "outcome")) ||
186
+ (!inferOutcome && decisionFieldMissing(enriched, "outcome"))) {
187
+ missingFields.push("outcome");
188
+ }
189
+ const downstreamReferences = decisionDownstreamReferences(enriched);
190
+ const caveats = [];
191
+ if (compacted)
192
+ caveats.push("Decision entry is compacted; full decision context is not available in this CLI result.");
193
+ if (missingFields.length > 0)
194
+ caveats.push("Decision entry is missing one or more full-detail context fields.");
195
+ if (downstreamReferences === null) {
196
+ caveats.push("No explicit downstream consequence references were present; none were inferred.");
197
+ }
198
+ const satisfaction = decisionSatisfactionContext(enriched);
199
+ if (satisfaction.review_needed) {
200
+ caveats.push("Decision satisfaction requires user review; missing legacy state is not treated as satisfied.");
201
+ }
202
+ enriched.satisfaction = satisfaction;
203
+ enriched.downstream_consequence_references = downstreamReferences;
204
+ enriched.context_complete =
205
+ !compacted && missingFields.length === 0 && downstreamReferences !== null && !satisfaction.review_needed;
206
+ enriched.missing_fields = missingFields;
207
+ enriched.compacted = compacted;
208
+ enriched.caveats = caveats;
209
+ return enriched;
210
+ }
211
+ export function decisionSourceContract(source, entries, filters) {
212
+ const sourceExists = Boolean(source.exists);
213
+ const activeFilters = Object.fromEntries(Object.entries(filters).filter(([, v]) => v !== null && v !== undefined));
214
+ const filteredNoMatch = sourceExists && Object.keys(activeFilters).length > 0 && entries.length === 0;
215
+ const compactedEntries = entries.filter((e) => e.compacted).length;
216
+ const entriesWithMissingFields = entries.filter((e) => Array.isArray(e.missing_fields) && e.missing_fields.length > 0).length;
217
+ const entriesWithoutDownstream = entries.filter((e) => e.downstream_consequence_references === null).length;
218
+ const entriesRequiringSatisfactionReview = entries.filter((e) => e.satisfaction && typeof e.satisfaction === "object" && !Array.isArray(e.satisfaction) && e.satisfaction.review_needed).length;
219
+ const userConfirmedSatisfied = entries.filter((e) => e.satisfaction &&
220
+ typeof e.satisfaction === "object" &&
221
+ !Array.isArray(e.satisfaction) &&
222
+ e.satisfaction.state === "user_confirmed_satisfied" &&
223
+ !e.satisfaction.review_needed).length;
224
+ const completeForReturned = sourceExists && entries.every((e) => e.context_complete === true);
225
+ const completeForNormalDeliberation = sourceExists;
226
+ const caveats = [
227
+ "Downstream consequence references are derived only from explicit structured feeds_into values; no references are inferred.",
228
+ "Compacted archive decisions are not expanded by this command and are not complete full-detail decision context.",
229
+ ];
230
+ if (!sourceExists)
231
+ caveats.push("Decision artifact is missing or unavailable; no decision context is available from this command result.");
232
+ if (filteredNoMatch)
233
+ caveats.push("Filtered result is empty; no returned decisions match the filter, but the decision artifact was available.");
234
+ if (entriesWithMissingFields)
235
+ caveats.push("One or more returned decisions are missing full-detail context fields.");
236
+ if (entriesWithoutDownstream)
237
+ caveats.push("One or more returned decisions lack explicit downstream consequence references.");
238
+ if (entriesRequiringSatisfactionReview)
239
+ caveats.push("One or more returned decisions require satisfaction review; satisfaction is never inferred from downstream references.");
240
+ return {
241
+ artifact: "decisions",
242
+ canonical_artifact_label: "decisions",
243
+ path: source.path,
244
+ complete_for_returned_decisions: completeForReturned,
245
+ complete_for_decision_context: completeForReturned,
246
+ complete_for_returned_full_detail: completeForReturned,
247
+ complete_for_normal_deliberation_context: completeForNormalDeliberation,
248
+ completeness: {
249
+ returned_decisions: entries.length,
250
+ context_complete: completeForReturned,
251
+ returned_full_detail_complete: completeForReturned,
252
+ normal_deliberation_context: completeForNormalDeliberation,
253
+ filtered_no_match: filteredNoMatch,
254
+ source_exists: sourceExists,
255
+ compacted_entries: compactedEntries,
256
+ entries_with_missing_fields: entriesWithMissingFields,
257
+ entries_without_downstream_references: entriesWithoutDownstream,
258
+ entries_requiring_satisfaction_review: entriesRequiringSatisfactionReview,
259
+ user_confirmed_satisfied_entries: userConfirmedSatisfied,
260
+ },
261
+ included_fields: [
262
+ ...DECISION_CONTEXT_FIELDS,
263
+ "outcome",
264
+ "downstream_consequence_references",
265
+ "context_complete",
266
+ "missing_fields",
267
+ "compacted",
268
+ "caveats",
269
+ ],
270
+ satisfaction_context: {
271
+ owner: "decision entry",
272
+ state_field: "satisfaction.state",
273
+ evidence_field: "satisfaction.evidence",
274
+ confirmation_field: "satisfaction.user_confirmation",
275
+ review_needed_field: "satisfaction.review_needed",
276
+ confirmation_policy: "Only satisfaction.state=user_confirmed_satisfied with explicit user_confirmation metadata is reported as user-confirmed satisfied.",
277
+ non_inference_policy: "Do not infer satisfaction from feeds_into, commits, downstream files, generated references, or compacted history.",
278
+ },
279
+ normal_deliberation_context: {
280
+ use_complete_for_normal_deliberation_context: true,
281
+ legacy_full_detail_signal: "complete_for_decision_context",
282
+ guidance: "For normal deliberation, use returned entries plus missing_fields, compacted, caveats, " +
283
+ "and satisfaction review state. Do not use the legacy full-detail completeness flag " +
284
+ "as a reason to reread the raw decision artifact.",
285
+ },
286
+ decision_context_truth_table: {
287
+ full_detail_entries: {
288
+ full_detail_complete: true,
289
+ normal_deliberation_context_complete: true,
290
+ raw_artifact_read_required: false,
291
+ },
292
+ compacted_archive_entries: {
293
+ full_detail_complete: false,
294
+ normal_deliberation_context_complete: true,
295
+ raw_artifact_read_required: false,
296
+ carry_forward: ["missing_fields", "compacted", "caveats"],
297
+ },
298
+ entries_with_missing_full_detail_fields: {
299
+ full_detail_complete: false,
300
+ normal_deliberation_context_complete: true,
301
+ raw_artifact_read_required: false,
302
+ carry_forward: ["missing_fields", "caveats"],
303
+ },
304
+ satisfaction_review_needed: {
305
+ full_detail_complete: false,
306
+ normal_deliberation_context_complete: true,
307
+ raw_artifact_read_required: false,
308
+ carry_forward: ["satisfaction.review_needed", "caveats"],
309
+ },
310
+ filtered_no_match: {
311
+ full_detail_complete: true,
312
+ normal_deliberation_context_complete: true,
313
+ raw_artifact_read_required: false,
314
+ meaning: "The artifact exists, but no returned decisions matched the filter.",
315
+ },
316
+ missing_or_unavailable_artifact: {
317
+ full_detail_complete: false,
318
+ normal_deliberation_context_complete: false,
319
+ raw_artifact_read_required: false,
320
+ meaning: "No decision state is available from the CLI result; use CLI fallback or diagnostics before raw artifact repair.",
321
+ },
322
+ },
323
+ missing_full_detail_boundary: {
324
+ applies_when: "returned decisions have missing_fields or context_complete=false",
325
+ normal_behavior: "Use present structured fields only and preserve missing_fields/caveats downstream.",
326
+ raw_artifact_read_required: false,
327
+ do_not: "Do not infer absent reasoning, alternatives, confidence, feeds_into, outcome, or downstream references.",
328
+ },
329
+ missing_artifact_boundary: {
330
+ applies_when: "source.exists=false",
331
+ normal_behavior: "Treat decision context as unavailable from this result; do not infer historical decisions.",
332
+ raw_artifact_read_required: false,
333
+ diagnostic_boundary: "Raw artifact access is reserved for explicit artifact repair/corruption or CLI-defect investigation.",
334
+ },
335
+ filtered_result_boundary: {
336
+ applies_when: "filters are present and entries=[] while source.exists=true",
337
+ normal_behavior: "Treat the result as no matching returned decisions, not as missing decision state.",
338
+ raw_artifact_read_required: false,
339
+ },
340
+ satisfaction_review_boundary: {
341
+ applies_when: "one or more entries have satisfaction.review_needed=true",
342
+ normal_behavior: "Carry satisfaction review pressure forward; only user confirmation can make a decision user-confirmed satisfied.",
343
+ raw_artifact_read_required: false,
344
+ do_not: "Do not infer satisfaction from downstream references, commits, generated files, or compacted history.",
345
+ },
346
+ compacted_history_boundary: {
347
+ applies_when: "returned entries have compacted=true",
348
+ normal_behavior: "Use the compact summary and retained fields; preserve compacted/missing_fields/caveats downstream.",
349
+ raw_artifact_read_required: false,
350
+ do_not: "Do not expand archive decisions or reconstruct missing context from git history.",
351
+ },
352
+ raw_artifact_access_boundary: {
353
+ normal_deliberation: "skip raw decision-state reads when complete_for_normal_deliberation_context=true",
354
+ allowed_raw_artifact_uses: [
355
+ "Discuss-owned decision writes or repairs",
356
+ "artifact corruption diagnostics",
357
+ "CLI defect investigation",
358
+ ],
359
+ },
360
+ raw_artifact_reads_required: false,
361
+ raw_artifact_read_policy: "Use `agentera state decisions list --limit 20 --format json` for bounded normal deliberation discovery; " +
362
+ "use `agentera state decisions get --id ID --format json` for exact detail, and key normal use off " +
363
+ "complete_for_normal_deliberation_context. " +
364
+ "Do not read raw decision state unless investigating entity corruption or CLI defects; " +
365
+ "historical compacted gaps are exposed through missing_fields and caveats.",
366
+ caveats,
367
+ fallback_behavior: {
368
+ normal: "Use this command's entries and source_contract; no raw decision artifact read is required for returned full-detail or compacted decision entries.",
369
+ filtered_result: "The same per-decision guarantees apply after filters; an empty filtered result means no matching returned decisions.",
370
+ missing_or_incomplete: "If a required field is missing, treat only the present structured fields as authoritative and do not infer absent context.",
371
+ satisfaction: "Use only each entry's satisfaction object for satisfaction state. Missing, open, provisional, or unconfirmed satisfaction requires review and must not be reported as user-confirmed satisfied.",
372
+ compacted_history: "Compacted archive decisions are included with explicit missing_fields and caveats; treat absent historical context as unavailable during normal deliberation.",
373
+ },
374
+ fallback_policy: "If the decision artifact is missing or CLI state appears defective, use CLI fallback/diagnostic paths before raw artifact repair; do not raw-read merely because returned decisions are compacted or incomplete.",
375
+ filters: activeFilters,
376
+ };
377
+ }
378
+ export function queryDecisions(args, _schemas, io) {
379
+ const output = out(io);
380
+ const format = args.format ?? "text";
381
+ const response = listDecisionEntities(process.cwd(), args.limit ?? undefined, args.topic ?? undefined, args.cursor ?? undefined, { format });
382
+ if (format === "text")
383
+ output(YAML.stringify(response));
384
+ else
385
+ emitStructured(response, format, output);
386
+ return 0;
387
+ }
@@ -0,0 +1,70 @@
1
+ import fs from "node:fs";
2
+ import YAML from "yaml";
3
+ import { StateRetrievalFailure } from "../../../state/directRetrieval.js";
4
+ import { listTodoDocsEntities } from "../../../state/todoDocsEntities.js";
5
+ import { artifactPath, discoverSchemasDir } from "../../appContext.js";
6
+ import { registryArtifactPath } from "../../orientation.js";
7
+ import { capabilityStartupComplete } from "../../startupCompletenessContract.js";
8
+ import { asList, loadArtifact } from "../../stateQuery.js";
9
+ import { emitStructured } from "../../structured.js";
10
+ import { err, out } from "./shared.js";
11
+ export function queryDocs(args, schemas, io) {
12
+ const output = out(io);
13
+ const format = args.format ?? "text";
14
+ const profilePath = registryArtifactPath("profile", discoverSchemasDir());
15
+ const profileStatus = fs.existsSync(profilePath) ? "loaded" : "not found";
16
+ const info = schemas.docs;
17
+ if (!info)
18
+ throw new Error("docs schema is unavailable");
19
+ const singletonPath = artifactPath(info, "docs");
20
+ const data = loadArtifact(singletonPath);
21
+ try {
22
+ const singleton = data !== null && typeof data === "object" && !Array.isArray(data)
23
+ ? data
24
+ : {};
25
+ const mapping = asList(singleton.mapping);
26
+ const coverage = singleton.coverage && typeof singleton.coverage === "object" && !Array.isArray(singleton.coverage)
27
+ ? singleton.coverage
28
+ : {};
29
+ const conventions = singleton.conventions && typeof singleton.conventions === "object" && !Array.isArray(singleton.conventions)
30
+ ? singleton.conventions
31
+ : {};
32
+ const summary = {
33
+ last_audit: singleton.last_audit,
34
+ conventions,
35
+ mapping,
36
+ mapping_entries: mapping.length,
37
+ coverage,
38
+ source_contract: {
39
+ capability_startup_complete: capabilityStartupComplete({ profileStatus }),
40
+ raw_artifact_reads_required: false,
41
+ inventory_authority: "canonical_entity_files",
42
+ singleton_authority: singletonPath,
43
+ },
44
+ };
45
+ const reservedUtf8Bytes = Math.max(Buffer.byteLength(JSON.stringify({ summary }, null, 2)), Buffer.byteLength(YAML.stringify({ summary }))) + 256;
46
+ const response = listTodoDocsEntities(process.cwd(), "docs", args.limit ?? undefined, undefined, {
47
+ ...(args.topic ? { topic: args.topic } : {}),
48
+ ...(args.status ? { status: args.status } : {}),
49
+ }, { format, reservedUtf8Bytes });
50
+ const projected = { ...response, summary };
51
+ if (format === "json" || format === "yaml")
52
+ emitStructured(projected, format, output);
53
+ else {
54
+ output(`Docs: last_audit=${singleton.last_audit ?? "-"}\nMapping: entries=${mapping.length}\n`);
55
+ for (const entry of response.entries) {
56
+ output(`${entry.id} document=${entry.record.document} | path=${entry.record.path} | last_updated=${entry.record.last_updated} | status=${entry.record.status}\n`);
57
+ }
58
+ }
59
+ return 0;
60
+ }
61
+ catch (error) {
62
+ if (!(error instanceof StateRetrievalFailure))
63
+ throw error;
64
+ if (format === "json" || format === "yaml")
65
+ emitStructured(error.body, format, output);
66
+ else
67
+ err(io)(YAML.stringify(error.body));
68
+ return error.exitCode;
69
+ }
70
+ }
@@ -0,0 +1,151 @@
1
+ import YAML from "yaml";
2
+ import { StateRetrievalFailure } from "../../../state/directRetrieval.js";
3
+ import { getExperimentEntity, listExperimentEntities } from "../../../state/objectiveExperimentEntities.js";
4
+ import { emitStructured } from "../../structured.js";
5
+ import { entityListFamily, entityListValidValues } from "../../../state/entityRetrievalHelp.js";
6
+ function requestedFormat(argv) {
7
+ for (let index = 0; index < argv.length; index += 1) {
8
+ const token = argv[index];
9
+ const value = token === "--format" ? argv[index + 1] : token.startsWith("--format=") ? token.slice(9) : undefined;
10
+ if (value === "json" || value === "yaml")
11
+ return value;
12
+ }
13
+ return "text";
14
+ }
15
+ function failure(message, verb) {
16
+ const list = verb === "list";
17
+ const family = entityListFamily("experiments");
18
+ return new StateRetrievalFailure({
19
+ schemaVersion: "agentera.stateFailure.v1",
20
+ status: "fail",
21
+ error: {
22
+ class: "invalid_request",
23
+ message,
24
+ syntax: list
25
+ ? family.syntax
26
+ : family.get,
27
+ example: list
28
+ ? family.example
29
+ : "agentera state experiments get --id qjtrmnpvka --format json",
30
+ recovery: list ? `Run \`${family.example}\`; no state was changed.` : "Use bare ten-letter entity IDs and retry; no state was changed.",
31
+ valid_values: list
32
+ ? entityListValidValues(family)
33
+ : ["get", "--id ID", "--format text|json|yaml"],
34
+ },
35
+ }, 2);
36
+ }
37
+ function value(argv, index, name) {
38
+ const token = argv[index];
39
+ if (token.startsWith(`${name}=`))
40
+ return { value: token.slice(name.length + 1), next: index + 1 };
41
+ const next = argv[index + 1];
42
+ if (!next || next.startsWith("--"))
43
+ throw new Error(`${name} requires a value`);
44
+ return { value: next, next: index + 2 };
45
+ }
46
+ function parse(argv, verb) {
47
+ const family = entityListFamily("experiments");
48
+ let format = "text";
49
+ let objective;
50
+ let id;
51
+ let limit = family.bounds.default;
52
+ let cursor;
53
+ const selector = {};
54
+ const seen = new Set();
55
+ for (let index = 0; index < argv.length;) {
56
+ const token = argv[index];
57
+ if (verb === "list" && token === "--ids-only") {
58
+ if (selector.idsOnly)
59
+ throw failure("--ids-only may only be supplied once", verb);
60
+ selector.idsOnly = true;
61
+ index += 1;
62
+ continue;
63
+ }
64
+ const allowed = verb === "list" ? ["--format", "--objective", "--limit", "--cursor", "--fields"] : ["--format", "--id"];
65
+ const name = allowed.find((flag) => token === flag || token.startsWith(`${flag}=`));
66
+ if (!name)
67
+ throw failure(`unrecognized argument '${token}'`, verb);
68
+ if (seen.has(name))
69
+ throw failure(`${name} may only be supplied once`, verb);
70
+ seen.add(name);
71
+ let parsed;
72
+ try {
73
+ parsed = value(argv, index, name);
74
+ }
75
+ catch (error) {
76
+ throw failure(error.message, verb);
77
+ }
78
+ index = parsed.next;
79
+ if (name === "--format") {
80
+ if (!family.formats.includes(parsed.value))
81
+ throw failure(`invalid --format '${parsed.value}'`, verb);
82
+ format = parsed.value;
83
+ }
84
+ else if (name === "--objective")
85
+ objective = parsed.value;
86
+ else if (name === "--id")
87
+ id = parsed.value;
88
+ else if (name === "--cursor")
89
+ cursor = parsed.value;
90
+ else if (name === "--fields")
91
+ selector.fields = parsed.value;
92
+ else {
93
+ if (!/^[1-9][0-9]*$/.test(parsed.value) || Number(parsed.value) < family.bounds.minimum || Number(parsed.value) > family.bounds.maximum)
94
+ throw failure(`--limit must be an integer from ${family.bounds.minimum} through ${family.bounds.maximum}`, verb);
95
+ limit = Number(parsed.value);
96
+ }
97
+ }
98
+ if (verb === "list" && !objective)
99
+ throw failure("--objective is required", verb);
100
+ if (verb === "get" && !id)
101
+ throw failure("--id is required", verb);
102
+ return { format, objective, id, limit, cursor, selector };
103
+ }
104
+ function emitFailure(error, format, io) {
105
+ if (format === "json" || format === "yaml")
106
+ emitStructured(error.body, format, io.out ?? ((text) => process.stdout.write(text)));
107
+ else {
108
+ const detail = error.body.error;
109
+ (io.err ?? ((text) => process.stderr.write(text)))([
110
+ `Error: ${detail.message}`,
111
+ `Class: ${detail.class}`,
112
+ `Valid forms: ${(detail.valid_values ?? [detail.syntax]).join("; ")}`,
113
+ `Example: ${detail.example}`,
114
+ `Recovery: ${detail.recovery}`,
115
+ ].join("\n") + "\n");
116
+ }
117
+ return error.exitCode;
118
+ }
119
+ export function runExperimentRecords(argv, io) {
120
+ const format = requestedFormat(argv);
121
+ const verb = argv[0];
122
+ if (verb !== "list" && verb !== "get")
123
+ return emitFailure(failure(`expected 'list' or 'get', received '${verb ?? "nothing"}'`, "list"), format, io);
124
+ try {
125
+ const args = parse(argv.slice(1), verb);
126
+ const response = verb === "list"
127
+ ? listExperimentEntities(process.cwd(), args.objective, args.limit, args.cursor, { format: args.format, selector: args.selector })
128
+ : getExperimentEntity(process.cwd(), args.id);
129
+ const output = io.out ?? ((text) => process.stdout.write(text));
130
+ if (args.format === "json" || args.format === "yaml")
131
+ emitStructured(response, args.format, output);
132
+ else
133
+ output(YAML.stringify(response));
134
+ return 0;
135
+ }
136
+ catch (error) {
137
+ if (error instanceof StateRetrievalFailure)
138
+ return emitFailure(error, format, io);
139
+ return emitFailure(new StateRetrievalFailure({
140
+ schemaVersion: "agentera.stateFailure.v1",
141
+ status: "fail",
142
+ error: {
143
+ class: "unsupported_state",
144
+ message: error.message,
145
+ syntax: "agentera state experiments list --objective ID [options] | agentera state experiments get --id ID [--format text|json|yaml]",
146
+ example: "agentera state experiments list --objective qjtrmnpvka --format json",
147
+ recovery: "Use supported objective-scoped experiment state and retry; no state was changed.",
148
+ },
149
+ }, 1), format, io);
150
+ }
151
+ }
@@ -0,0 +1,14 @@
1
+ import { emitStructured } from "../../structured.js";
2
+ import { listCurrentExperimentEntities } from "../../../state/objectiveExperimentEntities.js";
3
+ import YAML from "yaml";
4
+ import { out } from "./shared.js";
5
+ export function queryExperiments(args, _schemas, io) {
6
+ const format = args.format ?? "text";
7
+ const response = listCurrentExperimentEntities(process.cwd(), args.objective ?? undefined, args.limit ?? undefined, args.cursor ?? undefined, { topic: args.topic ?? undefined, status: args.status ?? undefined }, { format });
8
+ const output = out(io);
9
+ if (format === "text")
10
+ output(YAML.stringify(response));
11
+ else
12
+ emitStructured(response, format, output);
13
+ return 0;
14
+ }