@agimon-ai/doompi-hook 0.0.1-alpha.56 → 0.0.1-alpha.58

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 (238) hide show
  1. package/dist/{src/schemas/apiContracts.cjs → apiContracts.cjs} +5 -1
  2. package/dist/apiContracts.cjs.map +1 -0
  3. package/dist/{src/schemas/apiContracts.d.mts.map → apiContracts.d.mts.map} +1 -1
  4. package/dist/{src/schemas/apiContracts.mjs → apiContracts.mjs} +1 -1
  5. package/dist/apiContracts.mjs.map +1 -0
  6. package/dist/extensions/mcp.cjs +5 -5
  7. package/dist/extensions/mcp.cjs.map +1 -1
  8. package/dist/extensions/mcp.d.mts +1 -1
  9. package/dist/extensions/mcp.d.mts.map +1 -1
  10. package/dist/extensions/mcp.mjs +2 -2
  11. package/dist/extensions/mcp.mjs.map +1 -1
  12. package/dist/extensions/pi.cjs +314 -20
  13. package/dist/extensions/pi.cjs.map +1 -1
  14. package/dist/extensions/pi.d.mts +2 -3
  15. package/dist/extensions/pi.d.mts.map +1 -1
  16. package/dist/extensions/pi.mjs +304 -10
  17. package/dist/extensions/pi.mjs.map +1 -1
  18. package/dist/extensions/server.cjs +56 -12
  19. package/dist/extensions/server.cjs.map +1 -1
  20. package/dist/extensions/server.d.mts +1 -1
  21. package/dist/extensions/server.d.mts.map +1 -1
  22. package/dist/extensions/server.mjs +50 -6
  23. package/dist/extensions/server.mjs.map +1 -1
  24. package/dist/hooks-CReMXrU9.cjs +615 -0
  25. package/dist/hooks-CReMXrU9.cjs.map +1 -0
  26. package/dist/hooks-D2s_5hzZ.mjs +473 -0
  27. package/dist/hooks-D2s_5hzZ.mjs.map +1 -0
  28. package/dist/index-LpLV04fM.d.mts +297 -0
  29. package/dist/index-LpLV04fM.d.mts.map +1 -0
  30. package/dist/index.cjs +20 -29
  31. package/dist/index.d.mts +1 -13
  32. package/dist/index.mjs +1 -10
  33. package/package.json +18 -18
  34. package/dist/_virtual/_rolldown/runtime.cjs +0 -23
  35. package/dist/api-contracts.cjs +0 -7
  36. package/dist/api-contracts.d.cts +0 -2
  37. package/dist/api-contracts.d.mts +0 -2
  38. package/dist/api-contracts.mjs +0 -2
  39. package/dist/extensions/mcp.d.cts +0 -5
  40. package/dist/extensions/mcp.d.cts.map +0 -1
  41. package/dist/extensions/pi.d.cts +0 -7
  42. package/dist/extensions/pi.d.cts.map +0 -1
  43. package/dist/extensions/server.d.cts +0 -5
  44. package/dist/extensions/server.d.cts.map +0 -1
  45. package/dist/index.d.cts +0 -14
  46. package/dist/src/constants/hook.cjs +0 -11
  47. package/dist/src/constants/hook.cjs.map +0 -1
  48. package/dist/src/constants/hook.mjs +0 -10
  49. package/dist/src/constants/hook.mjs.map +0 -1
  50. package/dist/src/constants/hookDecisions.cjs +0 -8
  51. package/dist/src/constants/hookDecisions.cjs.map +0 -1
  52. package/dist/src/constants/hookDecisions.mjs +0 -7
  53. package/dist/src/constants/hookDecisions.mjs.map +0 -1
  54. package/dist/src/constants/hookDocuments.cjs +0 -12
  55. package/dist/src/constants/hookDocuments.cjs.map +0 -1
  56. package/dist/src/constants/hookDocuments.mjs +0 -9
  57. package/dist/src/constants/hookDocuments.mjs.map +0 -1
  58. package/dist/src/constants/hookHandlers.cjs +0 -16
  59. package/dist/src/constants/hookHandlers.cjs.map +0 -1
  60. package/dist/src/constants/hookHandlers.mjs +0 -11
  61. package/dist/src/constants/hookHandlers.mjs.map +0 -1
  62. package/dist/src/constants/hookPayload.cjs +0 -6
  63. package/dist/src/constants/hookPayload.cjs.map +0 -1
  64. package/dist/src/constants/hookPayload.mjs +0 -6
  65. package/dist/src/constants/hookPayload.mjs.map +0 -1
  66. package/dist/src/constants/hookRunner.cjs +0 -16
  67. package/dist/src/constants/hookRunner.cjs.map +0 -1
  68. package/dist/src/constants/hookRunner.mjs +0 -11
  69. package/dist/src/constants/hookRunner.mjs.map +0 -1
  70. package/dist/src/constants/hookTelemetry.cjs +0 -8
  71. package/dist/src/constants/hookTelemetry.cjs.map +0 -1
  72. package/dist/src/constants/hookTelemetry.mjs +0 -7
  73. package/dist/src/constants/hookTelemetry.mjs.map +0 -1
  74. package/dist/src/constants/hooks.cjs +0 -12
  75. package/dist/src/constants/hooks.cjs.map +0 -1
  76. package/dist/src/constants/hooks.d.cts +0 -10
  77. package/dist/src/constants/hooks.d.cts.map +0 -1
  78. package/dist/src/constants/hooks.d.mts +0 -10
  79. package/dist/src/constants/hooks.d.mts.map +0 -1
  80. package/dist/src/constants/hooks.mjs +0 -12
  81. package/dist/src/constants/hooks.mjs.map +0 -1
  82. package/dist/src/constants/telemetry.cjs +0 -9
  83. package/dist/src/constants/telemetry.cjs.map +0 -1
  84. package/dist/src/constants/telemetry.d.cts +0 -7
  85. package/dist/src/constants/telemetry.d.cts.map +0 -1
  86. package/dist/src/constants/telemetry.d.mts +0 -7
  87. package/dist/src/constants/telemetry.d.mts.map +0 -1
  88. package/dist/src/constants/telemetry.mjs +0 -9
  89. package/dist/src/constants/telemetry.mjs.map +0 -1
  90. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.cjs +0 -14
  91. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.cjs.map +0 -1
  92. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.mjs +0 -14
  93. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/piRoot.mjs.map +0 -1
  94. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.cjs +0 -6
  95. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.cjs.map +0 -1
  96. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.mjs +0 -7
  97. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.mjs.map +0 -1
  98. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.server.cjs +0 -7
  99. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.server.cjs.map +0 -1
  100. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.server.mjs +0 -8
  101. package/dist/src/extensions/workspaces/sessions/(backend)/hook/agent-settled.server.mjs.map +0 -1
  102. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs +0 -6
  103. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs.map +0 -1
  104. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs +0 -7
  105. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs.map +0 -1
  106. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs +0 -7
  107. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs.map +0 -1
  108. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs +0 -8
  109. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs.map +0 -1
  110. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.cjs +0 -6
  111. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.cjs.map +0 -1
  112. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.mjs +0 -7
  113. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.mjs.map +0 -1
  114. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs +0 -7
  115. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map +0 -1
  116. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs +0 -8
  117. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map +0 -1
  118. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +0 -6
  119. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +0 -1
  120. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +0 -7
  121. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +0 -1
  122. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.cjs +0 -6
  123. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.cjs.map +0 -1
  124. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.mjs +0 -7
  125. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.mjs.map +0 -1
  126. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.cjs +0 -6
  127. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.cjs.map +0 -1
  128. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.mjs +0 -7
  129. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.mjs.map +0 -1
  130. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.server.cjs +0 -7
  131. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.server.cjs.map +0 -1
  132. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.server.mjs +0 -8
  133. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-result.server.mjs.map +0 -1
  134. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-hook.server.cjs +0 -12
  135. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-hook.server.cjs.map +0 -1
  136. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-hook.server.mjs +0 -12
  137. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-author-hook.server.mjs.map +0 -1
  138. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.cjs +0 -11
  139. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.cjs.map +0 -1
  140. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.mjs +0 -12
  141. package/dist/src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.mjs.map +0 -1
  142. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +0 -7
  143. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +0 -1
  144. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +0 -8
  145. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +0 -1
  146. package/dist/src/schemas/apiContracts.cjs.map +0 -1
  147. package/dist/src/schemas/apiContracts.d.cts +0 -53
  148. package/dist/src/schemas/apiContracts.d.cts.map +0 -1
  149. package/dist/src/schemas/apiContracts.mjs.map +0 -1
  150. package/dist/src/services/hookDecisions/index.cjs +0 -47
  151. package/dist/src/services/hookDecisions/index.cjs.map +0 -1
  152. package/dist/src/services/hookDecisions/index.d.cts +0 -18
  153. package/dist/src/services/hookDecisions/index.d.cts.map +0 -1
  154. package/dist/src/services/hookDecisions/index.d.mts +0 -18
  155. package/dist/src/services/hookDecisions/index.d.mts.map +0 -1
  156. package/dist/src/services/hookDecisions/index.mjs +0 -41
  157. package/dist/src/services/hookDecisions/index.mjs.map +0 -1
  158. package/dist/src/services/hookDocuments/index.cjs +0 -105
  159. package/dist/src/services/hookDocuments/index.cjs.map +0 -1
  160. package/dist/src/services/hookDocuments/index.d.cts +0 -22
  161. package/dist/src/services/hookDocuments/index.d.cts.map +0 -1
  162. package/dist/src/services/hookDocuments/index.d.mts +0 -22
  163. package/dist/src/services/hookDocuments/index.d.mts.map +0 -1
  164. package/dist/src/services/hookDocuments/index.mjs +0 -103
  165. package/dist/src/services/hookDocuments/index.mjs.map +0 -1
  166. package/dist/src/services/hookHandlers/index.cjs +0 -185
  167. package/dist/src/services/hookHandlers/index.cjs.map +0 -1
  168. package/dist/src/services/hookHandlers/index.mjs +0 -184
  169. package/dist/src/services/hookHandlers/index.mjs.map +0 -1
  170. package/dist/src/services/hookPayload/index.cjs +0 -30
  171. package/dist/src/services/hookPayload/index.cjs.map +0 -1
  172. package/dist/src/services/hookPayload/index.d.cts +0 -8
  173. package/dist/src/services/hookPayload/index.d.cts.map +0 -1
  174. package/dist/src/services/hookPayload/index.d.mts +0 -8
  175. package/dist/src/services/hookPayload/index.d.mts.map +0 -1
  176. package/dist/src/services/hookPayload/index.mjs +0 -29
  177. package/dist/src/services/hookPayload/index.mjs.map +0 -1
  178. package/dist/src/services/hookRegistry/index.cjs +0 -66
  179. package/dist/src/services/hookRegistry/index.cjs.map +0 -1
  180. package/dist/src/services/hookRegistry/index.d.cts +0 -36
  181. package/dist/src/services/hookRegistry/index.d.cts.map +0 -1
  182. package/dist/src/services/hookRegistry/index.d.mts +0 -36
  183. package/dist/src/services/hookRegistry/index.d.mts.map +0 -1
  184. package/dist/src/services/hookRegistry/index.mjs +0 -64
  185. package/dist/src/services/hookRegistry/index.mjs.map +0 -1
  186. package/dist/src/services/hookRunner/index.cjs +0 -156
  187. package/dist/src/services/hookRunner/index.cjs.map +0 -1
  188. package/dist/src/services/hookRunner/index.d.cts +0 -21
  189. package/dist/src/services/hookRunner/index.d.cts.map +0 -1
  190. package/dist/src/services/hookRunner/index.d.mts +0 -21
  191. package/dist/src/services/hookRunner/index.d.mts.map +0 -1
  192. package/dist/src/services/hookRunner/index.mjs +0 -156
  193. package/dist/src/services/hookRunner/index.mjs.map +0 -1
  194. package/dist/src/services/hookRuntime/index.cjs +0 -82
  195. package/dist/src/services/hookRuntime/index.cjs.map +0 -1
  196. package/dist/src/services/hookRuntime/index.mjs +0 -82
  197. package/dist/src/services/hookRuntime/index.mjs.map +0 -1
  198. package/dist/src/services/hookRuntime/type.d.cts +0 -13
  199. package/dist/src/services/hookRuntime/type.d.cts.map +0 -1
  200. package/dist/src/services/hookRuntime/type.d.mts +0 -13
  201. package/dist/src/services/hookRuntime/type.d.mts.map +0 -1
  202. package/dist/src/services/hookTelemetry/index.cjs +0 -24
  203. package/dist/src/services/hookTelemetry/index.cjs.map +0 -1
  204. package/dist/src/services/hookTelemetry/index.d.cts +0 -13
  205. package/dist/src/services/hookTelemetry/index.d.cts.map +0 -1
  206. package/dist/src/services/hookTelemetry/index.d.mts +0 -13
  207. package/dist/src/services/hookTelemetry/index.d.mts.map +0 -1
  208. package/dist/src/services/hookTelemetry/index.mjs +0 -24
  209. package/dist/src/services/hookTelemetry/index.mjs.map +0 -1
  210. package/dist/src/services/pluginHooks/index.cjs +0 -24
  211. package/dist/src/services/pluginHooks/index.cjs.map +0 -1
  212. package/dist/src/services/pluginHooks/index.d.cts +0 -12
  213. package/dist/src/services/pluginHooks/index.d.cts.map +0 -1
  214. package/dist/src/services/pluginHooks/index.d.mts +0 -12
  215. package/dist/src/services/pluginHooks/index.d.mts.map +0 -1
  216. package/dist/src/services/pluginHooks/index.mjs +0 -24
  217. package/dist/src/services/pluginHooks/index.mjs.map +0 -1
  218. package/dist/src/services/serverHooks/index.cjs +0 -33
  219. package/dist/src/services/serverHooks/index.cjs.map +0 -1
  220. package/dist/src/services/serverHooks/index.mjs +0 -33
  221. package/dist/src/services/serverHooks/index.mjs.map +0 -1
  222. package/dist/src/services/toolNames/index.cjs +0 -32
  223. package/dist/src/services/toolNames/index.cjs.map +0 -1
  224. package/dist/src/services/toolNames/index.d.cts +0 -7
  225. package/dist/src/services/toolNames/index.d.cts.map +0 -1
  226. package/dist/src/services/toolNames/index.d.mts +0 -7
  227. package/dist/src/services/toolNames/index.d.mts.map +0 -1
  228. package/dist/src/services/toolNames/index.mjs +0 -31
  229. package/dist/src/services/toolNames/index.mjs.map +0 -1
  230. package/dist/src/types/hooks.d.cts +0 -138
  231. package/dist/src/types/hooks.d.cts.map +0 -1
  232. package/dist/src/types/hooks.d.mts +0 -138
  233. package/dist/src/types/hooks.d.mts.map +0 -1
  234. package/dist/src/types/telemetry.d.cts +0 -16
  235. package/dist/src/types/telemetry.d.cts.map +0 -1
  236. package/dist/src/types/telemetry.d.mts +0 -16
  237. package/dist/src/types/telemetry.d.mts.map +0 -1
  238. /package/dist/{src/schemas/apiContracts.d.mts → apiContracts.d.mts} +0 -0
