agentera 3.0.0-dev.2 → 3.0.0-dev.21

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 (698) hide show
  1. package/README.md +84 -6
  2. package/bundle/.agentera-npx-bundle.json +1 -1
  3. package/bundle/.codex-plugin/plugin.json +92 -0
  4. package/bundle/.cursor/agents/agentera.md +7 -0
  5. package/bundle/.cursor/hooks.json +32 -0
  6. package/bundle/.cursor-plugin/plugin.json +34 -0
  7. package/bundle/.github/hooks/postToolUse.json +9 -0
  8. package/bundle/.github/hooks/preToolUse.json +8 -0
  9. package/bundle/.github/hooks/sessionEnd.json +8 -0
  10. package/bundle/.github/hooks/sessionStart.json +8 -0
  11. package/bundle/.github/plugin/plugin.json +7 -0
  12. package/bundle/.opencode/agents/agentera.md +12 -0
  13. package/bundle/.opencode/commands/agentera.md +5 -0
  14. package/bundle/.opencode/package.json +31 -0
  15. package/bundle/.opencode/plugins/agentera.js +820 -0
  16. package/bundle/CHANGELOG.md +1101 -0
  17. package/bundle/DESIGN.md +233 -0
  18. package/bundle/LICENSE +201 -0
  19. package/bundle/README.md +158 -0
  20. package/bundle/UPGRADE.md +265 -0
  21. package/bundle/agents/openai.yaml +87 -0
  22. package/bundle/extract-corpus-parity.json +21 -0
  23. package/bundle/hooks/codex-hooks.json +31 -0
  24. package/bundle/hooks/codex-plugin-hooks.json +31 -0
  25. package/bundle/plugin.json +13 -0
  26. package/bundle/references/adapters/cursor.md +53 -42
  27. package/bundle/references/adapters/opencode.md +46 -47
  28. package/bundle/references/adapters/package-manifest-interface-model.yaml +32 -43
  29. package/bundle/references/adapters/package-registry.yaml +19 -53
  30. package/bundle/references/adapters/package-surface-characterization.md +55 -35
  31. package/bundle/references/adapters/runtime-adapter-characterization.md +44 -79
  32. package/bundle/references/adapters/runtime-adapter-registry.yaml +21 -182
  33. package/bundle/references/adapters/runtime-feature-parity.md +114 -174
  34. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +288 -0
  35. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +90 -0
  36. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  37. package/bundle/references/adapters/runtime-retired-resources.yaml +33 -0
  38. package/bundle/references/analysis/benchmark.md +6 -6
  39. package/bundle/references/analysis/startup-measurement-contract.yaml +37 -26
  40. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +9 -8
  41. package/bundle/references/artifacts/state-storage-authority.yaml +1446 -0
  42. package/bundle/references/cli/agent-ready-state-contract.yaml +37 -62
  43. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +4 -4
  44. package/bundle/references/cli/audience-namespace-cli-migration.yaml +57 -28
  45. package/bundle/references/cli/bundle-skill-vocabulary.yaml +4 -32
  46. package/bundle/references/cli/capability-instruction-contract.yaml +98 -57
  47. package/bundle/references/cli/capability-instruction-structure.md +144 -0
  48. package/bundle/references/cli/capability-tool-classification.yaml +12 -12
  49. package/bundle/references/cli/coexistence-probe.yaml +13 -0
  50. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  51. package/bundle/references/cli/routing-execution-vocabulary.yaml +12 -12
  52. package/bundle/references/cli/routing-model.md +94 -0
  53. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  54. package/bundle/references/cli/trigger-schema-enrichment.md +136 -0
  55. package/bundle/references/cli/update-channels.yaml +43 -7
  56. package/bundle/references/cli/upgrade-repair-wording.md +45 -0
  57. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +98 -0
  58. package/bundle/references/cli/vocabulary-index.yaml +20 -15
  59. package/bundle/references/cli/vocabulary.md +342 -326
  60. package/bundle/references/meta/documentation-inventory.md +10 -3
  61. package/bundle/registry.json +14 -14
  62. package/bundle/skills/agentera/SKILL.md +136 -408
  63. package/bundle/skills/agentera/agents/audit.toml +6 -0
  64. package/bundle/skills/agentera/agents/build.toml +6 -0
  65. package/bundle/skills/agentera/agents/design.toml +6 -0
  66. package/bundle/skills/agentera/agents/discuss.toml +6 -0
  67. package/bundle/skills/agentera/agents/document.toml +6 -0
  68. package/bundle/skills/agentera/agents/optimize.toml +6 -0
  69. package/bundle/skills/agentera/agents/orchestrate.toml +6 -0
  70. package/bundle/skills/agentera/agents/plan.toml +6 -0
  71. package/bundle/skills/agentera/agents/profile.toml +6 -0
  72. package/bundle/skills/agentera/agents/research.toml +6 -0
  73. package/bundle/skills/agentera/agents/status.toml +6 -0
  74. package/bundle/skills/agentera/agents/vision.toml +6 -0
  75. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  76. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  77. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/triggers.yaml +15 -6
  78. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +20 -19
  79. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/artifacts.yaml +22 -17
  80. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +3 -3
  81. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/triggers.yaml +13 -3
  82. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/validation.yaml +11 -11
  83. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +6 -6
  84. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  85. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/triggers.yaml +15 -3
  86. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  87. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +49 -0
  88. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  89. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/triggers.yaml +11 -3
  90. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/validation.yaml +9 -8
  91. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/artifacts.yaml +23 -16
  92. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/triggers.yaml +14 -4
  93. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  94. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +9 -9
  95. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  96. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/triggers.yaml +11 -3
  97. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  98. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +71 -0
  99. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +7 -6
  100. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/triggers.yaml +16 -3
  101. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +120 -0
  102. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +63 -0
  103. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  104. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/triggers.yaml +15 -3
  105. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +89 -0
  106. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/artifacts.yaml +2 -2
  107. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +3 -3
  108. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/triggers.yaml +7 -3
  109. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/validation.yaml +2 -2
  110. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  111. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/triggers.yaml +9 -3
  112. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  113. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/artifacts.yaml +14 -11
  114. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/triggers.yaml +12 -8
  115. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  116. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +8 -8
  117. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  118. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/triggers.yaml +19 -5
  119. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  120. package/bundle/skills/agentera/capability_schema_contract.yaml +201 -38
  121. package/bundle/skills/agentera/protocol.yaml +29 -29
  122. package/bundle/skills/agentera/references/contract.md +387 -329
  123. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +4 -4
  124. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +25 -20
  125. package/bundle/skills/agentera/schemas/artifacts/design.yaml +4 -4
  126. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +8 -7
  127. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +139 -8
  128. package/bundle/skills/agentera/schemas/artifacts/health.yaml +21 -15
  129. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  130. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +285 -11
  131. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +36 -51
  132. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +77 -24
  133. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  134. package/dist/analytics/extractCorpus/cli.js +163 -0
  135. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  136. package/dist/analytics/extractCorpus/copilotSessions.js +276 -0
  137. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  138. package/dist/analytics/extractCorpus/core.js +393 -0
  139. package/dist/analytics/extractCorpus/core.js.map +1 -0
  140. package/dist/analytics/extractCorpus/corpus.js +168 -0
  141. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  142. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  143. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  144. package/dist/analytics/extractCorpus/cursorSessions.js +426 -0
  145. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  146. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  147. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  148. package/dist/analytics/extractCorpus/filesystemSources.js +119 -0
  149. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  150. package/dist/analytics/extractCorpus/index.js +12 -0
  151. package/dist/analytics/extractCorpus/index.js.map +1 -0
  152. package/dist/analytics/extractCorpus/jsonlSessions.js +205 -0
  153. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  154. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  155. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  156. package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
  157. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  158. package/dist/analytics/extractCorpus.js +2 -1790
  159. package/dist/analytics/extractCorpus.js.map +1 -1
  160. package/dist/analytics/usageStats.js +93 -27
  161. package/dist/analytics/usageStats.js.map +1 -1
  162. package/dist/bin/agentera.js +3 -1
  163. package/dist/bin/agentera.js.map +1 -1
  164. package/dist/capabilities/audit/instructions.js +4 -0
  165. package/dist/capabilities/audit/instructions.js.map +1 -0
  166. package/dist/capabilities/build/instructions.js +5 -0
  167. package/dist/capabilities/build/instructions.js.map +1 -0
  168. package/dist/capabilities/design/instructions.js +5 -0
  169. package/dist/capabilities/design/instructions.js.map +1 -0
  170. package/dist/capabilities/discuss/instructions.js +6 -0
  171. package/dist/capabilities/discuss/instructions.js.map +1 -0
  172. package/dist/capabilities/document/instructions.js +4 -0
  173. package/dist/capabilities/document/instructions.js.map +1 -0
  174. package/dist/capabilities/index.js +38 -0
  175. package/dist/capabilities/index.js.map +1 -0
  176. package/dist/capabilities/optimize/instructions.js +5 -0
  177. package/dist/capabilities/optimize/instructions.js.map +1 -0
  178. package/dist/capabilities/orchestrate/instructions.js +10 -0
  179. package/dist/capabilities/orchestrate/instructions.js.map +1 -0
  180. package/dist/capabilities/plan/instructions.js +6 -0
  181. package/dist/capabilities/plan/instructions.js.map +1 -0
  182. package/dist/capabilities/profile/instructions.js +5 -0
  183. package/dist/capabilities/profile/instructions.js.map +1 -0
  184. package/dist/capabilities/research/instructions.js +6 -0
  185. package/dist/capabilities/research/instructions.js.map +1 -0
  186. package/dist/capabilities/status/instructions.js +5 -0
  187. package/dist/capabilities/status/instructions.js.map +1 -0
  188. package/dist/capabilities/vision/instructions.js +5 -0
  189. package/dist/capabilities/vision/instructions.js.map +1 -0
  190. package/dist/cli/appContext.js +30 -23
  191. package/dist/cli/appContext.js.map +1 -1
  192. package/dist/cli/capabilityContext/benchmark.js +564 -0
  193. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  194. package/dist/cli/capabilityContext/bespoke.js +38 -0
  195. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  196. package/dist/cli/capabilityContext/build.js +191 -0
  197. package/dist/cli/capabilityContext/build.js.map +1 -0
  198. package/dist/cli/capabilityContext/closeout.js +231 -0
  199. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  200. package/dist/cli/capabilityContext/contract.js +219 -0
  201. package/dist/cli/capabilityContext/contract.js.map +1 -0
  202. package/dist/cli/capabilityContext/evidence.js +457 -0
  203. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  204. package/dist/cli/capabilityContext/index.js +4 -0
  205. package/dist/cli/capabilityContext/index.js.map +1 -0
  206. package/dist/cli/capabilityContext/orchestration.js +118 -0
  207. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  208. package/dist/cli/capabilityContext/planState.js +279 -0
  209. package/dist/cli/capabilityContext/planState.js.map +1 -0
  210. package/dist/cli/capabilityContext/progress.js +143 -0
  211. package/dist/cli/capabilityContext/progress.js.map +1 -0
  212. package/dist/cli/capabilityContext/shared.js +94 -0
  213. package/dist/cli/capabilityContext/shared.js.map +1 -0
  214. package/dist/cli/capabilityContext/slim.js +139 -0
  215. package/dist/cli/capabilityContext/slim.js.map +1 -0
  216. package/dist/cli/capabilityContext/startup.js +241 -0
  217. package/dist/cli/capabilityContext/startup.js.map +1 -0
  218. package/dist/cli/capabilityContext/types.js +51 -0
  219. package/dist/cli/capabilityContext/types.js.map +1 -0
  220. package/dist/cli/capabilityContext.js +1 -2420
  221. package/dist/cli/capabilityContext.js.map +1 -1
  222. package/dist/cli/commands/appHome.js +23 -0
  223. package/dist/cli/commands/appHome.js.map +1 -0
  224. package/dist/cli/commands/backfill.js +186 -76
  225. package/dist/cli/commands/backfill.js.map +1 -1
  226. package/dist/cli/commands/capability.js +3 -10
  227. package/dist/cli/commands/capability.js.map +1 -1
  228. package/dist/cli/commands/compact.js +41 -12
  229. package/dist/cli/commands/compact.js.map +1 -1
  230. package/dist/cli/commands/doctor.js +116 -96
  231. package/dist/cli/commands/doctor.js.map +1 -1
  232. package/dist/cli/commands/durability.js +85 -0
  233. package/dist/cli/commands/durability.js.map +1 -0
  234. package/dist/cli/commands/lint.js +16 -41
  235. package/dist/cli/commands/lint.js.map +1 -1
  236. package/dist/cli/commands/migrate.js +677 -0
  237. package/dist/cli/commands/migrate.js.map +1 -0
  238. package/dist/cli/commands/prime/bundleStatus.js +185 -0
  239. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  240. package/dist/cli/commands/prime/collectOrientationState.js +202 -0
  241. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  242. package/dist/cli/commands/prime/orientationOutput.js +235 -0
  243. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  244. package/dist/cli/commands/prime/types.js +2 -0
  245. package/dist/cli/commands/prime/types.js.map +1 -0
  246. package/dist/cli/commands/prime/v1Migration.js +39 -0
  247. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  248. package/dist/cli/commands/prime.js +11 -519
  249. package/dist/cli/commands/prime.js.map +1 -1
  250. package/dist/cli/commands/query.js +25 -4
  251. package/dist/cli/commands/query.js.map +1 -1
  252. package/dist/cli/commands/report.js +50 -14
  253. package/dist/cli/commands/report.js.map +1 -1
  254. package/dist/cli/commands/schema.js +343 -76
  255. package/dist/cli/commands/schema.js.map +1 -1
  256. package/dist/cli/commands/state/decisions.js +421 -0
  257. package/dist/cli/commands/state/decisions.js.map +1 -0
  258. package/dist/cli/commands/state/docs.js +97 -0
  259. package/dist/cli/commands/state/docs.js.map +1 -0
  260. package/dist/cli/commands/state/experimentRecords.js +156 -0
  261. package/dist/cli/commands/state/experimentRecords.js.map +1 -0
  262. package/dist/cli/commands/state/experiments.js +68 -0
  263. package/dist/cli/commands/state/experiments.js.map +1 -0
  264. package/dist/cli/commands/state/get.js +141 -0
  265. package/dist/cli/commands/state/get.js.map +1 -0
  266. package/dist/cli/commands/state/health.js +116 -0
  267. package/dist/cli/commands/state/health.js.map +1 -0
  268. package/dist/cli/commands/state/index.js +51 -0
  269. package/dist/cli/commands/state/index.js.map +1 -0
  270. package/dist/cli/commands/state/list.js +159 -0
  271. package/dist/cli/commands/state/list.js.map +1 -0
  272. package/dist/cli/commands/state/objective.js +69 -0
  273. package/dist/cli/commands/state/objective.js.map +1 -0
  274. package/dist/cli/commands/state/plan.js +379 -0
  275. package/dist/cli/commands/state/plan.js.map +1 -0
  276. package/dist/cli/commands/state/planTasks.js +164 -0
  277. package/dist/cli/commands/state/planTasks.js.map +1 -0
  278. package/dist/cli/commands/state/plans.js +154 -0
  279. package/dist/cli/commands/state/plans.js.map +1 -0
  280. package/dist/cli/commands/state/progress.js +47 -0
  281. package/dist/cli/commands/state/progress.js.map +1 -0
  282. package/dist/cli/commands/state/shared.js +15 -0
  283. package/dist/cli/commands/state/shared.js.map +1 -0
  284. package/dist/cli/commands/state/todo.js +121 -0
  285. package/dist/cli/commands/state/todo.js.map +1 -0
  286. package/dist/cli/commands/state/write.js +346 -0
  287. package/dist/cli/commands/state/write.js.map +1 -0
  288. package/dist/cli/commands/upgrade.js +79 -1
  289. package/dist/cli/commands/upgrade.js.map +1 -1
  290. package/dist/cli/commands/upgradeVerify.js +81 -0
  291. package/dist/cli/commands/upgradeVerify.js.map +1 -0
  292. package/dist/cli/commands/validate.js +56 -96
  293. package/dist/cli/commands/validate.js.map +1 -1
  294. package/dist/cli/commands/verify.js +13 -7
  295. package/dist/cli/commands/verify.js.map +1 -1
  296. package/dist/cli/contracts/bundleStatus.js +2 -0
  297. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  298. package/dist/cli/contracts/orientationState.js +2 -0
  299. package/dist/cli/contracts/orientationState.js.map +1 -0
  300. package/dist/cli/dispatch/argvParser.js +33 -0
  301. package/dist/cli/dispatch/argvParser.js.map +1 -0
  302. package/dist/cli/dispatch/check.js +395 -0
  303. package/dist/cli/dispatch/check.js.map +1 -0
  304. package/dist/cli/dispatch/commands.js +27 -0
  305. package/dist/cli/dispatch/commands.js.map +1 -0
  306. package/dist/cli/dispatch/index.js +201 -0
  307. package/dist/cli/dispatch/index.js.map +1 -0
  308. package/dist/cli/dispatch/lifecycle.js +671 -0
  309. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  310. package/dist/cli/dispatch/prime.js +104 -0
  311. package/dist/cli/dispatch/prime.js.map +1 -0
  312. package/dist/cli/dispatch/shared.js +64 -0
  313. package/dist/cli/dispatch/shared.js.map +1 -0
  314. package/dist/cli/dispatch/state.js +168 -0
  315. package/dist/cli/dispatch/state.js.map +1 -0
  316. package/dist/cli/dispatch.js +1 -957
  317. package/dist/cli/dispatch.js.map +1 -1
  318. package/dist/cli/errors.js +53 -0
  319. package/dist/cli/errors.js.map +1 -0
  320. package/dist/cli/help.js +421 -0
  321. package/dist/cli/help.js.map +1 -0
  322. package/dist/cli/orientation/attention.js +163 -0
  323. package/dist/cli/orientation/attention.js.map +1 -0
  324. package/dist/cli/orientation/corpusCoverage.js +71 -0
  325. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  326. package/dist/cli/orientation.js +336 -144
  327. package/dist/cli/orientation.js.map +1 -1
  328. package/dist/cli/planArtifacts.js +201 -0
  329. package/dist/cli/planArtifacts.js.map +1 -0
  330. package/dist/cli/planEvidence.js +158 -0
  331. package/dist/cli/planEvidence.js.map +1 -0
  332. package/dist/cli/planLifecycleState.js +34 -0
  333. package/dist/cli/planLifecycleState.js.map +1 -0
  334. package/dist/cli/prime-blob.js +69 -2
  335. package/dist/cli/prime-blob.js.map +1 -1
  336. package/dist/cli/startupCompletenessContract.js +57 -0
  337. package/dist/cli/startupCompletenessContract.js.map +1 -0
  338. package/dist/cli/stateQuery.js +22 -5
  339. package/dist/cli/stateQuery.js.map +1 -1
  340. package/dist/cli/todoMarkdown.js +33 -0
  341. package/dist/cli/todoMarkdown.js.map +1 -0
  342. package/dist/cli/todoSeverity.js +19 -0
  343. package/dist/cli/todoSeverity.js.map +1 -0
  344. package/dist/core/atomicWriter.js +21 -0
  345. package/dist/core/atomicWriter.js.map +1 -0
  346. package/dist/core/envPaths.js +21 -0
  347. package/dist/core/envPaths.js.map +1 -0
  348. package/dist/core/jsonValue.js +6 -0
  349. package/dist/core/jsonValue.js.map +1 -0
  350. package/dist/core/pyjson.js +67 -2
  351. package/dist/core/pyjson.js.map +1 -1
  352. package/dist/core/text.js +11 -0
  353. package/dist/core/text.js.map +1 -0
  354. package/dist/core/yaml.js +8 -0
  355. package/dist/core/yaml.js.map +1 -1
  356. package/dist/eval/evalSkills.js +30 -25
  357. package/dist/eval/evalSkills.js.map +1 -1
  358. package/dist/eval/semanticEval.js +43 -19
  359. package/dist/eval/semanticEval.js.map +1 -1
  360. package/dist/eval/semanticFixtures.js +16 -4
  361. package/dist/eval/semanticFixtures.js.map +1 -1
  362. package/dist/hooks/common.js +9 -26
  363. package/dist/hooks/common.js.map +1 -1
  364. package/dist/hooks/compaction/apply.js +447 -0
  365. package/dist/hooks/compaction/apply.js.map +1 -0
  366. package/dist/hooks/compaction/dryRun.js +185 -0
  367. package/dist/hooks/compaction/dryRun.js.map +1 -0
  368. package/dist/hooks/compaction/index.js +23 -0
  369. package/dist/hooks/compaction/index.js.map +1 -0
  370. package/dist/hooks/compaction/parse.js +326 -0
  371. package/dist/hooks/compaction/parse.js.map +1 -0
  372. package/dist/hooks/compaction/retention.js +203 -0
  373. package/dist/hooks/compaction/retention.js.map +1 -0
  374. package/dist/hooks/compaction/status.js +336 -0
  375. package/dist/hooks/compaction/status.js.map +1 -0
  376. package/dist/hooks/compaction/types.js +6 -0
  377. package/dist/hooks/compaction/types.js.map +1 -0
  378. package/dist/hooks/cursorPreToolUse.js +1 -1
  379. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  380. package/dist/hooks/cursorSessionStart.js +10 -2
  381. package/dist/hooks/cursorSessionStart.js.map +1 -1
  382. package/dist/hooks/sessionStart.js +57 -18
  383. package/dist/hooks/sessionStart.js.map +1 -1
  384. package/dist/hooks/sessionStop.js +8 -14
  385. package/dist/hooks/sessionStop.js.map +1 -1
  386. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  387. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  388. package/dist/hooks/validateArtifact/index.js +151 -0
  389. package/dist/hooks/validateArtifact/index.js.map +1 -0
  390. package/dist/hooks/validateArtifact/markdown.js +146 -0
  391. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  392. package/dist/hooks/validateArtifact/runtime.js +86 -0
  393. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  394. package/dist/hooks/validateArtifact/schema.js +541 -0
  395. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  396. package/dist/hooks/validateArtifact/traversal.js +108 -0
  397. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  398. package/dist/hooks/validateArtifact/violations.js +108 -0
  399. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  400. package/dist/migrate/v2HandoffManifest.js +455 -0
  401. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  402. package/dist/registries/artifactProtocolIds.js +77 -0
  403. package/dist/registries/artifactProtocolIds.js.map +1 -0
  404. package/dist/registries/artifactRegistry.js +203 -53
  405. package/dist/registries/artifactRegistry.js.map +1 -1
  406. package/dist/registries/capabilityContract.js +156 -12
  407. package/dist/registries/capabilityContract.js.map +1 -1
  408. package/dist/registries/evaluatorHandoffContract.js +171 -0
  409. package/dist/registries/evaluatorHandoffContract.js.map +1 -0
  410. package/dist/registries/packageRegistry.js +40 -6
  411. package/dist/registries/packageRegistry.js.map +1 -1
  412. package/dist/registries/runtimeAdapterRegistry.js +30 -21
  413. package/dist/registries/runtimeAdapterRegistry.js.map +1 -1
  414. package/dist/registries/triggerLoader.js +211 -0
  415. package/dist/registries/triggerLoader.js.map +1 -0
  416. package/dist/release/releaseMetadata.js +329 -0
  417. package/dist/release/releaseMetadata.js.map +1 -0
  418. package/dist/runtime/lifecycleAdapterContract.js +458 -0
  419. package/dist/runtime/lifecycleAdapterContract.js.map +1 -0
  420. package/dist/runtime/lifecycleAdapters.js +766 -0
  421. package/dist/runtime/lifecycleAdapters.js.map +1 -0
  422. package/dist/runtime/lifecycleAuthority.js +493 -0
  423. package/dist/runtime/lifecycleAuthority.js.map +1 -0
  424. package/dist/runtime/lifecycleOperationContract.js +113 -0
  425. package/dist/runtime/lifecycleOperationContract.js.map +1 -0
  426. package/dist/runtime/lifecycleOperations.js +635 -0
  427. package/dist/runtime/lifecycleOperations.js.map +1 -0
  428. package/dist/runtime/lifecycleOwnershipJournal.js +623 -0
  429. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -0
  430. package/dist/runtime/lifecyclePublication.js +395 -0
  431. package/dist/runtime/lifecyclePublication.js.map +1 -0
  432. package/dist/runtime/lifecycleSnapshot.js +439 -0
  433. package/dist/runtime/lifecycleSnapshot.js.map +1 -0
  434. package/dist/runtime/retiredRuntimeCleanup.js +238 -0
  435. package/dist/runtime/retiredRuntimeCleanup.js.map +1 -0
  436. package/dist/setup/codex/agents.js +96 -0
  437. package/dist/setup/codex/agents.js.map +1 -0
  438. package/dist/setup/codex/cli.js +161 -0
  439. package/dist/setup/codex/cli.js.map +1 -0
  440. package/dist/setup/codex/configToml.js +639 -0
  441. package/dist/setup/codex/configToml.js.map +1 -0
  442. package/dist/setup/codex/constants.js +29 -0
  443. package/dist/setup/codex/constants.js.map +1 -0
  444. package/dist/setup/codex/installRoot.js +64 -0
  445. package/dist/setup/codex/installRoot.js.map +1 -0
  446. package/dist/setup/codex/state.js +270 -0
  447. package/dist/setup/codex/state.js.map +1 -0
  448. package/dist/setup/codex.js +11 -1055
  449. package/dist/setup/codex.js.map +1 -1
  450. package/dist/setup/copilot.js +1 -1
  451. package/dist/setup/copilot.js.map +1 -1
  452. package/dist/setup/cursor.js +7 -5
  453. package/dist/setup/cursor.js.map +1 -1
  454. package/dist/setup/cursorSurfaces.js +67 -0
  455. package/dist/setup/cursorSurfaces.js.map +1 -0
  456. package/dist/setup/doctor/core.js +296 -0
  457. package/dist/setup/doctor/core.js.map +1 -0
  458. package/dist/setup/doctor/diagnostics.js +201 -0
  459. package/dist/setup/doctor/diagnostics.js.map +1 -0
  460. package/dist/setup/doctor/opencode.js +301 -0
  461. package/dist/setup/doctor/opencode.js.map +1 -0
  462. package/dist/setup/doctor/report.js +425 -0
  463. package/dist/setup/doctor/report.js.map +1 -0
  464. package/dist/setup/doctor.js +9 -1275
  465. package/dist/setup/doctor.js.map +1 -1
  466. package/dist/setup/opencode.js +13 -0
  467. package/dist/setup/opencode.js.map +1 -0
  468. package/dist/setup/opencodeConstants.js +2 -0
  469. package/dist/setup/opencodeConstants.js.map +1 -0
  470. package/dist/setup/smokeChecks.js +109 -0
  471. package/dist/setup/smokeChecks.js.map +1 -0
  472. package/dist/state/archiveDiscovery.js +589 -0
  473. package/dist/state/archiveDiscovery.js.map +1 -0
  474. package/dist/state/archivePublication.js +225 -0
  475. package/dist/state/archivePublication.js.map +1 -0
  476. package/dist/state/archiveRecovery.js +238 -0
  477. package/dist/state/archiveRecovery.js.map +1 -0
  478. package/dist/state/archiveReplay.js +54 -0
  479. package/dist/state/archiveReplay.js.map +1 -0
  480. package/dist/state/decisionOverlay.js +255 -0
  481. package/dist/state/decisionOverlay.js.map +1 -0
  482. package/dist/state/directRetrieval.js +322 -0
  483. package/dist/state/directRetrieval.js.map +1 -0
  484. package/dist/state/durability.js +451 -0
  485. package/dist/state/durability.js.map +1 -0
  486. package/dist/state/experimentArchive.js +64 -0
  487. package/dist/state/experimentArchive.js.map +1 -0
  488. package/dist/state/experimentIdentity.js +191 -0
  489. package/dist/state/experimentIdentity.js.map +1 -0
  490. package/dist/state/experimentRetrieval.js +447 -0
  491. package/dist/state/experimentRetrieval.js.map +1 -0
  492. package/dist/state/gitBackfill.js +561 -0
  493. package/dist/state/gitBackfill.js.map +1 -0
  494. package/dist/state/gitBackfillAuthority.js +141 -0
  495. package/dist/state/gitBackfillAuthority.js.map +1 -0
  496. package/dist/state/gitBackfillHistory.js +278 -0
  497. package/dist/state/gitBackfillHistory.js.map +1 -0
  498. package/dist/state/gitBackfillOutput.js +209 -0
  499. package/dist/state/gitBackfillOutput.js.map +1 -0
  500. package/dist/state/healthRepair.js +70 -0
  501. package/dist/state/healthRepair.js.map +1 -0
  502. package/dist/state/installRoot.js +64 -24
  503. package/dist/state/installRoot.js.map +1 -1
  504. package/dist/state/legacyIdentity.js +48 -0
  505. package/dist/state/legacyIdentity.js.map +1 -0
  506. package/dist/state/legacyMigration.js +516 -0
  507. package/dist/state/legacyMigration.js.map +1 -0
  508. package/dist/state/legacyMigrationParser.js +489 -0
  509. package/dist/state/legacyMigrationParser.js.map +1 -0
  510. package/dist/state/listAccounting.js +55 -0
  511. package/dist/state/listAccounting.js.map +1 -0
  512. package/dist/state/listClassification.js +18 -0
  513. package/dist/state/listClassification.js.map +1 -0
  514. package/dist/state/listRetrieval.js +782 -0
  515. package/dist/state/listRetrieval.js.map +1 -0
  516. package/dist/state/migrationAuthority.js +413 -0
  517. package/dist/state/migrationAuthority.js.map +1 -0
  518. package/dist/state/migrationEnrichment.js +35 -0
  519. package/dist/state/migrationEnrichment.js.map +1 -0
  520. package/dist/state/planIdentity.js +45 -0
  521. package/dist/state/planIdentity.js.map +1 -0
  522. package/dist/state/planRetrieval.js +314 -0
  523. package/dist/state/planRetrieval.js.map +1 -0
  524. package/dist/state/planTaskRetrieval.js +285 -0
  525. package/dist/state/planTaskRetrieval.js.map +1 -0
  526. package/dist/state/projectionPolicy.js +184 -0
  527. package/dist/state/projectionPolicy.js.map +1 -0
  528. package/dist/state/retrievalAuthority.js +326 -0
  529. package/dist/state/retrievalAuthority.js.map +1 -0
  530. package/dist/state/startupAnalysis/benchmark.js +371 -0
  531. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  532. package/dist/state/startupAnalysis/contract.js +126 -0
  533. package/dist/state/startupAnalysis/contract.js.map +1 -0
  534. package/dist/state/startupAnalysis/helpers.js +287 -0
  535. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  536. package/dist/state/startupAnalysis/index.js +7 -0
  537. package/dist/state/startupAnalysis/index.js.map +1 -0
  538. package/dist/state/startupAnalysis/metrics.js +341 -0
  539. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  540. package/dist/state/startupAnalysis/records.js +199 -0
  541. package/dist/state/startupAnalysis/records.js.map +1 -0
  542. package/dist/state/startupAnalysis/report.js +112 -0
  543. package/dist/state/startupAnalysis/report.js.map +1 -0
  544. package/dist/state/startupAnalysis/threshold.js +500 -0
  545. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  546. package/dist/state/startupAnalysis.js +2 -1952
  547. package/dist/state/startupAnalysis.js.map +1 -1
  548. package/dist/state/startupProjection.js +498 -0
  549. package/dist/state/startupProjection.js.map +1 -0
  550. package/dist/state/write/assign.js +21 -0
  551. package/dist/state/write/assign.js.map +1 -0
  552. package/dist/state/write/errors.js +12 -0
  553. package/dist/state/write/errors.js.map +1 -0
  554. package/dist/state/write/experimentPublication.js +193 -0
  555. package/dist/state/write/experimentPublication.js.map +1 -0
  556. package/dist/state/write/explain.js +169 -0
  557. package/dist/state/write/explain.js.map +1 -0
  558. package/dist/state/write/fields.js +62 -0
  559. package/dist/state/write/fields.js.map +1 -0
  560. package/dist/state/write/helpers.js +8 -0
  561. package/dist/state/write/helpers.js.map +1 -0
  562. package/dist/state/write/index.js +12 -0
  563. package/dist/state/write/index.js.map +1 -0
  564. package/dist/state/write/input.js +22 -0
  565. package/dist/state/write/input.js.map +1 -0
  566. package/dist/state/write/lock.js +131 -0
  567. package/dist/state/write/lock.js.map +1 -0
  568. package/dist/state/write/mutation.js +190 -0
  569. package/dist/state/write/mutation.js.map +1 -0
  570. package/dist/state/write/operations.js +254 -0
  571. package/dist/state/write/operations.js.map +1 -0
  572. package/dist/state/write/planPublication.js +172 -0
  573. package/dist/state/write/planPublication.js.map +1 -0
  574. package/dist/state/write/serialize.js +2 -0
  575. package/dist/state/write/serialize.js.map +1 -0
  576. package/dist/state/write/transaction.js +800 -0
  577. package/dist/state/write/transaction.js.map +1 -0
  578. package/dist/state/write/validate.js +8 -0
  579. package/dist/state/write/validate.js.map +1 -0
  580. package/dist/upgrade/appContentRefresh.js +374 -0
  581. package/dist/upgrade/appContentRefresh.js.map +1 -0
  582. package/dist/upgrade/appModel.js +11 -6
  583. package/dist/upgrade/appModel.js.map +1 -1
  584. package/dist/upgrade/atomicWriter.js +2 -0
  585. package/dist/upgrade/atomicWriter.js.map +1 -0
  586. package/dist/upgrade/bundleEvidence.js +34 -0
  587. package/dist/upgrade/bundleEvidence.js.map +1 -0
  588. package/dist/upgrade/channels.js +27 -7
  589. package/dist/upgrade/channels.js.map +1 -1
  590. package/dist/upgrade/coexistenceProbe.js +105 -0
  591. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  592. package/dist/upgrade/compatibility.js +52 -16
  593. package/dist/upgrade/compatibility.js.map +1 -1
  594. package/dist/upgrade/doctor.js +195 -193
  595. package/dist/upgrade/doctor.js.map +1 -1
  596. package/dist/upgrade/doctorClassifier.js +188 -0
  597. package/dist/upgrade/doctorClassifier.js.map +1 -0
  598. package/dist/upgrade/installedHooksRetirement.js +190 -0
  599. package/dist/upgrade/installedHooksRetirement.js.map +1 -0
  600. package/dist/upgrade/legacyAgentCleanup.js +183 -0
  601. package/dist/upgrade/legacyAgentCleanup.js.map +1 -0
  602. package/dist/upgrade/lifecycleUpgrade.js +427 -0
  603. package/dist/upgrade/lifecycleUpgrade.js.map +1 -0
  604. package/dist/upgrade/migrateArtifactsV1ToV2.js +568 -0
  605. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +1 -0
  606. package/dist/upgrade/migrateArtifactsV2ToV3.js +273 -144
  607. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  608. package/dist/upgrade/nextMajorDoctor.js +156 -0
  609. package/dist/upgrade/nextMajorDoctor.js.map +1 -0
  610. package/dist/upgrade/npxPlatformStatus.js +23 -0
  611. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  612. package/dist/upgrade/projectIntegration.js +259 -104
  613. package/dist/upgrade/projectIntegration.js.map +1 -1
  614. package/dist/upgrade/projectIntegrationDecision.js +141 -0
  615. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  616. package/dist/upgrade/runtimeMigration.js +342 -89
  617. package/dist/upgrade/runtimeMigration.js.map +1 -1
  618. package/dist/upgrade/upgradeCommands.js +8 -0
  619. package/dist/upgrade/upgradeCommands.js.map +1 -1
  620. package/dist/upgrade/upgradeLock.js +54 -0
  621. package/dist/upgrade/upgradeLock.js.map +1 -0
  622. package/dist/upgrade/upgradeOrchestrator.js +170 -46
  623. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  624. package/dist/upgrade/upgradeSnapshot.js +93 -0
  625. package/dist/upgrade/upgradeSnapshot.js.map +1 -0
  626. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  627. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  628. package/dist/upgrade/versionResolution.js +12 -4
  629. package/dist/upgrade/versionResolution.js.map +1 -1
  630. package/dist/validate/appHomeContract.js +5 -5
  631. package/dist/validate/appHomeContract.js.map +1 -1
  632. package/dist/validate/capability.js +135 -14
  633. package/dist/validate/capability.js.map +1 -1
  634. package/dist/validate/crossCapability.js +10 -7
  635. package/dist/validate/crossCapability.js.map +1 -1
  636. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +93 -0
  637. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +1 -0
  638. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +481 -0
  639. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +1 -0
  640. package/dist/validate/lifecycleAdapters/shared.js +198 -0
  641. package/dist/validate/lifecycleAdapters/shared.js.map +1 -0
  642. package/dist/validate/lifecycleAdapters.js +91 -702
  643. package/dist/validate/lifecycleAdapters.js.map +1 -1
  644. package/dist/validate/selfAudit.js +63 -21
  645. package/dist/validate/selfAudit.js.map +1 -1
  646. package/dist/validate/vocabularyAuthority.js +303 -0
  647. package/dist/validate/vocabularyAuthority.js.map +1 -0
  648. package/package.json +30 -27
  649. package/bundle/references/v1-section-mapping.md +0 -47
  650. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  651. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  652. package/bundle/skills/agentera/agents/hej.toml +0 -6
  653. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  654. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  655. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  656. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  657. package/bundle/skills/agentera/agents/planera.toml +0 -6
  658. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  659. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  660. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  661. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  662. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  663. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  664. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  665. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  666. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  667. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  668. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  669. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  670. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  671. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  672. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  673. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  674. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  675. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  676. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  677. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  678. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  679. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  680. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  681. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  682. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  683. package/bundle/skills/hej/SKILL.md +0 -69
  684. package/bundle/skills/hej/agents/hej.toml +0 -11
  685. package/bundle/skills/hej/agents/openai.yaml +0 -8
  686. package/dist/cli/commands/state.js +0 -1012
  687. package/dist/cli/commands/state.js.map +0 -1
  688. package/dist/core/git.js +0 -43
  689. package/dist/core/git.js.map +0 -1
  690. package/dist/hooks/compaction.js +0 -935
  691. package/dist/hooks/compaction.js.map +0 -1
  692. package/dist/hooks/validateArtifact.js +0 -933
  693. package/dist/hooks/validateArtifact.js.map +0 -1
  694. package/dist/state/progressCommit.js +0 -289
  695. package/dist/state/progressCommit.js.map +0 -1
  696. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  697. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  698. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,820 @@
