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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,367 @@
1
+ import fs from "node:fs";
2
+ import { 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
+ }