@@ -1,6 +1,10 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
1
5
  //#region src/schemas/apiContracts.ts
2
6
  /** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
3
- const apiContracts = (0, require("@agimon-ai/doompi-core/api-contracts").defineApiContract)({
7
+ const apiContracts = (0, require("@agimon-ai/doompi-core/apiContracts").defineApiContract)({
4
8
  version: 1,
5
9
  http: [],
6
10
  sockets: [],
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.cjs","names":["defineApiContract"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/apiContracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;;;;;AAGA,MAAa,gBAAA,gDAAeA,CAAAA,CAAAA,kBAAAA,CAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
1
+ {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBAGa"}
@@ -1,4 +1,4 @@
1
- import { defineApiContract } from "@agimon-ai/doompi-core/api-contracts";
1
+ import { defineApiContract } from "@agimon-ai/doompi-core/apiContracts";
2
2
  //#region src/schemas/apiContracts.ts
3
3
  /** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */
4
4
  const apiContracts = defineApiContract({
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/apiContracts';\n\n/** This facet contributes agent tools, commands or lifecycle only, with no separate HTTP or socket surface. */\nexport const apiContracts = defineApiContract({ version: 1, http: [], sockets: [], dynamic: [] });\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAa,eAAe,kBAAkB;CAAE,SAAS;CAAG,MAAM,CAAC;CAAG,SAAS,CAAC;CAAG,SAAS,CAAC;AAAE,CAAC"}
@@ -2,18 +2,18 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- let _agimon_ai_doompi_core_mcp_facet = require("@agimon-ai/doompi-core/mcp-facet");
6
- let _agimon_ai_doompi_core_server_facet = require("@agimon-ai/doompi-core/server-facet");
5
+ let _agimon_ai_doompi_core_mcpFacet = require("@agimon-ai/doompi-core/mcpFacet");
6
+ let _agimon_ai_doompi_core_serverFacet = require("@agimon-ai/doompi-core/serverFacet");
7
7
  //#region src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp.ts
8
- var doompi_author_hook_mcp_default = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpSkill)({
8
+ var doompi_author_hook_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpSkill)({
9
9
  name: "doompi-author-hook",
10
10
  description: "Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi.",
11
- read: () => (0, _agimon_ai_doompi_core_server_facet.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/doompi-author-hook/SKILL.md")
11
+ read: () => (0, _agimon_ai_doompi_core_serverFacet.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/doompi-author-hook/SKILL.md")
12
12
  });
13
13
  //#endregion
14
14
  //#region generated/mcp.ts
15
15
  const at = (value, context) => typeof value === "function" ? value(context) : value;
16
- const mcp = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpPlugin)({
16
+ const mcp = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpPlugin)({
17
17
  name: "@agimon-ai/doompi-hook",
18
18
  session: (context) => ({ get skills() {
19
19
  return [at(doompi_author_hook_mcp_default, context)];
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","defineMcpPlugin","skillDoompiAuthorHook"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/server-facet';\n\nexport default defineMcpSkill({\n name: 'doompi-author-hook',\n description:\n 'Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-hook/SKILL.md'),\n});\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport skillDoompiAuthorHook from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-hook',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiAuthorHook, context)]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;AAGA,IAAA,kCAAA,GAAeA,iCAAAA,eAAAA,CAAe;CAC5B,MAAM;CACN,aACE;CACF,aAAA,GAAYC,oCAAAA,oBAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,MAAqC,yCAAyC;AAC5F,CAAC;;;ACFD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,OAAA,GAAMC,iCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,SAAyC;EAAE,OAAO,CAAC,GAAGC,gCAAuB,OAAO,CAAC;CAAG,EAC9F;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","defineMcpPlugin","skillDoompiAuthorHook"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'doompi-author-hook',\n description:\n 'Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-hook/SKILL.md'),\n});\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiAuthorHook from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-hook',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiAuthorHook, context)]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;AAGA,IAAA,kCAAA,GAAeA,gCAAAA,eAAAA,CAAe;CAC5B,MAAM;CACN,aACE;CACF,aAAA,GAAYC,mCAAAA,oBAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,MAAqC,yCAAyC;AAC5F,CAAC;;;ACFD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,OAAA,GAAMC,gCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,SAAyC;EAAE,OAAO,CAAC,GAAGC,gCAAuB,OAAO,CAAC;CAAG,EAC9F;AACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  //#region generated/mcp.d.ts
2
- export declare const mcp: import("@agimon-ai/doompi-core/mcp-facet").DoomMcpPluginDefinition;
2
+ export declare const mcp: import("@agimon-ai/doompi-core/mcpFacet").DoomMcpPluginDefinition;
3
3
  //#endregion
4
4
  export { mcp as default };
5
5
  //# sourceMappingURL=mcp.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBASa,gDAAG"}
1
+ {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBASa,+CAAG"}
@@ -1,5 +1,5 @@
1
- import { defineMcpPlugin, defineMcpSkill } from "@agimon-ai/doompi-core/mcp-facet";
2
- import { readPackageResource } from "@agimon-ai/doompi-core/server-facet";
1
+ import { defineMcpPlugin, defineMcpSkill } from "@agimon-ai/doompi-core/mcpFacet";
2
+ import { readPackageResource } from "@agimon-ai/doompi-core/serverFacet";
3
3
  //#region src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp.ts
4
4
  var doompi_author_hook_mcp_default = defineMcpSkill({
5
5
  name: "doompi-author-hook",
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.mjs","names":["skillDoompiAuthorHook"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcp-facet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/server-facet';\n\nexport default defineMcpSkill({\n name: 'doompi-author-hook',\n description:\n 'Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-hook/SKILL.md'),\n});\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport skillDoompiAuthorHook from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-hook',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiAuthorHook, context)]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;AAGA,IAAA,iCAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,YAAY,oBAAoB,YAAY,KAAK,yCAAyC;AAC5F,CAAC;;;ACFD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,SAAyC;EAAE,OAAO,CAAC,GAAGA,gCAAuB,OAAO,CAAC;CAAG,EAC9F;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.mjs","names":["skillDoompiAuthorHook"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'doompi-author-hook',\n description:\n 'Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-author-hook/SKILL.md'),\n});\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiAuthorHook from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-author-hook.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-hook',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiAuthorHook, context)]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;AAGA,IAAA,iCAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,YAAY,oBAAoB,YAAY,KAAK,yCAAyC;AAC5F,CAAC;;;ACFD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,SAAyC;EAAE,OAAO,CAAC,GAAGA,gCAAuB,OAAO,CAAC;CAAG,EAC9F;AACF,CAAC"}
@@ -2,36 +2,330 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_root_cli = require("../src/extensions/workspaces/sessions/(backend)/root.cli.cjs");
6
- const require_agent_settled_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.cjs");
7
- const require_before_agent_start_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs");
8
- const require_session_shutdown_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.cjs");
9
- const require_session_start_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs");
10
- const require_tool_call_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.cjs");
11
- const require_tool_result_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.cjs");
12
- const require_doompi_use_hook_cli = require("../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.cjs");
13
- let _agimon_ai_doompi_core_pi_extension = require("@agimon-ai/doompi-core/pi-extension");
14
- let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
5
+ const require_hooks = require("../hooks-CReMXrU9.cjs");
6
+ let _agimon_ai_doompi_core_piExtension = require("@agimon-ai/doompi-core/piExtension");
7
+ let _agimon_ai_doompi_core_extensionFile = require("@agimon-ai/doompi-core/extensionFile");
8
+ let _agimon_ai_doompi_config_piContext = require("@agimon-ai/doompi-config/piContext");
9
+ let _agimon_ai_doompi_core_config = require("@agimon-ai/doompi-core/config");
10
+ let _agimon_ai_doompi_core_readiness = require("@agimon-ai/doompi-core/readiness");
11
+ //#region src/constants/hookHandlers.ts
12
+ const STATUS_PREFIX = "repository-hooks";
13
+ const FAILURE_MESSAGE_TYPE = "repository-hook-failure";
14
+ const CONTEXT_MESSAGE_TYPE = "repository-hook-context";
15
+ const STEER = { deliverAs: "steer" };
16
+ const SUBAGENT_ENVIRONMENT_FLAG = "PI_SUBAGENT_CHILD";
17
+ //#endregion
18
+ //#region src/services/hookHandlers/index.ts
19
+ /**
20
+ * Registry rows plus plugin hooks for one event, in that order.
21
+ *
22
+ * Both sources are read on every dispatch because either can change mid-session:
23
+ * /mode switches the selected groups and a plugin can rewrite its own config.
24
+ */
25
+ async function resolveHooks(session, ctx, eventName, toolName) {
26
+ const harness = session.config().harness;
27
+ const repoRoot = harness.root ?? ctx.cwd;
28
+ const [registry, plugins] = await Promise.all([session.documents.registry(repoRoot), session.documents.plugins(harness.pluginHooks)]);
29
+ const hooks = [...require_hooks.selectRegistryHooks(registry.entries, {
30
+ event: eventName,
31
+ toolName,
32
+ allowedGroups: harness.hookGroups,
33
+ inSubagent: Boolean(process.env[SUBAGENT_ENVIRONMENT_FLAG])
34
+ }), ...require_hooks.selectPluginHooks(plugins.documents, eventName, toolName)];
35
+ return {
36
+ repoRoot,
37
+ sessionId: ctx.sessionManager.getSessionId(),
38
+ hooks,
39
+ failures: [...registry.failure ? [registry.failure] : [], ...plugins.failures]
40
+ };
41
+ }
42
+ /** Session end is plugin-only: the registry has no binding for it. */
43
+ async function resolvePluginHooks(session, ctx, eventName) {
44
+ const harness = session.config().harness;
45
+ const plugins = await session.documents.plugins(harness.pluginHooks);
46
+ return {
47
+ repoRoot: harness.root ?? ctx.cwd,
48
+ sessionId: ctx.sessionManager.getSessionId(),
49
+ hooks: require_hooks.selectPluginHooks(plugins.documents, eventName),
50
+ failures: plugins.failures
51
+ };
52
+ }
53
+ async function runHooks(session, ctx, dispatch, payload, statusKey, statusLabel) {
54
+ const outcomes = [];
55
+ try {
56
+ for (const [index, resolved] of dispatch.hooks.entries()) {
57
+ if (ctx.hasUI) ctx.ui.setStatus(statusKey, `${statusLabel} (${index + 1}/${dispatch.hooks.length})...`);
58
+ outcomes.push(await session.runner.run(resolved.hook, payload, {
59
+ repoRoot: dispatch.repoRoot,
60
+ pluginRoot: resolved.root
61
+ }));
62
+ }
63
+ } finally {
64
+ if (ctx.hasUI) ctx.ui.setStatus(statusKey, void 0);
65
+ }
66
+ return outcomes;
67
+ }
68
+ function allFailures(dispatch, outcomes) {
69
+ return [...dispatch.failures, ...require_hooks.failuresFrom(outcomes)];
70
+ }
71
+ function steerHookFailures(pi, failures) {
72
+ if (failures.length === 0) return;
73
+ pi.sendMessage({
74
+ customType: FAILURE_MESSAGE_TYPE,
75
+ content: require_hooks.hookFailureMessage(failures),
76
+ display: true
77
+ }, STEER);
78
+ }
79
+ async function runSessionStartHooks(pi, session, ctx, signal, isCurrent = () => true) {
80
+ signal?.throwIfAborted();
81
+ const dispatch = await resolveHooks(session, ctx, require_hooks.HOOK_EVENT.sessionStart);
82
+ signal?.throwIfAborted();
83
+ const outcomes = await runHooks(session, ctx, dispatch, require_hooks.sessionHookPayload(dispatch.sessionId, dispatch.repoRoot), `${STATUS_PREFIX}:${dispatch.sessionId}:start`, "Running session-start hooks");
84
+ signal?.throwIfAborted();
85
+ if (!isCurrent()) return;
86
+ steerHookFailures(pi, allFailures(dispatch, outcomes));
87
+ const context = require_hooks.additionalContextsFrom(require_hooks.decisionsFrom(outcomes)).join("\n\n");
88
+ if (context) pi.sendMessage({
89
+ customType: CONTEXT_MESSAGE_TYPE,
90
+ content: context,
91
+ display: true
92
+ }, STEER);
93
+ }
94
+ function createSessionStart(pi, resolveRuntime) {
95
+ return (_event, ctx) => {
96
+ const runtime = resolveRuntime();
97
+ if (!runtime?.isCurrent()) return void 0;
98
+ const { readiness, session } = runtime;
99
+ if (readiness) return readiness.start(ctx, (signal, isReady) => runSessionStartHooks(pi, session, ctx, signal, () => runtime.isCurrent() && isReady()));
100
+ return runSessionStartHooks(pi, session, ctx);
101
+ };
102
+ }
103
+ function createBeforeAgentStart(_pi, resolveRuntime) {
104
+ return async (_event, ctx) => {
105
+ const runtime = resolveRuntime();
106
+ if (!runtime?.isCurrent()) return;
107
+ await runtime.readiness?.wait(ctx);
108
+ };
109
+ }
110
+ function createToolCall(pi, resolveRuntime) {
111
+ return async (event, ctx) => {
112
+ const runtime = resolveRuntime();
113
+ if (!runtime?.isCurrent()) return void 0;
114
+ await runtime.readiness?.wait(ctx);
115
+ if (!runtime.isCurrent()) return void 0;
116
+ const dispatch = await resolveHooks(runtime.session, ctx, require_hooks.HOOK_EVENT.preToolUse, event.toolName);
117
+ if (!runtime.isCurrent()) return void 0;
118
+ const payload = require_hooks.toolHookPayload(event, require_hooks.HOOK_EVENT.preToolUse, dispatch.repoRoot, dispatch.sessionId);
119
+ const outcomes = await runHooks(runtime.session, ctx, dispatch, payload, `${STATUS_PREFIX}:${event.toolCallId}:pre`, `Running pre-tool hooks for ${event.toolName}`);
120
+ if (!runtime.isCurrent()) return void 0;
121
+ const decisions = require_hooks.decisionsFrom(outcomes);
122
+ steerHookFailures(pi, allFailures(dispatch, outcomes));
123
+ const denied = decisions.find(require_hooks.isDenied);
124
+ if (denied) return {
125
+ block: true,
126
+ reason: require_hooks.decisionReason(denied) ?? "Blocked by repository hook"
127
+ };
128
+ const context = require_hooks.additionalContextsFrom(decisions).join("\n\n");
129
+ return context ? {
130
+ block: true,
131
+ reason: context
132
+ } : void 0;
133
+ };
134
+ }
135
+ function createToolResult(_pi, resolveRuntime) {
136
+ return async (event, ctx) => {
137
+ const runtime = resolveRuntime();
138
+ if (!runtime?.isCurrent()) return void 0;
139
+ await runtime.readiness?.wait(ctx);
140
+ if (!runtime.isCurrent()) return void 0;
141
+ const dispatch = await resolveHooks(runtime.session, ctx, require_hooks.HOOK_EVENT.postToolUse, event.toolName);
142
+ if (!runtime.isCurrent()) return void 0;
143
+ const payload = require_hooks.toolHookPayload(event, require_hooks.HOOK_EVENT.postToolUse, dispatch.repoRoot, dispatch.sessionId);
144
+ const outcomes = await runHooks(runtime.session, ctx, dispatch, payload, `${STATUS_PREFIX}:${event.toolCallId}:post`, `Running post-tool hooks for ${event.toolName}`);
145
+ if (!runtime.isCurrent()) return void 0;
146
+ const decisions = require_hooks.decisionsFrom(outcomes);
147
+ const failures = allFailures(dispatch, outcomes);
148
+ const messages = require_hooks.toolResultMessages(decisions);
149
+ if (failures.length > 0) messages.push(require_hooks.hookFailureMessage(failures));
150
+ if (messages.length === 0) return void 0;
151
+ return {
152
+ content: [...event.content, {
153
+ type: "text",
154
+ text: messages.join("\n\n")
155
+ }],
156
+ isError: event.isError || decisions.some(require_hooks.isDenied)
157
+ };
158
+ };
159
+ }
160
+ function createAgentSettled(_pi, resolveRuntime) {
161
+ return async (_event, ctx) => {
162
+ const runtime = resolveRuntime();
163
+ if (!runtime?.isCurrent()) return;
164
+ await runtime.readiness?.wait(ctx);
165
+ if (!runtime.isCurrent()) return;
166
+ const dispatch = await resolveHooks(runtime.session, ctx, require_hooks.HOOK_EVENT.stop);
167
+ if (!runtime.isCurrent()) return;
168
+ await runHooks(runtime.session, ctx, dispatch, require_hooks.sessionHookPayload(dispatch.sessionId, dispatch.repoRoot), `${STATUS_PREFIX}:${dispatch.sessionId}:stop`, "Running stop hooks");
169
+ };
170
+ }
171
+ function createHookHandlers(pi, resolveRuntime) {
172
+ let shutdown;
173
+ return {
174
+ session_start: createSessionStart(pi, resolveRuntime),
175
+ before_agent_start: createBeforeAgentStart(pi, resolveRuntime),
176
+ tool_call: createToolCall(pi, resolveRuntime),
177
+ tool_result: createToolResult(pi, resolveRuntime),
178
+ agent_settled: createAgentSettled(pi, resolveRuntime),
179
+ session_shutdown: (_event, ctx) => {
180
+ const current = resolveRuntime();
181
+ if (!current?.isCurrent()) return void 0;
182
+ shutdown ??= runSessionEndHooks(current.session, ctx);
183
+ return shutdown;
184
+ }
185
+ };
186
+ }
187
+ /** Runs the plugin SessionEnd hooks while the session is still usable. */
188
+ async function runSessionEndHooks(session, ctx) {
189
+ const dispatch = await resolvePluginHooks(session, ctx, require_hooks.HOOK_EVENT.sessionEnd);
190
+ await runHooks(session, ctx, dispatch, require_hooks.sessionHookPayload(dispatch.sessionId, dispatch.repoRoot), `${STATUS_PREFIX}:${dispatch.sessionId}:end`, "Running session-end hooks");
191
+ }
192
+ //#endregion
193
+ //#region src/constants/hook.ts
194
+ const PACKAGE_SOURCE = "@agimon-ai/doompi-hook";
195
+ const HOOK_HELP_SKILL = {
196
+ name: "doompi-author-hook",
197
+ description: "Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi."
198
+ };
199
+ //#endregion
200
+ //#region src/services/hookRuntime/index.ts
201
+ function hookSession(cordis, options) {
202
+ let telemetry = options.telemetry;
203
+ const requireTelemetry = () => telemetry ??= require_hooks.createHookTelemetry();
204
+ return {
205
+ config: () => (0, _agimon_ai_doompi_config_piContext.requireDoomConfigContext)(cordis),
206
+ runner: options.runner ?? require_hooks.createBashHookRunner({ telemetry: requireTelemetry() }),
207
+ documents: options.documents ?? require_hooks.createHookDocumentReader({ telemetry: requireTelemetry() })
208
+ };
209
+ }
210
+ function createHookRuntime(cordis, options) {
211
+ const session = hookSession(cordis, options);
212
+ let active = true;
213
+ let generation = 0;
214
+ let readiness;
215
+ return {
216
+ session,
217
+ readiness: {
218
+ start(context, operation) {
219
+ const ownGeneration = ++generation;
220
+ const isCurrent = () => active && ownGeneration === generation;
221
+ const coordinator = (0, _agimon_ai_doompi_core_readiness.readDoomReadinessCoordinator)(cordis);
222
+ if (!coordinator) return operation(new AbortController().signal, isCurrent);
223
+ const previous = readiness;
224
+ const readinessOperation = (async () => {
225
+ if (previous?.coordinator === coordinator) await previous.operation.catch(() => void 0);
226
+ if (!isCurrent()) return;
227
+ await coordinator.start(PACKAGE_SOURCE, `${context.sessionManager.getSessionId()}:${ownGeneration}`, async (signal) => {
228
+ await operation(signal, isCurrent);
229
+ return { value: void 0 };
230
+ }).wait();
231
+ })();
232
+ readinessOperation.catch(() => void 0);
233
+ readiness = {
234
+ sessionManager: context.sessionManager,
235
+ coordinator,
236
+ operation: readinessOperation
237
+ };
238
+ },
239
+ async wait(context) {
240
+ const current = readiness;
241
+ if (!current) return;
242
+ if (current.sessionManager !== context.sessionManager) throw new Error("Hook readiness belongs to a stale Pi session.");
243
+ await current.operation;
244
+ if (!active || current !== readiness) throw new Error("Hook readiness belongs to a stale extension generation.");
245
+ }
246
+ },
247
+ isCurrent: () => active,
248
+ dispose() {
249
+ active = false;
250
+ generation += 1;
251
+ readiness = void 0;
252
+ }
253
+ };
254
+ }
255
+ function createHookBinding(options) {
256
+ let runtime;
257
+ return {
258
+ plugin(cordis) {
259
+ cordis.inject([_agimon_ai_doompi_core_config.DOOM_CONFIG_SERVICE], (configContext) => {
260
+ const binding = createHookRuntime(configContext, options);
261
+ runtime = binding;
262
+ return () => {
263
+ binding.dispose();
264
+ if (runtime === binding) runtime = void 0;
265
+ };
266
+ });
267
+ },
268
+ runtime: () => runtime
269
+ };
270
+ }
271
+ //#endregion
272
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/piRoot.ts
273
+ const createHookPiRoot = ({ pi, options }) => {
274
+ const binding = createHookBinding(options ?? {});
275
+ return {
276
+ value: createHookHandlers(pi, binding.runtime),
277
+ services: [binding.plugin]
278
+ };
279
+ };
280
+ //#endregion
281
+ //#region src/extensions/workspaces/sessions/(backend)/root.cli.ts
282
+ var root_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoot)(createHookPiRoot);
283
+ //#endregion
284
+ //#region src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.ts
285
+ var agent_settled_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.agent_settled);
286
+ //#endregion
287
+ //#region src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts
288
+ var before_agent_start_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.before_agent_start);
289
+ //#endregion
290
+ //#region src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.ts
291
+ var session_shutdown_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.session_shutdown);
292
+ //#endregion
293
+ //#region src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts
294
+ var session_start_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.session_start);
295
+ //#endregion
296
+ //#region src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.ts
297
+ var tool_call_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.tool_call);
298
+ //#endregion
299
+ //#region src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.ts
300
+ var tool_result_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.tool_result);
301
+ //#endregion
302
+ //#region src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.ts
303
+ var doompi_use_hook_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineResource)({
304
+ source: PACKAGE_SOURCE,
305
+ moduleUrl: require("url").pathToFileURL(__filename).href,
306
+ skills: [HOOK_HELP_SKILL]
307
+ });
308
+ //#endregion
15
309
  //#region generated/pi.ts
