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,367 @@
1
+ import fs from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { resolvePath } from "../../core/paths.js";
4
+ import { isoFromMtime, record, signalType, textFromContent, } from "./core.js";
5
+ import { isPlainObject, isFilePath, rglob } from "./core.js";
6
+ import { resolveSqliteCaps, } from "./sqliteCaps.js";
7
+ const requireCjs = createRequire(import.meta.url);
8
+ /** Mirrors Python raising PermissionError on a locked/busy store. */
9
+ export class PermissionDeniedError extends Error {
10
+ constructor(message) {
11
+ super(message);
12
+ this.name = "PermissionDeniedError";
13
+ }
14
+ }
15
+ /** Lazy open a read-only SQLite db via node:sqlite (warning only fires here). */
16
+ export function openSqlite(p) {
17
+ const { DatabaseSync } = requireCjs("node:sqlite");
18
+ return new DatabaseSync(resolvePath(p), { readOnly: true });
19
+ }
20
+ export function sqliteTimestamp(value, fallback) {
21
+ if (typeof value === "string" && value)
22
+ return value;
23
+ if (typeof value === "number") {
24
+ let numeric = value;
25
+ if (numeric > 10_000_000_000)
26
+ numeric /= 1000;
27
+ return new Date(numeric * 1000).toISOString();
28
+ }
29
+ return fallback;
30
+ }
31
+ export function jsonDict(value) {
32
+ if (isPlainObject(value))
33
+ return value;
34
+ if (typeof value === "string" && value) {
35
+ try {
36
+ const parsed = JSON.parse(value);
37
+ return isPlainObject(parsed) ? parsed : {};
38
+ }
39
+ catch {
40
+ return {};
41
+ }
42
+ }
43
+ return {};
44
+ }
45
+ function nestedTimeCreated(data) {
46
+ const timeData = data.time;
47
+ if (isPlainObject(timeData))
48
+ return timeData.created || timeData.start;
49
+ return data.time_created || data.timestamp;
50
+ }
51
+ export function tableColumns(conn, table) {
52
+ const rows = conn.prepare(`PRAGMA table_info(${table})`).all();
53
+ return new Set(rows.map((r) => String(r.name)));
54
+ }
55
+ export function firstColumn(columns, candidates) {
56
+ for (const c of candidates)
57
+ if (columns.has(c))
58
+ return c;
59
+ return null;
60
+ }
61
+ export function qualified(alias, column, label) {
62
+ if (column === null)
63
+ return `NULL AS ${label}`;
64
+ const escaped = column.replace(/"/g, '""');
65
+ return `${alias}."${escaped}" AS ${label}`;
66
+ }
67
+ function resolveOpencodeSchema(conn) {
68
+ const tables = new Set(conn.prepare("SELECT name FROM sqlite_master WHERE type = 'table'").all().map((r) => String(r.name)));
69
+ for (const t of ["session", "message", "part"]) {
70
+ if (!tables.has(t)) {
71
+ const missing = ["session", "message", "part"].filter((x) => !tables.has(x)).sort().join(",");
72
+ throw new Error(`missing opencode tables: ${missing}`);
73
+ }
74
+ }
75
+ const sessionCols = tableColumns(conn, "session");
76
+ const messageCols = tableColumns(conn, "message");
77
+ const partCols = tableColumns(conn, "part");
78
+ const sessionId = firstColumn(sessionCols, ["id", "session_id", "sessionID"]);
79
+ const messageId = firstColumn(messageCols, ["id", "message_id", "messageID"]);
80
+ const messageSession = firstColumn(messageCols, ["sessionID", "session_id", "session", "sessionId"]);
81
+ const partMessage = firstColumn(partCols, ["messageID", "message_id", "message", "messageId"]);
82
+ if (!(sessionId && messageId && messageSession && partMessage))
83
+ throw new Error("missing opencode join columns");
84
+ const messageData = firstColumn(messageCols, ["data"]);
85
+ const partData = firstColumn(partCols, ["data"]);
86
+ const roleCol = firstColumn(messageCols, ["role", "actor", "author"]);
87
+ if (roleCol === null && messageData === null)
88
+ throw new Error("missing opencode message role column");
89
+ const messageTime = firstColumn(messageCols, ["time_created", "time", "timestamp", "created_at", "createdAt"]);
90
+ const partTime = firstColumn(partCols, ["time_created", "time", "timestamp", "created_at", "createdAt"]);
91
+ const sessionTime = firstColumn(sessionCols, ["time_created", "time", "timestamp", "created_at", "createdAt"]);
92
+ const sessionUpdated = firstColumn(sessionCols, ["time_updated", "updated_at", "updatedAt", "time_created", "time"]);
93
+ const projectCol = firstColumn(sessionCols, ["cwd", "project_path", "projectPath", "directory", "path"]);
94
+ const messageText = firstColumn(messageCols, ["content", "text", "message"]);
95
+ const partText = firstColumn(partCols, ["text", "content", "input", "output"]);
96
+ const partType = firstColumn(partCols, ["type", "kind"]);
97
+ const partId = firstColumn(partCols, ["id", "part_id", "partID"]);
98
+ const sortExpr = `COALESCE(m."${messageTime || messageId}", p."${partTime || partMessage}", s."${sessionTime || sessionId}")`;
99
+ const recentSessionExpr = `s."${sessionUpdated || sessionTime || sessionId}"`;
100
+ return {
101
+ sessionId,
102
+ messageId,
103
+ messageSession,
104
+ partMessage,
105
+ messageData,
106
+ partData,
107
+ roleCol,
108
+ messageTime,
109
+ partTime,
110
+ sessionTime,
111
+ sessionUpdated,
112
+ projectCol,
113
+ messageText,
114
+ partText,
115
+ partType,
116
+ partId,
117
+ sortExpr,
118
+ recentSessionExpr,
119
+ };
120
+ }
121
+ function opencodeRows(conn, caps, schema) {
122
+ const { sessionId, messageId, messageSession, partMessage, messageData, partData, roleCol, messageTime, partTime, sessionTime, projectCol, messageText, partText, partType, partId, sortExpr, recentSessionExpr, } = schema;
123
+ const query = `
124
+ WITH recent_sessions AS (
125
+ SELECT s."${sessionId}" AS recent_session_id
126
+ FROM session s
127
+ ORDER BY ${recentSessionExpr} DESC,
128
+ s."${sessionId}" DESC
129
+ LIMIT ?
130
+ ),
131
+ recent AS (
132
+ SELECT
133
+ ${qualified("s", sessionId, "session_id")},
134
+ ${qualified("s", projectCol, "project_path")},
135
+ ${qualified("m", messageId, "message_id")},
136
+ ${qualified("m", roleCol, "role")},
137
+ ${qualified("m", messageTime, "message_time")},
138
+ ${qualified("m", messageText, "message_text")},
139
+ ${qualified("m", messageData, "message_data")},
140
+ ${qualified("p", partId, "part_id")},
141
+ ${qualified("p", partTime, "part_time")},
142
+ ${qualified("p", partType, "part_type")},
143
+ ${qualified("p", partText, "part_text")},
144
+ ${qualified("p", partData, "part_data")},
145
+ ${sortExpr} AS sort_time
146
+ FROM message m
147
+ JOIN session s ON m."${messageSession}" = s."${sessionId}"
148
+ JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
149
+ LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
150
+ ORDER BY sort_time DESC,
151
+ m."${messageId}" DESC,
152
+ p."${partId || partMessage}" DESC
153
+ LIMIT ?
154
+ )
155
+ SELECT
156
+ session_id, project_path, message_id, role, message_time,
157
+ message_text, message_data, part_id, part_time, part_type,
158
+ part_text, part_data
159
+ FROM recent
160
+ ORDER BY sort_time, message_id, part_id
161
+ `;
162
+ return conn.prepare(query).all(caps.maxSessions, caps.maxRows);
163
+ }
164
+ export function probeOpencodeTruncation(conn, caps, fallback) {
165
+ const schema = resolveOpencodeSchema(conn);
166
+ const { sessionId, sessionTime, sessionUpdated, recentSessionExpr } = schema;
167
+ const sessionTimeCol = sessionTime || sessionId;
168
+ const sessionCount = Number(conn.prepare("SELECT COUNT(*) AS c FROM session").get()?.c ?? 0);
169
+ if (sessionCount > caps.maxSessions) {
170
+ const query = `
171
+ SELECT MIN(session_ts) AS truncated_at
172
+ FROM (
173
+ SELECT s."${sessionTimeCol}" AS session_ts
174
+ FROM session s
175
+ ORDER BY ${recentSessionExpr} DESC,
176
+ s."${sessionId}" DESC
177
+ LIMIT -1 OFFSET ?
178
+ )
179
+ `;
180
+ const row = conn.prepare(query).get(caps.maxSessions);
181
+ const truncatedAt = sqliteTimestamp(row?.truncated_at, fallback);
182
+ return { truncatedAt, cap: "sessions", limit: caps.maxSessions };
183
+ }
184
+ const { messageId, messageSession, partMessage, roleCol, messageTime, partTime, messageData, partData, messageText, partText, partType, partId, sortExpr, } = schema;
185
+ const rowCountQuery = `
186
+ WITH recent_sessions AS (
187
+ SELECT s."${sessionId}" AS recent_session_id
188
+ FROM session s
189
+ ORDER BY ${recentSessionExpr} DESC,
190
+ s."${sessionId}" DESC
191
+ LIMIT ?
192
+ )
193
+ SELECT COUNT(*) AS c
194
+ FROM message m
195
+ JOIN session s ON m."${messageSession}" = s."${sessionId}"
196
+ JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
197
+ LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
198
+ `;
199
+ const rowCount = Number(conn.prepare(rowCountQuery).get(caps.maxSessions)?.c ?? 0);
200
+ if (rowCount > caps.maxRows) {
201
+ const query = `
202
+ WITH recent_sessions AS (
203
+ SELECT s."${sessionId}" AS recent_session_id
204
+ FROM session s
205
+ ORDER BY ${recentSessionExpr} DESC,
206
+ s."${sessionId}" DESC
207
+ LIMIT ?
208
+ ),
209
+ ranked AS (
210
+ SELECT ${sortExpr} AS sort_time
211
+ FROM message m
212
+ JOIN session s ON m."${messageSession}" = s."${sessionId}"
213
+ JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
214
+ LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
215
+ ORDER BY sort_time DESC,
216
+ m."${messageId}" DESC,
217
+ p."${partId || partMessage}" DESC
218
+ LIMIT -1 OFFSET ?
219
+ )
220
+ SELECT MIN(sort_time) AS truncated_at FROM ranked
221
+ `;
222
+ const row = conn.prepare(query).get(caps.maxSessions, caps.maxRows);
223
+ const truncatedAt = sqliteTimestamp(row?.truncated_at, fallback);
224
+ return { truncatedAt, cap: "rows", limit: caps.maxRows };
225
+ }
226
+ return null;
227
+ }
228
+ function opencodeDbCandidates(storePath) {
229
+ if (isFilePath(storePath))
230
+ return [storePath];
231
+ return rglob(storePath, "opencode.db");
232
+ }
233
+ export function extractOpencodeSessions(storePath, errors, ctx) {
234
+ if (storePath === null || !fs.existsSync(storePath))
235
+ return [];
236
+ const caps = ctx?.sqliteCaps ?? resolveSqliteCaps();
237
+ const records = [];
238
+ for (const dbPath of opencodeDbCandidates(storePath).slice(0, 1)) {
239
+ const fallbackTimestamp = isoFromMtime(dbPath);
240
+ let rows;
241
+ let conn = null;
242
+ try {
243
+ conn = openSqlite(dbPath);
244
+ const truncation = probeOpencodeTruncation(conn, caps, fallbackTimestamp);
245
+ if (truncation && ctx)
246
+ ctx.truncation = truncation;
247
+ const schema = resolveOpencodeSchema(conn);
248
+ rows = opencodeRows(conn, caps, schema);
249
+ }
250
+ catch (exc) {
251
+ const msg = exc.message || "";
252
+ if (/lock|busy/i.test(msg))
253
+ throw new PermissionDeniedError(msg);
254
+ errors.push(`${dbPath}: opencode sqlite read failed: ${exc.name || "Error"}`);
255
+ continue;
256
+ }
257
+ finally {
258
+ try {
259
+ conn?.close();
260
+ }
261
+ catch {
262
+ /* ignore */
263
+ }
264
+ }
265
+ const messages = new Map();
266
+ for (const row of rows) {
267
+ const messageData = jsonDict(row.message_data);
268
+ const partData = jsonDict(row.part_data);
269
+ const messageId = String(row.message_id);
270
+ const role = row.role || messageData.role;
271
+ const messageTime = row.message_time || nestedTimeCreated(messageData);
272
+ let item = messages.get(messageId);
273
+ if (item === undefined) {
274
+ item = {
275
+ role,
276
+ session_id: String(row.session_id),
277
+ project_path: row.project_path,
278
+ timestamp: sqliteTimestamp(messageTime, fallbackTimestamp),
279
+ parts: [],
280
+ tools: [],
281
+ };
282
+ messages.set(messageId, item);
283
+ }
284
+ const partType = row.part_type || partData.type;
285
+ const partText = textFromContent(row.part_text || partData.text);
286
+ if (partText)
287
+ item.parts.push(partText);
288
+ else if (row.message_text)
289
+ item.parts.push(textFromContent(row.message_text));
290
+ if (partType === "tool" || partData.tool) {
291
+ const state = isPlainObject(partData.state) ? partData.state : {};
292
+ const argumentsVal = isPlainObject(state.input) ? state.input : {};
293
+ const toolName = partData.tool || partData.name;
294
+ if (typeof toolName === "string" && toolName) {
295
+ item.tools.push({
296
+ part_id: row.part_id,
297
+ tool_name: toolName,
298
+ arguments: argumentsVal,
299
+ timestamp: sqliteTimestamp(row.part_time || nestedTimeCreated(partData), item.timestamp),
300
+ });
301
+ }
302
+ }
303
+ }
304
+ let previousAssistant = "";
305
+ let index = 0;
306
+ for (const item of messages.values()) {
307
+ index += 1;
308
+ const role = String(item.role).toLowerCase();
309
+ if (role !== "user" && role !== "assistant")
310
+ continue;
311
+ const content = item.parts.filter((p) => p).join("\n");
312
+ if (!content && item.tools.length === 0)
313
+ continue;
314
+ const projectPath = item.project_path ? String(item.project_path) : null;
315
+ if (content) {
316
+ const data = { actor: role, content };
317
+ if (role === "user") {
318
+ if (previousAssistant)
319
+ data.preceding_context = previousAssistant.slice(-2000);
320
+ const sig = signalType(content);
321
+ if (sig)
322
+ data.signal_type = sig;
323
+ }
324
+ else {
325
+ previousAssistant = content;
326
+ }
327
+ records.push(record({
328
+ sourceKind: "conversation_turn",
329
+ timestamp: item.timestamp,
330
+ projectPath,
331
+ runtime: "opencode",
332
+ sourceParts: [resolvePath(dbPath), index, role, content.slice(0, 80)],
333
+ sessionId: item.session_id,
334
+ data,
335
+ }));
336
+ }
337
+ let toolIndex = 0;
338
+ for (const toolItem of item.tools) {
339
+ toolIndex += 1;
340
+ records.push(record({
341
+ sourceKind: "tool_call",
342
+ timestamp: toolItem.timestamp,
343
+ projectPath,
344
+ runtime: "opencode",
345
+ sourceParts: [resolvePath(dbPath), index, toolIndex, "tool", toolItem.tool_name, toolItem.part_id],
346
+ sessionId: item.session_id,
347
+ data: { tool_name: toolItem.tool_name, arguments: toolItem.arguments },
348
+ }));
349
+ }
350
+ if (role === "user" && content) {
351
+ const sig = signalType(content);
352
+ if (sig) {
353
+ records.push(record({
354
+ sourceKind: "history_prompt",
355
+ timestamp: item.timestamp,
356
+ projectPath,
357
+ runtime: "opencode",
358
+ sourceParts: [resolvePath(dbPath), index, "history", content.slice(0, 120)],
359
+ sessionId: item.session_id,
360
+ data: { prompt: content, signal_type: sig },
361
+ }));
362
+ }
363
+ }
364
+ }
365
+ }
366
+ return records;
367
+ }
@@ -0,0 +1,108 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { compatibilityStates, evidenceTierBounds, } from "../../registries/evidenceTierContract.js";
4
+ import { defaultTiersDir, evidenceTierCompatibility, iterTierRecords, readSignalTier, readTierCorpusMetadata, } from "./evidenceTiers.js";
5
+ /**
6
+ * Bounded tier reader for analytics consumers (plan Task 3).
7
+ *
8
+ * Task 2 publishes bounded full-evidence shards and a bounded signal tier with
9
+ * an atomic generation pointer. This module is the consumer-side surface that
10
+ * projects the contract's compatibility states and recovery guidance, resolves
11
+ * the tiers directory from a corpus path, and exposes bounded reads (full-evidence
12
+ * records one shard at a time; metadata/signal reads without full records). It does
13
+ * not duplicate the tier map, source families, bounds, or compatibility outcomes —
14
+ * those are projected from `evidenceTierContract` and `evidenceTiers`.
15
+ *
16
+ * Consumers preserve their JSON output shape and exit codes. A non-current tier
17
+ * degrades with actionable, contract-projected recovery rather than indefinitely
18
+ * loading an oversized monolithic corpus envelope. `incomplete` is a degrade
19
+ * outcome: consumers analyze available sources and surface the coverage gap, so a
20
+ * host missing some runtimes still gets useful analysis instead of a hard failure.
21
+ */
22
+ /** A corpus path's co-located tiers directory (`<intermediate>/tiers`). */
23
+ export function tiersDirForCorpusPath(corpusPath) {
24
+ return path.join(path.dirname(corpusPath), "tiers");
25
+ }
26
+ /** Canonical tiers directory for the stats profile. */
27
+ export function resolveTiersDir(env = process.env, platform = process.platform) {
28
+ return defaultTiersDir(env, platform);
29
+ }
30
+ /** Whether a compatibility state still permits analysis of available sources. */
31
+ export function isAnalyzable(state) {
32
+ return state === "current" || state === "incomplete";
33
+ }
34
+ /**
35
+ * Actionable recovery guidance projected from the authority contract for a
36
+ * compatibility state. The contract owns the recovery text; this never
37
+ * duplicates it. Returns `null` for states that proceed (current/incomplete).
38
+ */
39
+ export function recoveryForState(state) {
40
+ if (state === "current" || state === "incomplete")
41
+ return null;
42
+ const states = compatibilityStates();
43
+ const def = states.find((s) => s.state_id === state);
44
+ return def?.recovery ?? null;
45
+ }
46
+ /**
47
+ * Assess the tiers directory against the contract's compatibility states. When a
48
+ * legacy corpus envelope is supplied, a missing tier with an existing envelope
49
+ * surfaces as `legacy` (refresh guidance) rather than a bare missing state.
50
+ */
51
+ export function assessTiers(tiersDir, corpusPath) {
52
+ const compat = evidenceTierCompatibility(tiersDir, corpusPath);
53
+ const assessment = {
54
+ state: compat.state,
55
+ analyzable: isAnalyzable(compat.state),
56
+ tiersDir,
57
+ corpusPath,
58
+ recovery: recoveryForState(compat.state) ?? undefined,
59
+ };
60
+ if (compat.state === "incomplete")
61
+ assessment.coverageGaps = compat.detail;
62
+ if (compat.state === "oversized")
63
+ assessment.artifact = compat.artifact;
64
+ if (compat.state === "current")
65
+ assessment.generation = compat.generation;
66
+ return assessment;
67
+ }
68
+ /**
69
+ * Read bounded metadata for signal-tier consumers (report status, prime
70
+ * coverage). Reads the manifest and the bounded signal tier only — never the
71
+ * full-evidence shards — so metadata consumers stay bounded at real scale. The
72
+ * signal tier is bounded by construction; a defensively oversized signal tier is
73
+ * reported as null so the caller degrades with the assessment's recovery.
74
+ */
75
+ export function readBoundedMetadata(tiersDir) {
76
+ const signal = readSignalTier(tiersDir);
77
+ const corpusMetadata = readTierCorpusMetadata(tiersDir);
78
+ const bounds = evidenceTierBounds();
79
+ if (signal && (signal.bytes > bounds.signalByteCap || signal.manifest.signal.bytes > bounds.signalByteCap)) {
80
+ return { corpusMetadata: null, signal: null, manifest: signal.manifest };
81
+ }
82
+ return { corpusMetadata, signal, manifest: signal?.manifest ?? null };
83
+ }
84
+ /**
85
+ * Iterate full-evidence records for the current generation, one bounded shard at
86
+ * a time. Full-record consumers (usage analytics, startup analysis) use this so
87
+ * they never materialize the monolithic corpus envelope. Returns `null` when no
88
+ * current generation exists; callers report the assessment instead.
89
+ */
90
+ export function iterBoundedRecords(tiersDir) {
91
+ return iterTierRecords(tiersDir);
92
+ }
93
+ /**
94
+ * Legacy fallback: a small monolithic corpus envelope may still be read for
95
+ * backward compatibility when no tiers were published. Oversized legacy state
96
+ * is never loaded whole — it returns `false` so the caller emits refresh guidance.
97
+ */
98
+ export function legacyCorpusReadable(corpusPath) {
99
+ if (!corpusPath || !fs.existsSync(corpusPath))
100
+ return false;
101
+ const bounds = evidenceTierBounds();
102
+ try {
103
+ return fs.statSync(corpusPath).size <= bounds.readerByteCap;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }