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,635 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { LifecyclePublicationError, observeLifecyclePath, publishLifecycleResource, removeLifecycleResource, sameLifecycleIdentity, secureLifecycleRemovalAvailable, verifyLifecycleResourceAtPublication, } from "./lifecyclePublication.js";
5
+ export const LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH = "references/adapters/runtime-lifecycle-operation-contract.yaml";
6
+ export const LIFECYCLE_MANIFEST_SCHEMA = "agentera.lifecycleOwnershipManifest.v1";
7
+ export const LIFECYCLE_LEDGER_SCHEMA = "agentera.lifecycleOwnershipLedger.v1";
8
+ export const LIFECYCLE_RESOURCE_STATES = [
9
+ "exact",
10
+ "modified",
11
+ "missing",
12
+ "legacy",
13
+ "symlinked",
14
+ "wrong_type",
15
+ "partial_managed",
16
+ "unowned",
17
+ "unsafe_path",
18
+ "ambiguous_ownership",
19
+ ];
20
+ export const LIFECYCLE_PLAN_ACTIONS = [
21
+ "create",
22
+ "update",
23
+ "remove",
24
+ "finalize_ownership",
25
+ "noop",
26
+ "blocked_unowned",
27
+ "action_required",
28
+ ];
29
+ export const LIFECYCLE_APPLY_STATUSES = [
30
+ "applied",
31
+ "noop",
32
+ "failed",
33
+ "blocked_unowned",
34
+ "skipped_dependency",
35
+ "action_required",
36
+ ];
37
+ export const LIFECYCLE_MANUAL_REVIEW_GUIDANCE = "The destination is not ledger-owned; review the collision manually. Agentera will not adopt it by name or equality.";
38
+ export class LifecycleOperationError extends Error {
39
+ constructor(message) {
40
+ super(message);
41
+ this.name = "LifecycleOperationError";
42
+ }
43
+ }
44
+ function fingerprintBytes(bytes) {
45
+ return `sha256:${crypto.createHash("sha256").update(bytes).digest("hex")}`;
46
+ }
47
+ export function lifecycleOperationFingerprint(spec) {
48
+ if (spec.intent === "remove")
49
+ return null;
50
+ if (spec.kind === "directory")
51
+ return "directory";
52
+ if (spec.kind === "symlink") {
53
+ return spec.linkTarget === undefined ? null : fingerprintBytes(Buffer.from(spec.linkTarget));
54
+ }
55
+ return spec.content === undefined
56
+ ? null
57
+ : fingerprintBytes(Buffer.isBuffer(spec.content) ? spec.content : Buffer.from(spec.content));
58
+ }
59
+ export function createLifecycleOwnershipManifest(operations) {
60
+ return {
61
+ schemaVersion: LIFECYCLE_MANIFEST_SCHEMA,
62
+ owner: "agentera",
63
+ resources: operations.map((spec) => ({
64
+ resourceId: spec.id,
65
+ destination: path.resolve(spec.destination),
66
+ kind: spec.kind,
67
+ intent: spec.intent,
68
+ expectedFingerprint: lifecycleOperationFingerprint(spec),
69
+ })),
70
+ };
71
+ }
72
+ export function emptyLifecycleOwnershipLedger() {
73
+ return { schemaVersion: LIFECYCLE_LEDGER_SCHEMA, owner: "agentera", records: [] };
74
+ }
75
+ function isObject(value) {
76
+ return value !== null && typeof value === "object" && !Array.isArray(value);
77
+ }
78
+ export function validateLifecycleOwnershipManifest(value) {
79
+ if (!isObject(value))
80
+ return ["manifest must be an object"];
81
+ const errors = [];
82
+ if (value.schemaVersion !== LIFECYCLE_MANIFEST_SCHEMA) {
83
+ errors.push(`manifest.schemaVersion must be ${LIFECYCLE_MANIFEST_SCHEMA}`);
84
+ }
85
+ if (value.owner !== "agentera")
86
+ errors.push("manifest.owner must be agentera");
87
+ if (!Array.isArray(value.resources))
88
+ return [...errors, "manifest.resources must be a list"];
89
+ const seen = new Set();
90
+ for (const [index, resource] of value.resources.entries()) {
91
+ if (!isObject(resource)) {
92
+ errors.push(`manifest.resources[${index}] must be an object`);
93
+ continue;
94
+ }
95
+ const id = resource.resourceId;
96
+ if (typeof id !== "string" || id.length === 0) {
97
+ errors.push(`manifest.resources[${index}].resourceId must be a non-empty string`);
98
+ }
99
+ else if (seen.has(id)) {
100
+ errors.push(`manifest.resources[${index}].resourceId duplicates ${id}`);
101
+ }
102
+ else
103
+ seen.add(id);
104
+ if (typeof resource.destination !== "string" || !path.isAbsolute(resource.destination)) {
105
+ errors.push(`manifest.resources[${index}].destination must be absolute`);
106
+ }
107
+ if (!["file", "directory", "symlink"].includes(resource.kind)) {
108
+ errors.push(`manifest.resources[${index}].kind is invalid`);
109
+ }
110
+ if (!["ensure", "remove"].includes(resource.intent)) {
111
+ errors.push(`manifest.resources[${index}].intent is invalid`);
112
+ }
113
+ if (resource.expectedFingerprint !== null && typeof resource.expectedFingerprint !== "string") {
114
+ errors.push(`manifest.resources[${index}].expectedFingerprint must be a string or null`);
115
+ }
116
+ }
117
+ return errors;
118
+ }
119
+ export function validateLifecycleOwnershipLedger(value) {
120
+ if (!isObject(value))
121
+ return ["ledger must be an object"];
122
+ const errors = [];
123
+ if (value.schemaVersion !== LIFECYCLE_LEDGER_SCHEMA) {
124
+ errors.push(`ledger.schemaVersion must be ${LIFECYCLE_LEDGER_SCHEMA}`);
125
+ }
126
+ if (value.owner !== "agentera")
127
+ errors.push("ledger.owner must be agentera");
128
+ if (!Array.isArray(value.records))
129
+ return [...errors, "ledger.records must be a list"];
130
+ const seen = new Set();
131
+ for (const [index, record] of value.records.entries()) {
132
+ if (!isObject(record)) {
133
+ errors.push(`ledger.records[${index}] must be an object`);
134
+ continue;
135
+ }
136
+ const id = record.resourceId;
137
+ if (typeof id !== "string" || id.length === 0) {
138
+ errors.push(`ledger.records[${index}].resourceId must be a non-empty string`);
139
+ }
140
+ else if (seen.has(id)) {
141
+ errors.push(`ledger.records[${index}].resourceId duplicates ${id}`);
142
+ }
143
+ else
144
+ seen.add(id);
145
+ if (typeof record.destination !== "string"
146
+ || !path.isAbsolute(record.destination)
147
+ || path.resolve(record.destination) !== record.destination) {
148
+ errors.push(`ledger.records[${index}].destination must be absolute`);
149
+ }
150
+ if (!["file", "directory", "symlink"].includes(record.kind)) {
151
+ errors.push(`ledger.records[${index}].kind is invalid`);
152
+ }
153
+ if (record.scope !== "whole" && record.scope !== "partial") {
154
+ errors.push(`ledger.records[${index}].scope must be whole or partial`);
155
+ }
156
+ if (!["managed", "legacy", "pending_create"].includes(record.status)) {
157
+ errors.push(`ledger.records[${index}].status is invalid`);
158
+ }
159
+ if (record.fingerprint !== null && typeof record.fingerprint !== "string") {
160
+ errors.push(`ledger.records[${index}].fingerprint must be a string or null`);
161
+ }
162
+ if (record.identity !== null && (!isObject(record.identity)
163
+ || typeof record.identity.device !== "string"
164
+ || !/^\d+$/.test(record.identity.device)
165
+ || typeof record.identity.inode !== "string"
166
+ || !/^\d+$/.test(record.identity.inode))) {
167
+ errors.push(`ledger.records[${index}].identity must contain string device and inode fields or be null`);
168
+ }
169
+ if (["managed", "legacy"].includes(record.status) && record.identity === null) {
170
+ errors.push(`ledger.records[${index}].identity is required for ${String(record.status)} ownership`);
171
+ }
172
+ }
173
+ return errors;
174
+ }
175
+ export function readLifecycleOwnershipLedger(ledgerPath) {
176
+ try {
177
+ const parsed = JSON.parse(fs.readFileSync(ledgerPath, "utf8"));
178
+ const errors = validateLifecycleOwnershipLedger(parsed);
179
+ if (errors.length > 0)
180
+ throw new LifecycleOperationError(errors.join("; "));
181
+ return parsed;
182
+ }
183
+ catch (error) {
184
+ if (error.code === "ENOENT")
185
+ return emptyLifecycleOwnershipLedger();
186
+ throw error;
187
+ }
188
+ }
189
+ export function writeLifecycleOwnershipLedgerAtomic(ledgerPath, ledger) {
190
+ const errors = validateLifecycleOwnershipLedger(ledger);
191
+ if (errors.length > 0)
192
+ throw new LifecycleOperationError(errors.join("; "));
193
+ const parent = path.dirname(ledgerPath);
194
+ let parentStat;
195
+ try {
196
+ parentStat = fs.lstatSync(parent);
197
+ }
198
+ catch {
199
+ throw new LifecycleOperationError(`ownership ledger parent does not exist: ${parent}`);
200
+ }
201
+ if (!parentStat.isDirectory() || parentStat.isSymbolicLink()) {
202
+ throw new LifecycleOperationError(`ownership ledger parent is not a safe directory: ${parent}`);
203
+ }
204
+ const observation = observeLifecyclePath(ledgerPath, [parent]);
205
+ if (observation.unsafeReason)
206
+ throw new LifecycleOperationError(observation.unsafeReason);
207
+ if (observation.kind !== "missing" && observation.kind !== "file") {
208
+ throw new LifecycleOperationError("ownership ledger must be a regular file or absent");
209
+ }
210
+ // Ledger snapshots are replaced only after the complete new bytes are durable.
211
+ // A process interruption therefore leaves either the previous valid snapshot or
212
+ // the next valid snapshot, never an in-place truncation of ownership evidence.
213
+ const temporary = `${ledgerPath}.next-${process.pid}-${crypto.randomUUID()}`;
214
+ let fd = null;
215
+ try {
216
+ fd = fs.openSync(temporary, fs.constants.O_WRONLY
217
+ | fs.constants.O_CREAT
218
+ | fs.constants.O_EXCL
219
+ | (fs.constants.O_NOFOLLOW ?? 0), 0o600);
220
+ const bytes = Buffer.from(`${JSON.stringify(ledger, null, 2)}\n`);
221
+ let offset = 0;
222
+ while (offset < bytes.length) {
223
+ const written = fs.writeSync(fd, bytes, offset, bytes.length - offset, offset);
224
+ if (written === 0)
225
+ throw new LifecycleOperationError("ownership ledger write made no progress");
226
+ offset += written;
227
+ }
228
+ fs.fsyncSync(fd);
229
+ fs.closeSync(fd);
230
+ fd = null;
231
+ fs.renameSync(temporary, ledgerPath);
232
+ const parentFd = fs.openSync(parent, fs.constants.O_RDONLY | (fs.constants.O_DIRECTORY ?? 0));
233
+ try {
234
+ fs.fsyncSync(parentFd);
235
+ }
236
+ finally {
237
+ fs.closeSync(parentFd);
238
+ }
239
+ }
240
+ finally {
241
+ if (fd !== null)
242
+ fs.closeSync(fd);
243
+ try {
244
+ fs.unlinkSync(temporary);
245
+ }
246
+ catch {
247
+ // A complete old or new ledger remains authoritative; stale staging bytes
248
+ // are never read as ownership evidence.
249
+ }
250
+ }
251
+ }
252
+ function cloneLedger(ledger) {
253
+ return {
254
+ schemaVersion: ledger.schemaVersion,
255
+ owner: ledger.owner,
256
+ records: ledger.records.map((record) => ({ ...record })),
257
+ };
258
+ }
259
+ function containingRoot(destination, allowedRoots) {
260
+ const roots = allowedRoots.map((root) => path.resolve(root)).sort((a, b) => b.length - a.length);
261
+ return roots.find((root) => {
262
+ const relative = path.relative(root, destination);
263
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
264
+ }) ?? null;
265
+ }
266
+ function lstatMaybe(target) {
267
+ try {
268
+ return fs.lstatSync(target);
269
+ }
270
+ catch (error) {
271
+ if (error.code === "ENOENT")
272
+ return null;
273
+ throw error;
274
+ }
275
+ }
276
+ function linkTargetSafety(spec, allowedRoots) {
277
+ if (spec.kind !== "symlink" || spec.intent !== "ensure")
278
+ return null;
279
+ if (spec.linkTarget === undefined)
280
+ return "symlink operation has no link target";
281
+ const target = path.resolve(path.dirname(spec.destination), spec.linkTarget);
282
+ const root = containingRoot(target, allowedRoots);
283
+ if (!root)
284
+ return "symlink target escapes allowed roots";
285
+ const relative = path.relative(root, target);
286
+ let cursor = root;
287
+ for (const segment of relative === "" ? [] : relative.split(path.sep)) {
288
+ cursor = path.join(cursor, segment);
289
+ const stat = lstatMaybe(cursor);
290
+ if (!stat)
291
+ break;
292
+ if (stat.isSymbolicLink())
293
+ return `symlink target traverses another symlink at ${cursor}`;
294
+ }
295
+ return null;
296
+ }
297
+ function actionRequired(spec, state, ownership, reason) {
298
+ return planned(spec, state, ownership, "action_required", reason);
299
+ }
300
+ function planned(spec, state, ownership, action, reason) {
301
+ return {
302
+ id: spec.id,
303
+ destination: path.resolve(spec.destination),
304
+ state,
305
+ ownership,
306
+ action,
307
+ required: spec.required !== false,
308
+ dependsOn: [...(spec.dependsOn ?? [])],
309
+ reason,
310
+ };
311
+ }
312
+ function matchingDeclarations(manifest, spec) {
313
+ return manifest.resources.filter((resource) => resource.resourceId === spec.id);
314
+ }
315
+ function matchingRecords(ledger, spec) {
316
+ return ledger.records.filter((record) => record.resourceId === spec.id);
317
+ }
318
+ function planOne(spec, manifest, ledger, allowedRoots, suppliedObservation) {
319
+ const declarations = matchingDeclarations(manifest, spec);
320
+ if (declarations.length !== 1) {
321
+ return actionRequired(spec, declarations.length === 0 ? "ambiguous_ownership" : "ambiguous_ownership", declarations.length === 0 ? "undeclared" : "ambiguous", declarations.length === 0
322
+ ? "no Agentera ownership declaration matches the resource"
323
+ : "multiple Agentera ownership declarations match the resource");
324
+ }
325
+ const declaration = declarations[0];
326
+ const expectedFingerprint = lifecycleOperationFingerprint(spec);
327
+ if (path.resolve(declaration.destination) !== path.resolve(spec.destination) ||
328
+ declaration.kind !== spec.kind ||
329
+ declaration.intent !== spec.intent ||
330
+ declaration.expectedFingerprint !== expectedFingerprint) {
331
+ return actionRequired(spec, "ambiguous_ownership", "undeclared", "operation does not match its Agentera ownership declaration");
332
+ }
333
+ const observation = suppliedObservation ?? observeLifecyclePath(spec.destination, allowedRoots);
334
+ if (observation.unsafeReason) {
335
+ return actionRequired(spec, "unsafe_path", "undeclared", observation.unsafeReason);
336
+ }
337
+ const unsafeLink = linkTargetSafety(spec, allowedRoots);
338
+ if (unsafeLink)
339
+ return actionRequired(spec, "unsafe_path", "undeclared", unsafeLink);
340
+ const records = matchingRecords(ledger, spec);
341
+ if (records.length > 1) {
342
+ return actionRequired(spec, "ambiguous_ownership", "ambiguous", "multiple ownership ledger records match the resource");
343
+ }
344
+ const record = records[0];
345
+ if (record && (path.resolve(record.destination) !== path.resolve(spec.destination) ||
346
+ record.kind !== spec.kind)) {
347
+ return actionRequired(spec, "ambiguous_ownership", "ambiguous", "ownership ledger record does not match the declared destination and kind");
348
+ }
349
+ if (record?.scope === "partial") {
350
+ return actionRequired(spec, "partial_managed", "partial", "partial ownership cannot authorize a whole-resource mutation");
351
+ }
352
+ if (!record && observation.kind !== "missing") {
353
+ return planned(spec, "unowned", "unowned", "blocked_unowned", "pre-existing resource has no matching Agentera ownership ledger record");
354
+ }
355
+ if (observation.kind === "missing") {
356
+ if (spec.intent === "remove") {
357
+ return record
358
+ ? planned(spec, "missing", record.status === "legacy" ? "legacy" : "managed", "finalize_ownership", "resource is absent; stale ownership record will be removed")
359
+ : planned(spec, "missing", "claimable", "noop", "resource is already absent");
360
+ }
361
+ return planned(spec, "missing", record?.status === "legacy" ? "legacy" : record ? "managed" : "claimable", "create", "declared resource is absent and can be created safely");
362
+ }
363
+ if (observation.kind === "symlink" && spec.kind !== "symlink") {
364
+ return actionRequired(spec, "symlinked", record?.status === "legacy" ? "legacy" : "managed", "resource is a symlink where a non-symlink was declared");
365
+ }
366
+ if (observation.kind !== spec.kind) {
367
+ return actionRequired(spec, "wrong_type", record?.status === "legacy" ? "legacy" : "managed", `resource kind ${observation.kind} does not match declared kind ${spec.kind}`);
368
+ }
369
+ if (record?.status === "pending_create" && !record.identity) {
370
+ if (observation.fingerprint === expectedFingerprint) {
371
+ return planned(spec, "exact", "managed", "finalize_ownership", "interrupted create published exact bytes before its identity record; ownership can be recovered from the observed resource");
372
+ }
373
+ return actionRequired(spec, "partial_managed", "partial", "interrupted create has no recorded publication identity and the observed resource does not match exactly");
374
+ }
375
+ if (!record?.identity) {
376
+ return actionRequired(spec, record?.status === "pending_create" ? "partial_managed" : "ambiguous_ownership", record?.status === "pending_create" ? "partial" : "ambiguous", "ownership record has no published resource identity");
377
+ }
378
+ if (!sameLifecycleIdentity(record.identity, observation.identity)) {
379
+ return actionRequired(spec, "ambiguous_ownership", "ambiguous", "resource identity no longer matches the ownership ledger");
380
+ }
381
+ if (record?.status === "pending_create") {
382
+ if (observation.fingerprint === expectedFingerprint) {
383
+ return planned(spec, "exact", "managed", "finalize_ownership", "interrupted create completed; ownership ledger can be finalized");
384
+ }
385
+ return spec.kind === "file" && spec.intent === "ensure"
386
+ ? planned(spec, "modified", "managed", "update", "interrupted Agentera-created file will resume through its recorded identity")
387
+ : actionRequired(spec, "partial_managed", "partial", "interrupted create differs and has no safe conditional replacement primitive");
388
+ }
389
+ if (spec.intent === "remove") {
390
+ const ownership = record?.status === "legacy" ? "legacy" : "managed";
391
+ const state = record?.status === "legacy" ? "legacy" : "exact";
392
+ if (!secureLifecycleRemovalAvailable()) {
393
+ return actionRequired(spec, state, ownership, "safe removal requires Linux /proc/self/fd pinned-parent access");
394
+ }
395
+ if (!record?.fingerprint || record.fingerprint !== observation.fingerprint) {
396
+ return actionRequired(spec, state, ownership, "ownership ledger fingerprint must match the observed resource before removal");
397
+ }
398
+ if (spec.kind === "directory" && fs.readdirSync(spec.destination).length > 0) {
399
+ return actionRequired(spec, "partial_managed", "partial", "non-empty directories require separately declared child removals");
400
+ }
401
+ return planned(spec, state, ownership, "remove", "owned resource identity and fingerprint match for pinned-parent removal");
402
+ }
403
+ if (record?.status === "legacy") {
404
+ return actionRequired(spec, "legacy", "legacy", "legacy resources may only be removed");
405
+ }
406
+ if (observation.fingerprint === expectedFingerprint) {
407
+ if (record.fingerprint !== expectedFingerprint) {
408
+ return planned(spec, "exact", "managed", "finalize_ownership", "resource is exact; ownership ledger fingerprint will be refreshed");
409
+ }
410
+ return planned(spec, "exact", "managed", "noop", "owned resource already matches");
411
+ }
412
+ if (spec.kind !== "file") {
413
+ return actionRequired(spec, "modified", "managed", "safe conditional replacement is unavailable for symlinks and directories");
414
+ }
415
+ return planned(spec, "modified", "managed", "update", "owned resource differs from declaration");
416
+ }
417
+ function validateRequest(request) {
418
+ if (request.allowedRoots.length === 0) {
419
+ throw new LifecycleOperationError("at least one allowed root is required");
420
+ }
421
+ const ids = request.operations.map((operation) => operation.id);
422
+ const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);
423
+ if (duplicates.length > 0) {
424
+ throw new LifecycleOperationError(`duplicate operation ids: ${[...new Set(duplicates)].join(", ")}`);
425
+ }
426
+ const idSet = new Set(ids);
427
+ for (const operation of request.operations) {
428
+ if (!operation.id)
429
+ throw new LifecycleOperationError("operation ids must be non-empty");
430
+ if (operation.intent === "ensure" && operation.kind === "file" && operation.content === undefined) {
431
+ throw new LifecycleOperationError(`${operation.id}: file ensure operation requires content`);
432
+ }
433
+ if (operation.intent === "ensure" && operation.kind === "symlink" && operation.linkTarget === undefined) {
434
+ throw new LifecycleOperationError(`${operation.id}: symlink ensure operation requires linkTarget`);
435
+ }
436
+ for (const dependency of operation.dependsOn ?? []) {
437
+ if (!idSet.has(dependency)) {
438
+ throw new LifecycleOperationError(`${operation.id}: unknown dependency ${dependency}`);
439
+ }
440
+ if (dependency === operation.id) {
441
+ throw new LifecycleOperationError(`${operation.id}: operation cannot depend on itself`);
442
+ }
443
+ }
444
+ }
445
+ const manifestErrors = validateLifecycleOwnershipManifest(request.manifest).filter((error) => !error.includes("duplicates"));
446
+ if (manifestErrors.length > 0)
447
+ throw new LifecycleOperationError(manifestErrors.join("; "));
448
+ const ledgerErrors = validateLifecycleOwnershipLedger(request.ledger ?? emptyLifecycleOwnershipLedger()).filter((error) => !error.includes("duplicates"));
449
+ if (ledgerErrors.length > 0)
450
+ throw new LifecycleOperationError(ledgerErrors.join("; "));
451
+ }
452
+ function executionOrder(operations) {
453
+ const pending = [...operations];
454
+ const emitted = new Set();
455
+ const ordered = [];
456
+ while (pending.length > 0) {
457
+ const index = pending.findIndex((operation) => (operation.dependsOn ?? []).every((dependency) => emitted.has(dependency)));
458
+ if (index < 0) {
459
+ throw new LifecycleOperationError(`operation dependency cycle: ${pending.map((item) => item.id).join(", ")}`);
460
+ }
461
+ const [next] = pending.splice(index, 1);
462
+ ordered.push(next);
463
+ emitted.add(next.id);
464
+ }
465
+ return ordered;
466
+ }
467
+ export function planLifecycleOperations(request) {
468
+ validateRequest(request);
469
+ const ledger = request.ledger ?? emptyLifecycleOwnershipLedger();
470
+ const ordered = executionOrder(request.operations);
471
+ return {
472
+ schemaVersion: "agentera.lifecycleOperationPlan.v1",
473
+ mode: "preview",
474
+ operations: ordered.map((operation) => planOne(operation, request.manifest, ledger, request.allowedRoots)),
475
+ request,
476
+ };
477
+ }
478
+ function nextManagedRecord(spec, identity) {
479
+ return {
480
+ resourceId: spec.id,
481
+ destination: path.resolve(spec.destination),
482
+ kind: spec.kind,
483
+ scope: "whole",
484
+ status: "managed",
485
+ fingerprint: lifecycleOperationFingerprint(spec),
486
+ identity,
487
+ };
488
+ }
489
+ function withRecord(ledger, record, resourceId) {
490
+ const records = ledger.records.filter((candidate) => candidate.resourceId !== resourceId);
491
+ if (record)
492
+ records.push(record);
493
+ return { ...ledger, records };
494
+ }
495
+ function publishLedger(next, persist) {
496
+ if (persist)
497
+ persist(cloneLedger(next));
498
+ return next;
499
+ }
500
+ function applySummary(operations) {
501
+ const summary = {
502
+ applied: 0,
503
+ noop: 0,
504
+ failed: 0,
505
+ blocked_unowned: 0,
506
+ skipped_dependency: 0,
507
+ action_required: 0,
508
+ };
509
+ for (const operation of operations)
510
+ summary[operation.status] += 1;
511
+ return summary;
512
+ }
513
+ export function applyLifecycleOperations(plan, options = {}) {
514
+ const request = plan.request;
515
+ validateRequest(request);
516
+ let ledger = cloneLedger(request.ledger ?? emptyLifecycleOwnershipLedger());
517
+ const results = [];
518
+ const resultById = new Map();
519
+ for (const spec of executionOrder(request.operations)) {
520
+ const dependencyCauses = (spec.dependsOn ?? []).filter((dependency) => {
521
+ const status = resultById.get(dependency)?.status;
522
+ return status !== "applied" && status !== "noop";
523
+ });
524
+ const observation = observeLifecyclePath(spec.destination, request.allowedRoots);
525
+ const current = planOne(spec, request.manifest, ledger, request.allowedRoots, observation);
526
+ if (dependencyCauses.length > 0) {
527
+ const result = {
528
+ ...current,
529
+ status: "skipped_dependency",
530
+ dependencyCauses,
531
+ reason: `skipped because dependencies did not succeed: ${dependencyCauses.join(", ")}`,
532
+ };
533
+ results.push(result);
534
+ resultById.set(spec.id, result);
535
+ continue;
536
+ }
537
+ if (current.action === "noop" || current.action === "blocked_unowned" || current.action === "action_required") {
538
+ const status = current.action === "noop" ? "noop" : current.action;
539
+ const result = { ...current, status, dependencyCauses: [] };
540
+ results.push(result);
541
+ resultById.set(spec.id, result);
542
+ continue;
543
+ }
544
+ let publishedIdentity;
545
+ try {
546
+ if (current.action === "finalize_ownership") {
547
+ const identity = verifyLifecycleResourceAtPublication(spec, observation, options.beforePublication);
548
+ const next = spec.intent === "remove"
549
+ ? withRecord(ledger, null, spec.id)
550
+ : withRecord(ledger, nextManagedRecord(spec, identity), spec.id);
551
+ ledger = publishLedger(next, options.persistLedger);
552
+ }
553
+ else {
554
+ const existingRecord = ledger.records.find((record) => record.resourceId === spec.id);
555
+ if (current.action === "create" && !existingRecord) {
556
+ const pending = {
557
+ resourceId: spec.id,
558
+ destination: path.resolve(spec.destination),
559
+ kind: spec.kind,
560
+ scope: "whole",
561
+ status: "pending_create",
562
+ fingerprint: lifecycleOperationFingerprint(spec),
563
+ identity: null,
564
+ };
565
+ ledger = publishLedger(withRecord(ledger, pending, spec.id), options.persistLedger);
566
+ }
567
+ if (current.action === "remove") {
568
+ removeLifecycleResource(spec, observation, options.beforePublication);
569
+ ledger = publishLedger(withRecord(ledger, null, spec.id), options.persistLedger);
570
+ }
571
+ else if (current.action !== "create" && current.action !== "update") {
572
+ throw new LifecycleOperationError(`${current.action} has no safe publication implementation`);
573
+ }
574
+ else {
575
+ publishedIdentity = publishLifecycleResource(spec, current.action, observation, options.beforePublication);
576
+ }
577
+ if (current.action === "create" && publishedIdentity) {
578
+ const publishedPending = {
579
+ ...nextManagedRecord(spec, publishedIdentity),
580
+ status: "pending_create",
581
+ };
582
+ ledger = publishLedger(withRecord(ledger, publishedPending, spec.id), options.persistLedger);
583
+ }
584
+ if (current.action !== "remove") {
585
+ const next = withRecord(ledger, nextManagedRecord(spec, publishedIdentity), spec.id);
586
+ ledger = publishLedger(next, options.persistLedger);
587
+ }
588
+ }
589
+ const result = {
590
+ ...current,
591
+ status: "applied",
592
+ dependencyCauses: [],
593
+ };
594
+ results.push(result);
595
+ resultById.set(spec.id, result);
596
+ }
597
+ catch (error) {
598
+ const createdIdentity = error instanceof LifecyclePublicationError
599
+ ? error.createdIdentity
600
+ : undefined;
601
+ if (current.action === "create" && createdIdentity) {
602
+ const publishedPending = {
603
+ ...nextManagedRecord(spec, createdIdentity),
604
+ status: "pending_create",
605
+ };
606
+ try {
607
+ ledger = publishLedger(withRecord(ledger, publishedPending, spec.id), options.persistLedger);
608
+ }
609
+ catch {
610
+ // Keep the last ledger state; the target is never removed without a conditional unlink primitive.
611
+ }
612
+ }
613
+ const result = {
614
+ ...current,
615
+ status: "failed",
616
+ dependencyCauses: [],
617
+ reason: `${current.action} failed: ${error.message}`,
618
+ };
619
+ results.push(result);
620
+ resultById.set(spec.id, result);
621
+ }
622
+ }
623
+ const requiredUnmet = results
624
+ .filter((result) => result.required && result.status !== "applied" && result.status !== "noop")
625
+ .map((result) => result.id);
626
+ return {
627
+ schemaVersion: "agentera.lifecycleApplyResult.v1",
628
+ status: requiredUnmet.length === 0 ? "success" : "non_success",
629
+ operations: results,
630
+ summary: applySummary(results),
631
+ requiredUnmet,
632
+ ownershipLedger: ledger,
633
+ };
634
+ }
635
+ //# sourceMappingURL=lifecycleOperations.js.map