agentera 3.0.0-dev.5 → 3.0.0-next.1

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 (336) hide show
  1. package/README.md +4 -3
  2. package/bundle/extract-corpus-parity.json +23 -0
  3. package/bundle/references/adapters/cursor.md +9 -8
  4. package/bundle/references/adapters/opencode.md +1 -1
  5. package/bundle/references/adapters/package-registry.yaml +0 -1
  6. package/bundle/references/adapters/package-surface-characterization.md +1 -2
  7. package/bundle/references/analysis/startup-measurement-contract.yaml +15 -15
  8. package/bundle/references/cli/audience-namespace-cli-migration.yaml +40 -26
  9. package/bundle/references/cli/bundle-skill-vocabulary.yaml +1 -29
  10. package/bundle/references/cli/coexistence-probe.yaml +9 -0
  11. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  12. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  13. package/bundle/references/cli/update-channels.yaml +16 -0
  14. package/bundle/references/cli/upgrade-repair-wording.md +31 -0
  15. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +98 -0
  16. package/bundle/references/cli/vocabulary-index.yaml +6 -4
  17. package/bundle/references/cli/vocabulary.md +307 -301
  18. package/bundle/references/meta/documentation-inventory.md +9 -3
  19. package/bundle/skills/agentera/SKILL.md +49 -41
  20. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +4 -1
  21. package/bundle/skills/agentera/capabilities/profilera/schemas/exit.yaml +2 -1
  22. package/bundle/skills/agentera/capability_schema_contract.yaml +28 -0
  23. package/bundle/skills/agentera/references/contract.md +324 -315
  24. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +38 -33
  25. package/dist/analytics/extractCorpus/cli.js +149 -0
  26. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  27. package/dist/analytics/extractCorpus/copilotSessions.js +273 -0
  28. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  29. package/dist/analytics/extractCorpus/core.js +363 -0
  30. package/dist/analytics/extractCorpus/core.js.map +1 -0
  31. package/dist/analytics/extractCorpus/corpus.js +145 -0
  32. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  33. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  34. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  35. package/dist/analytics/extractCorpus/cursorSessions.js +423 -0
  36. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  37. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  38. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  39. package/dist/analytics/extractCorpus/filesystemSources.js +122 -0
  40. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  41. package/dist/analytics/extractCorpus/index.js +12 -0
  42. package/dist/analytics/extractCorpus/index.js.map +1 -0
  43. package/dist/analytics/extractCorpus/jsonlSessions.js +185 -0
  44. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  45. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  46. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  47. package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
  48. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  49. package/dist/analytics/extractCorpus.js +2 -1790
  50. package/dist/analytics/extractCorpus.js.map +1 -1
  51. package/dist/analytics/usageStats.js +1 -1
  52. package/dist/analytics/usageStats.js.map +1 -1
  53. package/dist/capabilities/inspirera/instructions.js +1 -1
  54. package/dist/capabilities/inspirera/instructions.js.map +1 -1
  55. package/dist/capabilities/planera/instructions.js +1 -1
  56. package/dist/capabilities/planera/instructions.js.map +1 -1
  57. package/dist/capabilities/profilera/instructions.js +1 -1
  58. package/dist/capabilities/profilera/instructions.js.map +1 -1
  59. package/dist/capabilities/realisera/instructions.js +1 -1
  60. package/dist/capabilities/realisera/instructions.js.map +1 -1
  61. package/dist/capabilities/resonera/instructions.js +1 -1
  62. package/dist/capabilities/resonera/instructions.js.map +1 -1
  63. package/dist/capabilities/visionera/instructions.js +1 -1
  64. package/dist/capabilities/visionera/instructions.js.map +1 -1
  65. package/dist/capabilities/visualisera/instructions.js +3 -4
  66. package/dist/capabilities/visualisera/instructions.js.map +1 -1
  67. package/dist/cli/appContext.js +2 -14
  68. package/dist/cli/appContext.js.map +1 -1
  69. package/dist/cli/capabilityContext/benchmark.js +557 -0
  70. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  71. package/dist/cli/capabilityContext/bespoke.js +25 -0
  72. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  73. package/dist/cli/capabilityContext/closeout.js +230 -0
  74. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  75. package/dist/cli/capabilityContext/contract.js +186 -0
  76. package/dist/cli/capabilityContext/contract.js.map +1 -0
  77. package/dist/cli/capabilityContext/evidence.js +446 -0
  78. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  79. package/dist/cli/capabilityContext/index.js +4 -0
  80. package/dist/cli/capabilityContext/index.js.map +1 -0
  81. package/dist/cli/capabilityContext/orchestration.js +107 -0
  82. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  83. package/dist/cli/capabilityContext/planState.js +271 -0
  84. package/dist/cli/capabilityContext/planState.js.map +1 -0
  85. package/dist/cli/capabilityContext/progress.js +96 -0
  86. package/dist/cli/capabilityContext/progress.js.map +1 -0
  87. package/dist/cli/capabilityContext/realisera.js +174 -0
  88. package/dist/cli/capabilityContext/realisera.js.map +1 -0
  89. package/dist/cli/capabilityContext/shared.js +94 -0
  90. package/dist/cli/capabilityContext/shared.js.map +1 -0
  91. package/dist/cli/capabilityContext/slim.js +106 -0
  92. package/dist/cli/capabilityContext/slim.js.map +1 -0
  93. package/dist/cli/capabilityContext/startup.js +208 -0
  94. package/dist/cli/capabilityContext/startup.js.map +1 -0
  95. package/dist/cli/capabilityContext/types.js +43 -0
  96. package/dist/cli/capabilityContext/types.js.map +1 -0
  97. package/dist/cli/capabilityContext.js +1 -2486
  98. package/dist/cli/capabilityContext.js.map +1 -1
  99. package/dist/cli/commands/appHome.js +23 -0
  100. package/dist/cli/commands/appHome.js.map +1 -0
  101. package/dist/cli/commands/compact.js +1 -1
  102. package/dist/cli/commands/compact.js.map +1 -1
  103. package/dist/cli/commands/doctor.js +18 -96
  104. package/dist/cli/commands/doctor.js.map +1 -1
  105. package/dist/cli/commands/lint.js +4 -36
  106. package/dist/cli/commands/lint.js.map +1 -1
  107. package/dist/cli/commands/prime/bundleStatus.js +126 -0
  108. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  109. package/dist/cli/commands/prime/collectOrientationState.js +143 -0
  110. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  111. package/dist/cli/commands/prime/orientationOutput.js +172 -0
  112. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  113. package/dist/cli/commands/prime/types.js +2 -0
  114. package/dist/cli/commands/prime/types.js.map +1 -0
  115. package/dist/cli/commands/prime/v1Migration.js +39 -0
  116. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  117. package/dist/cli/commands/prime.js +10 -549
  118. package/dist/cli/commands/prime.js.map +1 -1
  119. package/dist/cli/commands/query.js +1 -1
  120. package/dist/cli/commands/query.js.map +1 -1
  121. package/dist/cli/commands/report.js +19 -4
  122. package/dist/cli/commands/report.js.map +1 -1
  123. package/dist/cli/commands/schema.js +1 -2
  124. package/dist/cli/commands/schema.js.map +1 -1
  125. package/dist/cli/commands/state/decisions.js +397 -0
  126. package/dist/cli/commands/state/decisions.js.map +1 -0
  127. package/dist/cli/commands/state/docs.js +93 -0
  128. package/dist/cli/commands/state/docs.js.map +1 -0
  129. package/dist/cli/commands/state/experiments.js +67 -0
  130. package/dist/cli/commands/state/experiments.js.map +1 -0
  131. package/dist/cli/commands/state/health.js +114 -0
  132. package/dist/cli/commands/state/health.js.map +1 -0
  133. package/dist/cli/commands/state/index.js +51 -0
  134. package/dist/cli/commands/state/index.js.map +1 -0
  135. package/dist/cli/commands/state/objective.js +68 -0
  136. package/dist/cli/commands/state/objective.js.map +1 -0
  137. package/dist/cli/commands/state/plan.js +172 -0
  138. package/dist/cli/commands/state/plan.js.map +1 -0
  139. package/dist/cli/commands/state/progress.js +47 -0
  140. package/dist/cli/commands/state/progress.js.map +1 -0
  141. package/dist/cli/commands/state/shared.js +15 -0
  142. package/dist/cli/commands/state/shared.js.map +1 -0
  143. package/dist/cli/commands/state/todo.js +121 -0
  144. package/dist/cli/commands/state/todo.js.map +1 -0
  145. package/dist/cli/commands/validate.js +38 -24
  146. package/dist/cli/commands/validate.js.map +1 -1
  147. package/dist/cli/contracts/bundleStatus.js +2 -0
  148. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  149. package/dist/cli/contracts/orientationState.js +2 -0
  150. package/dist/cli/contracts/orientationState.js.map +1 -0
  151. package/dist/cli/dispatch/argvParser.js +33 -0
  152. package/dist/cli/dispatch/argvParser.js.map +1 -0
  153. package/dist/cli/dispatch/check.js +328 -0
  154. package/dist/cli/dispatch/check.js.map +1 -0
  155. package/dist/cli/dispatch/commands.js +27 -0
  156. package/dist/cli/dispatch/commands.js.map +1 -0
  157. package/dist/cli/dispatch/index.js +179 -0
  158. package/dist/cli/dispatch/index.js.map +1 -0
  159. package/dist/cli/dispatch/lifecycle.js +537 -0
  160. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  161. package/dist/cli/dispatch/prime.js +104 -0
  162. package/dist/cli/dispatch/prime.js.map +1 -0
  163. package/dist/cli/dispatch/shared.js +64 -0
  164. package/dist/cli/dispatch/shared.js.map +1 -0
  165. package/dist/cli/dispatch/state.js +144 -0
  166. package/dist/cli/dispatch/state.js.map +1 -0
  167. package/dist/cli/dispatch.js +1 -1293
  168. package/dist/cli/dispatch.js.map +1 -1
  169. package/dist/cli/help.js +30 -2
  170. package/dist/cli/help.js.map +1 -1
  171. package/dist/cli/orientation/attention.js +57 -0
  172. package/dist/cli/orientation/attention.js.map +1 -0
  173. package/dist/cli/orientation/corpusCoverage.js +71 -0
  174. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  175. package/dist/cli/orientation.js +41 -28
  176. package/dist/cli/orientation.js.map +1 -1
  177. package/dist/cli/startupCompletenessContract.js +49 -0
  178. package/dist/cli/startupCompletenessContract.js.map +1 -0
  179. package/dist/cli/todoSeverity.js +19 -0
  180. package/dist/cli/todoSeverity.js.map +1 -0
  181. package/dist/core/jsonValue.js +6 -0
  182. package/dist/core/jsonValue.js.map +1 -0
  183. package/dist/core/pyjson.js +67 -2
  184. package/dist/core/pyjson.js.map +1 -1
  185. package/dist/hooks/common.js +8 -23
  186. package/dist/hooks/common.js.map +1 -1
  187. package/dist/hooks/compaction/apply.js +263 -0
  188. package/dist/hooks/compaction/apply.js.map +1 -0
  189. package/dist/hooks/compaction/dryRun.js +181 -0
  190. package/dist/hooks/compaction/dryRun.js.map +1 -0
  191. package/dist/hooks/compaction/index.js +23 -0
  192. package/dist/hooks/compaction/index.js.map +1 -0
  193. package/dist/hooks/compaction/parse.js +258 -0
  194. package/dist/hooks/compaction/parse.js.map +1 -0
  195. package/dist/hooks/compaction/retention.js +197 -0
  196. package/dist/hooks/compaction/retention.js.map +1 -0
  197. package/dist/hooks/compaction/status.js +241 -0
  198. package/dist/hooks/compaction/status.js.map +1 -0
  199. package/dist/hooks/compaction/types.js +6 -0
  200. package/dist/hooks/compaction/types.js.map +1 -0
  201. package/dist/hooks/cursorPreToolUse.js +1 -1
  202. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  203. package/dist/hooks/cursorSessionStart.js +10 -2
  204. package/dist/hooks/cursorSessionStart.js.map +1 -1
  205. package/dist/hooks/sessionStart.js +4 -4
  206. package/dist/hooks/sessionStart.js.map +1 -1
  207. package/dist/hooks/sessionStop.js +3 -12
  208. package/dist/hooks/sessionStop.js.map +1 -1
  209. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  210. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  211. package/dist/hooks/validateArtifact/index.js +149 -0
  212. package/dist/hooks/validateArtifact/index.js.map +1 -0
  213. package/dist/hooks/validateArtifact/markdown.js +146 -0
  214. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  215. package/dist/hooks/validateArtifact/runtime.js +83 -0
  216. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  217. package/dist/hooks/validateArtifact/schema.js +455 -0
  218. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  219. package/dist/hooks/validateArtifact/traversal.js +105 -0
  220. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  221. package/dist/hooks/validateArtifact/violations.js +105 -0
  222. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  223. package/dist/migrate/v2HandoffManifest.js +333 -0
  224. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  225. package/dist/registries/artifactProtocolIds.js +77 -0
  226. package/dist/registries/artifactProtocolIds.js.map +1 -0
  227. package/dist/release/releaseMetadata.js +235 -0
  228. package/dist/release/releaseMetadata.js.map +1 -0
  229. package/dist/setup/codex/agents.js +96 -0
  230. package/dist/setup/codex/agents.js.map +1 -0
  231. package/dist/setup/codex/cli.js +161 -0
  232. package/dist/setup/codex/cli.js.map +1 -0
  233. package/dist/setup/codex/configToml.js +644 -0
  234. package/dist/setup/codex/configToml.js.map +1 -0
  235. package/dist/setup/codex/constants.js +29 -0
  236. package/dist/setup/codex/constants.js.map +1 -0
  237. package/dist/setup/codex/installRoot.js +64 -0
  238. package/dist/setup/codex/installRoot.js.map +1 -0
  239. package/dist/setup/codex/state.js +270 -0
  240. package/dist/setup/codex/state.js.map +1 -0
  241. package/dist/setup/codex.js +11 -1196
  242. package/dist/setup/codex.js.map +1 -1
  243. package/dist/setup/cursor.js +1 -1
  244. package/dist/setup/cursor.js.map +1 -1
  245. package/dist/setup/doctor/core.js +300 -0
  246. package/dist/setup/doctor/core.js.map +1 -0
  247. package/dist/setup/doctor/diagnostics.js +247 -0
  248. package/dist/setup/doctor/diagnostics.js.map +1 -0
  249. package/dist/setup/doctor/opencode.js +281 -0
  250. package/dist/setup/doctor/opencode.js.map +1 -0
  251. package/dist/setup/doctor/report.js +418 -0
  252. package/dist/setup/doctor/report.js.map +1 -0
  253. package/dist/setup/doctor.js +9 -1296
  254. package/dist/setup/doctor.js.map +1 -1
  255. package/dist/setup/opencode.js +13 -0
  256. package/dist/setup/opencode.js.map +1 -0
  257. package/dist/setup/smokeChecks.js +1 -1
  258. package/dist/setup/smokeChecks.js.map +1 -1
  259. package/dist/state/installRoot.js +49 -18
  260. package/dist/state/installRoot.js.map +1 -1
  261. package/dist/state/startupAnalysis/benchmark.js +367 -0
  262. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  263. package/dist/state/startupAnalysis/contract.js +122 -0
  264. package/dist/state/startupAnalysis/contract.js.map +1 -0
  265. package/dist/state/startupAnalysis/helpers.js +287 -0
  266. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  267. package/dist/state/startupAnalysis/index.js +7 -0
  268. package/dist/state/startupAnalysis/index.js.map +1 -0
  269. package/dist/state/startupAnalysis/metrics.js +334 -0
  270. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  271. package/dist/state/startupAnalysis/records.js +195 -0
  272. package/dist/state/startupAnalysis/records.js.map +1 -0
  273. package/dist/state/startupAnalysis/report.js +101 -0
  274. package/dist/state/startupAnalysis/report.js.map +1 -0
  275. package/dist/state/startupAnalysis/threshold.js +500 -0
  276. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  277. package/dist/state/startupAnalysis.js +2 -1952
  278. package/dist/state/startupAnalysis.js.map +1 -1
  279. package/dist/upgrade/appModel.js +1 -4
  280. package/dist/upgrade/appModel.js.map +1 -1
  281. package/dist/upgrade/bundleEvidence.js +34 -0
  282. package/dist/upgrade/bundleEvidence.js.map +1 -0
  283. package/dist/upgrade/channels.js +8 -1
  284. package/dist/upgrade/channels.js.map +1 -1
  285. package/dist/upgrade/cliProbe.js +22 -0
  286. package/dist/upgrade/cliProbe.js.map +1 -0
  287. package/dist/upgrade/coexistenceProbe.js +80 -0
  288. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  289. package/dist/upgrade/compatibility.js +1 -4
  290. package/dist/upgrade/compatibility.js.map +1 -1
  291. package/dist/upgrade/doctor.js +204 -170
  292. package/dist/upgrade/doctor.js.map +1 -1
  293. package/dist/upgrade/doctorClassifier.js +208 -0
  294. package/dist/upgrade/doctorClassifier.js.map +1 -0
  295. package/dist/upgrade/migrateArtifactsV2ToV3.js +6 -84
  296. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  297. package/dist/upgrade/nextMajorDoctor.js +20 -1
  298. package/dist/upgrade/nextMajorDoctor.js.map +1 -1
  299. package/dist/upgrade/npxPlatformStatus.js +24 -0
  300. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  301. package/dist/upgrade/projectIntegration.js +55 -70
  302. package/dist/upgrade/projectIntegration.js.map +1 -1
  303. package/dist/upgrade/projectIntegrationDecision.js +93 -0
  304. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  305. package/dist/upgrade/runtimeMigration.js +13 -2
  306. package/dist/upgrade/runtimeMigration.js.map +1 -1
  307. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  308. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  309. package/dist/upgrade/versionResolution.js +8 -0
  310. package/dist/upgrade/versionResolution.js.map +1 -1
  311. package/dist/validate/appHomeContract.js +3 -3
  312. package/dist/validate/appHomeContract.js.map +1 -1
  313. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +93 -0
  314. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +1 -0
  315. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +488 -0
  316. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +1 -0
  317. package/dist/validate/lifecycleAdapters/shared.js +198 -0
  318. package/dist/validate/lifecycleAdapters/shared.js.map +1 -0
  319. package/dist/validate/lifecycleAdapters.js +12 -722
  320. package/dist/validate/lifecycleAdapters.js.map +1 -1
  321. package/dist/validate/selfAudit.js +62 -20
  322. package/dist/validate/selfAudit.js.map +1 -1
  323. package/dist/validate/vocabularyAuthority.js +298 -0
  324. package/dist/validate/vocabularyAuthority.js.map +1 -0
  325. package/package.json +3 -3
  326. package/bundle/references/v1-section-mapping.md +0 -47
  327. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  328. package/bundle/skills/hej/SKILL.md +0 -69
  329. package/bundle/skills/hej/agents/hej.toml +0 -11
  330. package/bundle/skills/hej/agents/openai.yaml +0 -8
  331. package/dist/cli/commands/state.js +0 -1023
  332. package/dist/cli/commands/state.js.map +0 -1
  333. package/dist/hooks/compaction.js +0 -935
  334. package/dist/hooks/compaction.js.map +0 -1
  335. package/dist/hooks/validateArtifact.js +0 -935
  336. package/dist/hooks/validateArtifact.js.map +0 -1
