@agimon-ai/doompi-hook 0.0.1-alpha.46 → 0.0.1-alpha.47

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 (229) hide show
  1. package/README.md +6 -0
  2. package/dist/api-contracts.cjs +1 -0
  3. package/dist/api-contracts.d.cts +2 -0
  4. package/dist/api-contracts.d.mts +2 -0
  5. package/dist/api-contracts.mjs +1 -0
  6. package/dist/constants/hook.cjs +2 -0
  7. package/dist/constants/hook.cjs.map +1 -0
  8. package/dist/constants/hook.mjs +2 -0
  9. package/dist/constants/hook.mjs.map +1 -0
  10. package/dist/constants/hookDecisions.cjs +2 -0
  11. package/dist/constants/hookDecisions.cjs.map +1 -0
  12. package/dist/constants/hookDecisions.mjs +2 -0
  13. package/dist/constants/hookDecisions.mjs.map +1 -0
  14. package/dist/constants/hookDocuments.cjs +2 -0
  15. package/dist/constants/hookDocuments.cjs.map +1 -0
  16. package/dist/constants/hookDocuments.mjs +2 -0
  17. package/dist/constants/hookDocuments.mjs.map +1 -0
  18. package/dist/constants/hookHandlers.cjs +2 -0
  19. package/dist/constants/hookHandlers.cjs.map +1 -0
  20. package/dist/constants/hookHandlers.mjs +2 -0
  21. package/dist/constants/hookHandlers.mjs.map +1 -0
  22. package/dist/constants/hookPayload.cjs +2 -0
  23. package/dist/constants/hookPayload.cjs.map +1 -0
  24. package/dist/constants/hookPayload.mjs +2 -0
  25. package/dist/constants/hookPayload.mjs.map +1 -0
  26. package/dist/constants/hookRunner.cjs +2 -0
  27. package/dist/constants/hookRunner.cjs.map +1 -0
  28. package/dist/constants/hookRunner.mjs +2 -0
  29. package/dist/constants/hookRunner.mjs.map +1 -0
  30. package/dist/constants/hookTelemetry.cjs +2 -0
  31. package/dist/constants/hookTelemetry.cjs.map +1 -0
  32. package/dist/constants/hookTelemetry.mjs +2 -0
  33. package/dist/constants/hookTelemetry.mjs.map +1 -0
  34. package/dist/constants/hooks.cjs.map +1 -0
  35. package/dist/constants/hooks.d.cts +10 -0
  36. package/dist/constants/hooks.d.cts.map +1 -0
  37. package/dist/constants/hooks.d.mts +10 -0
  38. package/dist/constants/hooks.d.mts.map +1 -0
  39. package/dist/constants/hooks.mjs.map +1 -0
  40. package/dist/constants/telemetry.cjs.map +1 -0
  41. package/dist/constants/telemetry.d.cts +7 -0
  42. package/dist/constants/telemetry.d.cts.map +1 -0
  43. package/dist/constants/telemetry.d.mts +7 -0
  44. package/dist/constants/telemetry.d.mts.map +1 -0
  45. package/dist/constants/telemetry.mjs.map +1 -0
  46. package/dist/controllers/hookHandlers.cjs +8 -0
  47. package/dist/controllers/hookHandlers.cjs.map +1 -0
  48. package/dist/controllers/hookHandlers.mjs +8 -0
  49. package/dist/controllers/hookHandlers.mjs.map +1 -0
  50. package/dist/controllers/serverHooks.cjs +2 -0
  51. package/dist/controllers/serverHooks.cjs.map +1 -0
  52. package/dist/controllers/serverHooks.mjs +2 -0
  53. package/dist/controllers/serverHooks.mjs.map +1 -0
  54. package/dist/extensions/pi.cjs +2 -1
  55. package/dist/extensions/pi.cjs.map +1 -0
  56. package/dist/extensions/pi.d.cts +6 -2
  57. package/dist/extensions/pi.d.cts.map +1 -0
  58. package/dist/extensions/pi.d.mts +6 -2
  59. package/dist/extensions/pi.d.mts.map +1 -0
  60. package/dist/extensions/pi.mjs +2 -1
  61. package/dist/extensions/pi.mjs.map +1 -0
  62. package/dist/extensions/server.cjs +2 -0
  63. package/dist/extensions/server.cjs.map +1 -0
  64. package/dist/extensions/server.d.cts +5 -0
  65. package/dist/extensions/server.d.cts.map +1 -0
  66. package/dist/extensions/server.d.mts +5 -0
  67. package/dist/extensions/server.d.mts.map +1 -0
  68. package/dist/extensions/server.mjs +2 -0
  69. package/dist/extensions/server.mjs.map +1 -0
  70. package/dist/index.cjs +1 -1
  71. package/dist/index.d.cts +14 -12
  72. package/dist/index.d.mts +14 -12
  73. package/dist/index.mjs +1 -1
  74. package/dist/schemas/apiContracts.cjs +2 -0
  75. package/dist/schemas/apiContracts.cjs.map +1 -0
  76. package/dist/schemas/apiContracts.d.cts +53 -0
  77. package/dist/schemas/apiContracts.d.cts.map +1 -0
  78. package/dist/schemas/apiContracts.d.mts +53 -0
  79. package/dist/schemas/apiContracts.d.mts.map +1 -0
  80. package/dist/schemas/apiContracts.mjs +2 -0
  81. package/dist/schemas/apiContracts.mjs.map +1 -0
  82. package/dist/services/hookDecisions/index.cjs +3 -0
  83. package/dist/services/hookDecisions/index.cjs.map +1 -0
  84. package/dist/services/{hookDecisions.d.cts → hookDecisions/index.d.cts} +3 -3
  85. package/dist/services/hookDecisions/index.d.cts.map +1 -0
  86. package/dist/services/{hookDecisions.d.mts → hookDecisions/index.d.mts} +3 -3
  87. package/dist/services/hookDecisions/index.d.mts.map +1 -0
  88. package/dist/services/hookDecisions/index.mjs +3 -0
  89. package/dist/services/hookDecisions/index.mjs.map +1 -0
  90. package/dist/services/hookDocuments/index.cjs +2 -0
  91. package/dist/services/hookDocuments/index.cjs.map +1 -0
  92. package/dist/{adapters/hookDocuments.d.mts → services/hookDocuments/index.d.cts} +4 -4
  93. package/dist/services/hookDocuments/index.d.cts.map +1 -0
  94. package/dist/{adapters/hookDocuments.d.cts → services/hookDocuments/index.d.mts} +4 -4
  95. package/dist/services/hookDocuments/index.d.mts.map +1 -0
  96. package/dist/services/hookDocuments/index.mjs +2 -0
  97. package/dist/services/hookDocuments/index.mjs.map +1 -0
  98. package/dist/services/hookPayload/index.cjs +2 -0
  99. package/dist/services/hookPayload/index.cjs.map +1 -0
  100. package/dist/services/{hookPayload.d.cts → hookPayload/index.d.cts} +3 -3
  101. package/dist/services/hookPayload/index.d.cts.map +1 -0
  102. package/dist/services/{hookPayload.d.mts → hookPayload/index.d.mts} +3 -3
  103. package/dist/services/hookPayload/index.d.mts.map +1 -0
  104. package/dist/services/hookPayload/index.mjs +2 -0
  105. package/dist/services/hookPayload/index.mjs.map +1 -0
  106. package/dist/services/hookRegistry/index.cjs +2 -0
  107. package/dist/services/{hookRegistry.cjs.map → hookRegistry/index.cjs.map} +1 -1
  108. package/dist/services/{hookRegistry.d.cts → hookRegistry/index.d.cts} +3 -3
  109. package/dist/services/hookRegistry/index.d.cts.map +1 -0
  110. package/dist/services/{hookRegistry.d.mts → hookRegistry/index.d.mts} +3 -3
  111. package/dist/services/hookRegistry/index.d.mts.map +1 -0
  112. package/dist/services/hookRegistry/index.mjs +2 -0
  113. package/dist/services/{hookRegistry.mjs.map → hookRegistry/index.mjs.map} +1 -1
  114. package/dist/services/hookResource/index.cjs +2 -0
  115. package/dist/services/hookResource/index.cjs.map +1 -0
  116. package/dist/services/hookResource/index.mjs +2 -0
  117. package/dist/services/hookResource/index.mjs.map +1 -0
  118. package/dist/services/hookRunner/index.cjs +2 -0
  119. package/dist/services/hookRunner/index.cjs.map +1 -0
  120. package/dist/{adapters/hookRunner.d.cts → services/hookRunner/index.d.cts} +4 -4
  121. package/dist/services/hookRunner/index.d.cts.map +1 -0
  122. package/dist/{adapters/hookRunner.d.mts → services/hookRunner/index.d.mts} +4 -4
  123. package/dist/services/hookRunner/index.d.mts.map +1 -0
  124. package/dist/services/hookRunner/index.mjs +2 -0
  125. package/dist/services/hookRunner/index.mjs.map +1 -0
  126. package/dist/services/hookRuntime/index.cjs +2 -0
  127. package/dist/services/hookRuntime/index.cjs.map +1 -0
  128. package/dist/services/hookRuntime/index.mjs +2 -0
  129. package/dist/services/hookRuntime/index.mjs.map +1 -0
  130. package/dist/services/hookRuntime/type.d.cts +13 -0
  131. package/dist/services/hookRuntime/type.d.cts.map +1 -0
  132. package/dist/services/hookRuntime/type.d.mts +13 -0
  133. package/dist/services/hookRuntime/type.d.mts.map +1 -0
  134. package/dist/services/hookTelemetry/index.cjs +2 -0
  135. package/dist/{adapters/telemetry/logSinkTelemetry.cjs.map → services/hookTelemetry/index.cjs.map} +1 -1
  136. package/dist/{adapters/telemetry/logSinkTelemetry.d.cts → services/hookTelemetry/index.d.cts} +2 -2
  137. package/dist/services/hookTelemetry/index.d.cts.map +1 -0
  138. package/dist/{adapters/telemetry/logSinkTelemetry.d.mts → services/hookTelemetry/index.d.mts} +2 -2
  139. package/dist/services/hookTelemetry/index.d.mts.map +1 -0
  140. package/dist/services/hookTelemetry/index.mjs +2 -0
  141. package/dist/services/hookTelemetry/index.mjs.map +1 -0
  142. package/dist/services/pluginHooks/index.cjs +2 -0
  143. package/dist/services/pluginHooks/index.cjs.map +1 -0
  144. package/dist/services/{pluginHooks.d.cts → pluginHooks/index.d.cts} +3 -3
  145. package/dist/services/pluginHooks/index.d.cts.map +1 -0
  146. package/dist/services/{pluginHooks.d.mts → pluginHooks/index.d.mts} +3 -3
  147. package/dist/services/pluginHooks/index.d.mts.map +1 -0
  148. package/dist/services/pluginHooks/index.mjs +2 -0
  149. package/dist/services/pluginHooks/index.mjs.map +1 -0
  150. package/dist/services/{toolNames.cjs → toolNames/index.cjs} +1 -1
  151. package/dist/services/toolNames/index.cjs.map +1 -0
  152. package/dist/services/{toolNames.d.cts → toolNames/index.d.cts} +2 -2
  153. package/dist/services/toolNames/index.d.cts.map +1 -0
  154. package/dist/services/{toolNames.d.mts → toolNames/index.d.mts} +2 -2
  155. package/dist/services/toolNames/index.d.mts.map +1 -0
  156. package/dist/services/{toolNames.mjs → toolNames/index.mjs} +1 -1
  157. package/dist/services/toolNames/index.mjs.map +1 -0
  158. package/dist/types/hooks.d.cts +1 -7
  159. package/dist/types/hooks.d.cts.map +1 -1
  160. package/dist/types/hooks.d.mts +1 -7
  161. package/dist/types/hooks.d.mts.map +1 -1
  162. package/dist/types/telemetry.d.cts +1 -4
  163. package/dist/types/telemetry.d.cts.map +1 -1
  164. package/dist/types/telemetry.d.mts +1 -4
  165. package/dist/types/telemetry.d.mts.map +1 -1
  166. package/package.json +21 -5
  167. package/dist/adapters/hookDocuments.cjs +0 -2
  168. package/dist/adapters/hookDocuments.cjs.map +0 -1
  169. package/dist/adapters/hookDocuments.d.cts.map +0 -1
  170. package/dist/adapters/hookDocuments.d.mts.map +0 -1
  171. package/dist/adapters/hookDocuments.mjs +0 -2
  172. package/dist/adapters/hookDocuments.mjs.map +0 -1
  173. package/dist/adapters/hookRunner.cjs +0 -2
  174. package/dist/adapters/hookRunner.cjs.map +0 -1
  175. package/dist/adapters/hookRunner.d.cts.map +0 -1
  176. package/dist/adapters/hookRunner.d.mts.map +0 -1
  177. package/dist/adapters/hookRunner.mjs +0 -2
  178. package/dist/adapters/hookRunner.mjs.map +0 -1
  179. package/dist/adapters/pi/extension.cjs +0 -2
  180. package/dist/adapters/pi/extension.cjs.map +0 -1
  181. package/dist/adapters/pi/extension.d.cts +0 -14
  182. package/dist/adapters/pi/extension.d.cts.map +0 -1
  183. package/dist/adapters/pi/extension.d.mts +0 -14
  184. package/dist/adapters/pi/extension.d.mts.map +0 -1
  185. package/dist/adapters/pi/extension.mjs +0 -2
  186. package/dist/adapters/pi/extension.mjs.map +0 -1
  187. package/dist/adapters/pi/hookHandlers.cjs +0 -8
  188. package/dist/adapters/pi/hookHandlers.cjs.map +0 -1
  189. package/dist/adapters/pi/hookHandlers.mjs +0 -8
  190. package/dist/adapters/pi/hookHandlers.mjs.map +0 -1
  191. package/dist/adapters/telemetry/logSinkTelemetry.cjs +0 -2
  192. package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +0 -1
  193. package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +0 -1
  194. package/dist/adapters/telemetry/logSinkTelemetry.mjs +0 -2
  195. package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +0 -1
  196. package/dist/services/hookDecisions.cjs +0 -3
  197. package/dist/services/hookDecisions.cjs.map +0 -1
  198. package/dist/services/hookDecisions.d.cts.map +0 -1
  199. package/dist/services/hookDecisions.d.mts.map +0 -1
  200. package/dist/services/hookDecisions.mjs +0 -3
  201. package/dist/services/hookDecisions.mjs.map +0 -1
  202. package/dist/services/hookPayload.cjs +0 -2
  203. package/dist/services/hookPayload.cjs.map +0 -1
  204. package/dist/services/hookPayload.d.cts.map +0 -1
  205. package/dist/services/hookPayload.d.mts.map +0 -1
  206. package/dist/services/hookPayload.mjs +0 -2
  207. package/dist/services/hookPayload.mjs.map +0 -1
  208. package/dist/services/hookRegistry.cjs +0 -2
  209. package/dist/services/hookRegistry.d.cts.map +0 -1
  210. package/dist/services/hookRegistry.d.mts.map +0 -1
  211. package/dist/services/hookRegistry.mjs +0 -2
  212. package/dist/services/pluginHooks.cjs +0 -2
  213. package/dist/services/pluginHooks.cjs.map +0 -1
  214. package/dist/services/pluginHooks.d.cts.map +0 -1
  215. package/dist/services/pluginHooks.d.mts.map +0 -1
  216. package/dist/services/pluginHooks.mjs +0 -2
  217. package/dist/services/pluginHooks.mjs.map +0 -1
  218. package/dist/services/toolNames.cjs.map +0 -1
  219. package/dist/services/toolNames.d.cts.map +0 -1
  220. package/dist/services/toolNames.d.mts.map +0 -1
  221. package/dist/services/toolNames.mjs.map +0 -1
  222. package/dist/types/hooks.cjs.map +0 -1
  223. package/dist/types/hooks.mjs.map +0 -1
  224. package/dist/types/telemetry.cjs.map +0 -1
  225. package/dist/types/telemetry.mjs.map +0 -1
  226. /package/dist/{types → constants}/hooks.cjs +0 -0
  227. /package/dist/{types → constants}/hooks.mjs +0 -0
  228. /package/dist/{types → constants}/telemetry.cjs +0 -0
  229. /package/dist/{types → constants}/telemetry.mjs +0 -0