16
310
  const at = (value, context) => typeof value === "function" ? value(context) : value;
17
- const extension = (0, _agimon_ai_doompi_core_pi_extension.definePiExtension)("@agimon-ai/doompi-hook", async (context) => {
18
- const scopeSession = await require_root_cli.default(context);
311
+ const extension = (0, _agimon_ai_doompi_core_piExtension.definePiExtension)("@agimon-ai/doompi-hook", async (context) => {
312
+ const scopeSession = await root_cli_default(context);
19
313
  const contextSession = {
20
314
  ...context,
21
315
  root: scopeSession.value
22
316
  };
23
317
  return {
24
- ...(0, _agimon_ai_doompi_core_extension_file.composeRootHooks)(scopeSession),
318
+ ...(0, _agimon_ai_doompi_core_extensionFile.composeRootHooks)(scopeSession),
25
319
  events: {
26
- agent_settled: at(require_agent_settled_cli.default, contextSession),
27
- before_agent_start: at(require_before_agent_start_cli.default, contextSession),
28
- session_shutdown: at(require_session_shutdown_cli.default, contextSession),
29
- session_start: at(require_session_start_cli.default, contextSession),
30
- tool_call: at(require_tool_call_cli.default, contextSession),
31
- tool_result: at(require_tool_result_cli.default, contextSession)
320
+ agent_settled: at(agent_settled_cli_default, contextSession),
321
+ before_agent_start: at(before_agent_start_cli_default, contextSession),
322
+ session_shutdown: at(session_shutdown_cli_default, contextSession),
323
+ session_start: at(session_start_cli_default, contextSession),
324
+ tool_call: at(tool_call_cli_default, contextSession),
325
+ tool_result: at(tool_result_cli_default, contextSession)
32
326
  },
33
327
  get resources() {
34
- return [at(require_doompi_use_hook_cli.default, contextSession)];
328
+ return [at(doompi_use_hook_cli_default, contextSession)];
35
329
  },
36
330
  services: [...scopeSession.services ?? []]
37
331
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pi.cjs","names":["definePiExtension","rootSession","composeRootHooks","hookAgentSettled","hookBeforeAgentStart","hookSessionShutdown","hookSessionStart","hookToolCall","hookToolResult","resourceDoompiUseHook"],"sources":["../../generated/pi.ts"],"sourcesContent":["// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/pi-extension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extension-file';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookAgentSettled from '../src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli';\nimport hookSessionShutdown from '../src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli';\nimport hookToolCall from '../src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli';\nimport hookToolResult from '../src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli';\nimport resourceDoompiUseHook from '../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookAgentSettled> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookSessionShutdown> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof hookToolCall> | OptionsOf<typeof hookToolResult> | OptionsOf<typeof resourceDoompiUseHook>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-hook', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n agent_settled: at(hookAgentSettled, contextSession) as NonNullable<PiPluginContributions['events']>['agent_settled'],\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n session_shutdown: at(hookSessionShutdown, contextSession) as NonNullable<PiPluginContributions['events']>['session_shutdown'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n tool_call: at(hookToolCall, contextSession) as NonNullable<PiPluginContributions['events']>['tool_call'],\n tool_result: at(hookToolResult, contextSession) as NonNullable<PiPluginContributions['events']>['tool_result'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourceDoompiUseHook, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AAEpE,MAAa,aAAA,GAAYA,oCAAAA,kBAAAA,CAAoC,0BAA0B,OAAO,YAAY;CACxG,MAAM,eAAe,MAAMC,iBAAAA,QAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,sCAAAA,iBAAAA,CAAiB,YAAY;EAChC,QAAQ;GACN,eAAe,GAAGC,0BAAAA,SAAkB,cAAc;GAClD,oBAAoB,GAAGC,+BAAAA,SAAsB,cAAc;GAC3D,kBAAkB,GAAGC,6BAAAA,SAAqB,cAAc;GACxD,eAAe,GAAGC,0BAAAA,SAAkB,cAAc;GAClD,WAAW,GAAGC,sBAAAA,SAAc,cAAc;GAC1C,aAAa,GAAGC,wBAAAA,SAAgB,cAAc;EAChD;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,4BAAAA,SAAuB,cAAc,CAAC;EAAG;EAC1G,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
1
+ {"version":3,"file":"pi.cjs","names":["selectRegistryHooks","selectPluginHooks","failuresFrom","hookFailureMessage","HOOK_EVENT","sessionHookPayload","additionalContextsFrom","decisionsFrom","toolHookPayload","isDenied","decisionReason","toolResultMessages","createHookTelemetry","requireDoomConfigContext","createBashHookRunner","createHookDocumentReader","readDoomReadinessCoordinator","DOOM_CONFIG_SERVICE","defineRoot","defineCliHook","defineCliHook","defineCliHook","defineCliHook","defineCliHook","defineCliHook","defineResource","definePiExtension","rootSession","composeRootHooks","hookAgentSettled","hookBeforeAgentStart","hookSessionShutdown","hookSessionStart","hookToolCall","hookToolResult","resourceDoompiUseHook"],"sources":["../../src/constants/hookHandlers.ts","../../src/services/hookHandlers/index.ts","../../src/constants/hook.ts","../../src/services/hookRuntime/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/piRoot.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli.ts","../../generated/pi.ts"],"sourcesContent":["export const STATUS_PREFIX = 'repository-hooks';\nexport const FAILURE_MESSAGE_TYPE = 'repository-hook-failure';\nexport const CONTEXT_MESSAGE_TYPE = 'repository-hook-context';\nexport const STEER = { deliverAs: 'steer' } as const;\nexport const BLOCKED_BY_HOOK = 'Blocked by repository hook';\nexport const SUBAGENT_ENVIRONMENT_FLAG = 'PI_SUBAGENT_CHILD';\nexport const CONTEXT_SEPARATOR = '\\n\\n';\n","import type { PiEventHandlers } from '@agimon-ai/doompi-core/piExtension';\nimport type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport {\n STATUS_PREFIX,\n FAILURE_MESSAGE_TYPE,\n CONTEXT_MESSAGE_TYPE,\n STEER,\n BLOCKED_BY_HOOK,\n SUBAGENT_ENVIRONMENT_FLAG,\n CONTEXT_SEPARATOR,\n} from '../../constants/hookHandlers';\nimport { HOOK_EVENT } from '../../constants/hooks';\nimport {\n additionalContextsFrom,\n decisionReason,\n decisionsFrom,\n failuresFrom,\n hookFailureMessage,\n isDenied,\n toolResultMessages,\n} from '../../services/hookDecisions';\nimport { sessionHookPayload, toolHookPayload } from '../../services/hookPayload';\nimport { selectRegistryHooks } from '../../services/hookRegistry';\nimport type { HookRuntimeResolver, HookSession } from '../../services/hookRuntime/type';\nimport { selectPluginHooks } from '../../services/pluginHooks';\nimport {\n type HookFailure,\n type HookOutcome,\n type HookPayload,\n type HookToolEvent,\n type ResolvedHook,\n} from '../../types/hooks';\n\n/** Everything one dispatch resolved before it ran anything. */\ninterface HookDispatch {\n repoRoot: string;\n sessionId: string;\n hooks: ResolvedHook[];\n failures: HookFailure[];\n}\n\n/**\n * Registry rows plus plugin hooks for one event, in that order.\n *\n * Both sources are read on every dispatch because either can change mid-session:\n * /mode switches the selected groups and a plugin can rewrite its own config.\n */\nasync function resolveHooks(\n session: HookSession,\n ctx: ExtensionContext,\n eventName: string,\n toolName?: string,\n): Promise<HookDispatch> {\n const harness = session.config().harness;\n const repoRoot = harness.root ?? ctx.cwd;\n const [registry, plugins] = await Promise.all([\n session.documents.registry(repoRoot),\n session.documents.plugins(harness.pluginHooks),\n ]);\n const hooks = [\n ...selectRegistryHooks(registry.entries, {\n event: eventName,\n toolName,\n allowedGroups: harness.hookGroups,\n inSubagent: Boolean(process.env[SUBAGENT_ENVIRONMENT_FLAG]),\n }),\n ...selectPluginHooks(plugins.documents, eventName, toolName),\n ];\n return {\n repoRoot,\n sessionId: ctx.sessionManager.getSessionId(),\n hooks,\n failures: [...(registry.failure ? [registry.failure] : []), ...plugins.failures],\n };\n}\n\n/** Session end is plugin-only: the registry has no binding for it. */\nasync function resolvePluginHooks(\n session: HookSession,\n ctx: ExtensionContext,\n eventName: string,\n): Promise<HookDispatch> {\n const harness = session.config().harness;\n const plugins = await session.documents.plugins(harness.pluginHooks);\n return {\n repoRoot: harness.root ?? ctx.cwd,\n sessionId: ctx.sessionManager.getSessionId(),\n hooks: selectPluginHooks(plugins.documents, eventName),\n failures: plugins.failures,\n };\n}\n\nasync function runHooks(\n session: HookSession,\n ctx: ExtensionContext,\n dispatch: HookDispatch,\n payload: HookPayload,\n statusKey: string,\n statusLabel: string,\n): Promise<HookOutcome[]> {\n const outcomes: HookOutcome[] = [];\n try {\n for (const [index, resolved] of dispatch.hooks.entries()) {\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, `${statusLabel} (${index + 1}/${dispatch.hooks.length})...`);\n outcomes.push(\n await session.runner.run(resolved.hook, payload, { repoRoot: dispatch.repoRoot, pluginRoot: resolved.root }),\n );\n }\n } finally {\n if (ctx.hasUI) ctx.ui.setStatus(statusKey, undefined);\n }\n return outcomes;\n}\n\nfunction allFailures(dispatch: HookDispatch, outcomes: ReadonlyArray<HookOutcome>): HookFailure[] {\n return [...dispatch.failures, ...failuresFrom(outcomes)];\n}\n\nfunction steerHookFailures(pi: ExtensionAPI, failures: ReadonlyArray<HookFailure>): void {\n if (failures.length === 0) return;\n pi.sendMessage({ customType: FAILURE_MESSAGE_TYPE, content: hookFailureMessage(failures), display: true }, STEER);\n}\n\nasync function runSessionStartHooks(\n pi: ExtensionAPI,\n session: HookSession,\n ctx: ExtensionContext,\n signal?: AbortSignal,\n isCurrent: () => boolean = () => true,\n): Promise<void> {\n signal?.throwIfAborted();\n const dispatch = await resolveHooks(session, ctx, HOOK_EVENT.sessionStart);\n signal?.throwIfAborted();\n const outcomes = await runHooks(\n session,\n ctx,\n dispatch,\n sessionHookPayload(dispatch.sessionId, dispatch.repoRoot),\n `${STATUS_PREFIX}:${dispatch.sessionId}:start`,\n 'Running session-start hooks',\n );\n signal?.throwIfAborted();\n if (!isCurrent()) return;\n steerHookFailures(pi, allFailures(dispatch, outcomes));\n const context = additionalContextsFrom(decisionsFrom(outcomes)).join(CONTEXT_SEPARATOR);\n if (context) pi.sendMessage({ customType: CONTEXT_MESSAGE_TYPE, content: context, display: true }, STEER);\n}\n\nfunction createSessionStart(pi: ExtensionAPI, resolveRuntime: HookRuntimeResolver): PiEventHandlers['session_start'] {\n return (_event, ctx) => {\n const runtime = resolveRuntime();\n if (!runtime?.isCurrent()) return undefined;\n const { readiness, session } = runtime;\n if (readiness) {\n return readiness.start(ctx, (signal, isReady) =>\n runSessionStartHooks(pi, session, ctx, signal, () => runtime.isCurrent() && isReady()),\n );\n }\n return runSessionStartHooks(pi, session, ctx);\n };\n}\n\nfunction createBeforeAgentStart(\n _pi: ExtensionAPI,\n resolveRuntime: HookRuntimeResolver,\n): PiEventHandlers['before_agent_start'] {\n return async (_event, ctx) => {\n const runtime = resolveRuntime();\n if (!runtime?.isCurrent()) return;\n await runtime.readiness?.wait(ctx);\n };\n}\n\nfunction createToolCall(pi: ExtensionAPI, resolveRuntime: HookRuntimeResolver): PiEventHandlers['tool_call'] {\n return async (event, ctx) => {\n const runtime = resolveRuntime();\n if (!runtime?.isCurrent()) return undefined;\n await runtime.readiness?.wait(ctx);\n if (!runtime.isCurrent()) return undefined;\n const dispatch = await resolveHooks(runtime.session, ctx, HOOK_EVENT.preToolUse, event.toolName);\n if (!runtime.isCurrent()) return undefined;\n const payload = toolHookPayload(\n event as HookToolEvent,\n HOOK_EVENT.preToolUse,\n dispatch.repoRoot,\n dispatch.sessionId,\n );\n const outcomes = await runHooks(\n runtime.session,\n ctx,\n dispatch,\n payload,\n `${STATUS_PREFIX}:${event.toolCallId}:pre`,\n `Running pre-tool hooks for ${event.toolName}`,\n );\n if (!runtime.isCurrent()) return undefined;\n const decisions = decisionsFrom(outcomes);\n steerHookFailures(pi, allFailures(dispatch, outcomes));\n const denied = decisions.find(isDenied);\n if (denied) return { block: true, reason: decisionReason(denied) ?? BLOCKED_BY_HOOK };\n const context = additionalContextsFrom(decisions).join(CONTEXT_SEPARATOR);\n return context ? { block: true, reason: context } : undefined;\n };\n}\n\nfunction createToolResult(_pi: ExtensionAPI, resolveRuntime: HookRuntimeResolver): PiEventHandlers['tool_result'] {\n return async (event, ctx) => {\n const runtime = resolveRuntime();\n if (!runtime?.isCurrent()) return undefined;\n await runtime.readiness?.wait(ctx);\n if (!runtime.isCurrent()) return undefined;\n const dispatch = await resolveHooks(runtime.session, ctx, HOOK_EVENT.postToolUse, event.toolName);\n if (!runtime.isCurrent()) return undefined;\n const payload = toolHookPayload(\n event as HookToolEvent,\n HOOK_EVENT.postToolUse,\n dispatch.repoRoot,\n dispatch.sessionId,\n );\n const outcomes = await runHooks(\n runtime.session,\n ctx,\n dispatch,\n payload,\n `${STATUS_PREFIX}:${event.toolCallId}:post`,\n `Running post-tool hooks for ${event.toolName}`,\n );\n if (!runtime.isCurrent()) return undefined;\n const decisions = decisionsFrom(outcomes);\n const failures = allFailures(dispatch, outcomes);\n const messages = toolResultMessages(decisions);\n if (failures.length > 0) messages.push(hookFailureMessage(failures));\n if (messages.length === 0) return undefined;\n // The result is appended to rather than replaced, so the tool's own output\n // still reaches the model alongside whatever the hook had to say.\n return {\n content: [...event.content, { type: 'text' as const, text: messages.join(CONTEXT_SEPARATOR) }],\n isError: event.isError || decisions.some(isDenied),\n };\n };\n}\n\nfunction createAgentSettled(_pi: ExtensionAPI, resolveRuntime: HookRuntimeResolver): PiEventHandlers['agent_settled'] {\n return async (_event, ctx) => {\n const runtime = resolveRuntime();\n if (!runtime?.isCurrent()) return;\n await runtime.readiness?.wait(ctx);\n if (!runtime.isCurrent()) return;\n const dispatch = await resolveHooks(runtime.session, ctx, HOOK_EVENT.stop);\n if (!runtime.isCurrent()) return;\n // skipInSubagent on the workflow-stop binding keeps subagents from closing\n // the parent's workflow step.\n await runHooks(\n runtime.session,\n ctx,\n dispatch,\n sessionHookPayload(dispatch.sessionId, dispatch.repoRoot),\n `${STATUS_PREFIX}:${dispatch.sessionId}:stop`,\n 'Running stop hooks',\n );\n };\n}\n\nexport function createHookHandlers(pi: ExtensionAPI, resolveRuntime: HookRuntimeResolver): PiEventHandlers {\n let shutdown: Promise<void> | undefined;\n return {\n session_start: createSessionStart(pi, resolveRuntime),\n before_agent_start: createBeforeAgentStart(pi, resolveRuntime),\n tool_call: createToolCall(pi, resolveRuntime),\n tool_result: createToolResult(pi, resolveRuntime),\n agent_settled: createAgentSettled(pi, resolveRuntime),\n session_shutdown: (_event, ctx) => {\n const current = resolveRuntime();\n if (!current?.isCurrent()) return undefined;\n shutdown ??= runSessionEndHooks(current.session, ctx);\n return shutdown;\n },\n };\n}\n\n/** Runs the plugin SessionEnd hooks while the session is still usable. */\nexport async function runSessionEndHooks(session: HookSession, ctx: ExtensionContext): Promise<void> {\n const dispatch = await resolvePluginHooks(session, ctx, HOOK_EVENT.sessionEnd);\n await runHooks(\n session,\n ctx,\n dispatch,\n sessionHookPayload(dispatch.sessionId, dispatch.repoRoot),\n `${STATUS_PREFIX}:${dispatch.sessionId}:end`,\n 'Running session-end hooks',\n );\n}\n","export const PACKAGE_SOURCE = '@agimon-ai/doompi-hook';\nexport const HOOK_HELP_SKILL = {\n name: 'doompi-author-hook',\n description:\n 'Author DoomPi repository or plugin hooks. Use when creating or changing .doom/hooks.yaml, selecting hook groups from modes.yaml, writing hook commands, or adapting Claude Code hook payloads and decisions to DoomPi.',\n};\n","import { requireDoomConfigContext } from '@agimon-ai/doompi-config/piContext';\nimport { DOOM_CONFIG_SERVICE } from '@agimon-ai/doompi-core/config';\nimport { type DoomReadinessCoordinator, readDoomReadinessCoordinator } from '@agimon-ai/doompi-core/readiness';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionContext } from '@earendil-works/pi-coding-agent';\n\nimport { PACKAGE_SOURCE } from '../../constants/hook';\nimport type { HookTelemetry } from '../../types/telemetry';\nimport { createHookDocumentReader } from '../hookDocuments';\nimport { createBashHookRunner } from '../hookRunner';\nimport { createHookTelemetry } from '../hookTelemetry';\nimport { type HookReadinessGate, type HookSession } from './type';\nimport type { HookBinding, HookExtensionOptions, HookRuntimeBinding } from './type';\n\nfunction hookSession(cordis: Context, options: HookExtensionOptions): HookSession {\n // The log sink is only built if something actually reports to it, so a fully\n // stubbed session never touches the telemetry backend.\n let telemetry = options.telemetry;\n const requireTelemetry = (): HookTelemetry => (telemetry ??= createHookTelemetry());\n return {\n config: () => requireDoomConfigContext(cordis),\n runner: options.runner ?? createBashHookRunner({ telemetry: requireTelemetry() }),\n documents: options.documents ?? createHookDocumentReader({ telemetry: requireTelemetry() }),\n };\n}\n\nfunction createHookRuntime(cordis: Context, options: HookExtensionOptions): HookRuntimeBinding {\n const session = hookSession(cordis, options);\n let active = true;\n let generation = 0;\n let readiness:\n | {\n readonly sessionManager: object;\n readonly coordinator: DoomReadinessCoordinator;\n readonly operation: Promise<void>;\n }\n | undefined;\n const readinessGate: HookReadinessGate = {\n start(context, operation) {\n const ownGeneration = ++generation;\n const isCurrent = (): boolean => active && ownGeneration === generation;\n const coordinator = readDoomReadinessCoordinator(cordis);\n if (!coordinator) return operation(new AbortController().signal, isCurrent);\n\n const previous = readiness;\n const readinessOperation = (async (): Promise<void> => {\n if (previous?.coordinator === coordinator) await previous.operation.catch(() => undefined);\n if (!isCurrent()) return;\n const handle = coordinator.start(\n PACKAGE_SOURCE,\n `${context.sessionManager.getSessionId()}:${ownGeneration}`,\n async (signal) => {\n await operation(signal, isCurrent);\n return { value: undefined };\n },\n );\n await handle.wait();\n })();\n // Config's coordinator owns the single user-facing failure notification.\n void readinessOperation.catch(() => undefined);\n readiness = {\n sessionManager: context.sessionManager,\n coordinator,\n operation: readinessOperation,\n };\n return undefined;\n },\n async wait(context: ExtensionContext): Promise<void> {\n const current = readiness;\n if (!current) return;\n if (current.sessionManager !== context.sessionManager) {\n throw new Error('Hook readiness belongs to a stale Pi session.');\n }\n await current.operation;\n if (!active || current !== readiness) {\n throw new Error('Hook readiness belongs to a stale extension generation.');\n }\n },\n };\n return {\n session,\n readiness: readinessGate,\n isCurrent: () => active,\n dispose() {\n active = false;\n generation += 1;\n readiness = undefined;\n },\n };\n}\n\nexport function createHookBinding(options: HookExtensionOptions): HookBinding {\n let runtime: HookRuntimeBinding | undefined;\n return {\n plugin(cordis) {\n cordis.inject([DOOM_CONFIG_SERVICE], (configContext) => {\n const binding = createHookRuntime(configContext, options);\n runtime = binding;\n return () => {\n binding.dispose();\n if (runtime === binding) runtime = undefined;\n };\n });\n },\n runtime: () => runtime,\n };\n}\n","import type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { createHookHandlers } from '../../../../../services/hookHandlers';\nimport { createHookBinding } from '../../../../../services/hookRuntime';\nimport type { HookExtensionOptions } from '../../../../../services/hookRuntime/type';\n\nexport const createHookPiRoot = ({ pi, options }: PiPluginContext<HookExtensionOptions>) => {\n const binding = createHookBinding(options ?? {});\n return { value: createHookHandlers(pi, binding.runtime), services: [binding.plugin] };\n};\nexport type HookPiScope = Awaited<ReturnType<typeof createHookPiRoot>>['value'];\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createHookPiRoot } from './_lib/piRoot';\n\nexport default defineRoot(createHookPiRoot);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers, PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { HookPiScope } from '../_lib/piRoot';\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<unknown>, HookPiScope>): PiEventHandlers['agent_settled'] =>\n context.root.agent_settled,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers, PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { HookPiScope } from '../_lib/piRoot';\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<unknown>, HookPiScope>): PiEventHandlers['before_agent_start'] =>\n context.root.before_agent_start,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers, PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { HookPiScope } from '../_lib/piRoot';\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<unknown>, HookPiScope>): PiEventHandlers['session_shutdown'] =>\n context.root.session_shutdown,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers, PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { HookPiScope } from '../_lib/piRoot';\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<unknown>, HookPiScope>): PiEventHandlers['session_start'] =>\n context.root.session_start,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers, PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { HookPiScope } from '../_lib/piRoot';\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<unknown>, HookPiScope>): PiEventHandlers['tool_call'] => context.root.tool_call,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers, PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport type { HookPiScope } from '../_lib/piRoot';\nexport default defineCliHook(\n (context: WithRoot<PiPluginContext<unknown>, HookPiScope>): PiEventHandlers['tool_result'] =>\n context.root.tool_result,\n);\n","import { defineResource } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { HOOK_HELP_SKILL, PACKAGE_SOURCE } from '../../../../../constants/hook';\nexport default defineResource({ source: PACKAGE_SOURCE, moduleUrl: import.meta.url, skills: [HOOK_HELP_SKILL] });\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookAgentSettled from '../src/extensions/workspaces/sessions/(backend)/hook/agent-settled.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli';\nimport hookSessionShutdown from '../src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli';\nimport hookToolCall from '../src/extensions/workspaces/sessions/(backend)/hook/tool-call.cli';\nimport hookToolResult from '../src/extensions/workspaces/sessions/(backend)/hook/tool-result.cli';\nimport resourceDoompiUseHook from '../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-hook.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookAgentSettled> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookSessionShutdown> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof hookToolCall> | OptionsOf<typeof hookToolResult> | OptionsOf<typeof resourceDoompiUseHook>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-hook', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n agent_settled: at(hookAgentSettled, contextSession) as NonNullable<PiPluginContributions['events']>['agent_settled'],\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n session_shutdown: at(hookSessionShutdown, contextSession) as NonNullable<PiPluginContributions['events']>['session_shutdown'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n tool_call: at(hookToolCall, contextSession) as NonNullable<PiPluginContributions['events']>['tool_call'],\n tool_result: at(hookToolResult, contextSession) as NonNullable<PiPluginContributions['events']>['tool_result'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourceDoompiUseHook, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { HookExtensionOptions } from "../src/services/hookRuntime/type.mjs";
2
- import "../index.mjs";
1
+ import { o as HookExtensionOptions } from "../index-LpLV04fM.mjs";
3
2
  //#region generated/pi.d.ts
4
- export declare const extension: import("@agimon-ai/doompi-core/runtime-pi-extension").DefinedPiExtension<HookExtensionOptions>;
3
+ export declare const extension: import("@agimon-ai/doompi-core/runtimePiExtension").DefinedPiExtension<HookExtensionOptions>;
5
4
  //#endregion
6
5
  export { extension as default };
7
6
  //# sourceMappingURL=pi.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";;;qBAuBa,iEAAS,mBAAT"}
1
+ {"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";;qBAuBa,+DAAS,mBAAT"}