1
+ // Agentera plugin for OpenCode
2
+ // Bootstraps slash commands at plugin init, injects AGENTERA_HOME via shell.env,
3
+ // writes runtime-local session bookmarks via the generic event hook, and validates
4
+ // artifact writes via tool.execute.before plus tool.execute.after.
5
+ // Install: copy to ~/.config/opencode/plugins/agentera.js or .opencode/plugins/agentera.js
6
+
7
+ import { execFileSync, spawnSync } from "child_process";
8
+ import fs from "fs";
9
+ import path from "path";
10
+ import { fileURLToPath } from "url";
11
+
12
+ const AGENTERA_VERSION = "3.0.0";
13
+ const NPX_BUNDLE_SENTINEL = ".agentera-npx-bundle.json";
14
+ const NPX_CLI_ENTRYPOINT = "npx -y agentera@next";
15
+ const NPX_HOOK_VALIDATE = `${NPX_CLI_ENTRYPOINT} hook validate-artifact`;
16
+ const NPX_HOOK_SESSION_STOP = `${NPX_CLI_ENTRYPOINT} hook session-stop`;
17
+ const REQUIRED_AGENT_NAMES = ["agentera"];
18
+ const AGENTERA_AGENT_MARKER = "<!-- agentera: managed -->";
19
+
20
+ const COMMAND_TEMPLATES = {
21
+ "agentera": `---
22
+ description: "Compound agent orchestration suite: 12 capabilities in one bundled skill"
23
+ agentera_managed: true
24
+ ---
25
+ Load and execute the agentera bundled skill for this project.
26
+ `,
27
+ };
28
+
29
+ function resolveOpencodeCommandsDir() {
30
+ return process.env.OPENCODE_CONFIG_DIR
31
+ ? path.join(process.env.OPENCODE_CONFIG_DIR, "commands")
32
+ : path.join(process.env.HOME, ".config", "opencode", "commands");
33
+ }
34
+
35
+ function resolveOpencodeAgentsDir() {
36
+ return process.env.OPENCODE_CONFIG_DIR
37
+ ? path.join(process.env.OPENCODE_CONFIG_DIR, "agents")
38
+ : path.join(process.env.HOME, ".config", "opencode", "agents");
39
+ }
40
+
41
+ function hasManagedMarker(filePath) {
42
+ let content;
43
+ try {
44
+ content = fs.readFileSync(filePath, "utf8");
45
+ } catch {
46
+ return false;
47
+ }
48
+ const lines = content.split("\n");
49
+ if (lines[0] !== "---") return false;
50
+ const closingIdx = lines.indexOf("---", 1);
51
+ if (closingIdx === -1) return false;
52
+ const frontmatter = lines.slice(1, closingIdx).join("\n");
53
+ return /^agentera_managed:\s*true\s*$/m.test(frontmatter);
54
+ }
55
+
56
+ function hasManagedAgentMarker(filePath) {
57
+ let content;
58
+ try {
59
+ content = fs.readFileSync(filePath, "utf8");
60
+ } catch {
61
+ return false;
62
+ }
63
+ const lines = content.split("\n");
64
+ if (lines[0] !== "---") return false;
65
+ const closingIdx = lines.indexOf("---", 1);
66
+ if (closingIdx === -1) return false;
67
+ return lines.slice(closingIdx + 1).some((line) => line.trim() === AGENTERA_AGENT_MARKER);
68
+ }
69
+
70
+ const commandBootstrap = { lastReport: null };
71
+
72
+ function validAgentDescriptor(sourceDir, name) {
73
+ const descriptor = path.join(sourceDir, `${name}.md`);
74
+ return fs.existsSync(descriptor) && hasManagedAgentMarker(descriptor);
75
+ }
76
+
77
+ function resolveInstalledOpenCodeAgentsDir() {
78
+ const pluginRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
79
+ const candidates = [
80
+ path.join(pluginRoot, ".opencode", "agents"),
81
+ path.join(process.env.HOME, ".config", "opencode", "agents"),
82
+ ].filter(Boolean);
83
+
84
+ for (const candidate of candidates) {
85
+ if (REQUIRED_AGENT_NAMES.every((name) => validAgentDescriptor(candidate, name))) {
86
+ return candidate;
87
+ }
88
+ }
89
+
90
+ return null;
91
+ }
92
+
93
+ const agentBootstrap = { lastReport: null };
94
+
95
+ function bootstrapAgents() {
96
+ const report = {
97
+ restored: [],
98
+ refreshed: [],
99
+ skippedUserOwned: [],
100
+ unchanged: [],
101
+ missingSource: [],
102
+ markerVersion: null,
103
+ };
104
+ try {
105
+ const sourceDir = resolveInstalledOpenCodeAgentsDir();
106
+ if (!sourceDir) {
107
+ report.missingSource = [...REQUIRED_AGENT_NAMES];
108
+ agentBootstrap.lastReport = report;
109
+ return report;
110
+ }
111
+
112
+ const targetDir = resolveOpencodeAgentsDir();
113
+ fs.mkdirSync(targetDir, { recursive: true });
114
+
115
+ const markerFile = path.join(targetDir, ".agentera-version");
116
+ let existingVersion = null;
117
+ try {
118
+ existingVersion = fs.readFileSync(markerFile, "utf8").trim();
119
+ } catch {
120
+ // marker absent — proceed
121
+ }
122
+ report.markerVersion = existingVersion;
123
+
124
+ for (const name of REQUIRED_AGENT_NAMES) {
125
+ const sourceFile = path.join(sourceDir, `${name}.md`);
126
+ const targetFile = path.join(targetDir, `${name}.md`);
127
+ if (!validAgentDescriptor(sourceDir, name)) {
128
+ report.missingSource.push(name);
129
+ continue;
130
+ }
131
+
132
+ const content = fs.readFileSync(sourceFile, "utf8");
133
+ if (!fs.existsSync(targetFile)) {
134
+ fs.writeFileSync(targetFile, content);
135
+ report.restored.push(name);
136
+ continue;
137
+ }
138
+
139
+ const existingContent = fs.readFileSync(targetFile, "utf8");
140
+ if (existingContent === content) {
141
+ report.unchanged.push(name);
142
+ continue;
143
+ }
144
+
145
+ if (!hasManagedAgentMarker(targetFile) && !hasManagedMarker(targetFile)) {
146
+ report.skippedUserOwned.push(name);
147
+ continue;
148
+ }
149
+
150
+ fs.writeFileSync(targetFile, content);
151
+ report.refreshed.push(name);
152
+ }
153
+
154
+ if (existingVersion !== AGENTERA_VERSION || report.restored.length || report.refreshed.length) {
155
+ fs.writeFileSync(markerFile, AGENTERA_VERSION);
156
+ }
157
+ } catch (err) {
158
+ console.error("[agentera] bootstrapAgents error:", err);
159
+ }
160
+ agentBootstrap.lastReport = report;
161
+ return report;
162
+ }
163
+
164
+ function bootstrapCommands() {
165
+ const report = {
166
+ restored: [],
167
+ refreshed: [],
168
+ skippedUserOwned: [],
169
+ unchanged: [],
170
+ markerVersion: null,
171
+ };
172
+ try {
173
+ const targetDir = resolveOpencodeCommandsDir();
174
+ fs.mkdirSync(targetDir, { recursive: true });
175
+
176
+ const markerFile = path.join(targetDir, ".agentera-version");
177
+ let existingVersion = null;
178
+ try {
179
+ existingVersion = fs.readFileSync(markerFile, "utf8").trim();
180
+ } catch {
181
+ // marker absent — proceed
182
+ }
183
+ report.markerVersion = existingVersion;
184
+
185
+ for (const [name, content] of Object.entries(COMMAND_TEMPLATES)) {
186
+ const targetFile = path.join(targetDir, `${name}.md`);
187
+ if (!fs.existsSync(targetFile)) {
188
+ fs.writeFileSync(targetFile, content);
189
+ report.restored.push(name);
190
+ continue;
191
+ }
192
+
193
+ const existingContent = fs.readFileSync(targetFile, "utf8");
194
+ if (existingContent === content) {
195
+ report.unchanged.push(name);
196
+ continue;
197
+ }
198
+
199
+ if (!hasManagedMarker(targetFile)) {
200
+ report.skippedUserOwned.push(name);
201
+ continue;
202
+ }
203
+
204
+ fs.writeFileSync(targetFile, content);
205
+ report.refreshed.push(name);
206
+ }
207
+
208
+ if (existingVersion !== AGENTERA_VERSION || report.restored.length || report.refreshed.length) {
209
+ fs.writeFileSync(markerFile, AGENTERA_VERSION);
210
+ }
211
+ } catch (err) {
212
+ console.error("[agentera] bootstrapCommands error:", err);
213
+ }
214
+ commandBootstrap.lastReport = report;
215
+ return report;
216
+ }
217
+
218
+ function isArtifactPath(filePath, root) {
219
+ const target = path.isAbsolute(filePath) ? filePath : path.join(root, filePath);
220
+ const rel = path.relative(root, target);
221
+ if (!rel) return false;
222
+ const artifacts = [
223
+ "TODO.md", "CHANGELOG.md", "DESIGN.md",
224
+ path.join(".agentera", "vision.yaml"),
225
+ path.join(".agentera", "progress.yaml"),
226
+ path.join(".agentera", "decisions.yaml"),
227
+ path.join(".agentera", "plan.yaml"),
228
+ path.join(".agentera", "health.yaml"),
229
+ path.join(".agentera", "docs.yaml"),
230
+ ];
231
+ return artifacts.includes(rel)
232
+ || (
233
+ rel.startsWith(path.join(".agentera", "optimize") + path.sep)
234
+ && ["objective.yaml", "experiments.yaml"].includes(path.basename(rel))
235
+ );
236
+ }
237
+
238
+ function findAgenteraRoot(startDir) {
239
+ let dir = startDir;
240
+ for (let i = 0; i < 20; i++) {
241
+ if (fs.existsSync(path.join(dir, ".agentera"))) return dir;
242
+ const parent = path.dirname(dir);
243
+ if (parent === dir) break;
244
+ dir = parent;
245
+ }
246
+ return startDir;
247
+ }
248
+
249
+ function resolveUserDataHome() {
250
+ if (process.env.AGENTERA_HOME && fs.existsSync(process.env.AGENTERA_HOME)) {
251
+ return process.env.AGENTERA_HOME;
252
+ }
253
+ return resolveDefaultAgenteraAppHome();
254
+ }
255
+
256
+ function resolveDefaultAgenteraAppHome() {
257
+ if (process.platform === "darwin") {
258
+ return path.join(process.env.HOME, "Library", "Application Support", "agentera");
259
+ }
260
+ if (process.platform === "win32") {
261
+ return path.join(
262
+ process.env.APPDATA || path.join(process.env.USERPROFILE || process.env.HOME, "AppData", "Roaming"),
263
+ "agentera"
264
+ );
265
+ }
266
+ return path.join(process.env.XDG_DATA_HOME || path.join(process.env.HOME, ".local", "share"), "agentera");
267
+ }
268
+
269
+ function hasV3NpxBundleEvidence(candidate) {
270
+ return (
271
+ fs.existsSync(path.join(candidate, NPX_BUNDLE_SENTINEL))
272
+ && fs.existsSync(path.join(candidate, "skills", "agentera", "SKILL.md"))
273
+ && fs.existsSync(path.join(candidate, "registry.json"))
274
+ );
275
+ }
276
+
277
+ function isRunnableAgenteraAppRoot(candidate) {
278
+ if (!candidate || !fs.existsSync(candidate)) {
279
+ return false;
280
+ }
281
+ if (fs.existsSync(path.join(candidate, "scripts", "validate_capability.py"))) {
282
+ return true;
283
+ }
284
+ if (fs.existsSync(path.join(candidate, "scripts", "agentera"))) {
285
+ return true;
286
+ }
287
+ return hasV3NpxBundleEvidence(candidate);
288
+ }
289
+
290
+ function isValidAgenteraAppHome(candidate) {
291
+ return typeof candidate === "string" && fs.existsSync(candidate);
292
+ }
293
+
294
+ function resolveAgenteraAppHome() {
295
+ if (!resolveAgenteraHome()) {
296
+ return null;
297
+ }
298
+ return resolveUserDataHome();
299
+ }
300
+
301
+ function resolveAgenteraHome() {
302
+ // Keep this adapter-local resolver aligned with the shared app-home
303
+ // contract fixture in `.agentera/install_root_interface_model.yaml` and the
304
+ // Python implementation in `scripts/install_root.py`: AGENTERA_HOME names an
305
+ // app home, with managed app code under app/. Checkout roots remain accepted
306
+ // only for local development and smoke tests.
307
+ const candidates = [
308
+ process.env.AGENTERA_HOME && path.join(process.env.AGENTERA_HOME, "app"),
309
+ process.env.AGENTERA_HOME && fs.existsSync(path.join(process.env.AGENTERA_HOME, ".git")) && process.env.AGENTERA_HOME,
310
+ path.join(resolveDefaultAgenteraAppHome(), "app"),
311
+ ].filter(Boolean);
312
+
313
+ for (const candidate of candidates) {
314
+ if (isRunnableAgenteraAppRoot(candidate)) {
315
+ return candidate;
316
+ }
317
+ }
318
+
319
+ return null;
320
+ }
321
+
322
+ function resolveLocalCli(projectRoot) {
323
+ if (!projectRoot) return null;
324
+ const localDist = path.join(projectRoot, "packages", "cli", "dist", "bin", "agentera.js");
325
+ if (fs.existsSync(localDist)) return localDist;
326
+ return null;
327
+ }
328
+
329
+ function buildHookArgs(projectRoot, subcommand) {
330
+ const localCli = resolveLocalCli(projectRoot);
331
+ if (localCli) {
332
+ return { cmd: "node", args: [localCli, "hook", subcommand] };
333
+ }
334
+ const args = NPX_CLI_ENTRYPOINT.split(/\s+/).slice(1);
335
+ args.push("hook", subcommand);
336
+ return { cmd: "npx", args };
337
+ }
338
+
339
+ function runNpxHook(subcommand, payload, projectRoot) {
340
+ const { cmd, args } = buildHookArgs(projectRoot || process.cwd(), subcommand);
341
+ execFileSync(cmd, args, {
342
+ input: payload,
343
+ timeout: 30000,
344
+ stdio: ["pipe", "pipe", "pipe"],
345
+ env: { ...process.env, AGENTERA_HOME: resolveUserDataHome() },
346
+ });
347
+ }
348
+
349
+ function validateArtifact(filePath, projectRoot) {
350
+ try {
351
+ if (!filePath) return;
352
+ const payload = JSON.stringify({
353
+ cwd: projectRoot,
354
+ hook_event_name: "tool.execute.after",
355
+ tool_name: "Edit",
356
+ tool_input: { file_path: filePath },
357
+ });
358
+ runNpxHook("validate-artifact", payload, projectRoot);
359
+ } catch {}
360
+ }
361
+
362
+ function resolveToolFilePath(args, root) {
363
+ const rawPath = args?.filePath || args?.path || args?.file_path;
364
+ if (!rawPath || typeof rawPath !== "string") return null;
365
+ return path.isAbsolute(rawPath) ? rawPath : path.join(root, rawPath);
366
+ }
367
+
368
+ function firstStringArg(args, names) {
369
+ for (const name of names) {
370
+ if (typeof args[name] === "string") return args[name];
371
+ }
372
+ return undefined;
373
+ }
374
+
375
+ function reconstructCandidate(tool, args, root) {
376
+ if (!args || typeof args !== "object") return null;
377
+ const filePath = resolveToolFilePath(args, root);
378
+ if (!filePath) return null;
379
+
380
+ if (tool === "write") {
381
+ const content = firstStringArg(args, ["content", "text", "newContent", "new_content"]);
382
+ return typeof content === "string" ? { filePath, content } : null;
383
+ }
384
+
385
+ if (tool !== "edit") return null;
386
+ const oldText = firstStringArg(args, ["oldString", "old_string", "oldText", "old_text"]);
387
+ const newText = firstStringArg(args, ["newString", "new_string", "newText", "new_text"]);
388
+ if (typeof oldText !== "string" || typeof newText !== "string") return null;
389
+
390
+ let current;
391
+ try {
392
+ current = fs.readFileSync(filePath, "utf8");
393
+ } catch {
394
+ return null;
395
+ }
396
+
397
+ if (args.replaceAll === true || args.replace_all === true) {
398
+ return current.includes(oldText)
399
+ ? { filePath, content: current.replaceAll(oldText, newText) }
400
+ : null;
401
+ }
402
+
403
+ const first = current.indexOf(oldText);
404
+ if (first === -1 || current.indexOf(oldText, first + oldText.length) !== -1) {
405
+ return null;
406
+ }
407
+ return {
408
+ filePath,
409
+ content: current.slice(0, first) + newText + current.slice(first + oldText.length),
410
+ };
411
+ }
412
+
413
+ function validateArtifactCandidate(filePath, content, projectRoot) {
414
+ try {
415
+ const payload = JSON.stringify({
416
+ runtime: "opencode",
417
+ cwd: projectRoot,
418
+ hook_event_name: "tool.execute.before",
419
+ tool_name: "Edit",
420
+ tool_input: { file_path: filePath, content },
421
+ });
422
+ const localCli = resolveLocalCli(projectRoot);
423
+ let result;
424
+ if (localCli) {
425
+ result = spawnSync("node", [localCli, "hook", "validate-artifact"], {
426
+ input: payload,
427
+ encoding: "utf8",
428
+ timeout: 30000,
429
+ stdio: ["pipe", "pipe", "pipe"],
430
+ env: { ...process.env, AGENTERA_HOME: resolveUserDataHome() },
431
+ });
432
+ } else {
433
+ const args = NPX_CLI_ENTRYPOINT.split(/\s+/).slice(1);
434
+ args.push("hook", "validate-artifact");
435
+ result = spawnSync("npx", args, {
436
+ input: payload,
437
+ encoding: "utf8",
438
+ timeout: 30000,
439
+ stdio: ["pipe", "pipe", "pipe"],
440
+ env: { ...process.env, AGENTERA_HOME: resolveUserDataHome() },
441
+ });
442
+ }
443
+ if (result.status === 2) {
444
+ const reason = String(result.stderr || "Artifact validation failed").trim();
445
+ return {
446
+ permissionDecision: "deny",
447
+ permissionDecisionReason: reason || "Artifact validation failed",
448
+ };
449
+ }
450
+ return { permissionDecision: "allow" };
451
+ } catch (err) {
452
+ return { permissionDecision: "allow" };
453
+ }
454
+ }
455
+
456
+ function hardGateArtifactCandidate(input, output, projectRoot) {
457
+ const candidate = reconstructCandidate(input?.tool, output?.args, projectRoot);
458
+ if (!candidate) return;
459
+ const decision = validateArtifactCandidate(candidate.filePath, candidate.content, projectRoot);
460
+ if (decision.permissionDecision !== "deny") return;
461
+ throw new Error(decision.permissionDecisionReason || "Artifact validation failed");
462
+ }
463
+
464
+ function writeSessionBookmark(projectRoot) {
465
+ try {
466
+ const payload = JSON.stringify({
467
+ cwd: projectRoot,
468
+ hook_event_name: "session.idle",
469
+ });
470
+ runNpxHook("session-stop", payload);
471
+ } catch {}
472
+ }
473
+
474
+ function formatCompactionStateContext(state) {
475
+ if (!state || typeof state !== "object") return null;
476
+ const lines = ["Agentera project state summary from `agentera prime --format json`:"];
477
+ if (state.mode) lines.push(`- mode: ${state.mode}`);
478
+ if (state.profile?.status) lines.push(`- profile: ${state.profile.status}`);
479
+ if (state.health?.grade) lines.push(`- health: ${state.health.grade}${state.health.trajectory ? `; ${state.health.trajectory}` : ""}`);
480
+ if (state.issues && typeof state.issues === "object") {
481
+ const issueText = ["critical", "degraded", "normal", "annoying"]
482
+ .filter((key) => Number.isFinite(state.issues[key]) && state.issues[key] > 0)
483
+ .map((key) => `${key}=${state.issues[key]}`)
484
+ .join(", ");
485
+ if (issueText) lines.push(`- issues: ${issueText}`);
486
+ }
487
+ if (state.plan?.exists) {
488
+ lines.push(`- plan: ${state.plan.status || "unknown"}${state.plan.title ? `; ${state.plan.title}` : ""}`);
489
+ if (state.plan.first_pending?.name) lines.push(`- next plan task: ${state.plan.first_pending.name}`);
490
+ }
491
+ if (state.progress?.latest) {
492
+ const latest = state.progress.latest;
493
+ lines.push(`- latest progress: ${latest.number || "unknown"}${latest.what ? `; ${latest.what}` : ""}`);
494
+ if (latest.next) lines.push(`- progress next: ${latest.next}`);
495
+ }
496
+ if (state.next_action?.object) lines.push(`- next action: ${state.next_action.object}`);
497
+ const attention = Array.isArray(state.attention) ? state.attention.slice(0, 3) : [];
498
+ for (const item of attention) lines.push(`- attention: ${item}`);
499
+ return lines.slice(0, 12).join("\n").slice(0, 6000);
500
+ }
501
+
502
+ function buildCompactionContext(projectRoot) {
503
+ try {
504
+ const args = NPX_CLI_ENTRYPOINT.split(/\s+/).slice(1);
505
+ args.push("prime", "--format", "json");
506
+ const stdout = execFileSync("npx", args, {
507
+ cwd: projectRoot,
508
+ encoding: "utf8",
509
+ timeout: 30000,
510
+ stdio: ["ignore", "pipe", "pipe"],
511
+ env: { ...process.env, AGENTERA_HOME: resolveUserDataHome() },
512
+ }).trim();
513
+ return formatCompactionStateContext(JSON.parse(stdout));
514
+ } catch {
515
+ return null;
516
+ }
517
+ }
518
+
519
+ // One-time deprecation guard for the PROFILERA_PROFILE_DIR → AGENTERA_PROFILE_DIR
520
+ // rename. Resettable via Agentera.__test.profileraDeprecation so tests can verify
521
+ // the "fires only once per process" contract in isolation.
522
+ const profileraDeprecation = { warned: false };
523
+
524
+ function setProfileDir() {
525
+ // 1. AGENTERA_PROFILE_DIR already set (canonical): respect it.
526
+ if (process.env.AGENTERA_PROFILE_DIR) return;
527
+ // 2. Legacy PROFILERA_PROFILE_DIR set by a v2 install: adopt its value as the
528
+ // canonical AGENTERA_PROFILE_DIR and warn once per process.
529
+ if (process.env.PROFILERA_PROFILE_DIR) {
530
+ process.env.AGENTERA_PROFILE_DIR = process.env.PROFILERA_PROFILE_DIR;
531
+ if (!profileraDeprecation.warned) {
532
+ profileraDeprecation.warned = true;
533
+ process.stderr.write(
534
+ "[agentera] PROFILERA_PROFILE_DIR is deprecated; run `agentera upgrade` to migrate to AGENTERA_PROFILE_DIR\n",
535
+ );
536
+ }
537
+ return;
538
+ }
539
+ // 3. Neither set: seed AGENTERA_PROFILE_DIR from the platform data-home default.
540
+ if (process.platform === "darwin") {
541
+ process.env.AGENTERA_PROFILE_DIR = path.join(
542
+ process.env.HOME, "Library", "Application Support", "agentera"
543
+ );
544
+ } else if (process.platform === "win32") {
545
+ process.env.AGENTERA_PROFILE_DIR = path.join(
546
+ process.env.APPDATA || path.join(process.env.USERPROFILE, "AppData", "Roaming"),
547
+ "agentera"
548
+ );
549
+ } else {
550
+ process.env.AGENTERA_PROFILE_DIR = path.join(
551
+ process.env.XDG_DATA_HOME || path.join(process.env.HOME, ".local", "share"),
552
+ "agentera"
553
+ );
554
+ }
555
+ }
556
+
557
+ // Lifecycle counter: increments every time OpenCode invokes the Agentera
558
+ // plugin function. Exported (and reset by) the smoke runner so the test
559
+ // harness can confirm the plan's "once per plugin load" assumption empirically.
560
+ const lifecycle = { initCount: 0, lastInitAt: null };
561
+
562
+ export const Agentera = async (input = {}, _options) => {
563
+ lifecycle.initCount += 1;
564
+ lifecycle.lastInitAt = new Date().toISOString();
565
+ if (process.env.AGENTERA_DEBUG_LIFECYCLE) {
566
+ console.error(`[agentera] plugin init fired at ${lifecycle.lastInitAt} (count=${lifecycle.initCount})`);
567
+ }
568
+
569
+ setProfileDir();
570
+ bootstrapCommands();
571
+ bootstrapAgents();
572
+
573
+ // Resolve app home once at init. shell.env must propagate the validated app
574
+ // home, not stale parent-process residue inherited by the runtime.
575
+ const initialAgenteraAppHome = resolveAgenteraAppHome();
576
+ const projectRoot = findAgenteraRoot(input.worktree || input.directory || process.cwd());
577
+
578
+ return {
579
+ event: async (payload) => {
580
+ const event = payload?.event;
581
+ if (!event) return;
582
+ if (event.type === "session.created") return;
583
+ if (event.type !== "session.idle") return;
584
+ writeSessionBookmark(projectRoot);
585
+ },
586
+
587
+ "shell.env": async (_input, output) => {
588
+ const env = output && output.env;
589
+ if (!env || typeof env !== "object") return;
590
+ if (!initialAgenteraAppHome) return;
591
+ if (isValidAgenteraAppHome(env.AGENTERA_HOME)) return;
592
+ env.AGENTERA_HOME = initialAgenteraAppHome;
593
+ },
594
+
595
+ "tool.execute.before": async (input, output) => {
596
+ hardGateArtifactCandidate(input, output, projectRoot);
597
+ },
598
+
599
+ "tool.execute.after": async (input, output) => {
600
+ if (input.tool === "write" || input.tool === "edit") {
601
+ const root = projectRoot;
602
+ const filePath = resolveToolFilePath(input?.args || output?.args, root);
603
+ if (filePath && isArtifactPath(filePath, root)) {
604
+ validateArtifact(filePath, root);
605
+ }
606
+ }
607
+ },
608
+
609
+ "experimental.session.compacting": async (_input, output) => {
610
+ if (!output || !Array.isArray(output.context)) return;
611
+ const context = buildCompactionContext(projectRoot);
612
+ if (context) output.context.push(context);
613
+ },
614
+ };
615
+ };
616
+
617
+ Agentera.__test = {
618
+ AGENTERA_VERSION,
619
+ AGENTERA_AGENT_MARKER,
620
+ COMMAND_TEMPLATES,
621
+ REQUIRED_AGENT_NAMES,
622
+ bootstrapCommands,
623
+ bootstrapAgents,
624
+ agentBootstrap,
625
+ commandBootstrap,
626
+ hasManagedAgentMarker,
627
+ hasManagedMarker,
628
+ buildCompactionContext,
629
+ formatCompactionStateContext,
630
+ lifecycle,
631
+ resolveAgenteraHome,
632
+ resolveAgenteraAppHome,
633
+ resolveDefaultAgenteraAppHome,
634
+ isRunnableAgenteraAppRoot,
635
+ hasV3NpxBundleEvidence,
636
+ isValidAgenteraAppHome,
637
+ resolveOpencodeCommandsDir,
638
+ resolveOpencodeAgentsDir,
639
+ setProfileDir,
640
+ profileraDeprecation,
641
+ validateArtifactCandidate,
642
+ writeSessionBookmark,
643
+ };
644
+
645
+ // --- BEGIN GENERATED: INSTALL_ROOT_CONTRACT ---
646
+ const INSTALL_ROOT_CONTRACT = {
647
+ "title": "App Home Interface And Safety Model",
648
+ "plan": "Deepen Agentera Install Root Module",
649
+ "task": 3,
650
+ "captured": "2026-05-05",
651
+ "purpose": "Define the read-only app-home classification contract that setup, doctor, upgrade, and runtime callers share. AGENTERA_HOME names the durable app home; managed app code lives under AGENTERA_HOME/app. This file is a model fixture only; it does not perform discovery, mutate app state, or migrate callers.\n",
652
+ "source_precedence": [
653
+ {
654
+ "source": "explicit",
655
+ "rank": 1,
656
+ "label": "explicit --install-root",
657
+ "rule": "Caller-provided app homes always win."
658
+ },
659
+ {
660
+ "source": "environment",
661
+ "rank": 2,
662
+ "label": "AGENTERA_HOME",
663
+ "rule": "Environment app homes are considered only when no explicit app home was provided."
664
+ },
665
+ {
666
+ "source": "default",
667
+ "rank": 3,
668
+ "label": "default app home",
669
+ "rule": "Default app homes are used only when explicit and environment app homes are absent."
670
+ }
671
+ ],
672
+ "result_schema": {
673
+ "required_fields": ["source", "kind", "safe_action", "diagnostic", "managed_status", "stale_status", "missing_evidence"],
674
+ "field_contract": {
675
+ "source": "One of explicit, environment, or default, with source_precedence.rank preserved.",
676
+ "kind": "One app-home shape from root_kinds; callers must not infer managed app identity from paths.",
677
+ "safe_action": "One action from safe_actions; classification itself never writes files.",
678
+ "diagnostic": "Structured code, severity, message, and evidence for humans and JSON callers.",
679
+ "managed_status": "managed, unmanaged, missing, invalid, or unknown.",
680
+ "stale_status": "fresh, stale, not_applicable, or unknown.",
681
+ "missing_evidence": "Required canonical evidence that was absent; empty when no evidence is missing."
682
+ }
683
+ },
684
+ "mutation_policy": {
685
+ "classification_writes_files": false,
686
+ "durable_bundle_writes_allowed": false,
687
+ "dry_run_allowed": true,
688
+ "apply_requires_separate_confirmation": true
689
+ },
690
+ "bundle_identity": {
691
+ "owner": "install_root_interface",
692
+ "caller_local_identity_rules_allowed": false,
693
+ "managed_bundle_evidence": ["scripts/agentera", "skills/agentera/SKILL.md", "registry.json", ".agentera-bundle.json"],
694
+ "valid_for_callers": ["setup", "doctor", "upgrade", "runtime"]
695
+ },
696
+ "safe_actions": {
697
+ "use_root": {
698
+ "description": "App home has fresh managed app code; callers may use AGENTERA_HOME/app without extra identity checks.",
699
+ "writes_files": false
700
+ },
701
+ "preview_refresh": {
702
+ "description": "App home has stale or missing managed app code at app/; callers may present a dry-run refresh preview only.",
703
+ "writes_files": false
704
+ },
705
+ "require_existing_managed_root": {
706
+ "description": "App home was explicitly or environmentally selected but missing; callers must ask for a different managed app home or explicit install approval.",
707
+ "writes_files": false
708
+ },
709
+ "reject_file_path": {
710
+ "description": "App home resolves to a file; callers must reject it and ask for a directory.",
711
+ "writes_files": false
712
+ },
713
+ "reject_unmanaged_directory": {
714
+ "description": "App home is a directory but lacks recognized Agentera state or managed app evidence; callers must not overwrite it without an explicit force/install path.",
715
+ "writes_files": false
716
+ },
717
+ "reject_invalid_bundle": {
718
+ "description": "App home or its app/ directory has partial or malformed managed app evidence; callers must report the invalid evidence and avoid refresh/apply commands.",
719
+ "writes_files": false
720
+ }
721
+ },
722
+ "root_kinds": {
723
+ "managed_fresh": {
724
+ "managed_status": "managed",
725
+ "stale_status": "fresh",
726
+ "safe_action": "use_root",
727
+ "diagnostic": {
728
+ "code": "install_root.managed_fresh",
729
+ "severity": "info",
730
+ "message": "app home has fresh managed app code under app/"
731
+ },
732
+ "missing_evidence": []
733
+ },
734
+ "managed_stale": {
735
+ "managed_status": "managed",
736
+ "stale_status": "stale",
737
+ "safe_action": "preview_refresh",
738
+ "diagnostic": {
739
+ "code": "install_root.managed_stale",
740
+ "severity": "warning",
741
+ "message": "app home has stale managed app code under app/"
742
+ },
743
+ "missing_evidence": ["current bundle marker/version or required CLI command evidence"]
744
+ },
745
+ "missing_explicit_or_environment": {
746
+ "managed_status": "missing",
747
+ "stale_status": "not_applicable",
748
+ "safe_action": "require_existing_managed_root",
749
+ "diagnostic": {
750
+ "code": "install_root.missing_selected_root",
751
+ "severity": "error",
752
+ "message": "selected app home does not exist"
753
+ },
754
+ "missing_evidence": ["directory", "managed bundle evidence"]
755
+ },
756
+ "missing_default": {
757
+ "managed_status": "missing",
758
+ "stale_status": "stale",
759
+ "safe_action": "preview_refresh",
760
+ "diagnostic": {
761
+ "code": "install_root.missing_default_root",
762
+ "severity": "warning",
763
+ "message": "default app home is missing and may be created only by a confirmed install or refresh"
764
+ },
765
+ "missing_evidence": ["directory", "managed bundle evidence"]
766
+ },
767
+ "file_valued_root": {
768
+ "managed_status": "invalid",
769
+ "stale_status": "not_applicable",
770
+ "safe_action": "reject_file_path",
771
+ "diagnostic": {
772
+ "code": "install_root.file_path",
773
+ "severity": "error",
774
+ "message": "selected app home is a file, not a directory"
775
+ },
776
+ "missing_evidence": ["directory"]
777
+ },
778
+ "unmanaged_directory": {
779
+ "managed_status": "unmanaged",
780
+ "stale_status": "not_applicable",
781
+ "safe_action": "reject_unmanaged_directory",
782
+ "diagnostic": {
783
+ "code": "install_root.unmanaged_directory",
784
+ "severity": "error",
785
+ "message": "selected directory is not a recognized Agentera app home"
786
+ },
787
+ "missing_evidence": ["managed bundle evidence"]
788
+ },
789
+ "invalid_bundle": {
790
+ "managed_status": "invalid",
791
+ "stale_status": "unknown",
792
+ "safe_action": "reject_invalid_bundle",
793
+ "diagnostic": {
794
+ "code": "install_root.invalid_bundle",
795
+ "severity": "error",
796
+ "message": "selected app home has incomplete or malformed managed app evidence"
797
+ },
798
+ "missing_evidence": ["valid bundle marker and complete managed bundle evidence"]
799
+ }
800
+ },
801
+ "inventory_links": {
802
+ "canonical-suite-root-vs-managed-app-root": "canonical-suite-root-vs-managed-app-root",
803
+ "behavior_shape_map": {
804
+ "valid setup root": "managed_fresh",
805
+ "missing explicit setup root": "missing_explicit_or_environment",
806
+ "file explicit setup root": "file_valued_root",
807
+ "unmanaged explicit setup directory": "unmanaged_directory",
808
+ "env-derived valid setup root": "managed_fresh",
809
+ "auto-detect/default setup root": "managed_fresh",
810
+ "fresh managed upgrade root": "managed_fresh",
811
+ "stale managed upgrade root": "managed_stale",
812
+ "missing explicit or AGENTERA_HOME upgrade root": "missing_explicit_or_environment",
813
+ "missing default upgrade root": "missing_default",
814
+ "file upgrade root": "file_valued_root",
815
+ "unmanaged upgrade directory": "unmanaged_directory",
816
+ "OpenCode runtime AGENTERA_HOME candidate": "managed_fresh"
817
+ }
818
+ }
819
+ };
820
+ // --- END GENERATED: INSTALL_ROOT_CONTRACT ---