package/README.md CHANGED
@@ -118,3 +118,9 @@ Maintained by [Agimon](https://agimon.ai/about).
118
118
  ## License
119
119
 
120
120
  MIT
121
+
122
+ ## Extension lifecycle and source layout
123
+
124
+ `extensions/pi.ts` declares Config-dependent service bindings, typed controller events, and Help resources. The readiness gate in `services/hookRuntime/` keeps session-start hooks ahead of dependent events and rejects stale generations. Session-end hooks finish during `session_shutdown` before the shared helper disposes the service binding.
125
+
126
+ `extensions/server.ts` declares the server hooks from `controllers/serverHooks.ts`. Controllers dispatch through `services/<name>/`; constants and shared types have their own roots. Flat `exports/` publishes reusable capabilities, and extension entry points are built directly.
@@ -0,0 +1 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./schemas/apiContracts.cjs");exports.apiContracts=e.apiContracts,exports.default=e.apiContracts;
@@ -0,0 +1,2 @@
1
+ import { apiContracts } from "./schemas/apiContracts.cjs";
2
+ export { apiContracts, apiContracts as default };
@@ -0,0 +1,2 @@
1
+ import { apiContracts } from "./schemas/apiContracts.mjs";
2
+ export { apiContracts, apiContracts as default };
@@ -0,0 +1 @@
1
+ import{apiContracts as e}from"./schemas/apiContracts.mjs";export{e as apiContracts,e as default};
@@ -0,0 +1,2 @@
1
+ const e={name:`doompi-author-hook`,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.`};exports.HOOK_HELP_SKILL=e,exports.PACKAGE_SOURCE=`@agimon-ai/doompi-hook`;
2
+ //# sourceMappingURL=hook.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.cjs","names":[],"sources":["../../src/constants/hook.ts"],"sourcesContent":["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"],"mappings":"AAAA,MACa,EAAkB,CAC7B,KAAM,qBACN,YACE,wNACJ"}
@@ -0,0 +1,2 @@
1
+ const e=`@agimon-ai/doompi-hook`,t={name:`doompi-author-hook`,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.`};export{t as HOOK_HELP_SKILL,e as PACKAGE_SOURCE};
2
+ //# sourceMappingURL=hook.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.mjs","names":[],"sources":["../../src/constants/hook.ts"],"sourcesContent":["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"],"mappings":"AAAA,MAAa,EAAiB,yBACjB,EAAkB,CAC7B,KAAM,qBACN,YACE,wNACJ"}
@@ -0,0 +1,2 @@
1
+ exports.BLOCK_DECISION=`block`,exports.DENY_PERMISSION=`deny`;
2
+ //# sourceMappingURL=hookDecisions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookDecisions.cjs","names":[],"sources":["../../src/constants/hookDecisions.ts"],"sourcesContent":["export const BLOCK_DECISION = 'block';\nexport const DENY_PERMISSION = 'deny';\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ const e=`block`,t=`deny`;export{e as BLOCK_DECISION,t as DENY_PERMISSION};
2
+ //# sourceMappingURL=hookDecisions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookDecisions.mjs","names":[],"sources":["../../src/constants/hookDecisions.ts"],"sourcesContent":["export const BLOCK_DECISION = 'block';\nexport const DENY_PERMISSION = 'deny';\n"],"mappings":"AAAA,MAAa,EAAiB,QACjB,EAAkB"}
@@ -0,0 +1,2 @@
1
+ exports.FILE_ENCODING=`utf8`,exports.FILE_NOT_FOUND_ERROR=`ENOENT`,exports.HOOKS_FILE=`hooks.yaml`,exports.REGISTRY_SOURCE_ATTRIBUTE=`repository`;
2
+ //# sourceMappingURL=hookDocuments.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookDocuments.cjs","names":[],"sources":["../../src/constants/hookDocuments.ts"],"sourcesContent":["export const HOOKS_FILE = 'hooks.yaml';\nexport const FILE_ENCODING = 'utf8';\nexport const FILE_NOT_FOUND_ERROR = 'ENOENT';\nexport const REGISTRY_SOURCE_ATTRIBUTE = 'repository';\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ const e=`hooks.yaml`,t=`utf8`,n=`ENOENT`,r=`repository`;export{t as FILE_ENCODING,n as FILE_NOT_FOUND_ERROR,e as HOOKS_FILE,r as REGISTRY_SOURCE_ATTRIBUTE};
2
+ //# sourceMappingURL=hookDocuments.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookDocuments.mjs","names":[],"sources":["../../src/constants/hookDocuments.ts"],"sourcesContent":["export const HOOKS_FILE = 'hooks.yaml';\nexport const FILE_ENCODING = 'utf8';\nexport const FILE_NOT_FOUND_ERROR = 'ENOENT';\nexport const REGISTRY_SOURCE_ATTRIBUTE = 'repository';\n"],"mappings":"AAAA,MAAa,EAAa,aACb,EAAgB,OAChB,EAAuB,SACvB,EAA4B"}
@@ -0,0 +1,2 @@
1
+ const e={deliverAs:`steer`};exports.BLOCKED_BY_HOOK=`Blocked by repository hook`,exports.CONTEXT_MESSAGE_TYPE=`repository-hook-context`,exports.FAILURE_MESSAGE_TYPE=`repository-hook-failure`,exports.STATUS_PREFIX=`repository-hooks`,exports.STEER=e,exports.SUBAGENT_ENVIRONMENT_FLAG=`PI_SUBAGENT_CHILD`;
2
+ //# sourceMappingURL=hookHandlers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookHandlers.cjs","names":[],"sources":["../../src/constants/hookHandlers.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"],"mappings":"AAAA,MAGa,EAAQ,CAAE,UAAW,OAAQ"}
@@ -0,0 +1,2 @@
1
+ const e=`repository-hooks`,t=`repository-hook-failure`,n=`repository-hook-context`,r={deliverAs:`steer`},i=`Blocked by repository hook`,a=`PI_SUBAGENT_CHILD`;export{i as BLOCKED_BY_HOOK,n as CONTEXT_MESSAGE_TYPE,t as FAILURE_MESSAGE_TYPE,e as STATUS_PREFIX,r as STEER,a as SUBAGENT_ENVIRONMENT_FLAG};
2
+ //# sourceMappingURL=hookHandlers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookHandlers.mjs","names":[],"sources":["../../src/constants/hookHandlers.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"],"mappings":"AAAA,MAAa,EAAgB,mBAChB,EAAuB,0BACvB,EAAuB,0BACvB,EAAQ,CAAE,UAAW,OAAQ,EAC7B,EAAkB,6BAClB,EAA4B"}
@@ -0,0 +1,2 @@
1
+ exports.TOOL_RESULT_EVENT=`tool_result`;
2
+ //# sourceMappingURL=hookPayload.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookPayload.cjs","names":[],"sources":["../../src/constants/hookPayload.ts"],"sourcesContent":["export const TOOL_RESULT_EVENT = 'tool_result';\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ const e=`tool_result`;export{e as TOOL_RESULT_EVENT};
2
+ //# sourceMappingURL=hookPayload.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookPayload.mjs","names":[],"sources":["../../src/constants/hookPayload.ts"],"sourcesContent":["export const TOOL_RESULT_EVENT = 'tool_result';\n"],"mappings":"AAAA,MAAa,EAAoB"}
@@ -0,0 +1,2 @@
1
+ const e=/\r?\n/;exports.HOOK_SHELL=`/bin/bash`,exports.HOOK_TERMINATION_GRACE_MS=2e3,exports.LINE_BREAK=e,exports.MILLISECONDS_PER_SECOND=1e3,exports.PROCESS_NOT_FOUND_ERROR=`ESRCH`,exports.WINDOWS_PLATFORM=`win32`;
2
+ //# sourceMappingURL=hookRunner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookRunner.cjs","names":[],"sources":["../../src/constants/hookRunner.ts"],"sourcesContent":["export const HOOK_SHELL = '/bin/bash';\nexport const HOOK_SHELL_COMMAND_FLAG = '-c';\nexport const HOOK_TERMINATION_GRACE_MS = 2_000;\nexport const DEFAULT_HOOK_TIMEOUT_SECONDS = 10;\nexport const MILLISECONDS_PER_SECOND = 1_000;\nexport const PROCESS_NOT_FOUND_ERROR = 'ESRCH';\nexport const WINDOWS_PLATFORM = 'win32';\nexport const UNKNOWN_EXIT_CODE = -1;\nexport const JSON_LINE_START = '{';\nexport const LINE_BREAK = /\\r?\\n/;\n"],"mappings":"AAAA,MASa,EAAa"}
@@ -0,0 +1,2 @@
1
+ const e=`/bin/bash`,t=2e3,n=1e3,r=`ESRCH`,i=`win32`,a=/\r?\n/;export{e as HOOK_SHELL,t as HOOK_TERMINATION_GRACE_MS,a as LINE_BREAK,n as MILLISECONDS_PER_SECOND,r as PROCESS_NOT_FOUND_ERROR,i as WINDOWS_PLATFORM};
2
+ //# sourceMappingURL=hookRunner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookRunner.mjs","names":[],"sources":["../../src/constants/hookRunner.ts"],"sourcesContent":["export const HOOK_SHELL = '/bin/bash';\nexport const HOOK_SHELL_COMMAND_FLAG = '-c';\nexport const HOOK_TERMINATION_GRACE_MS = 2_000;\nexport const DEFAULT_HOOK_TIMEOUT_SECONDS = 10;\nexport const MILLISECONDS_PER_SECOND = 1_000;\nexport const PROCESS_NOT_FOUND_ERROR = 'ESRCH';\nexport const WINDOWS_PLATFORM = 'win32';\nexport const UNKNOWN_EXIT_CODE = -1;\nexport const JSON_LINE_START = '{';\nexport const LINE_BREAK = /\\r?\\n/;\n"],"mappings":"AAAA,MAAa,EAAa,YAEb,EAA4B,IAE5B,EAA0B,IAC1B,EAA0B,QAC1B,EAAmB,QAGnB,EAAa"}
@@ -0,0 +1,2 @@
1
+ exports.PACKAGE_NAME=`@agimon-ai/doompi-hook`,exports.SERVICE_NAME=`doom-pi-hook`;
2
+ //# sourceMappingURL=hookTelemetry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookTelemetry.cjs","names":[],"sources":["../../src/constants/hookTelemetry.ts"],"sourcesContent":["export const SERVICE_NAME = 'doom-pi-hook';\nexport const PACKAGE_NAME = '@agimon-ai/doompi-hook';\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ const e=`doom-pi-hook`,t=`@agimon-ai/doompi-hook`;export{t as PACKAGE_NAME,e as SERVICE_NAME};
2
+ //# sourceMappingURL=hookTelemetry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookTelemetry.mjs","names":[],"sources":["../../src/constants/hookTelemetry.ts"],"sourcesContent":["export const SERVICE_NAME = 'doom-pi-hook';\nexport const PACKAGE_NAME = '@agimon-ai/doompi-hook';\n"],"mappings":"AAAA,MAAa,EAAe,eACf,EAAe"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.cjs","names":[],"sources":["../../src/constants/hooks.ts"],"sourcesContent":["export const HOOK_EVENT = {\n sessionStart: 'SessionStart',\n preToolUse: 'PreToolUse',\n postToolUse: 'PostToolUse',\n stop: 'Stop',\n sessionEnd: 'SessionEnd',\n} as const;\n"],"mappings":"AAAA,MAAa,EAAa,CACxB,aAAc,eACd,WAAY,aACZ,YAAa,cACb,KAAM,OACN,WAAY,YACd"}
@@ -0,0 +1,10 @@
1
+ //#region src/constants/hooks.d.ts
2
+ export declare const HOOK_EVENT: {
3
+ readonly sessionStart: 'SessionStart';
4
+ readonly preToolUse: 'PreToolUse';
5
+ readonly postToolUse: 'PostToolUse';
6
+ readonly stop: 'Stop';
7
+ readonly sessionEnd: 'SessionEnd';
8
+ };
9
+ //#endregion
10
+ //# sourceMappingURL=hooks.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.cts","names":[],"sources":["../../src/constants/hooks.ts"],"mappings":";qBAAa;WACX;WACA;WACA;WACA;WACA"}
@@ -0,0 +1,10 @@
1
+ //#region src/constants/hooks.d.ts
2
+ export declare const HOOK_EVENT: {
3
+ readonly sessionStart: 'SessionStart';
4
+ readonly preToolUse: 'PreToolUse';
5
+ readonly postToolUse: 'PostToolUse';
6
+ readonly stop: 'Stop';
7
+ readonly sessionEnd: 'SessionEnd';
8
+ };
9
+ //#endregion
10
+ //# sourceMappingURL=hooks.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.mts","names":[],"sources":["../../src/constants/hooks.ts"],"mappings":";qBAAa;WACX;WACA;WACA;WACA;WACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.mjs","names":[],"sources":["../../src/constants/hooks.ts"],"sourcesContent":["export const HOOK_EVENT = {\n sessionStart: 'SessionStart',\n preToolUse: 'PreToolUse',\n postToolUse: 'PostToolUse',\n stop: 'Stop',\n sessionEnd: 'SessionEnd',\n} as const;\n"],"mappings":"AAAA,MAAa,EAAa,CACxB,aAAc,eACd,WAAY,aACZ,YAAa,cACb,KAAM,OACN,WAAY,YACd"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.cjs","names":[],"sources":["../../src/constants/telemetry.ts"],"sourcesContent":["export const HOOK_TELEMETRY_EVENT = {\n hookFailed: 'doom_pi_hook.failed',\n hookRegistryReadFailed: 'doom_pi_hook.registry_read_failed',\n} as const;\n"],"mappings":"AAAA,MAAa,EAAuB,CAClC,WAAY,sBACZ,uBAAwB,mCAC1B"}
@@ -0,0 +1,7 @@
1
+ //#region src/constants/telemetry.d.ts
2
+ export declare const HOOK_TELEMETRY_EVENT: {
3
+ readonly hookFailed: 'doom_pi_hook.failed';
4
+ readonly hookRegistryReadFailed: 'doom_pi_hook.registry_read_failed';
5
+ };
6
+ //#endregion
7
+ //# sourceMappingURL=telemetry.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.cts","names":[],"sources":["../../src/constants/telemetry.ts"],"mappings":";qBAAa;WACX;WACA"}
@@ -0,0 +1,7 @@
1
+ //#region src/constants/telemetry.d.ts
2
+ export declare const HOOK_TELEMETRY_EVENT: {
3
+ readonly hookFailed: 'doom_pi_hook.failed';
4
+ readonly hookRegistryReadFailed: 'doom_pi_hook.registry_read_failed';
5
+ };
6
+ //#endregion
7
+ //# sourceMappingURL=telemetry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.mts","names":[],"sources":["../../src/constants/telemetry.ts"],"mappings":";qBAAa;WACX;WACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.mjs","names":[],"sources":["../../src/constants/telemetry.ts"],"sourcesContent":["export const HOOK_TELEMETRY_EVENT = {\n hookFailed: 'doom_pi_hook.failed',\n hookRegistryReadFailed: 'doom_pi_hook.registry_read_failed',\n} as const;\n"],"mappings":"AAAA,MAAa,EAAuB,CAClC,WAAY,sBACZ,uBAAwB,mCAC1B"}
@@ -0,0 +1,8 @@
1
+ const e=require("../services/hookDecisions/index.cjs"),t=require("../services/hookRegistry/index.cjs"),n=require("../services/hookPayload/index.cjs"),r=require("../services/pluginHooks/index.cjs"),i=require("../constants/hooks.cjs"),a=require("../constants/hookHandlers.cjs");async function o(e,n,i,o){let s=e.config().harness,c=s.root??n.cwd,[l,u]=await Promise.all([e.documents.registry(c),e.documents.plugins(s.pluginHooks)]),d=[...t.selectRegistryHooks(l.entries,{event:i,toolName:o,allowedGroups:s.hookGroups,inSubagent:!!process.env[a.SUBAGENT_ENVIRONMENT_FLAG]}),...r.selectPluginHooks(u.documents,i,o)];return{repoRoot:c,sessionId:n.sessionManager.getSessionId(),hooks:d,failures:[...l.failure?[l.failure]:[],...u.failures]}}async function s(e,t,n){let i=e.config().harness,a=await e.documents.plugins(i.pluginHooks);return{repoRoot:i.root??t.cwd,sessionId:t.sessionManager.getSessionId(),hooks:r.selectPluginHooks(a.documents,n),failures:a.failures}}async function c(e,t,n,r,i,a){let o=[];try{for(let[s,c]of n.hooks.entries())t.hasUI&&t.ui.setStatus(i,`${a} (${s+1}/${n.hooks.length})...`),o.push(await e.runner.run(c.hook,r,{repoRoot:n.repoRoot,pluginRoot:c.root}))}finally{t.hasUI&&t.ui.setStatus(i,void 0)}return o}function l(t,n){return[...t.failures,...e.failuresFrom(n)]}function u(t,n){n.length!==0&&t.sendMessage({customType:a.FAILURE_MESSAGE_TYPE,content:e.hookFailureMessage(n),display:!0},a.STEER)}async function d(t,r,s,d,f=()=>!0){d?.throwIfAborted();let p=await o(r,s,i.HOOK_EVENT.sessionStart);d?.throwIfAborted();let m=await c(r,s,p,n.sessionHookPayload(p.sessionId,p.repoRoot),`${a.STATUS_PREFIX}:${p.sessionId}:start`,`Running session-start hooks`);if(d?.throwIfAborted(),!f())return;u(t,l(p,m));let h=e.additionalContextsFrom(e.decisionsFrom(m)).join(`
2
+
3
+ `);h&&t.sendMessage({customType:a.CONTEXT_MESSAGE_TYPE,content:h,display:!0},a.STEER)}function f(e,t){return(n,r)=>{let i=t();if(!i?.isCurrent())return;let{readiness:a,session:o}=i;return a?a.start(r,(t,n)=>d(e,o,r,t,()=>i.isCurrent()&&n())):d(e,o,r)}}function p(e,t){return async(e,n)=>{let r=t();r?.isCurrent()&&await r.readiness?.wait(n)}}function m(t,r){return async(s,d)=>{let f=r();if(!f?.isCurrent()||(await f.readiness?.wait(d),!f.isCurrent()))return;let p=await o(f.session,d,i.HOOK_EVENT.preToolUse,s.toolName);if(!f.isCurrent())return;let m=n.toolHookPayload(s,i.HOOK_EVENT.preToolUse,p.repoRoot,p.sessionId),h=await c(f.session,d,p,m,`${a.STATUS_PREFIX}:${s.toolCallId}:pre`,`Running pre-tool hooks for ${s.toolName}`);if(!f.isCurrent())return;let g=e.decisionsFrom(h);u(t,l(p,h));let _=g.find(e.isDenied);if(_)return{block:!0,reason:e.decisionReason(_)??`Blocked by repository hook`};let v=e.additionalContextsFrom(g).join(`
4
+
5
+ `);return v?{block:!0,reason:v}:void 0}}function h(t,r){return async(t,s)=>{let u=r();if(!u?.isCurrent()||(await u.readiness?.wait(s),!u.isCurrent()))return;let d=await o(u.session,s,i.HOOK_EVENT.postToolUse,t.toolName);if(!u.isCurrent())return;let f=n.toolHookPayload(t,i.HOOK_EVENT.postToolUse,d.repoRoot,d.sessionId),p=await c(u.session,s,d,f,`${a.STATUS_PREFIX}:${t.toolCallId}:post`,`Running post-tool hooks for ${t.toolName}`);if(!u.isCurrent())return;let m=e.decisionsFrom(p),h=l(d,p),g=e.toolResultMessages(m);if(h.length>0&&g.push(e.hookFailureMessage(h)),g.length!==0)return{content:[...t.content,{type:`text`,text:g.join(`
6
+
7
+ `)}],isError:t.isError||m.some(e.isDenied)}}}function g(e,t){return async(e,r)=>{let s=t();if(!s?.isCurrent()||(await s.readiness?.wait(r),!s.isCurrent()))return;let l=await o(s.session,r,i.HOOK_EVENT.stop);s.isCurrent()&&await c(s.session,r,l,n.sessionHookPayload(l.sessionId,l.repoRoot),`${a.STATUS_PREFIX}:${l.sessionId}:stop`,`Running stop hooks`)}}function _(e,t){let n;return{session_start:f(e,t),before_agent_start:p(e,t),tool_call:m(e,t),tool_result:h(e,t),agent_settled:g(e,t),session_shutdown:(e,r)=>{let i=t();if(i?.isCurrent())return n??=v(i.session,r),n}}}async function v(e,t){let r=await s(e,t,i.HOOK_EVENT.sessionEnd);await c(e,t,r,n.sessionHookPayload(r.sessionId,r.repoRoot),`${a.STATUS_PREFIX}:${r.sessionId}:end`,`Running session-end hooks`)}exports.createHookHandlers=_,exports.runSessionEndHooks=v;
8
+ //# sourceMappingURL=hookHandlers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookHandlers.cjs","names":["selectRegistryHooks","SUBAGENT_ENVIRONMENT_FLAG","selectPluginHooks","failuresFrom","FAILURE_MESSAGE_TYPE","hookFailureMessage","STEER","HOOK_EVENT","sessionHookPayload","STATUS_PREFIX","additionalContextsFrom","decisionsFrom","CONTEXT_MESSAGE_TYPE","toolHookPayload","isDenied","decisionReason","toolResultMessages"],"sources":["../../src/controllers/hookHandlers.ts"],"sourcesContent":["import type { PiEventHandlers } from '@agimon-ai/doompi-core/pi-extension';\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"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import{additionalContextsFrom as e,decisionReason as t,decisionsFrom as n,failuresFrom as r,hookFailureMessage as i,isDenied as a,toolResultMessages as o}from"../services/hookDecisions/index.mjs";import{selectRegistryHooks as s}from"../services/hookRegistry/index.mjs";import{sessionHookPayload as c,toolHookPayload as l}from"../services/hookPayload/index.mjs";import{selectPluginHooks as u}from"../services/pluginHooks/index.mjs";import{HOOK_EVENT as d}from"../constants/hooks.mjs";import{CONTEXT_MESSAGE_TYPE as f,FAILURE_MESSAGE_TYPE as p,STATUS_PREFIX as m,STEER as h,SUBAGENT_ENVIRONMENT_FLAG as g}from"../constants/hookHandlers.mjs";async function _(e,t,n,r){let i=e.config().harness,a=i.root??t.cwd,[o,c]=await Promise.all([e.documents.registry(a),e.documents.plugins(i.pluginHooks)]),l=[...s(o.entries,{event:n,toolName:r,allowedGroups:i.hookGroups,inSubagent:!!process.env[g]}),...u(c.documents,n,r)];return{repoRoot:a,sessionId:t.sessionManager.getSessionId(),hooks:l,failures:[...o.failure?[o.failure]:[],...c.failures]}}async function v(e,t,n){let r=e.config().harness,i=await e.documents.plugins(r.pluginHooks);return{repoRoot:r.root??t.cwd,sessionId:t.sessionManager.getSessionId(),hooks:u(i.documents,n),failures:i.failures}}async function y(e,t,n,r,i,a){let o=[];try{for(let[s,c]of n.hooks.entries())t.hasUI&&t.ui.setStatus(i,`${a} (${s+1}/${n.hooks.length})...`),o.push(await e.runner.run(c.hook,r,{repoRoot:n.repoRoot,pluginRoot:c.root}))}finally{t.hasUI&&t.ui.setStatus(i,void 0)}return o}function b(e,t){return[...e.failures,...r(t)]}function x(e,t){t.length!==0&&e.sendMessage({customType:p,content:i(t),display:!0},h)}async function S(t,r,i,a,o=()=>!0){a?.throwIfAborted();let s=await _(r,i,d.sessionStart);a?.throwIfAborted();let l=await y(r,i,s,c(s.sessionId,s.repoRoot),`${m}:${s.sessionId}:start`,`Running session-start hooks`);if(a?.throwIfAborted(),!o())return;x(t,b(s,l));let u=e(n(l)).join(`
2
+
3
+ `);u&&t.sendMessage({customType:f,content:u,display:!0},h)}function C(e,t){return(n,r)=>{let i=t();if(!i?.isCurrent())return;let{readiness:a,session:o}=i;return a?a.start(r,(t,n)=>S(e,o,r,t,()=>i.isCurrent()&&n())):S(e,o,r)}}function w(e,t){return async(e,n)=>{let r=t();r?.isCurrent()&&await r.readiness?.wait(n)}}function T(r,i){return async(o,s)=>{let c=i();if(!c?.isCurrent()||(await c.readiness?.wait(s),!c.isCurrent()))return;let u=await _(c.session,s,d.preToolUse,o.toolName);if(!c.isCurrent())return;let f=l(o,d.preToolUse,u.repoRoot,u.sessionId),p=await y(c.session,s,u,f,`${m}:${o.toolCallId}:pre`,`Running pre-tool hooks for ${o.toolName}`);if(!c.isCurrent())return;let h=n(p);x(r,b(u,p));let g=h.find(a);if(g)return{block:!0,reason:t(g)??`Blocked by repository hook`};let v=e(h).join(`
4
+
5
+ `);return v?{block:!0,reason:v}:void 0}}function E(e,t){return async(e,r)=>{let s=t();if(!s?.isCurrent()||(await s.readiness?.wait(r),!s.isCurrent()))return;let c=await _(s.session,r,d.postToolUse,e.toolName);if(!s.isCurrent())return;let u=l(e,d.postToolUse,c.repoRoot,c.sessionId),f=await y(s.session,r,c,u,`${m}:${e.toolCallId}:post`,`Running post-tool hooks for ${e.toolName}`);if(!s.isCurrent())return;let p=n(f),h=b(c,f),g=o(p);if(h.length>0&&g.push(i(h)),g.length!==0)return{content:[...e.content,{type:`text`,text:g.join(`
6
+
7
+ `)}],isError:e.isError||p.some(a)}}}function D(e,t){return async(e,n)=>{let r=t();if(!r?.isCurrent()||(await r.readiness?.wait(n),!r.isCurrent()))return;let i=await _(r.session,n,d.stop);r.isCurrent()&&await y(r.session,n,i,c(i.sessionId,i.repoRoot),`${m}:${i.sessionId}:stop`,`Running stop hooks`)}}function O(e,t){let n;return{session_start:C(e,t),before_agent_start:w(e,t),tool_call:T(e,t),tool_result:E(e,t),agent_settled:D(e,t),session_shutdown:(e,r)=>{let i=t();if(i?.isCurrent())return n??=k(i.session,r),n}}}async function k(e,t){let n=await v(e,t,d.sessionEnd);await y(e,t,n,c(n.sessionId,n.repoRoot),`${m}:${n.sessionId}:end`,`Running session-end hooks`)}export{O as createHookHandlers,k as runSessionEndHooks};
8
+ //# sourceMappingURL=hookHandlers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hookHandlers.mjs","names":[],"sources":["../../src/controllers/hookHandlers.ts"],"sourcesContent":["import type { PiEventHandlers } from '@agimon-ai/doompi-core/pi-extension';\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"],"mappings":"+nBAgDA,eAAe,EACb,EACA,EACA,EACA,EACuB,CACvB,IAAM,EAAU,EAAQ,OAAO,CAAC,CAAC,QAC3B,EAAW,EAAQ,MAAQ,EAAI,IAC/B,CAAC,EAAU,GAAW,MAAM,QAAQ,IAAI,CAC5C,EAAQ,UAAU,SAAS,CAAQ,EACnC,EAAQ,UAAU,QAAQ,EAAQ,WAAW,CAC/C,CAAC,EACK,EAAQ,CACZ,GAAG,EAAoB,EAAS,QAAS,CACvC,MAAO,EACP,WACA,cAAe,EAAQ,WACvB,WAAY,EAAQ,QAAQ,IAAI,EAClC,CAAC,EACD,GAAG,EAAkB,EAAQ,UAAW,EAAW,CAAQ,CAC7D,EACA,MAAO,CACL,WACA,UAAW,EAAI,eAAe,aAAa,EAC3C,QACA,SAAU,CAAC,GAAI,EAAS,QAAU,CAAC,EAAS,OAAO,EAAI,CAAC,EAAI,GAAG,EAAQ,QAAQ,CACjF,CACF,CAGA,eAAe,EACb,EACA,EACA,EACuB,CACvB,IAAM,EAAU,EAAQ,OAAO,CAAC,CAAC,QAC3B,EAAU,MAAM,EAAQ,UAAU,QAAQ,EAAQ,WAAW,EACnE,MAAO,CACL,SAAU,EAAQ,MAAQ,EAAI,IAC9B,UAAW,EAAI,eAAe,aAAa,EAC3C,MAAO,EAAkB,EAAQ,UAAW,CAAS,EACrD,SAAU,EAAQ,QACpB,CACF,CAEA,eAAe,EACb,EACA,EACA,EACA,EACA,EACA,EACwB,CACxB,IAAM,EAA0B,CAAC,EACjC,GAAI,CACF,IAAK,GAAM,CAAC,EAAO,KAAa,EAAS,MAAM,QAAQ,EACjD,EAAI,OAAO,EAAI,GAAG,UAAU,EAAW,GAAG,EAAY,IAAI,EAAQ,EAAE,GAAG,EAAS,MAAM,OAAO,KAAK,EACtG,EAAS,KACP,MAAM,EAAQ,OAAO,IAAI,EAAS,KAAM,EAAS,CAAE,SAAU,EAAS,SAAU,WAAY,EAAS,IAAK,CAAC,CAC7G,CAEJ,QAAU,CACJ,EAAI,OAAO,EAAI,GAAG,UAAU,EAAW,IAAA,EAAS,CACtD,CACA,OAAO,CACT,CAEA,SAAS,EAAY,EAAwB,EAAqD,CAChG,MAAO,CAAC,GAAG,EAAS,SAAU,GAAG,EAAa,CAAQ,CAAC,CACzD,CAEA,SAAS,EAAkB,EAAkB,EAA4C,CACnF,EAAS,SAAW,GACxB,EAAG,YAAY,CAAE,WAAY,EAAsB,QAAS,EAAmB,CAAQ,EAAG,QAAS,EAAK,EAAG,CAAK,CAClH,CAEA,eAAe,EACb,EACA,EACA,EACA,EACA,MAAiC,GAClB,CACf,GAAQ,eAAe,EACvB,IAAM,EAAW,MAAM,EAAa,EAAS,EAAK,EAAW,YAAY,EACzE,GAAQ,eAAe,EACvB,IAAM,EAAW,MAAM,EACrB,EACA,EACA,EACA,EAAmB,EAAS,UAAW,EAAS,QAAQ,EACxD,GAAG,EAAc,GAAG,EAAS,UAAU,QACvC,6BACF,EAEA,GADA,GAAQ,eAAe,EACnB,CAAC,EAAU,EAAG,OAClB,EAAkB,EAAI,EAAY,EAAU,CAAQ,CAAC,EACrD,IAAM,EAAU,EAAuB,EAAc,CAAQ,CAAC,CAAC,CAAC,KAAA;;CAAsB,EAClF,GAAS,EAAG,YAAY,CAAE,WAAY,EAAsB,QAAS,EAAS,QAAS,EAAK,EAAG,CAAK,CAC1G,CAEA,SAAS,EAAmB,EAAkB,EAAuE,CACnH,OAAQ,EAAQ,IAAQ,CACtB,IAAM,EAAU,EAAe,EAC/B,GAAI,CAAC,GAAS,UAAU,EAAG,OAC3B,GAAM,CAAE,YAAW,WAAY,EAM/B,OALI,EACK,EAAU,MAAM,GAAM,EAAQ,IACnC,EAAqB,EAAI,EAAS,EAAK,MAAc,EAAQ,UAAU,GAAK,EAAQ,CAAC,CACvF,EAEK,EAAqB,EAAI,EAAS,CAAG,CAC9C,CACF,CAEA,SAAS,EACP,EACA,EACuC,CACvC,OAAO,MAAO,EAAQ,IAAQ,CAC5B,IAAM,EAAU,EAAe,EAC1B,GAAS,UAAU,GACxB,MAAM,EAAQ,WAAW,KAAK,CAAG,CACnC,CACF,CAEA,SAAS,EAAe,EAAkB,EAAmE,CAC3G,OAAO,MAAO,EAAO,IAAQ,CAC3B,IAAM,EAAU,EAAe,EAG/B,GAFI,CAAC,GAAS,UAAU,IACxB,MAAM,EAAQ,WAAW,KAAK,CAAG,EAC7B,CAAC,EAAQ,UAAU,GAAG,OAC1B,IAAM,EAAW,MAAM,EAAa,EAAQ,QAAS,EAAK,EAAW,WAAY,EAAM,QAAQ,EAC/F,GAAI,CAAC,EAAQ,UAAU,EAAG,OAC1B,IAAM,EAAU,EACd,EACA,EAAW,WACX,EAAS,SACT,EAAS,SACX,EACM,EAAW,MAAM,EACrB,EAAQ,QACR,EACA,EACA,EACA,GAAG,EAAc,GAAG,EAAM,WAAW,MACrC,8BAA8B,EAAM,UACtC,EACA,GAAI,CAAC,EAAQ,UAAU,EAAG,OAC1B,IAAM,EAAY,EAAc,CAAQ,EACxC,EAAkB,EAAI,EAAY,EAAU,CAAQ,CAAC,EACrD,IAAM,EAAS,EAAU,KAAK,CAAQ,EACtC,GAAI,EAAQ,MAAO,CAAE,MAAO,GAAM,OAAQ,EAAe,CAAM,GAAA,4BAAqB,EACpF,IAAM,EAAU,EAAuB,CAAS,CAAC,CAAC,KAAA;;CAAsB,EACxE,OAAO,EAAU,CAAE,MAAO,GAAM,OAAQ,CAAQ,EAAI,IAAA,EACtD,CACF,CAEA,SAAS,EAAiB,EAAmB,EAAqE,CAChH,OAAO,MAAO,EAAO,IAAQ,CAC3B,IAAM,EAAU,EAAe,EAG/B,GAFI,CAAC,GAAS,UAAU,IACxB,MAAM,EAAQ,WAAW,KAAK,CAAG,EAC7B,CAAC,EAAQ,UAAU,GAAG,OAC1B,IAAM,EAAW,MAAM,EAAa,EAAQ,QAAS,EAAK,EAAW,YAAa,EAAM,QAAQ,EAChG,GAAI,CAAC,EAAQ,UAAU,EAAG,OAC1B,IAAM,EAAU,EACd,EACA,EAAW,YACX,EAAS,SACT,EAAS,SACX,EACM,EAAW,MAAM,EACrB,EAAQ,QACR,EACA,EACA,EACA,GAAG,EAAc,GAAG,EAAM,WAAW,OACrC,+BAA+B,EAAM,UACvC,EACA,GAAI,CAAC,EAAQ,UAAU,EAAG,OAC1B,IAAM,EAAY,EAAc,CAAQ,EAClC,EAAW,EAAY,EAAU,CAAQ,EACzC,EAAW,EAAmB,CAAS,EAC7C,GAAI,EAAS,OAAS,GAAG,EAAS,KAAK,EAAmB,CAAQ,CAAC,EAC/D,EAAS,SAAW,EAGxB,MAAO,CACL,QAAS,CAAC,GAAG,EAAM,QAAS,CAAE,KAAM,OAAiB,KAAM,EAAS,KAAA;;CAAsB,CAAE,CAAC,EAC7F,QAAS,EAAM,SAAW,EAAU,KAAK,CAAQ,CACnD,CACF,CACF,CAEA,SAAS,EAAmB,EAAmB,EAAuE,CACpH,OAAO,MAAO,EAAQ,IAAQ,CAC5B,IAAM,EAAU,EAAe,EAG/B,GAFI,CAAC,GAAS,UAAU,IACxB,MAAM,EAAQ,WAAW,KAAK,CAAG,EAC7B,CAAC,EAAQ,UAAU,GAAG,OAC1B,IAAM,EAAW,MAAM,EAAa,EAAQ,QAAS,EAAK,EAAW,IAAI,EACpE,EAAQ,UAAU,GAGvB,MAAM,EACJ,EAAQ,QACR,EACA,EACA,EAAmB,EAAS,UAAW,EAAS,QAAQ,EACxD,GAAG,EAAc,GAAG,EAAS,UAAU,OACvC,oBACF,CACF,CACF,CAEA,SAAgB,EAAmB,EAAkB,EAAsD,CACzG,IAAI,EACJ,MAAO,CACL,cAAe,EAAmB,EAAI,CAAc,EACpD,mBAAoB,EAAuB,EAAI,CAAc,EAC7D,UAAW,EAAe,EAAI,CAAc,EAC5C,YAAa,EAAiB,EAAI,CAAc,EAChD,cAAe,EAAmB,EAAI,CAAc,EACpD,kBAAmB,EAAQ,IAAQ,CACjC,IAAM,EAAU,EAAe,EAC1B,MAAS,UAAU,EAExB,MADA,KAAa,EAAmB,EAAQ,QAAS,CAAG,EAC7C,CACT,CACF,CACF,CAGA,eAAsB,EAAmB,EAAsB,EAAsC,CACnG,IAAM,EAAW,MAAM,EAAmB,EAAS,EAAK,EAAW,UAAU,EAC7E,MAAM,EACJ,EACA,EACA,EACA,EAAmB,EAAS,UAAW,EAAS,QAAQ,EACxD,GAAG,EAAc,GAAG,EAAS,UAAU,MACvC,2BACF,CACF"}
@@ -0,0 +1,2 @@
1
+ const e=require("../services/hookResource/index.cjs");function t(e){return{version:1,event:typeof e.type==`string`?e.type:`headless-hook`,data:e}}const n={name:`doompi-author-hook`,kind:`skill`,read:e.readHookResource},r=[{event:`before_agent_start`,handle:(e,n)=>n.session.appendCustomEntry(`doom-hook`,t(e))},{event:`tool_result`,handle:(e,n)=>n.session.appendCustomEntry(`doom-hook`,t(e))},{event:`agent_settled`,handle:(e,n)=>n.session.appendCustomEntry(`doom-hook`,t(e))},{event:`session_shutdown`,handle(e,t){t.client.setStatus(`doom-hook`,void 0)}}];exports.hookResource=n,exports.serverHooks=r;
2
+ //# sourceMappingURL=serverHooks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverHooks.cjs","names":["readHookResource"],"sources":["../../src/controllers/serverHooks.ts"],"sourcesContent":["import { type DoomHeadlessHook, type DoomHeadlessResource } from '@agimon-ai/doompi-core/headless';\n\nimport { readHookResource } from '../services/hookResource';\nfunction hookEntry(event: Readonly<Record<string, unknown>>): Record<string, unknown> {\n return {\n version: 1,\n event: typeof event.type === 'string' ? event.type : 'headless-hook',\n data: event,\n };\n}\n\nexport const hookResource: DoomHeadlessResource = {\n name: 'doompi-author-hook',\n kind: 'skill',\n read: readHookResource,\n};\n\nexport const serverHooks: DoomHeadlessHook[] = [\n {\n event: 'before_agent_start',\n handle: (event, execution) => execution.session.appendCustomEntry('doom-hook', hookEntry(event)),\n },\n {\n event: 'tool_result',\n handle: (event, execution) => execution.session.appendCustomEntry('doom-hook', hookEntry(event)),\n },\n {\n event: 'agent_settled',\n handle: (event, execution) => execution.session.appendCustomEntry('doom-hook', hookEntry(event)),\n },\n {\n event: 'session_shutdown',\n handle(_event, execution) {\n execution.client.setStatus('doom-hook', undefined);\n },\n },\n];\n"],"mappings":"sDAGA,SAAS,EAAU,EAAmE,CACpF,MAAO,CACL,QAAS,EACT,MAAO,OAAO,EAAM,MAAS,SAAW,EAAM,KAAO,gBACrD,KAAM,CACR,CACF,CAEA,MAAa,EAAqC,CAChD,KAAM,qBACN,KAAM,QACN,KAAMA,EAAAA,gBACR,EAEa,EAAkC,CAC7C,CACE,MAAO,qBACP,QAAS,EAAO,IAAc,EAAU,QAAQ,kBAAkB,YAAa,EAAU,CAAK,CAAC,CACjG,EACA,CACE,MAAO,cACP,QAAS,EAAO,IAAc,EAAU,QAAQ,kBAAkB,YAAa,EAAU,CAAK,CAAC,CACjG,EACA,CACE,MAAO,gBACP,QAAS,EAAO,IAAc,EAAU,QAAQ,kBAAkB,YAAa,EAAU,CAAK,CAAC,CACjG,EACA,CACE,MAAO,mBACP,OAAO,EAAQ,EAAW,CACxB,EAAU,OAAO,UAAU,YAAa,IAAA,EAAS,CACnD,CACF,CACF"}
@@ -0,0 +1,2 @@
1
+ import{readHookResource as e}from"../services/hookResource/index.mjs";function t(e){return{version:1,event:typeof e.type==`string`?e.type:`headless-hook`,data:e}}const n={name:`doompi-author-hook`,kind:`skill`,read:e},r=[{event:`before_agent_start`,handle:(e,n)=>n.session.appendCustomEntry(`doom-hook`,t(e))},{event:`tool_result`,handle:(e,n)=>n.session.appendCustomEntry(`doom-hook`,t(e))},{event:`agent_settled`,handle:(e,n)=>n.session.appendCustomEntry(`doom-hook`,t(e))},{event:`session_shutdown`,handle(e,t){t.client.setStatus(`doom-hook`,void 0)}}];export{n as hookResource,r as serverHooks};
2
+ //# sourceMappingURL=serverHooks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverHooks.mjs","names":[],"sources":["../../src/controllers/serverHooks.ts"],"sourcesContent":["import { type DoomHeadlessHook, type DoomHeadlessResource } from '@agimon-ai/doompi-core/headless';\n\nimport { readHookResource } from '../services/hookResource';\nfunction hookEntry(event: Readonly<Record<string, unknown>>): Record<string, unknown> {\n return {\n version: 1,\n event: typeof event.type === 'string' ? event.type : 'headless-hook',\n data: event,\n };\n}\n\nexport const hookResource: DoomHeadlessResource = {\n name: 'doompi-author-hook',\n kind: 'skill',\n read: readHookResource,\n};\n\nexport const serverHooks: DoomHeadlessHook[] = [\n {\n event: 'before_agent_start',\n handle: (event, execution) => execution.session.appendCustomEntry('doom-hook', hookEntry(event)),\n },\n {\n event: 'tool_result',\n handle: (event, execution) => execution.session.appendCustomEntry('doom-hook', hookEntry(event)),\n },\n {\n event: 'agent_settled',\n handle: (event, execution) => execution.session.appendCustomEntry('doom-hook', hookEntry(event)),\n },\n {\n event: 'session_shutdown',\n handle(_event, execution) {\n execution.client.setStatus('doom-hook', undefined);\n },\n },\n];\n"],"mappings":"sEAGA,SAAS,EAAU,EAAmE,CACpF,MAAO,CACL,QAAS,EACT,MAAO,OAAO,EAAM,MAAS,SAAW,EAAM,KAAO,gBACrD,KAAM,CACR,CACF,CAEA,MAAa,EAAqC,CAChD,KAAM,qBACN,KAAM,QACN,KAAM,CACR,EAEa,EAAkC,CAC7C,CACE,MAAO,qBACP,QAAS,EAAO,IAAc,EAAU,QAAQ,kBAAkB,YAAa,EAAU,CAAK,CAAC,CACjG,EACA,CACE,MAAO,cACP,QAAS,EAAO,IAAc,EAAU,QAAQ,kBAAkB,YAAa,EAAU,CAAK,CAAC,CACjG,EACA,CACE,MAAO,gBACP,QAAS,EAAO,IAAc,EAAU,QAAQ,kBAAkB,YAAa,EAAU,CAAK,CAAC,CACjG,EACA,CACE,MAAO,mBACP,OAAO,EAAQ,EAAW,CACxB,EAAU,OAAO,UAAU,YAAa,IAAA,EAAS,CACnD,CACF,CACF"}
@@ -1 +1,2 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../adapters/pi/extension.cjs");exports.default=e.default,exports.hookExtension=e.default;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../constants/hook.cjs"),t=require("../controllers/hookHandlers.cjs"),n=require("../services/hookRuntime/index.cjs"),r=(0,require("@agimon-ai/doompi-core/pi-extension").definePiExtension)(e.PACKAGE_SOURCE,({pi:r,options:i})=>{let a=n.createHookBinding(i??{});return{services:[a.plugin],events:t.createHookHandlers(r,a.runtime),resources:[{source:e.PACKAGE_SOURCE,moduleUrl:require("url").pathToFileURL(__filename).href,skills:[e.HOOK_HELP_SKILL]}]}});exports.default=r,exports.hookExtension=r;
2
+ //# sourceMappingURL=pi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.cjs","names":["definePiExtension","PACKAGE_SOURCE","createHookBinding","createHookHandlers","HOOK_HELP_SKILL"],"sources":["../../src/extensions/pi.ts"],"sourcesContent":["import { definePiExtension } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { HOOK_HELP_SKILL, PACKAGE_SOURCE } from '../constants/hook';\nimport { createHookHandlers } from '../controllers/hookHandlers';\nimport { createHookBinding } from '../services/hookRuntime';\nimport type { HookExtensionOptions } from '../services/hookRuntime/type';\nexport const hookExtension = definePiExtension<HookExtensionOptions>(PACKAGE_SOURCE, ({ pi, options }) => {\n const binding = createHookBinding(options ?? {});\n return {\n services: [binding.plugin],\n events: createHookHandlers(pi, binding.runtime),\n resources: [{ source: PACKAGE_SOURCE, moduleUrl: import.meta.url, skills: [HOOK_HELP_SKILL] }],\n };\n});\nexport default hookExtension;\n"],"mappings":"oOAMa,GAAA,+CAAgBA,CAAAA,CAAAA,kBAAAA,CAAwCC,EAAAA,gBAAiB,CAAE,KAAI,aAAc,CACxG,IAAM,EAAUC,EAAAA,kBAAkB,GAAW,CAAC,CAAC,EAC/C,MAAO,CACL,SAAU,CAAC,EAAQ,MAAM,EACzB,OAAQC,EAAAA,mBAAmB,EAAI,EAAQ,OAAO,EAC9C,UAAW,CAAC,CAAE,OAAQF,EAAAA,eAAgB,UAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,KAA4B,OAAQ,CAACG,EAAAA,eAAe,CAAE,CAAC,CAC/F,CACF,CAAC"}
@@ -1,2 +1,6 @@
1
- import hookExtension, { HookExtensionOptions } from "../adapters/pi/extension.cjs";
2
- export { type HookExtensionOptions, hookExtension as default, hookExtension };
1
+ import { HookExtensionOptions } from "../services/hookRuntime/type.cjs";
2
+ //#region src/extensions/pi.d.ts
3
+ export declare const hookExtension: import("@agimon-ai/doompi-core/runtime-pi-extension").DefinedPiExtension<HookExtensionOptions>;
4
+ //#endregion
5
+ export { hookExtension as default };
6
+ //# sourceMappingURL=pi.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.cts","names":[],"sources":["../../src/extensions/pi.ts"],"mappings":";;qBAMa,qEAAa,mBAAA"}
@@ -1,2 +1,6 @@
1
- import hookExtension, { HookExtensionOptions } from "../adapters/pi/extension.mjs";
2
- export { type HookExtensionOptions, hookExtension as default, hookExtension };
1
+ import { HookExtensionOptions } from "../services/hookRuntime/type.mjs";
2
+ //#region src/extensions/pi.d.ts
3
+ export declare const hookExtension: import("@agimon-ai/doompi-core/runtime-pi-extension").DefinedPiExtension<HookExtensionOptions>;
4
+ //#endregion
5
+ export { hookExtension as default };
6
+ //# sourceMappingURL=pi.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.mts","names":[],"sources":["../../src/extensions/pi.ts"],"mappings":";;qBAMa,qEAAa,mBAAA"}
@@ -1 +1,2 @@
1
- import e from"../adapters/pi/extension.mjs";export{e as default,e as hookExtension};
1
+ import{HOOK_HELP_SKILL as e,PACKAGE_SOURCE as t}from"../constants/hook.mjs";import{createHookHandlers as n}from"../controllers/hookHandlers.mjs";import{createHookBinding as r}from"../services/hookRuntime/index.mjs";import{definePiExtension as i}from"@agimon-ai/doompi-core/pi-extension";const a=i(t,({pi:i,options:a})=>{let o=r(a??{});return{services:[o.plugin],events:n(i,o.runtime),resources:[{source:t,moduleUrl:import.meta.url,skills:[e]}]}});export{a as default,a as hookExtension};
2
+ //# sourceMappingURL=pi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.mjs","names":[],"sources":["../../src/extensions/pi.ts"],"sourcesContent":["import { definePiExtension } from '@agimon-ai/doompi-core/pi-extension';\n\nimport { HOOK_HELP_SKILL, PACKAGE_SOURCE } from '../constants/hook';\nimport { createHookHandlers } from '../controllers/hookHandlers';\nimport { createHookBinding } from '../services/hookRuntime';\nimport type { HookExtensionOptions } from '../services/hookRuntime/type';\nexport const hookExtension = definePiExtension<HookExtensionOptions>(PACKAGE_SOURCE, ({ pi, options }) => {\n const binding = createHookBinding(options ?? {});\n return {\n services: [binding.plugin],\n events: createHookHandlers(pi, binding.runtime),\n resources: [{ source: PACKAGE_SOURCE, moduleUrl: import.meta.url, skills: [HOOK_HELP_SKILL] }],\n };\n});\nexport default hookExtension;\n"],"mappings":"+RAMA,MAAa,EAAgB,EAAwC,GAAiB,CAAE,KAAI,aAAc,CACxG,IAAM,EAAU,EAAkB,GAAW,CAAC,CAAC,EAC/C,MAAO,CACL,SAAU,CAAC,EAAQ,MAAM,EACzB,OAAQ,EAAmB,EAAI,EAAQ,OAAO,EAC9C,UAAW,CAAC,CAAE,OAAQ,EAAgB,UAAW,YAAY,IAAK,OAAQ,CAAC,CAAe,CAAE,CAAC,CAC/F,CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../constants/hook.cjs"),t=require("../controllers/serverHooks.cjs"),n=(0,require("@agimon-ai/doompi-core/server-facet").defineServerPlugin)({name:e.PACKAGE_SOURCE,session:{resources:[t.hookResource],hooks:t.serverHooks}});exports.default=n,exports.hookServerFacet=n;
2
+ //# sourceMappingURL=server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.cjs","names":["defineServerPlugin","PACKAGE_SOURCE","hookResource","serverHooks"],"sources":["../../src/extensions/server.ts"],"sourcesContent":["import { defineServerPlugin } from '@agimon-ai/doompi-core/server-facet';\n\nimport { PACKAGE_SOURCE } from '../constants/hook';\nimport { hookResource, serverHooks } from '../controllers/serverHooks';\nexport const hookServerFacet = defineServerPlugin({\n name: PACKAGE_SOURCE,\n session: { resources: [hookResource], hooks: serverHooks },\n});\nexport default hookServerFacet;\n"],"mappings":"oLAIa,GAAA,+CAAkBA,CAAAA,CAAAA,mBAAAA,CAAmB,CAChD,KAAMC,EAAAA,eACN,QAAS,CAAE,UAAW,CAACC,EAAAA,YAAY,EAAG,MAAOC,EAAAA,WAAY,CAC3D,CAAC"}
@@ -0,0 +1,5 @@
1
+ //#region src/extensions/server.d.ts
2
+ export declare const hookServerFacet: import("@agimon-ai/doompi-core/server-facet").DoomServerFacet;
3
+ //#endregion
4
+ export { hookServerFacet as default };
5
+ //# sourceMappingURL=server.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.cts","names":[],"sources":["../../src/extensions/server.ts"],"mappings":";qBAIa,+DAAe"}
@@ -0,0 +1,5 @@
1
+ //#region src/extensions/server.d.ts
2
+ export declare const hookServerFacet: import("@agimon-ai/doompi-core/server-facet").DoomServerFacet;
3
+ //#endregion
4
+ export { hookServerFacet as default };
5
+ //# sourceMappingURL=server.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.mts","names":[],"sources":["../../src/extensions/server.ts"],"mappings":";qBAIa,+DAAe"}
@@ -0,0 +1,2 @@
1
+ import{PACKAGE_SOURCE as e}from"../constants/hook.mjs";import{hookResource as t,serverHooks as n}from"../controllers/serverHooks.mjs";import{defineServerPlugin as r}from"@agimon-ai/doompi-core/server-facet";const i=r({name:e,session:{resources:[t],hooks:n}});export{i as default,i as hookServerFacet};
2
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../../src/extensions/server.ts"],"sourcesContent":["import { defineServerPlugin } from '@agimon-ai/doompi-core/server-facet';\n\nimport { PACKAGE_SOURCE } from '../constants/hook';\nimport { hookResource, serverHooks } from '../controllers/serverHooks';\nexport const hookServerFacet = defineServerPlugin({\n name: PACKAGE_SOURCE,\n session: { resources: [hookResource], hooks: serverHooks },\n});\nexport default hookServerFacet;\n"],"mappings":"+MAIA,MAAa,EAAkB,EAAmB,CAChD,KAAM,EACN,QAAS,CAAE,UAAW,CAAC,CAAY,EAAG,MAAO,CAAY,CAC3D,CAAC"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types/telemetry.cjs"),t=require("./services/toolNames.cjs"),n=require("./services/hookRegistry.cjs"),r=require("./adapters/hookDocuments.cjs"),i=require("./adapters/hookRunner.cjs"),a=require("./adapters/telemetry/logSinkTelemetry.cjs"),o=require("./services/hookDecisions.cjs"),s=require("./services/hookPayload.cjs"),c=require("./services/pluginHooks.cjs"),l=require("./types/hooks.cjs"),u=require("./adapters/pi/extension.cjs");exports.HOOK_EVENT=l.HOOK_EVENT,exports.HOOK_TELEMETRY_EVENT=e.HOOK_TELEMETRY_EVENT,exports.additionalContextsFrom=o.additionalContextsFrom,exports.createBashHookRunner=i.createBashHookRunner,exports.createHookDocumentReader=r.createHookDocumentReader,exports.createHookTelemetry=a.createHookTelemetry,exports.decisionReason=o.decisionReason,exports.decisionsFrom=o.decisionsFrom,exports.failuresFrom=o.failuresFrom,exports.hookExtension=u.default,exports.hookFailureMessage=o.hookFailureMessage,exports.isDenied=o.isDenied,exports.matchesTool=t.matchesTool,exports.registryCacheKey=n.registryCacheKey,exports.registryEntries=n.registryEntries,exports.selectPluginHooks=c.selectPluginHooks,exports.selectRegistryHooks=n.selectRegistryHooks,exports.sessionHookPayload=s.sessionHookPayload,exports.toClaudeToolName=t.toClaudeToolName,exports.toolHookPayload=s.toolHookPayload,exports.toolResultMessages=o.toolResultMessages;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/hookDecisions/index.cjs"),t=require("./constants/telemetry.cjs"),n=require("./services/toolNames/index.cjs"),r=require("./services/hookRegistry/index.cjs"),i=require("./services/hookDocuments/index.cjs"),a=require("./services/hookPayload/index.cjs"),o=require("./services/hookRunner/index.cjs"),s=require("./services/hookTelemetry/index.cjs"),c=require("./services/pluginHooks/index.cjs"),l=require("./constants/hooks.cjs");exports.HOOK_EVENT=l.HOOK_EVENT,exports.HOOK_TELEMETRY_EVENT=t.HOOK_TELEMETRY_EVENT,exports.additionalContextsFrom=e.additionalContextsFrom,exports.createBashHookRunner=o.createBashHookRunner,exports.createHookDocumentReader=i.createHookDocumentReader,exports.createHookTelemetry=s.createHookTelemetry,exports.decisionReason=e.decisionReason,exports.decisionsFrom=e.decisionsFrom,exports.failuresFrom=e.failuresFrom,exports.hookFailureMessage=e.hookFailureMessage,exports.isDenied=e.isDenied,exports.matchesTool=n.matchesTool,exports.registryCacheKey=r.registryCacheKey,exports.registryEntries=r.registryEntries,exports.selectPluginHooks=c.selectPluginHooks,exports.selectRegistryHooks=r.selectRegistryHooks,exports.sessionHookPayload=a.sessionHookPayload,exports.toClaudeToolName=n.toClaudeToolName,exports.toolHookPayload=a.toolHookPayload,exports.toolResultMessages=e.toolResultMessages;
package/dist/index.d.cts CHANGED
@@ -1,12 +1,14 @@
1
- import { HOOK_EVENT, HookCommand, HookDecision, HookDocumentReader, HookDocumentSource, HookEventName, HookFailure, HookFailureReason, HookOutcome, HookPayload, HookRunOptions, HookRunner, HookToolEvent, ParsedRegistrySource, PluginDocumentRead, PluginHookConfig, PluginHookDocument, PluginHookGroup, PluginHookSourceRef, RegistryBinding, RegistryDocument, RegistryEntry, RegistryGroup, RegistryRead, ResolvedHook } from "./types/hooks.cjs";
2
- import { HOOK_TELEMETRY_EVENT, HookTelemetry, HookTelemetryAttributes, HookTelemetryEventName } from "./types/telemetry.cjs";
3
- import hookExtension, { HookExtensionOptions } from "./adapters/pi/extension.cjs";
4
- import { HookDocumentReaderOptions, createHookDocumentReader } from "./adapters/hookDocuments.cjs";
5
- import { BashHookRunnerOptions, createBashHookRunner } from "./adapters/hookRunner.cjs";
6
- import { HookTelemetryOptions, createHookTelemetry } from "./adapters/telemetry/logSinkTelemetry.cjs";
7
- import { additionalContextsFrom, decisionReason, decisionsFrom, failuresFrom, hookFailureMessage, isDenied, toolResultMessages } from "./services/hookDecisions.cjs";
8
- import { sessionHookPayload, toolHookPayload } from "./services/hookPayload.cjs";
9
- import { RegistrySelection, registryCacheKey, registryEntries, selectRegistryHooks } from "./services/hookRegistry.cjs";
10
- import { selectPluginHooks } from "./services/pluginHooks.cjs";
11
- import { matchesTool, toClaudeToolName } from "./services/toolNames.cjs";
12
- export { type BashHookRunnerOptions, HOOK_EVENT, HOOK_TELEMETRY_EVENT, type HookCommand, type HookDecision, type HookDocumentReader, type HookDocumentReaderOptions, type HookDocumentSource, type HookEventName, type HookExtensionOptions, type HookFailure, type HookFailureReason, type HookOutcome, type HookPayload, type HookRunOptions, type HookRunner, type HookTelemetry, type HookTelemetryAttributes, type HookTelemetryEventName, type HookTelemetryOptions, type HookToolEvent, type ParsedRegistrySource, type PluginDocumentRead, type PluginHookConfig, type PluginHookDocument, type PluginHookGroup, type PluginHookSourceRef, type RegistryBinding, type RegistryDocument, type RegistryEntry, type RegistryGroup, type RegistryRead, type RegistrySelection, type ResolvedHook, additionalContextsFrom, createBashHookRunner, createHookDocumentReader, createHookTelemetry, decisionReason, decisionsFrom, failuresFrom, hookExtension, hookFailureMessage, isDenied, matchesTool, registryCacheKey, registryEntries, selectPluginHooks, selectRegistryHooks, sessionHookPayload, toClaudeToolName, toolHookPayload, toolResultMessages };
1
+ import { HOOK_EVENT } from "./constants/hooks.cjs";
2
+ import { HookCommand, HookDecision, HookDocumentReader, HookDocumentSource, HookEventName, HookFailure, HookFailureReason, HookOutcome, HookPayload, HookRunOptions, HookRunner, HookToolEvent, ParsedRegistrySource, PluginDocumentRead, PluginHookConfig, PluginHookDocument, PluginHookGroup, PluginHookSourceRef, RegistryBinding, RegistryDocument, RegistryEntry, RegistryGroup, RegistryRead, ResolvedHook } from "./types/hooks.cjs";
3
+ import { additionalContextsFrom, decisionReason, decisionsFrom, failuresFrom, hookFailureMessage, isDenied, toolResultMessages } from "./services/hookDecisions/index.cjs";
4
+ import { HOOK_TELEMETRY_EVENT } from "./constants/telemetry.cjs";
5
+ import { HookTelemetry, HookTelemetryAttributes, HookTelemetryEventName } from "./types/telemetry.cjs";
6
+ import { HookDocumentReaderOptions, createHookDocumentReader } from "./services/hookDocuments/index.cjs";
7
+ import { sessionHookPayload, toolHookPayload } from "./services/hookPayload/index.cjs";
8
+ import { RegistrySelection, registryCacheKey, registryEntries, selectRegistryHooks } from "./services/hookRegistry/index.cjs";
9
+ import { BashHookRunnerOptions, createBashHookRunner } from "./services/hookRunner/index.cjs";
10
+ import { HookExtensionOptions } from "./services/hookRuntime/type.cjs";
11
+ import { HookTelemetryOptions, createHookTelemetry } from "./services/hookTelemetry/index.cjs";
12
+ import { selectPluginHooks } from "./services/pluginHooks/index.cjs";
13
+ import { matchesTool, toClaudeToolName } from "./services/toolNames/index.cjs";
14
+ export { type BashHookRunnerOptions, HOOK_EVENT, HOOK_TELEMETRY_EVENT, type HookCommand, type HookDecision, type HookDocumentReader, type HookDocumentReaderOptions, type HookDocumentSource, type HookEventName, type HookExtensionOptions, type HookFailure, type HookFailureReason, type HookOutcome, type HookPayload, type HookRunOptions, type HookRunner, type HookTelemetry, type HookTelemetryAttributes, type HookTelemetryEventName, type HookTelemetryOptions, type HookToolEvent, type ParsedRegistrySource, type PluginDocumentRead, type PluginHookConfig, type PluginHookDocument, type PluginHookGroup, type PluginHookSourceRef, type RegistryBinding, type RegistryDocument, type RegistryEntry, type RegistryGroup, type RegistryRead, type RegistrySelection, type ResolvedHook, additionalContextsFrom, createBashHookRunner, createHookDocumentReader, createHookTelemetry, decisionReason, decisionsFrom, failuresFrom, hookFailureMessage, isDenied, matchesTool, registryCacheKey, registryEntries, selectPluginHooks, selectRegistryHooks, sessionHookPayload, toClaudeToolName, toolHookPayload, toolResultMessages };
package/dist/index.d.mts CHANGED
@@ -1,12 +1,14 @@
1
- import { HOOK_EVENT, HookCommand, HookDecision, HookDocumentReader, HookDocumentSource, HookEventName, HookFailure, HookFailureReason, HookOutcome, HookPayload, HookRunOptions, HookRunner, HookToolEvent, ParsedRegistrySource, PluginDocumentRead, PluginHookConfig, PluginHookDocument, PluginHookGroup, PluginHookSourceRef, RegistryBinding, RegistryDocument, RegistryEntry, RegistryGroup, RegistryRead, ResolvedHook } from "./types/hooks.mjs";
2
- import { HOOK_TELEMETRY_EVENT, HookTelemetry, HookTelemetryAttributes, HookTelemetryEventName } from "./types/telemetry.mjs";
3
- import hookExtension, { HookExtensionOptions } from "./adapters/pi/extension.mjs";
4
- import { HookDocumentReaderOptions, createHookDocumentReader } from "./adapters/hookDocuments.mjs";
5
- import { BashHookRunnerOptions, createBashHookRunner } from "./adapters/hookRunner.mjs";
6
- import { HookTelemetryOptions, createHookTelemetry } from "./adapters/telemetry/logSinkTelemetry.mjs";
7
- import { additionalContextsFrom, decisionReason, decisionsFrom, failuresFrom, hookFailureMessage, isDenied, toolResultMessages } from "./services/hookDecisions.mjs";
8
- import { sessionHookPayload, toolHookPayload } from "./services/hookPayload.mjs";
9
- import { RegistrySelection, registryCacheKey, registryEntries, selectRegistryHooks } from "./services/hookRegistry.mjs";
10
- import { selectPluginHooks } from "./services/pluginHooks.mjs";
11
- import { matchesTool, toClaudeToolName } from "./services/toolNames.mjs";
12
- export { type BashHookRunnerOptions, HOOK_EVENT, HOOK_TELEMETRY_EVENT, type HookCommand, type HookDecision, type HookDocumentReader, type HookDocumentReaderOptions, type HookDocumentSource, type HookEventName, type HookExtensionOptions, type HookFailure, type HookFailureReason, type HookOutcome, type HookPayload, type HookRunOptions, type HookRunner, type HookTelemetry, type HookTelemetryAttributes, type HookTelemetryEventName, type HookTelemetryOptions, type HookToolEvent, type ParsedRegistrySource, type PluginDocumentRead, type PluginHookConfig, type PluginHookDocument, type PluginHookGroup, type PluginHookSourceRef, type RegistryBinding, type RegistryDocument, type RegistryEntry, type RegistryGroup, type RegistryRead, type RegistrySelection, type ResolvedHook, additionalContextsFrom, createBashHookRunner, createHookDocumentReader, createHookTelemetry, decisionReason, decisionsFrom, failuresFrom, hookExtension, hookFailureMessage, isDenied, matchesTool, registryCacheKey, registryEntries, selectPluginHooks, selectRegistryHooks, sessionHookPayload, toClaudeToolName, toolHookPayload, toolResultMessages };
1
+ import { HOOK_EVENT } from "./constants/hooks.mjs";
2
+ import { HookCommand, HookDecision, HookDocumentReader, HookDocumentSource, HookEventName, HookFailure, HookFailureReason, HookOutcome, HookPayload, HookRunOptions, HookRunner, HookToolEvent, ParsedRegistrySource, PluginDocumentRead, PluginHookConfig, PluginHookDocument, PluginHookGroup, PluginHookSourceRef, RegistryBinding, RegistryDocument, RegistryEntry, RegistryGroup, RegistryRead, ResolvedHook } from "./types/hooks.mjs";
3
+ import { additionalContextsFrom, decisionReason, decisionsFrom, failuresFrom, hookFailureMessage, isDenied, toolResultMessages } from "./services/hookDecisions/index.mjs";
4
+ import { HOOK_TELEMETRY_EVENT } from "./constants/telemetry.mjs";
5
+ import { HookTelemetry, HookTelemetryAttributes, HookTelemetryEventName } from "./types/telemetry.mjs";
6
+ import { HookDocumentReaderOptions, createHookDocumentReader } from "./services/hookDocuments/index.mjs";
7
+ import { sessionHookPayload, toolHookPayload } from "./services/hookPayload/index.mjs";
8
+ import { RegistrySelection, registryCacheKey, registryEntries, selectRegistryHooks } from "./services/hookRegistry/index.mjs";
9
+ import { BashHookRunnerOptions, createBashHookRunner } from "./services/hookRunner/index.mjs";
10
+ import { HookExtensionOptions } from "./services/hookRuntime/type.mjs";
11
+ import { HookTelemetryOptions, createHookTelemetry } from "./services/hookTelemetry/index.mjs";
12
+ import { selectPluginHooks } from "./services/pluginHooks/index.mjs";
13
+ import { matchesTool, toClaudeToolName } from "./services/toolNames/index.mjs";
14
+ export { type BashHookRunnerOptions, HOOK_EVENT, HOOK_TELEMETRY_EVENT, type HookCommand, type HookDecision, type HookDocumentReader, type HookDocumentReaderOptions, type HookDocumentSource, type HookEventName, type HookExtensionOptions, type HookFailure, type HookFailureReason, type HookOutcome, type HookPayload, type HookRunOptions, type HookRunner, type HookTelemetry, type HookTelemetryAttributes, type HookTelemetryEventName, type HookTelemetryOptions, type HookToolEvent, type ParsedRegistrySource, type PluginDocumentRead, type PluginHookConfig, type PluginHookDocument, type PluginHookGroup, type PluginHookSourceRef, type RegistryBinding, type RegistryDocument, type RegistryEntry, type RegistryGroup, type RegistryRead, type RegistrySelection, type ResolvedHook, additionalContextsFrom, createBashHookRunner, createHookDocumentReader, createHookTelemetry, decisionReason, decisionsFrom, failuresFrom, hookFailureMessage, isDenied, matchesTool, registryCacheKey, registryEntries, selectPluginHooks, selectRegistryHooks, sessionHookPayload, toClaudeToolName, toolHookPayload, toolResultMessages };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{HOOK_TELEMETRY_EVENT as e}from"./types/telemetry.mjs";import{matchesTool as t,toClaudeToolName as n}from"./services/toolNames.mjs";import{registryCacheKey as r,registryEntries as i,selectRegistryHooks as a}from"./services/hookRegistry.mjs";import{createHookDocumentReader as o}from"./adapters/hookDocuments.mjs";import{createBashHookRunner as s}from"./adapters/hookRunner.mjs";import{createHookTelemetry as c}from"./adapters/telemetry/logSinkTelemetry.mjs";import{additionalContextsFrom as l,decisionReason as u,decisionsFrom as d,failuresFrom as f,hookFailureMessage as p,isDenied as m,toolResultMessages as h}from"./services/hookDecisions.mjs";import{sessionHookPayload as g,toolHookPayload as _}from"./services/hookPayload.mjs";import{selectPluginHooks as v}from"./services/pluginHooks.mjs";import{HOOK_EVENT as y}from"./types/hooks.mjs";import b from"./adapters/pi/extension.mjs";export{y as HOOK_EVENT,e as HOOK_TELEMETRY_EVENT,l as additionalContextsFrom,s as createBashHookRunner,o as createHookDocumentReader,c as createHookTelemetry,u as decisionReason,d as decisionsFrom,f as failuresFrom,b as hookExtension,p as hookFailureMessage,m as isDenied,t as matchesTool,r as registryCacheKey,i as registryEntries,v as selectPluginHooks,a as selectRegistryHooks,g as sessionHookPayload,n as toClaudeToolName,_ as toolHookPayload,h as toolResultMessages};
1
+ import{additionalContextsFrom as e,decisionReason as t,decisionsFrom as n,failuresFrom as r,hookFailureMessage as i,isDenied as a,toolResultMessages as o}from"./services/hookDecisions/index.mjs";import{HOOK_TELEMETRY_EVENT as s}from"./constants/telemetry.mjs";import{matchesTool as c,toClaudeToolName as l}from"./services/toolNames/index.mjs";import{registryCacheKey as u,registryEntries as d,selectRegistryHooks as f}from"./services/hookRegistry/index.mjs";import{createHookDocumentReader as p}from"./services/hookDocuments/index.mjs";import{sessionHookPayload as m,toolHookPayload as h}from"./services/hookPayload/index.mjs";import{createBashHookRunner as g}from"./services/hookRunner/index.mjs";import{createHookTelemetry as _}from"./services/hookTelemetry/index.mjs";import{selectPluginHooks as v}from"./services/pluginHooks/index.mjs";import{HOOK_EVENT as y}from"./constants/hooks.mjs";export{y as HOOK_EVENT,s as HOOK_TELEMETRY_EVENT,e as additionalContextsFrom,g as createBashHookRunner,p as createHookDocumentReader,_ as createHookTelemetry,t as decisionReason,n as decisionsFrom,r as failuresFrom,i as hookFailureMessage,a as isDenied,c as matchesTool,u as registryCacheKey,d as registryEntries,v as selectPluginHooks,f as selectRegistryHooks,m as sessionHookPayload,l as toClaudeToolName,h as toolHookPayload,o as toolResultMessages};
@@ -0,0 +1,2 @@
1
+ const e=(0,require("@agimon-ai/doompi-core/api-contracts").defineApiContract)({version:1,http:[],sockets:[],dynamic:[]});exports.apiContracts=e,exports.default=e;
2
+ //# sourceMappingURL=apiContracts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.cjs","names":["defineApiContract"],"sources":["../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/api-contracts';\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,GAAA,gDAAeA,CAAAA,CAAAA,kBAAAA,CAAkB,CAAE,QAAS,EAAG,KAAM,CAAC,EAAG,QAAS,CAAC,EAAG,QAAS,CAAC,CAAE,CAAC"}