@@ -0,0 +1,287 @@
1
+ import { pyJsonDumps as pyJsonDumpsCore, pyJsonString as pyJsonStringCore } from "../../core/pyjson.js";
2
+ import { hashLabel } from "./contract.js";
3
+ export const CLI_COMMAND_ARTIFACTS = {
4
+ plan: new Set(["plan"]),
5
+ progress: new Set(["progress"]),
6
+ health: new Set(["health"]),
7
+ todo: new Set(["todo"]),
8
+ decisions: new Set(["decisions"]),
9
+ docs: new Set(["docs"]),
10
+ objective: new Set(["objective"]),
11
+ experiments: new Set(["experiments"]),
12
+ hej: new Set(["plan", "progress", "health", "todo", "docs", "decisions"]),
13
+ prime: new Set(["plan", "progress", "health", "todo", "docs", "decisions", "changelog"]),
14
+ };
15
+ export const QUERY_ARTIFACTS = {
16
+ plan: "plan",
17
+ progress: "progress",
18
+ health: "health",
19
+ todo: "todo",
20
+ decisions: "decisions",
21
+ docs: "docs",
22
+ vision: "vision",
23
+ objective: "objective",
24
+ experiments: "experiments",
25
+ };
26
+ const PRIMARY_ROUTE_TO_CAPABILITY = {
27
+ build: "realisera",
28
+ plan: "planera",
29
+ status: "hej",
30
+ discuss: "resonera",
31
+ research: "inspirera",
32
+ optimize: "optimera",
33
+ audit: "inspektera",
34
+ document: "dokumentera",
35
+ profile: "profilera",
36
+ design: "visualisera",
37
+ orchestrate: "orkestrera",
38
+ vision: "visionera",
39
+ };
40
+ const CAPABILITIES_WITH_HEJ = new Set([...Object.values(PRIMARY_ROUTE_TO_CAPABILITY), "hej"]);
41
+ const MARKER_RE = /─{2,}\s+(\S)\s+([a-z]+era|hej)\s+·\s+([a-z]+(?:\s+\d+)?)\s+─{2,}/g;
42
+ const BARE_AGENTERA_ROUTE_RE = /^\s*\/agentera(?:\s+([A-Za-z0-9._:-]+))?/m;
43
+ const BARE_CAPABILITY_ROUTE_RE = /^\s*\/([a-z]+era|hej)(?:\s|$)/m;
44
+ const XML_ROUTE_RE = /<command-name>\s*\/(?:agentera\s+)?([A-Za-z0-9._:-]+)\s*<\/command-name>/;
45
+ export const THRESHOLD_WARNING_PATTERNS = [
46
+ [
47
+ "self_audit",
48
+ "verbosity",
49
+ "self_audit.verbosity",
50
+ /verbosity(?: mismatch)?|exceeds(?: the)?(?: advisory| compact)?(?: prose| word| entry)? budget|\b\d+\s+words?\s+exceeds\s+\d+\s+budget\b|full plans? exceed/i,
51
+ ],
52
+ ["self_audit", "abstraction", "self_audit.abstraction", /abstraction creep/i],
53
+ ["self_audit", "filler", "self_audit.filler", /\bfiller\s*:/i],
54
+ ["compaction", "over_limit", "compaction.uniform_10_40_50", /over(?:\s+|_)limit|uniform_10_40_50/i],
55
+ ["compaction", "protected_overflow", "compaction.protected_overflow", /protected[-_ ]overflow/i],
56
+ ];
57
+ export const POST_AUDIT_FLAG_RE = /\[post-audit-flagged(?::[^\]]*)?\]/gi;
58
+ export const BUDGET_PRESSURE_RE = THRESHOLD_WARNING_PATTERNS[0][3];
59
+ export const FULL_PLAN_BUDGET_RE = /full[- ]plan|full plans?|\bplan\b/i;
60
+ const DETAIL_ANCHOR_RE = /`[^`]+`|\b(?:[A-Za-z0-9_.-]+\/)+[A-Za-z0-9_.-]+\b|:\d{2,}\b|\b[0-9a-fA-F]{7,}\b/g;
61
+ export function inc(counter, key) {
62
+ counter[key] = (counter[key] ?? 0) + 1;
63
+ }
64
+ export function counterDict(counter) {
65
+ const out = {};
66
+ for (const key of Object.keys(counter).sort())
67
+ out[key] = counter[key];
68
+ return out;
69
+ }
70
+ export function countMatches(re, text) {
71
+ const g = new RegExp(re.source, re.flags.includes("g") ? re.flags : re.flags + "g");
72
+ let n = 0;
73
+ while (g.exec(text) !== null)
74
+ n += 1;
75
+ return n;
76
+ }
77
+ export function wordCount(text) {
78
+ return (text.match(/\S+/g) ?? []).length;
79
+ }
80
+ let _fallbackIdSeq = 0;
81
+ const _fallbackIds = new WeakMap();
82
+ export function recordLabel(record, salt) {
83
+ let key = record.source_id;
84
+ if (key === null || key === undefined || key === "") {
85
+ let id = _fallbackIds.get(record);
86
+ if (id === undefined) {
87
+ id = ++_fallbackIdSeq;
88
+ _fallbackIds.set(record, id);
89
+ }
90
+ key = id;
91
+ }
92
+ return hashLabel("record", key, salt);
93
+ }
94
+ export function extractText(record) {
95
+ const data = record.data;
96
+ if (data && typeof data === "object" && !Array.isArray(data)) {
97
+ const value = data.content || data.text || data.message || data.prompt;
98
+ return typeof value === "string" ? value : "";
99
+ }
100
+ return "";
101
+ }
102
+ export function toolArguments(record) {
103
+ const data = record.data;
104
+ if (data && typeof data === "object" && !Array.isArray(data)) {
105
+ const args = data.arguments;
106
+ if (args && typeof args === "object" && !Array.isArray(args))
107
+ return args;
108
+ if (typeof args === "string") {
109
+ try {
110
+ const parsed = JSON.parse(args);
111
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : { value: parsed };
112
+ }
113
+ catch {
114
+ return { raw: args };
115
+ }
116
+ }
117
+ return data;
118
+ }
119
+ return record;
120
+ }
121
+ export function toolName(record) {
122
+ const data = record.data;
123
+ const values = [record.tool, record.tool_name, record.name];
124
+ if (data && typeof data === "object" && !Array.isArray(data)) {
125
+ values.push(data.tool, data.tool_name, data.name);
126
+ }
127
+ for (const value of values) {
128
+ if (typeof value === "string" && value)
129
+ return value;
130
+ }
131
+ return "";
132
+ }
133
+ export function toolArgument(record, ...keys) {
134
+ const args = toolArguments(record);
135
+ const candidates = keys.map((k) => args[k]);
136
+ candidates.push(...keys.map((k) => record[k]));
137
+ for (const candidate of candidates) {
138
+ if (typeof candidate === "string" && candidate)
139
+ return candidate;
140
+ }
141
+ return "";
142
+ }
143
+ export const pyJsonString = pyJsonStringCore;
144
+ function startupJsonScalar(value) {
145
+ if (value instanceof Flt)
146
+ return formatFloat(value.v);
147
+ return undefined;
148
+ }
149
+ /** Mirror Python json.dumps(value, sort_keys=True) (separators ", "/": ", ensure_ascii). */
150
+ export function pyJsonDumps(value) {
151
+ return pyJsonDumpsCore(value, startupJsonScalar);
152
+ }
153
+ export function argumentsText(record) {
154
+ return pyJsonDumps(toolArguments(record));
155
+ }
156
+ export function introCapability(text) {
157
+ const g = new RegExp(MARKER_RE.source, "g");
158
+ let m;
159
+ while ((m = g.exec(text)) !== null) {
160
+ const word = m[3];
161
+ if (!["complete", "flagged", "stuck", "waiting"].includes(word)) {
162
+ return m[2];
163
+ }
164
+ }
165
+ return null;
166
+ }
167
+ export function routeCapability(text) {
168
+ let m = XML_ROUTE_RE.exec(text);
169
+ if (m) {
170
+ const route = m[1].toLowerCase();
171
+ return CAPABILITIES_WITH_HEJ.has(route) ? route : (PRIMARY_ROUTE_TO_CAPABILITY[route] ?? null);
172
+ }
173
+ m = BARE_AGENTERA_ROUTE_RE.exec(text);
174
+ if (m) {
175
+ const route = (m[1] || "status").toLowerCase();
176
+ return CAPABILITIES_WITH_HEJ.has(route) ? route : (PRIMARY_ROUTE_TO_CAPABILITY[route] ?? null);
177
+ }
178
+ m = BARE_CAPABILITY_ROUTE_RE.exec(text);
179
+ if (m) {
180
+ return m[1].toLowerCase();
181
+ }
182
+ return null;
183
+ }
184
+ export function capabilityInvocation(text) {
185
+ const route = routeCapability(text);
186
+ if (route)
187
+ return route;
188
+ const marker = introCapability(text);
189
+ if (marker)
190
+ return marker;
191
+ const lowered = text.toLowerCase();
192
+ for (const capability of [...CAPABILITIES_WITH_HEJ].sort()) {
193
+ if (new RegExp(`\\b${capability.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\b`).test(lowered)) {
194
+ return capability;
195
+ }
196
+ }
197
+ if (lowered.includes("agentera"))
198
+ return "agentera";
199
+ return null;
200
+ }
201
+ export function recordThresholdText(record) {
202
+ const parts = [extractText(record)];
203
+ if (record.source_kind === "tool_call")
204
+ parts.push(argumentsText(record));
205
+ return parts.filter((p) => p).join("\n");
206
+ }
207
+ export function detailMetrics(text) {
208
+ return { word_count: wordCount(text), anchor_count: countMatches(DETAIL_ANCHOR_RE, text) };
209
+ }
210
+ export function thresholdWarnings(text) {
211
+ const warnings = [];
212
+ const seen = new Set();
213
+ for (const [family, category, source, pattern] of THRESHOLD_WARNING_PATTERNS) {
214
+ if (pattern.test(text)) {
215
+ const key = `${family}\0${category}\0${source}`;
216
+ if (!seen.has(key)) {
217
+ warnings.push({ family, category, threshold_source: source });
218
+ seen.add(key);
219
+ }
220
+ }
221
+ }
222
+ return warnings;
223
+ }
224
+ export function detailLossStatus(before, after) {
225
+ if (before.word_count === 0 || after.word_count === 0)
226
+ return "not_assessed";
227
+ const wordDrop = after.word_count < before.word_count * 0.75;
228
+ const anchorDrop = after.anchor_count < before.anchor_count;
229
+ if (wordDrop && anchorDrop)
230
+ return "possible_useful_detail_removed";
231
+ if (wordDrop)
232
+ return "possible_compression_without_anchor_loss";
233
+ return "not_detected";
234
+ }
235
+ /** Python round() — round half to even on IEEE-754 doubles. */
236
+ export function pyRound(x, ndigits) {
237
+ const m = 10 ** ndigits;
238
+ const v = x * m;
239
+ const f = Math.floor(v);
240
+ const diff = v - f;
241
+ let r;
242
+ if (diff > 0.5)
243
+ r = f + 1;
244
+ else if (diff < 0.5)
245
+ r = f;
246
+ else
247
+ r = f % 2 === 0 ? f : f + 1;
248
+ return r / m;
249
+ }
250
+ /** Python float marker: serializes with a trailing .0 for whole numbers. */
251
+ export class Flt {
252
+ v;
253
+ constructor(v) {
254
+ this.v = v;
255
+ }
256
+ valueOf() {
257
+ return this.v;
258
+ }
259
+ toJSON() {
260
+ return this.v;
261
+ }
262
+ }
263
+ export function flt(n) {
264
+ return new Flt(n);
265
+ }
266
+ export function formatFloat(v) {
267
+ return Number.isInteger(v) ? `${v}.0` : String(v);
268
+ }
269
+ /** Python str()/f-string rendering for report scalars. */
270
+ export function pyFmt(value) {
271
+ if (value instanceof Flt)
272
+ return formatFloat(value.v);
273
+ if (value === null || value === undefined)
274
+ return "None";
275
+ if (value === true)
276
+ return "True";
277
+ if (value === false)
278
+ return "False";
279
+ return String(value);
280
+ }
281
+ export function safeInt(value) {
282
+ return typeof value === "number" && Number.isInteger(value) ? value : 0;
283
+ }
284
+ export function nowIsoSeconds() {
285
+ return new Date().toISOString().replace(/\.\d{3}Z$/, "+00:00");
286
+ }
287
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/state/startupAnalysis/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { TRANSCRIPT_KEYS, SESSION_KEYS, PATH_KEYS, contractPath, loadContract, hashLabel, canonicalArtifactLabel, redactForStartupOutput, parseTimestamp, formatTimestamp, } from "./contract.js";
2
+ export { THRESHOLD_EVIDENCE_ENVELOPE, THRESHOLD_CLASSIFICATION_ENVELOPE, STATE_EVENT_CLASSES, BOUNDARY_DEGRADATION_REASONS, BOUNDED_RUNTIME_STATUSES, BOUNDED_RUNTIME_REASONS, STATE_CLI_COMMANDS, classifyStartupEvent, boundedRuntimeStatus, startupConversationKey, scanThresholdEvidence, scanRetainedThresholdEvidence, classifyThresholdEvidence, } from "./threshold.js";
3
+ export { classifyStartupRecords } from "./records.js";
4
+ export { STARTUP_METRICS_ENVELOPE, TOKEN_ESTIMATOR_VERSION, aggregateStartupMetrics, } from "./metrics.js";
5
+ export { STARTUP_REPORT_MARKDOWN, STARTUP_REPORT_JSON, renderStartupReport, writeStartupReports, } from "./report.js";
6
+ export { STARTUP_INTERMEDIATE_ENVELOPE, BENCHMARK_HISTORY_JSONL, BENCHMARK_LATEST_REPORT_JSON, BENCHMARK_LATEST_REPORT_MARKDOWN, previousBenchmarkWatermark, buildBenchmarkHistoryRow, persistStartupBenchmark, buildStartupIntermediate, buildNoRuntimeStartupIntermediate, extractStartupIntermediateFromCorpusFile, } from "./benchmark.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/state/startupAnalysis/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,gCAAgC,EAChC,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,iCAAiC,EACjC,wCAAwC,GACzC,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,334 @@
1
+ import { inc, counterDict, nowIsoSeconds, flt, pyRound, safeInt, } from "./helpers.js";
2
+ import { boundedRuntimeStatus } from "./threshold.js";
3
+ export const STARTUP_METRICS_ENVELOPE = "startup_state_metrics_v1";
4
+ export const TOKEN_ESTIMATOR_VERSION = "approx_bytes_div_4_v1";
5
+ function mergeTokenEstimates(counter, value) {
6
+ if (!value || typeof value !== "object" || Array.isArray(value))
7
+ return;
8
+ for (const [label, estimate] of Object.entries(value)) {
9
+ if (typeof label === "string" && typeof estimate === "number" && Number.isInteger(estimate)) {
10
+ counter[label] = (counter[label] ?? 0) + estimate;
11
+ }
12
+ }
13
+ }
14
+ function sequenceCount(sequence, eventClass) {
15
+ const counts = sequence.counts;
16
+ if (counts && typeof counts === "object" && typeof counts[eventClass] === "number") {
17
+ return counts[eventClass];
18
+ }
19
+ return (sequence.events ?? []).filter((event) => event && typeof event === "object" && event.event_class === eventClass).length;
20
+ }
21
+ function distribution(values) {
22
+ if (values.length === 0) {
23
+ return { count: 0, min: 0, max: 0, mean: 0, p50: 0, p75: 0, histogram: {} };
24
+ }
25
+ const ordered = [...values].sort((a, b) => a - b);
26
+ const percentile = (fraction) => {
27
+ const index = Math.min(ordered.length - 1, Math.ceil(ordered.length * fraction - 1));
28
+ return ordered[Math.max(index, 0)];
29
+ };
30
+ const histCounts = {};
31
+ for (const v of ordered)
32
+ histCounts[v] = (histCounts[v] ?? 0) + 1;
33
+ const histogram = {};
34
+ for (const key of Object.keys(histCounts).map(Number).sort((a, b) => a - b)) {
35
+ histogram[String(key)] = histCounts[key];
36
+ }
37
+ return {
38
+ count: ordered.length,
39
+ min: ordered[0],
40
+ max: ordered[ordered.length - 1],
41
+ mean: flt(pyRound(ordered.reduce((a, b) => a + b, 0) / ordered.length, 2)),
42
+ p50: percentile(0.5),
43
+ p75: percentile(0.75),
44
+ histogram,
45
+ };
46
+ }
47
+ function unionAll(map) {
48
+ const out = new Set();
49
+ for (const s of Object.values(map))
50
+ for (const v of s)
51
+ out.add(v);
52
+ return out;
53
+ }
54
+ function deriveStateThresholds(args) {
55
+ const capabilityCount = Object.keys(args.perCapability).length;
56
+ const credibleDistribution = args.totalSequences >= 3;
57
+ const rawDistribution = distribution(args.rawAfterCliPerSequence);
58
+ const redundantDistribution = distribution(args.redundantRawPerSequence);
59
+ const redundantArtifacts = {};
60
+ for (const label of Object.keys(args.redundantCounts).sort()) {
61
+ const count = args.redundantCounts[label];
62
+ if (count > 0) {
63
+ redundantArtifacts[label] = {
64
+ count,
65
+ capability_count: (args.redundantCapabilities[label] ?? new Set()).size,
66
+ };
67
+ }
68
+ }
69
+ const redundantSequenceCount = args.redundantRawPerSequence.filter((v) => v > 0).length;
70
+ const aggregateRedundantCapabilities = Object.keys(args.redundantCapabilities).length > 0 ? unionAll(args.redundantCapabilities) : new Set();
71
+ let redundantSequenceThreshold;
72
+ let thresholdReason;
73
+ if (credibleDistribution) {
74
+ redundantSequenceThreshold = Math.max(2, Math.ceil(args.totalSequences * 0.2));
75
+ thresholdReason =
76
+ "Selected from post-boundary state-gathering distribution: raw artifact " +
77
+ "access after CLI state must recur in at least 20% of measured sequences, " +
78
+ "with a floor of two sequences.";
79
+ }
80
+ else {
81
+ redundantSequenceThreshold = null;
82
+ thresholdReason = "No broad-envelope threshold: fewer than three state-gathering sequences were measured.";
83
+ }
84
+ let broadTrigger = null;
85
+ if (credibleDistribution) {
86
+ for (const [label, item] of Object.entries(redundantArtifacts)) {
87
+ if (item.count >= redundantSequenceThreshold && item.capability_count >= 2) {
88
+ broadTrigger = {
89
+ event_class: "raw_artifact_access",
90
+ artifact_label: label,
91
+ count: item.count,
92
+ capability_count: item.capability_count,
93
+ threshold: redundantSequenceThreshold,
94
+ };
95
+ break;
96
+ }
97
+ }
98
+ if (broadTrigger === null && redundantSequenceCount >= redundantSequenceThreshold) {
99
+ broadTrigger = {
100
+ event_class: "raw_artifact_access",
101
+ artifact_label: "multiple",
102
+ count: redundantSequenceCount,
103
+ capability_count: aggregateRedundantCapabilities.size,
104
+ threshold: redundantSequenceThreshold,
105
+ aggregate: true,
106
+ };
107
+ }
108
+ }
109
+ let recommendation;
110
+ if (broadTrigger !== null) {
111
+ const trigger = broadTrigger.aggregate
112
+ ? `redundant_raw_artifact_access in ${broadTrigger.count} of ${args.totalSequences} state sequences`
113
+ : `raw_artifact_access_after_cli:${broadTrigger.artifact_label} repeated ` +
114
+ `${broadTrigger.count} times across ${broadTrigger.capability_count} capabilities`;
115
+ recommendation = {
116
+ action: "plan_cli_startup_envelope",
117
+ measured_trigger: trigger,
118
+ rationale: "Raw artifact access after CLI state exceeded the broad startup-envelope threshold.",
119
+ };
120
+ }
121
+ else if (Object.keys(redundantArtifacts).length > 0) {
122
+ recommendation = {
123
+ action: "targeted_capability_guidance_fixes",
124
+ measured_trigger: "raw_artifact_access_after_cli_hotspot",
125
+ rationale: "Raw artifact access follows CLI state, but evidence is narrow or below the broad-envelope gate.",
126
+ };
127
+ }
128
+ else {
129
+ recommendation = {
130
+ action: "close_without_implementation",
131
+ measured_trigger: "none",
132
+ rationale: "No raw artifact access after overlapping CLI state was measured.",
133
+ };
134
+ }
135
+ if (args.confidenceCaveats.includes("insufficient_post_2_3_state_sequences")) {
136
+ recommendation = {
137
+ action: "close_without_implementation",
138
+ measured_trigger: "weak_evidence",
139
+ rationale: "No post-boundary Agentera state-gathering sequences were available.",
140
+ };
141
+ }
142
+ return {
143
+ measured_distribution: {
144
+ raw_after_cli_per_sequence: rawDistribution,
145
+ redundant_raw_after_cli_per_sequence: redundantDistribution,
146
+ redundant_sequence_count: redundantSequenceCount,
147
+ redundant_artifacts: redundantArtifacts,
148
+ capability_count: capabilityCount,
149
+ },
150
+ action_thresholds: {
151
+ startup_envelope: {
152
+ credible: credibleDistribution,
153
+ redundant_sequence_threshold: redundantSequenceThreshold,
154
+ selection_reason: thresholdReason,
155
+ },
156
+ targeted_guidance: {
157
+ credible: Object.keys(redundantArtifacts).length > 0,
158
+ selection_reason: "Selected when raw artifact access after CLI state is narrow or below the broad-envelope threshold.",
159
+ },
160
+ },
161
+ recommendation,
162
+ };
163
+ }
164
+ export function aggregateStartupMetrics(intermediateInput) {
165
+ const intermediate = intermediateInput && typeof intermediateInput === "object" && !Array.isArray(intermediateInput) ? intermediateInput : {};
166
+ const sequences = Array.isArray(intermediate.state_gathering_sequences) ? intermediate.state_gathering_sequences : [];
167
+ const degradations = Array.isArray(intermediate.degradations) ? intermediate.degradations : [];
168
+ const perCapability = {};
169
+ const cliCommandCounts = {};
170
+ const rawAfterCliCounts = {};
171
+ const redundantRawCounts = {};
172
+ const rawAfterCliTokenEstimates = {};
173
+ const redundantRawTokenEstimates = {};
174
+ const proseCounts = {};
175
+ const implementationCounts = {};
176
+ const degradationCounts = {};
177
+ const redundantCapabilities = {};
178
+ const rawAfterCliPerSequence = [];
179
+ const redundantRawPerSequence = [];
180
+ for (const item of degradations) {
181
+ if (item && typeof item === "object" && typeof item.reason === "string") {
182
+ inc(degradationCounts, item.reason);
183
+ }
184
+ }
185
+ for (const sequence of sequences) {
186
+ if (!sequence || typeof sequence !== "object" || Array.isArray(sequence))
187
+ continue;
188
+ let capability = sequence.capability;
189
+ if (typeof capability !== "string" || !capability)
190
+ capability = "unknown";
191
+ if (!(capability in perCapability)) {
192
+ perCapability[capability] = {
193
+ state_sequences: 0,
194
+ cli_state_call: 0,
195
+ raw_artifact_access_after_cli: 0,
196
+ redundant_raw_artifact_access: 0,
197
+ capability_prose_read: 0,
198
+ implementation_boundary: 0,
199
+ };
200
+ }
201
+ const cc = perCapability[capability];
202
+ cc.state_sequences += 1;
203
+ const cliCount = sequenceCount(sequence, "cli_state_call");
204
+ const rawCount = (sequence.raw_artifact_labels_after_cli ?? []).length;
205
+ const redundantCount = (sequence.redundant_raw_artifact_labels ?? []).length;
206
+ const proseCount = sequenceCount(sequence, "capability_prose_read");
207
+ const implCount = sequenceCount(sequence, "implementation_boundary");
208
+ cc.cli_state_call += cliCount;
209
+ cc.raw_artifact_access_after_cli += rawCount;
210
+ cc.redundant_raw_artifact_access += redundantCount;
211
+ cc.capability_prose_read += proseCount;
212
+ cc.implementation_boundary += implCount;
213
+ proseCounts[capability] = (proseCounts[capability] ?? 0) + proseCount;
214
+ implementationCounts[capability] = (implementationCounts[capability] ?? 0) + implCount;
215
+ rawAfterCliPerSequence.push(rawCount);
216
+ redundantRawPerSequence.push(redundantCount);
217
+ mergeTokenEstimates(rawAfterCliTokenEstimates, sequence.estimated_raw_after_cli_tokens_by_artifact);
218
+ mergeTokenEstimates(redundantRawTokenEstimates, sequence.estimated_redundant_raw_tokens_by_artifact);
219
+ for (const event of sequence.events ?? []) {
220
+ if (!event || typeof event !== "object")
221
+ continue;
222
+ const stateCommand = event.state_command;
223
+ if (event.event_class === "cli_state_call" && typeof stateCommand === "string") {
224
+ inc(cliCommandCounts, stateCommand);
225
+ }
226
+ const label = event.artifact_label;
227
+ if (event.event_class === "raw_artifact_access" && typeof label === "string") {
228
+ inc(rawAfterCliCounts, label);
229
+ if (event.redundant_with_cli === true) {
230
+ inc(redundantRawCounts, label);
231
+ if (!(label in redundantCapabilities))
232
+ redundantCapabilities[label] = new Set();
233
+ redundantCapabilities[label].add(capability);
234
+ }
235
+ }
236
+ }
237
+ for (const reason of sequence.degradation_reasons ?? []) {
238
+ if (typeof reason === "string")
239
+ inc(degradationCounts, reason);
240
+ }
241
+ }
242
+ const totalSequences = sequences.filter((s) => s && typeof s === "object" && !Array.isArray(s)).length;
243
+ let runtimeCoverage = Array.isArray(intermediate.runtime_coverage) ? intermediate.runtime_coverage : [];
244
+ runtimeCoverage = runtimeCoverage
245
+ .filter((s) => s && typeof s === "object" && !Array.isArray(s))
246
+ .map((s) => boundedRuntimeStatus(s));
247
+ const runtimeStatusCounts = {};
248
+ for (const status of runtimeCoverage) {
249
+ if (status && typeof status === "object" && typeof status.status === "string")
250
+ inc(runtimeStatusCounts, status.status);
251
+ }
252
+ const confidenceCaveats = [];
253
+ if (totalSequences === 0)
254
+ confidenceCaveats.push("insufficient_post_2_3_state_sequences");
255
+ if (runtimeCoverage.some((s) => s && typeof s === "object" && ["missing", "sparse", "degraded", "skipped"].includes(s.status))) {
256
+ confidenceCaveats.push("runtime_coverage_incomplete_or_degraded");
257
+ }
258
+ if (Object.keys(degradationCounts).length > 0)
259
+ confidenceCaveats.push("some_records_or_sequences_degraded");
260
+ const thresholdDerivation = deriveStateThresholds({
261
+ totalSequences,
262
+ perCapability,
263
+ rawAfterCliPerSequence,
264
+ redundantRawPerSequence,
265
+ redundantCounts: redundantRawCounts,
266
+ redundantCapabilities,
267
+ confidenceCaveats,
268
+ });
269
+ const sequencesWithRaw = rawAfterCliPerSequence.filter((v) => v > 0).length;
270
+ const sequencesWithRedundant = redundantRawPerSequence.filter((v) => v > 0).length;
271
+ const recommendation = thresholdDerivation.recommendation;
272
+ const sortedPerCapability = {};
273
+ for (const key of Object.keys(perCapability).sort())
274
+ sortedPerCapability[key] = perCapability[key];
275
+ const sumValues = (o) => Object.values(o).reduce((a, b) => a + b, 0);
276
+ const result = {
277
+ output_envelope: STARTUP_METRICS_ENVELOPE,
278
+ input_envelope: intermediate.output_envelope ?? null,
279
+ contract_version: intermediate.contract_version ?? null,
280
+ generated_at: nowIsoSeconds(),
281
+ boundary_source: intermediate.boundary_source ?? null,
282
+ boundary_commit: intermediate.boundary_commit ?? null,
283
+ boundary_committed_at: intermediate.boundary_committed_at ?? null,
284
+ benchmark_mode: intermediate.benchmark_mode || "full_boundary_snapshot",
285
+ benchmark_previous_watermark_at: intermediate.benchmark_previous_watermark_at ?? null,
286
+ benchmark_window_started_after: intermediate.benchmark_window_started_after ?? null,
287
+ benchmark_watermark_at: intermediate.benchmark_watermark_at ?? null,
288
+ corpus_adapter_version: intermediate.corpus_adapter_version ?? null,
289
+ runtime_coverage: runtimeCoverage,
290
+ runtime_status_counts: counterDict(runtimeStatusCounts),
291
+ runtime_record_counts: intermediate.runtime_record_counts || {},
292
+ total_records: safeInt(intermediate.total_records_read),
293
+ total_state_sequences: totalSequences,
294
+ state_sequences_with_raw_after_cli: sequencesWithRaw,
295
+ state_sequences_with_redundant_raw_access: sequencesWithRedundant,
296
+ total_cli_state_calls: sumValues(cliCommandCounts),
297
+ total_raw_artifact_access_after_cli: sumValues(rawAfterCliCounts),
298
+ total_redundant_raw_artifact_accesses: sumValues(redundantRawCounts),
299
+ raw_after_cli_sequence_rate: totalSequences ? flt(pyRound(sequencesWithRaw / totalSequences, 4)) : 0,
300
+ redundant_raw_sequence_rate: totalSequences ? flt(pyRound(sequencesWithRedundant / totalSequences, 4)) : 0,
301
+ per_capability_state_counts: sortedPerCapability,
302
+ cli_state_command_counts: counterDict(cliCommandCounts),
303
+ raw_artifact_access_after_cli_counts: counterDict(rawAfterCliCounts),
304
+ redundant_raw_artifact_access_counts: counterDict(redundantRawCounts),
305
+ token_estimator_version: TOKEN_ESTIMATOR_VERSION,
306
+ estimated_raw_after_cli_tokens: sumValues(rawAfterCliTokenEstimates),
307
+ estimated_redundant_raw_tokens: sumValues(redundantRawTokenEstimates),
308
+ estimated_raw_after_cli_tokens_by_artifact: counterDict(rawAfterCliTokenEstimates),
309
+ estimated_redundant_raw_tokens_by_artifact: counterDict(redundantRawTokenEstimates),
310
+ estimated_tokens_saved_vs_previous: null,
311
+ estimated_tokens_saved_vs_previous_null_reason: "previous_row_missing",
312
+ capability_prose_read_counts: counterDict(proseCounts),
313
+ implementation_boundary_counts: counterDict(implementationCounts),
314
+ degradation_reason_counts: counterDict(degradationCounts),
315
+ privacy_redaction_summary: {
316
+ raw_transcript_text: "not_emitted",
317
+ full_local_paths: "not_emitted",
318
+ raw_store_paths: "not_emitted",
319
+ session_ids: "salted_or_not_emitted",
320
+ artifact_labels: "canonical_only",
321
+ },
322
+ confidence_caveats: confidenceCaveats,
323
+ insufficient_evidence_reason: totalSequences === 0 ? "no_post_2_3_state_sequences" : null,
324
+ threshold_derivation: thresholdDerivation,
325
+ startup_recommendation: recommendation,
326
+ implementation_recommended: recommendation.action === "plan_cli_startup_envelope",
327
+ compatibility_note: "Section 22 corpus records are read-only; aggregation consumes only startup_state_analysis_v1.",
328
+ };
329
+ if (totalSequences) {
330
+ result.recommendation_gate_input = thresholdDerivation.measured_distribution;
331
+ }
332
+ return result;
333
+ }
334
+ //# sourceMappingURL=metrics.js.map