@crewx/sdk 0.8.0-rc.79 → 0.8.0-rc.82

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 (292) hide show
  1. package/dist/__tests__/adapter/context-builder.test.d.ts +1 -0
  2. package/dist/__tests__/adapter/plugin-helper.test.d.ts +1 -0
  3. package/dist/__tests__/adapter/registration-integration.test.d.ts +1 -0
  4. package/dist/__tests__/adapter/scoped-store.test.d.ts +1 -0
  5. package/dist/__tests__/plugins/conversation.test.d.ts +1 -0
  6. package/dist/__tests__/testing/createMockContext.test.d.ts +1 -0
  7. package/dist/adapter/context-builder.d.ts +0 -9
  8. package/dist/adapter/index.d.ts +0 -1
  9. package/dist/adapter/plugin-helper.d.ts +0 -7
  10. package/dist/adapter/scoped-store.d.ts +0 -10
  11. package/dist/adapter/types.d.ts +0 -7
  12. package/dist/agent/resolver.d.ts +0 -13
  13. package/dist/boxing/box-storage.interface.d.ts +0 -4
  14. package/dist/boxing/box.service.d.ts +0 -4
  15. package/dist/boxing/box.types.d.ts +0 -4
  16. package/dist/boxing/context-builder.d.ts +0 -4
  17. package/dist/client/CrewxClient.d.ts +0 -32
  18. package/dist/client/index.d.ts +0 -1
  19. package/dist/client/index.js +1 -6
  20. package/dist/config/loader.browser.d.ts +0 -8
  21. package/dist/config/loader.d.ts +0 -12
  22. package/dist/conversation/__tests__/sqlite-provider.test.d.ts +1 -0
  23. package/dist/conversation/__tests__/to-task-reader.test.d.ts +1 -0
  24. package/dist/conversation/index.d.ts +0 -1
  25. package/dist/conversation/sqlite-provider.d.ts +0 -9
  26. package/dist/conversation/to-task-reader.d.ts +0 -11
  27. package/dist/conversation/to-template-messages.d.ts +0 -13
  28. package/dist/conversation/types.d.ts +0 -58
  29. package/dist/esm/client/index.js +1 -2
  30. package/dist/esm/hooks/index.js +7 -6
  31. package/dist/esm/index.js +79 -60
  32. package/dist/esm/plugins/index.js +52 -0
  33. package/dist/esm/testing/index.js +1 -0
  34. package/dist/esm/tools/node/index.js +36 -54
  35. package/dist/events/TypedEventEmitter.d.ts +0 -24
  36. package/dist/events/types.d.ts +0 -43
  37. package/dist/facade/Crewx.browser.d.ts +0 -40
  38. package/dist/facade/Crewx.d.ts +0 -163
  39. package/dist/hooks/define.d.ts +0 -1
  40. package/dist/hooks/dispatch.d.ts +0 -12
  41. package/dist/hooks/index.d.ts +0 -1
  42. package/dist/hooks/index.js +7 -24
  43. package/dist/hooks/observer.d.ts +0 -1
  44. package/dist/hooks/plugin.d.ts +0 -1
  45. package/dist/hooks/tool-normalize.d.ts +0 -26
  46. package/dist/hooks/types.d.ts +0 -1
  47. package/dist/hooks/yaml-plugin.d.ts +0 -1
  48. package/dist/index.browser.d.ts +0 -7
  49. package/dist/index.browser.js +2 -25
  50. package/dist/index.d.ts +0 -4
  51. package/dist/index.js +79 -151
  52. package/dist/layout/loader.d.ts +0 -20
  53. package/dist/layout/props-validator.d.ts +0 -6
  54. package/dist/layout/renderer.d.ts +0 -24
  55. package/dist/layout/types.d.ts +0 -42
  56. package/dist/parallel/agent-runtime.d.ts +0 -11
  57. package/dist/parallel/helpers.d.ts +0 -1
  58. package/dist/parallel/index.d.ts +0 -1
  59. package/dist/parallel/parallel-runner.d.ts +0 -8
  60. package/dist/parallel/types.d.ts +0 -24
  61. package/dist/parsers/agent-call.util.d.ts +0 -3
  62. package/dist/parsers/claude.parser.d.ts +0 -8
  63. package/dist/parsers/codex.parser.d.ts +0 -8
  64. package/dist/parsers/copilot.parser.d.ts +0 -9
  65. package/dist/parsers/gemini.parser.d.ts +0 -10
  66. package/dist/parsers/opencode.parser.d.ts +0 -10
  67. package/dist/parsers/router.d.ts +0 -5
  68. package/dist/paths.d.ts +1 -0
  69. package/dist/platform/BrowserFsAdapter.d.ts +0 -20
  70. package/dist/platform/IFsAdapter.d.ts +0 -23
  71. package/dist/platform/NodeFsAdapter.d.ts +0 -8
  72. package/dist/plugin/plugin-provider.d.ts +0 -22
  73. package/dist/plugin/types.d.ts +0 -31
  74. package/dist/plugin.d.ts +0 -27
  75. package/dist/plugins/conversation.d.ts +0 -2
  76. package/dist/plugins/file-logger.d.ts +0 -13
  77. package/dist/plugins/index.d.ts +0 -10
  78. package/dist/plugins/index.js +52 -19
  79. package/dist/plugins/sqlite-tracing.d.ts +0 -13
  80. package/dist/plugins/sqlite-tracing.spec.d.ts +1 -0
  81. package/dist/provider/bridge.browser.d.ts +0 -20
  82. package/dist/provider/bridge.d.ts +0 -47
  83. package/dist/provider/parse-usage.d.ts +0 -14
  84. package/dist/provider/register-api.d.ts +0 -7
  85. package/dist/provider/vercel-runtime.d.ts +0 -29
  86. package/dist/remote/index.d.ts +0 -6
  87. package/dist/remote/remote-agent-manager.d.ts +0 -31
  88. package/dist/remote/remote-provider.d.ts +0 -15
  89. package/dist/remote/remote-transport.d.ts +0 -17
  90. package/dist/remote/types.d.ts +0 -59
  91. package/dist/server/auth.d.ts +0 -16
  92. package/dist/server/handler.d.ts +0 -17
  93. package/dist/server/index.d.ts +0 -4
  94. package/dist/server/tool-adapter.d.ts +0 -16
  95. package/dist/template/engine.d.ts +0 -19
  96. package/dist/template/helpers/exec.browser.d.ts +0 -7
  97. package/dist/template/helpers/exec.d.ts +0 -45
  98. package/dist/template/helpers/fenced_code.d.ts +0 -16
  99. package/dist/template/helpers/format-conversation.d.ts +0 -22
  100. package/dist/template/helpers/include.d.ts +0 -15
  101. package/dist/template/helpers/p1p2.d.ts +0 -32
  102. package/dist/template/loader/DocumentLoader.d.ts +0 -30
  103. package/dist/template/types.d.ts +0 -30
  104. package/dist/testing/index.d.ts +0 -1
  105. package/dist/testing/index.js +1 -16
  106. package/dist/testing/mock-audit.d.ts +0 -1
  107. package/dist/testing/mock-context.d.ts +0 -1
  108. package/dist/testing/mock-logger.d.ts +0 -1
  109. package/dist/testing/mock-router.d.ts +0 -1
  110. package/dist/testing/mock-storage.d.ts +0 -1
  111. package/dist/testing/mock-store.d.ts +0 -1
  112. package/dist/tools/delegate.d.ts +0 -7
  113. package/dist/tools/index.d.ts +0 -4
  114. package/dist/tools/node/builtin.d.ts +0 -16
  115. package/dist/tools/node/index.d.ts +0 -20
  116. package/dist/tools/node/index.js +36 -59
  117. package/dist/types/index.d.ts +0 -20
  118. package/dist/types/task-log.types.d.ts +0 -4
  119. package/dist/utils/env-defaults.d.ts +0 -16
  120. package/dist/utils/glob-match.d.ts +0 -16
  121. package/dist/utils/id.d.ts +0 -15
  122. package/dist/utils/timestamp.d.ts +0 -1
  123. package/dist/utils/workspace.d.ts +0 -4
  124. package/package.json +24 -25
  125. package/dist/adapter/context-builder.js +0 -87
  126. package/dist/adapter/index.js +0 -21
  127. package/dist/adapter/plugin-helper.js +0 -45
  128. package/dist/adapter/scoped-store.js +0 -43
  129. package/dist/adapter/types.js +0 -23
  130. package/dist/agent/resolver.js +0 -46
  131. package/dist/boxing/box-storage.interface.js +0 -6
  132. package/dist/boxing/box.service.js +0 -73
  133. package/dist/boxing/box.types.js +0 -6
  134. package/dist/boxing/context-builder.js +0 -79
  135. package/dist/client/CrewxClient.js +0 -86
  136. package/dist/config/loader.browser.js +0 -59
  137. package/dist/config/loader.js +0 -95
  138. package/dist/conversation/index.js +0 -25
  139. package/dist/conversation/sqlite-provider.js +0 -178
  140. package/dist/conversation/to-task-reader.js +0 -28
  141. package/dist/conversation/to-template-messages.js +0 -34
  142. package/dist/conversation/types.js +0 -10
  143. package/dist/esm/agent/resolver.js +0 -41
  144. package/dist/esm/boxing/box-storage.interface.js +0 -5
  145. package/dist/esm/boxing/box.service.js +0 -69
  146. package/dist/esm/boxing/box.types.js +0 -5
  147. package/dist/esm/boxing/context-builder.js +0 -76
  148. package/dist/esm/client/CrewxClient.js +0 -82
  149. package/dist/esm/config/loader.browser.js +0 -54
  150. package/dist/esm/config/loader.js +0 -77
  151. package/dist/esm/events/TypedEventEmitter.js +0 -61
  152. package/dist/esm/events/types.js +0 -8
  153. package/dist/esm/facade/Crewx.browser.js +0 -310
  154. package/dist/esm/facade/Crewx.js +0 -941
  155. package/dist/esm/hooks/define.js +0 -10
  156. package/dist/esm/hooks/dispatch.js +0 -76
  157. package/dist/esm/hooks/observer.js +0 -56
  158. package/dist/esm/hooks/plugin.js +0 -12
  159. package/dist/esm/hooks/types.js +0 -9
  160. package/dist/esm/index.browser.js +0 -15
  161. package/dist/esm/layout/loader.js +0 -268
  162. package/dist/esm/layout/props-validator.js +0 -297
  163. package/dist/esm/layout/renderer.js +0 -180
  164. package/dist/esm/layout/types.js +0 -31
  165. package/dist/esm/parallel/agent-runtime.js +0 -21
  166. package/dist/esm/parallel/helpers.js +0 -214
  167. package/dist/esm/parallel/index.js +0 -5
  168. package/dist/esm/parallel/parallel-runner.js +0 -221
  169. package/dist/esm/parallel/types.js +0 -5
  170. package/dist/esm/parsers/agent-call.util.js +0 -15
  171. package/dist/esm/parsers/claude.parser.js +0 -64
  172. package/dist/esm/parsers/codex.parser.js +0 -97
  173. package/dist/esm/parsers/copilot.parser.js +0 -63
  174. package/dist/esm/parsers/gemini.parser.js +0 -43
  175. package/dist/esm/parsers/opencode.parser.js +0 -73
  176. package/dist/esm/parsers/router.js +0 -53
  177. package/dist/esm/platform/BrowserFsAdapter.js +0 -80
  178. package/dist/esm/platform/IFsAdapter.js +0 -2
  179. package/dist/esm/platform/NodeFsAdapter.js +0 -34
  180. package/dist/esm/plugin/plugin-provider.js +0 -202
  181. package/dist/esm/plugin/types.js +0 -8
  182. package/dist/esm/plugin.js +0 -25
  183. package/dist/esm/provider/bridge.browser.js +0 -43
  184. package/dist/esm/provider/bridge.js +0 -373
  185. package/dist/esm/provider/parse-usage.js +0 -80
  186. package/dist/esm/provider/register-api.js +0 -21
  187. package/dist/esm/provider/vercel-runtime.js +0 -310
  188. package/dist/esm/remote/index.js +0 -10
  189. package/dist/esm/remote/remote-agent-manager.js +0 -194
  190. package/dist/esm/remote/remote-provider.js +0 -98
  191. package/dist/esm/remote/remote-transport.js +0 -79
  192. package/dist/esm/remote/types.js +0 -8
  193. package/dist/esm/server/auth.js +0 -31
  194. package/dist/esm/server/handler.js +0 -72
  195. package/dist/esm/server/index.js +0 -5
  196. package/dist/esm/server/tool-adapter.js +0 -92
  197. package/dist/esm/template/engine.js +0 -100
  198. package/dist/esm/template/helpers/exec.browser.js +0 -31
  199. package/dist/esm/template/helpers/exec.js +0 -220
  200. package/dist/esm/template/helpers/fenced_code.js +0 -17
  201. package/dist/esm/template/helpers/include.js +0 -20
  202. package/dist/esm/template/helpers/p1p2.js +0 -83
  203. package/dist/esm/template/loader/DocumentLoader.js +0 -124
  204. package/dist/esm/template/types.js +0 -5
  205. package/dist/esm/tools/delegate.js +0 -57
  206. package/dist/esm/tools/index.js +0 -5
  207. package/dist/esm/tools/node/builtin.js +0 -541
  208. package/dist/esm/types/index.js +0 -27
  209. package/dist/esm/types/task-log.types.js +0 -5
  210. package/dist/esm/utils/env-defaults.js +0 -23
  211. package/dist/esm/utils/glob-match.js +0 -38
  212. package/dist/esm/utils/id.js +0 -46
  213. package/dist/esm/utils/workspace.js +0 -21
  214. package/dist/events/TypedEventEmitter.js +0 -65
  215. package/dist/events/types.js +0 -9
  216. package/dist/facade/Crewx.browser.js +0 -314
  217. package/dist/facade/Crewx.js +0 -1299
  218. package/dist/hooks/define.js +0 -13
  219. package/dist/hooks/dispatch.js +0 -147
  220. package/dist/hooks/observer.js +0 -60
  221. package/dist/hooks/plugin.js +0 -17
  222. package/dist/hooks/tool-normalize.js +0 -110
  223. package/dist/hooks/types.js +0 -12
  224. package/dist/hooks/yaml-plugin.js +0 -356
  225. package/dist/layout/loader.js +0 -305
  226. package/dist/layout/props-validator.js +0 -301
  227. package/dist/layout/renderer.js +0 -193
  228. package/dist/layout/types.js +0 -36
  229. package/dist/parallel/agent-runtime.js +0 -25
  230. package/dist/parallel/helpers.js +0 -219
  231. package/dist/parallel/index.js +0 -13
  232. package/dist/parallel/parallel-runner.js +0 -226
  233. package/dist/parallel/types.js +0 -6
  234. package/dist/parsers/agent-call.util.js +0 -19
  235. package/dist/parsers/api.parser.d.ts +0 -10
  236. package/dist/parsers/api.parser.js +0 -26
  237. package/dist/parsers/claude.parser.js +0 -67
  238. package/dist/parsers/codex.parser.js +0 -100
  239. package/dist/parsers/copilot.parser.js +0 -66
  240. package/dist/parsers/gemini.parser.js +0 -46
  241. package/dist/parsers/opencode.parser.js +0 -76
  242. package/dist/parsers/router.js +0 -56
  243. package/dist/platform/BrowserFsAdapter.js +0 -84
  244. package/dist/platform/IFsAdapter.js +0 -3
  245. package/dist/platform/NodeFsAdapter.js +0 -38
  246. package/dist/plugin/plugin-provider.js +0 -207
  247. package/dist/plugin/types.js +0 -9
  248. package/dist/plugin.js +0 -29
  249. package/dist/plugins/conversation.js +0 -59
  250. package/dist/plugins/file-logger.js +0 -87
  251. package/dist/plugins/sqlite-tracing.js +0 -112
  252. package/dist/provider/bridge.browser.js +0 -49
  253. package/dist/provider/bridge.js +0 -381
  254. package/dist/provider/mastra-runtime.d.ts +0 -45
  255. package/dist/provider/mastra-runtime.js +0 -208
  256. package/dist/provider/parse-usage.js +0 -83
  257. package/dist/provider/register-api.js +0 -24
  258. package/dist/provider/vercel-runtime.js +0 -347
  259. package/dist/remote/index.js +0 -32
  260. package/dist/remote/remote-agent-manager.js +0 -198
  261. package/dist/remote/remote-provider.js +0 -141
  262. package/dist/remote/remote-transport.js +0 -83
  263. package/dist/remote/types.js +0 -9
  264. package/dist/server/auth.js +0 -35
  265. package/dist/server/handler.js +0 -75
  266. package/dist/server/index.js +0 -9
  267. package/dist/server/tool-adapter.js +0 -95
  268. package/dist/template/engine.js +0 -137
  269. package/dist/template/helpers/exec.browser.js +0 -41
  270. package/dist/template/helpers/exec.js +0 -230
  271. package/dist/template/helpers/fenced_code.js +0 -20
  272. package/dist/template/helpers/format-conversation.js +0 -53
  273. package/dist/template/helpers/include.js +0 -23
  274. package/dist/template/helpers/p1p2.js +0 -90
  275. package/dist/template/loader/DocumentLoader.js +0 -128
  276. package/dist/template/types.js +0 -6
  277. package/dist/testing/mock-audit.js +0 -13
  278. package/dist/testing/mock-context.js +0 -68
  279. package/dist/testing/mock-logger.js +0 -27
  280. package/dist/testing/mock-router.js +0 -67
  281. package/dist/testing/mock-storage.js +0 -21
  282. package/dist/testing/mock-store.js +0 -8
  283. package/dist/tools/delegate.js +0 -60
  284. package/dist/tools/index.js +0 -9
  285. package/dist/tools/node/builtin.js +0 -547
  286. package/dist/types/index.js +0 -32
  287. package/dist/types/task-log.types.js +0 -6
  288. package/dist/utils/env-defaults.js +0 -27
  289. package/dist/utils/glob-match.js +0 -42
  290. package/dist/utils/id.js +0 -50
  291. package/dist/utils/timestamp.js +0 -13
  292. package/dist/utils/workspace.js +0 -58
@@ -1,14 +1,3 @@
1
- /**
2
- * Security notes:
3
- *
4
- * (M1) Codex `systemMessage` is merged into the agent's system prompt directly.
5
- * Guide messages MUST NOT contain dynamic external input (tool_input,
6
- * external API results, etc.) to prevent prompt injection via hook inject.
7
- *
8
- * Provider matching: When `provider` is not specified in a hook definition,
9
- * it applies to ALL providers (§4.1.1 2-Layer Selector design).
10
- * This is intentional — allows catch-all safety rules.
11
- */
12
1
  import type { HookContext } from '../hooks/types';
13
2
  import type { HookPlugin } from '../hooks/plugin';
14
3
  export interface ClaudeHookInput {
@@ -58,4 +47,3 @@ export declare function formatInjectOutput(provider: Provider, hookEventName: st
58
47
  export declare function formatDenyOutput(_provider: Provider, hookEventName: string, reason: string): ProviderHookOutput;
59
48
  export declare function buildHookContext(input: ClaudeHookInput, cwd: string, provider?: string): HookContext;
60
49
  export declare function evaluateHook(plugin: HookPlugin, input: ClaudeHookInput, cwd: string, provider?: string): Promise<HookDispatchResult>;
61
- //# sourceMappingURL=dispatch.d.ts.map
@@ -10,4 +10,3 @@ export { Tools } from './types';
10
10
  export type { ObserverContext, ObserverResult, ObserverEvent, HookContext, HookResult, HookEvent, ToolName, ToolInputPatch, Capability, } from './types';
11
11
  export { evaluateHook, sanitizeDenyReason, sanitizeInjectMessage, isPathSafe, buildHookContext, formatInjectOutput, formatDenyOutput, } from './dispatch';
12
12
  export type { ClaudeHookInput, ClaudeHookOutput, CodexHookOutput, ProviderHookOutput, Provider, HookDispatchResult, } from './dispatch';
13
- //# sourceMappingURL=index.d.ts.map
@@ -1,24 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatDenyOutput = exports.formatInjectOutput = exports.buildHookContext = exports.isPathSafe = exports.sanitizeInjectMessage = exports.sanitizeDenyReason = exports.evaluateHook = exports.Tools = exports.validateHooksSchema = exports.YamlHookPlugin = exports.definePlugin = exports.defineHookPlugin = exports.HookPlugin = exports.ToolObserverPlugin = void 0;
4
- var observer_1 = require("./observer");
5
- Object.defineProperty(exports, "ToolObserverPlugin", { enumerable: true, get: function () { return observer_1.ToolObserverPlugin; } });
6
- var plugin_1 = require("./plugin");
7
- Object.defineProperty(exports, "HookPlugin", { enumerable: true, get: function () { return plugin_1.HookPlugin; } });
8
- Object.defineProperty(exports, "defineHookPlugin", { enumerable: true, get: function () { return plugin_1.defineHookPlugin; } });
9
- var define_1 = require("./define");
10
- Object.defineProperty(exports, "definePlugin", { enumerable: true, get: function () { return define_1.definePlugin; } });
11
- var yaml_plugin_1 = require("./yaml-plugin");
12
- Object.defineProperty(exports, "YamlHookPlugin", { enumerable: true, get: function () { return yaml_plugin_1.YamlHookPlugin; } });
13
- Object.defineProperty(exports, "validateHooksSchema", { enumerable: true, get: function () { return yaml_plugin_1.validateHooksSchema; } });
14
- var types_1 = require("./types");
15
- Object.defineProperty(exports, "Tools", { enumerable: true, get: function () { return types_1.Tools; } });
16
- var dispatch_1 = require("./dispatch");
17
- Object.defineProperty(exports, "evaluateHook", { enumerable: true, get: function () { return dispatch_1.evaluateHook; } });
18
- Object.defineProperty(exports, "sanitizeDenyReason", { enumerable: true, get: function () { return dispatch_1.sanitizeDenyReason; } });
19
- Object.defineProperty(exports, "sanitizeInjectMessage", { enumerable: true, get: function () { return dispatch_1.sanitizeInjectMessage; } });
20
- Object.defineProperty(exports, "isPathSafe", { enumerable: true, get: function () { return dispatch_1.isPathSafe; } });
21
- Object.defineProperty(exports, "buildHookContext", { enumerable: true, get: function () { return dispatch_1.buildHookContext; } });
22
- Object.defineProperty(exports, "formatInjectOutput", { enumerable: true, get: function () { return dispatch_1.formatInjectOutput; } });
23
- Object.defineProperty(exports, "formatDenyOutput", { enumerable: true, get: function () { return dispatch_1.formatDenyOutput; } });
24
- //# sourceMappingURL=index.js.map
1
+ 'use strict';var crypto=require('crypto'),path=require('path'),os=require('os'),fs=require('fs');var F=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var f=class{detach(e){}};var p=class extends f{unsubs=[];attach(e){if(this.on.beforeTool){let t=e.on("tool:observed:before",async o=>{if(!this.matchesTool(this.on.beforeTool,o.tool.name))return;let r=this.buildContext("beforeTool",o);await this.run(r);});this.unsubs.push(t);}if(this.on.afterTool){let t=e.on("tool:observed:after",async o=>{if(!this.matchesTool(this.on.afterTool,o.tool.name))return;let r=this.buildContext("afterTool",o);await this.run(r);});this.unsubs.push(t);}}async detach(e){for(let t of this.unsubs)t();this.unsubs=[];}matchesTool(e,t){return e===true?true:e.includes(t)}buildContext(e,t){return {event:e,traceId:t.traceId,agent:{id:t.agentId||t.agentRef,role:"",team:""},provider:t.provider,thread:{id:t.threadId||""},tool:{name:t.tool.name,rawName:t.tool.rawName,input:"input"in t.tool?t.tool.input:void 0},cwd:process.cwd(),sessionId:t.sessionId||"",pass:()=>({type:"pass"})}}};var c=class{capabilities={required:[]}};function D(n){return new class extends c{name=n.name;version=n.version;capabilities=n.capabilities??{required:[]};run=n.run}}function j(n){return new class extends p{name=n.name;version=n.version;on=n.on;run=n.run}}function M(n){let e=r=>r.replace(/[.+^${}()|[\]\\]/g,"\\$&"),o=n.split("/").map(r=>r==="**"?".*":r.split("*").map(e).join("[^/]*"));return new RegExp(`^${o.join("\\/")}$`)}function h(n,e){try{return M(e).test(n)}catch{return false}}var i={FileRead:"file.read",FileWrite:"file.write",FileEdit:"file.edit",Shell:"shell",Search:"search",Other:"other"};var A={Read:i.FileRead,Write:i.FileWrite,Edit:i.FileEdit,MultiEdit:i.FileEdit,NotebookEdit:i.FileEdit,Bash:i.Shell,Grep:i.Search,Glob:i.Search},z={read_file:i.FileRead,write_file:i.FileWrite,replace:i.FileEdit,edit:i.FileEdit,run_shell_command:i.Shell,search_file_content:i.Search,glob:i.Search},W={read:i.FileRead,write:i.FileWrite,edit:i.FileEdit,shell:i.Shell,bash:i.Shell,search:i.Search,grep:i.Search},L={"file.read":i.FileRead,"file.write":i.FileWrite,"file.edit":i.FileEdit,read:i.FileRead,write:i.FileWrite,edit:i.FileEdit,bash:i.Shell,shell:i.Shell,grep:i.Search,glob:i.Search},$={Bash:i.Shell,bash:i.Shell},G={claude:A,codex:$,gemini:z,copilot:W,opencode:L};function v(n,e){let t=X(e);if(t){let o=G[t][n];if(o)return o}return Object.values(i).includes(n)?n:i.Other}function X(n){let e=n.toLowerCase();return e.includes("claude")?"claude":e.includes("codex")?"codex":e.includes("gemini")?"gemini":e.includes("copilot")?"copilot":e.includes("opencode")?"opencode":null}var x=200,H=2e3;function R(n){let e=n.replace(/[\x00-\x1f\x7f\u2028\u2029]/g,"");return e.length<=x?e:e.slice(0,x-11)+" [redacted]"}function m(n){let e=n.replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\u2028\u2029]/g,"");return e.length<=H?e:e.slice(0,H-11)+" [redacted]"}function Y(n,e){let t=path.resolve(n),o=path.resolve(e);return !(path.relative(o,t).startsWith("..")||path.resolve(t).startsWith("/etc/")||path.resolve(t).startsWith("/usr/")||t.includes("node_modules"))}function q(n){return n==="codex"?"codex":"claude"}function w(n,e,t){return n==="codex"?{hookSpecificOutput:{hookEventName:e,permissionDecision:"allow",systemMessage:t}}:{hookSpecificOutput:{hookEventName:e,permissionDecision:"allow",additionalContext:t}}}function C(n,e,t){return {hookSpecificOutput:{hookEventName:e,permissionDecision:"deny",permissionDecisionReason:t}}}function O(n,e,t="cli/claude"){let o=t||process.env.CREWX_PROVIDER||"cli/claude";return {event:"beforeTool",traceId:n.tool_use_id||"",agent:{id:process.env.CREWX_AGENT_ID||"",role:process.env.CREWX_AGENT_ROLE||"",team:process.env.CREWX_AGENT_TEAM||""},provider:o,thread:{id:process.env.CREWX_THREAD_ID||""},tool:{name:v(n.tool_name,o),rawName:n.tool_name,input:n.tool_input},cwd:e||n.cwd,sessionId:n.session_id||process.env.CREWX_SESSION_ID||"",pass:()=>({type:"pass"}),deny:r=>({type:"deny",reason:r}),inject:r=>({type:"inject",message:r}),modify:r=>({type:"modify",patch:r})}}async function J(n,e,t,o="cli/claude"){let r=O(e,t,o),s=await n.run(r),l=q(o),a={hookSpecificOutput:{hookEventName:e.hook_event_name,permissionDecision:"allow"}};switch(s.type){case "pass":return {exitCode:0,stdout:a,injected:false};case "deny":{let d=R(s.reason);return {exitCode:2,stdout:C(l,e.hook_event_name,d),injected:false}}case "inject":{let d=m(s.message);return {exitCode:0,stdout:w(l,e.hook_event_name,d),injected:true}}case "modify":return console.error(`[crewx] Hook result type '${s.type}' is not supported in Phase 0. Plugin: ${n.name}. Treating as pass.`),{exitCode:0,stdout:a,injected:false};default:return {exitCode:0,stdout:a,injected:false}}}var ne=10*1024*1024,oe={b:1,kb:1024,mb:1024*1024,gb:1024*1024*1024};function y(n,e){return n===void 0?true:Array.isArray(n)?n.includes(e):n===e}function re(n,e){return n===void 0?true:Array.isArray(n)?n.some(t=>e.includes(t)):e.includes(n)}function E(n){if(typeof n=="number")return n;let e=n.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);if(!e)return 0;let t=parseFloat(e[1]),o=(e[2]??"b").toLowerCase();return Math.floor(t*(oe[o]??1))}function P(n){return typeof n=="string"}function T(n){try{let e=fs.statSync(n);return e.size>ne?(process.stderr.write(`[YamlHookPlugin] File too large for line count: ${n} (${e.size} bytes)
2
+ `),null):fs.readFileSync(n,"utf8").split(`
3
+ `).length}catch{return null}}function _(n){try{return fs.statSync(n).size}catch{return null}}function ie(n,e,t){if(!n)return true;let o=e,r=o?.path??o?.file_path??o?.filePath??o?.filename;if(typeof r!="string")return false;if(h(r,n))return true;if(t&&r.startsWith("/")){let{relative:s,isAbsolute:l}=F("path");if(l(r)){let a=s(t,r);if(a&&!a.startsWith("..")&&h(a,n))return true}}return false}function se(n,e){return n?JSON.stringify(e).includes(n):true}function ae(n,e){if(!n)return true;try{let t=new RegExp(n),o=JSON.stringify(e);return t.test(o)}catch{return false}}function ue(n,e){if(!n)return true;try{let t=new RegExp(n),o=JSON.stringify(e);return t.test(o)}catch{return false}}function le(n,e){if(n.pathSizeMin===void 0&&n.pathSizeMax===void 0)return true;let t=e,o=t?.path??t?.file_path??t?.filePath??t?.filename;if(typeof o!="string")return false;if(n.pathSizeMin!==void 0)if(P(n.pathSizeMin)){let r=_(o);if(r===null||r<E(n.pathSizeMin))return false}else {let r=T(o);if(r===null||r<n.pathSizeMin)return false}if(n.pathSizeMax!==void 0)if(P(n.pathSizeMax)){let r=_(o);if(r===null||r>E(n.pathSizeMax))return false}else {let r=T(o);if(r===null||r>n.pathSizeMax)return false}return true}function ce(n){let e=[],t=[];for(let o=0;o<n.length;o++){let r=n[o];if(!r||typeof r!="object"){t.push(`Hook at index ${o}: not an object, skipping`);continue}let s=r;if(typeof s.name!="string"||!s.name){t.push(`Hook at index ${o}: missing or invalid "name", skipping`);continue}let l=s.guide&&typeof s.guide=="object",a=s.deny&&typeof s.deny=="object",d=typeof s.plugin=="string";if(!l&&!a&&!d){t.push(`Hook "${s.name}": missing guide/deny/plugin, skipping`);continue}if(l&&typeof s.guide.say!="string"){t.push(`Hook "${s.name}": guide.say is required and must be string, skipping`);continue}if(a&&typeof s.deny.reason!="string"){t.push(`Hook "${s.name}": deny.reason is required and must be string, skipping`);continue}e.push(s);}return {valid:e,warnings:t}}var k=class extends c{name="@crewx/yaml-hook-plugin";version="0.1.0";capabilities={required:["inject"]};hooks;agentMap;constructor(e){super(),this.hooks=e.hooks,this.agentMap=new Map((e.agents??[]).map(t=>[t.id,t]));}async run(e){let t=[],o=process.env.CREWX_TASK_LOG_PATH,r=process.env.CREWX_HOOK_LOG_VERBOSE==="1";for(let s of this.hooks)if(this.matchEntryLevel(s,e)&&s.guide){if(!this.matchRuleLevel(s.guide,e)){r&&o&&this.appendHookLog(o,{rule:s.name,action:"pass",once:s.guide.once??false,ctx:e,matched:false});continue}s.guide.once&&this.hasFired(e.sessionId,s.name)||(s.guide.once&&this.markFired(e.sessionId,s.name),t.push(s.guide.say),o&&this.appendHookLog(o,{rule:s.name,action:"inject",once:s.guide.once??false,ctx:e,matched:true,message:s.guide.say}));}return t.length?e.inject(t.join(`
4
+
5
+ `)):e.pass()}appendHookLog(e,t){try{let o={rule:t.rule,action:t.action,once:t.once,sessionId:t.ctx.sessionId,provider:t.ctx.provider,agent:t.ctx.agent.id,toolName:t.ctx.tool.name,rawToolName:t.ctx.tool.rawName};t.message&&(o.chars=t.message.length,process.env.CREWX_HOOK_LOG_VERBOSE==="1"&&(o.message=m(t.message).slice(0,500)));let r=`[${new Date().toISOString()}] HOOK: ${JSON.stringify(o)}
6
+ `;fs.appendFileSync(e,r,{encoding:"utf8",mode:384});}catch{}}matchEntryLevel(e,t){if(e.provider!==void 0){let o=t.provider.replace(/^cli\//,"");if(!y(e.provider,o))return false}if(e.team!==void 0){let r=this.agentMap.get(t.agent.id)?.team??t.agent.team;if(!y(e.team,r))return false}if(e.role!==void 0){let r=this.agentMap.get(t.agent.id)?.role??t.agent.role;if(!y(e.role,r))return false}if(e.tag!==void 0){let r=this.agentMap.get(t.agent.id)?.tags??[];if(!re(e.tag,r))return false}return !(e.agents!==void 0&&!e.agents.includes(t.agent.id))}matchRuleLevel(e,t){return !(e.when!==void 0&&e.when.length>0&&!e.when.includes(t.tool.name)&&!e.when.includes(t.tool.rawName)||!se(e.pattern,t.tool.input)||!ae(e.regex,t.tool.input)||!ie(e.pathPattern,t.tool.input,t.cwd)||!le(e,t.tool.input)||!ue(e.whenInputRegex,t.tool.input))}hasFired(e,t){try{let o=this.firedFilePath(e);if(!fs.existsSync(o))return !1;let r=JSON.parse(fs.readFileSync(o,"utf8"));return Array.isArray(r.fired)&&r.fired.includes(t)}catch{return false}}markFired(e,t){try{let o=this.firedFilePath(e);fs.mkdirSync(path.dirname(o),{recursive:!0,mode:448});let r=fs.existsSync(o)?JSON.parse(fs.readFileSync(o,"utf8")):{fired:[]};Array.isArray(r.fired)||(r.fired=[]),r.fired.includes(t)||(r.fired.push(t),fs.writeFileSync(o,JSON.stringify(r),{mode:384}));}catch(o){process.stderr.write(`[YamlHookPlugin] once state write failed: ${o}
7
+ `);}}firedFilePath(e){let t=crypto.createHash("sha1").update(e).digest("hex");return path.join(os.homedir(),".crewx","sessions",t,"fired-rules.json")}};exports.HookPlugin=c;exports.ToolObserverPlugin=p;exports.Tools=i;exports.YamlHookPlugin=k;exports.buildHookContext=O;exports.defineHookPlugin=D;exports.definePlugin=j;exports.evaluateHook=J;exports.formatDenyOutput=C;exports.formatInjectOutput=w;exports.isPathSafe=Y;exports.sanitizeDenyReason=R;exports.sanitizeInjectMessage=m;exports.validateHooksSchema=ce;
@@ -17,4 +17,3 @@ export declare abstract class ToolObserverPlugin extends CrewxPlugin {
17
17
  private matchesTool;
18
18
  private buildContext;
19
19
  }
20
- //# sourceMappingURL=observer.d.ts.map
@@ -16,4 +16,3 @@ export interface HookPluginDefinition {
16
16
  run(ctx: HookContext): Promise<HookResult>;
17
17
  }
18
18
  export declare function defineHookPlugin(def: HookPluginDefinition): HookPlugin;
19
- //# sourceMappingURL=plugin.d.ts.map
@@ -1,29 +1,3 @@
1
- /**
2
- * Tool name normalization — 5-provider raw tool names → Tools.* enum.
3
- *
4
- * Design: docs/hook-설계서.md §8.1 Tools.* 정규화 enum.
5
- *
6
- * Raw tool names come from each provider's PreToolUse stdin payload:
7
- * - Claude: "Read" / "Write" / "Edit" / "Bash" / "Grep" / "Glob" / ...
8
- * - Codex: everything routed through "Bash" (shell command) — parsing optional
9
- * - Gemini: "read_file" / "write_file" / "replace" / "run_shell_command" / ...
10
- * - Copilot: "read" / "write" / "shell" / ...
11
- * - OpenCode: "file.read" / "file.write" / "file.edit" / "bash" / ...
12
- *
13
- * Unknown tools fall through to Tools.Other (still usable via `rawName` in rules).
14
- */
15
1
  import { type ToolName } from './types';
16
2
  export type ProviderKey = 'claude' | 'codex' | 'gemini' | 'copilot' | 'opencode';
17
- /**
18
- * Normalize a provider's raw tool name to the Tools.* enum.
19
- *
20
- * Matching priority:
21
- * 1. Exact key lookup in the provider's table.
22
- * 2. Fallback: if rawName already looks like a Tools.* value (contains a dot), accept it.
23
- * 3. Otherwise → Tools.Other.
24
- *
25
- * @param rawName provider-specific tool name (e.g. "Read", "read_file")
26
- * @param provider provider key; accepts 'cli/claude' style prefix too.
27
- */
28
3
  export declare function normalizeToolName(rawName: string, provider: string): ToolName;
29
- //# sourceMappingURL=tool-normalize.d.ts.map
@@ -76,4 +76,3 @@ export interface ToolInputPatch {
76
76
  systemPromptPrepend?: string;
77
77
  }
78
78
  export type Capability = 'inject' | 'deny' | 'modify' | 'ask';
79
- //# sourceMappingURL=types.d.ts.map
@@ -26,4 +26,3 @@ export declare class YamlHookPlugin extends HookPlugin {
26
26
  private markFired;
27
27
  firedFilePath(sessionId: string): string;
28
28
  }
29
- //# sourceMappingURL=yaml-plugin.d.ts.map
@@ -1,9 +1,3 @@
1
- /**
2
- * @crewx/sdk browser entry point.
3
- *
4
- * Exports only browser-safe modules — no Node.js dependencies
5
- * (child_process, fs, path, crypto, events).
6
- */
7
1
  export { Crewx } from './facade/Crewx.browser.js';
8
2
  export type { ToolDefinition, BrowserQueryOptions, BrowserFromConfigOptions } from './facade/Crewx.browser.js';
9
3
  export { registerProviderFactory, createProvider, ProviderError } from './provider/bridge.browser.js';
@@ -12,4 +6,3 @@ export { parseYamlContent, ConfigLoadError } from './config/loader.browser.js';
12
6
  export { BrowserFsAdapter } from './platform/BrowserFsAdapter.js';
13
7
  export type { IFsAdapter } from './platform/IFsAdapter.js';
14
8
  export type { AgentConfig, CrewxProjectConfig, CrewxOptions, QueryOptions, QueryResult, ExecuteOptions, ExecuteResult, } from './types/index.js';
15
- //# sourceMappingURL=index.browser.d.ts.map
@@ -1,25 +1,2 @@
1
- "use strict";
2
- /**
3
- * @crewx/sdk browser entry point.
4
- *
5
- * Exports only browser-safe modules — no Node.js dependencies
6
- * (child_process, fs, path, crypto, events).
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.BrowserFsAdapter = exports.ConfigLoadError = exports.parseYamlContent = exports.ProviderError = exports.createProvider = exports.registerProviderFactory = exports.Crewx = void 0;
10
- // Browser-safe facade
11
- var Crewx_browser_js_1 = require("./facade/Crewx.browser.js");
12
- Object.defineProperty(exports, "Crewx", { enumerable: true, get: function () { return Crewx_browser_js_1.Crewx; } });
13
- // Browser-safe provider bridge (registry only, no CLI spawn)
14
- var bridge_browser_js_1 = require("./provider/bridge.browser.js");
15
- Object.defineProperty(exports, "registerProviderFactory", { enumerable: true, get: function () { return bridge_browser_js_1.registerProviderFactory; } });
16
- Object.defineProperty(exports, "createProvider", { enumerable: true, get: function () { return bridge_browser_js_1.createProvider; } });
17
- Object.defineProperty(exports, "ProviderError", { enumerable: true, get: function () { return bridge_browser_js_1.ProviderError; } });
18
- // Config — browser-safe (no fs import)
19
- var loader_browser_js_1 = require("./config/loader.browser.js");
20
- Object.defineProperty(exports, "parseYamlContent", { enumerable: true, get: function () { return loader_browser_js_1.parseYamlContent; } });
21
- Object.defineProperty(exports, "ConfigLoadError", { enumerable: true, get: function () { return loader_browser_js_1.ConfigLoadError; } });
22
- // Platform adapters
23
- var BrowserFsAdapter_js_1 = require("./platform/BrowserFsAdapter.js");
24
- Object.defineProperty(exports, "BrowserFsAdapter", { enumerable: true, get: function () { return BrowserFsAdapter_js_1.BrowserFsAdapter; } });
25
- //# sourceMappingURL=index.browser.js.map
1
+ import {load}from'js-yaml';import {z}from'zod';var m=class extends Error{constructor(e,o){let r=o.length>0?` Available: ${o.join(", ")}`:"";super(`Agent not found: "${e}".${r}`),this.name="AgentNotFoundError";}},I={claude:{id:"claude",provider:"cli/claude"},gemini:{id:"gemini",provider:"cli/gemini"},copilot:{id:"copilot",provider:"cli/copilot"},codex:{id:"codex",provider:"cli/codex"}};function x(a,e){let o=a.startsWith("@")?a.slice(1):a,r=e.find(t=>t.id===o);if(r)return r;let i=I[o];if(i)return i;throw new m(a,e.map(t=>t.id))}var l=class extends Error{constructor(o,r){super(o);this.providerStr=r;this.name="ProviderError";}providerStr},O=new Map;function P(a,e){O.set(a,e);}function w(a){let e=a.split("/");if(e.length!==2)throw new l(`Invalid provider format: "${a}". Expected namespace/id (e.g., api/webllm)`,a);let[o,r]=e,i=O.get(o);if(i)return i(r,a);throw new l(`Unsupported provider namespace: "${o}". Register a factory with registerProviderFactory('${o}', factory).`,a)}var j=new Function("u","return import(u)"),C=class a{_agents;_config;_tools=new Map;_apiProviders=new Map;constructor(e,o){this._agents=new Map(e.map(r=>[r.id,r])),this._config=o;}static async fromConfig(e,o){let r=new a(e.agents??[],e),i=e.agents??[],t=s=>Array.isArray(s.provider)?s.provider[0]:s.provider,c=i.filter(s=>t(s)==="api/webllm"),g=i.filter(s=>t(s)==="api/openrouter");if(c.length>0&&await r._initWebLLM(c,o?.onProgress),g.length>0){if(!o?.openrouterApiKey)throw new Error("openrouterApiKey is required when using api/openrouter provider");r._initOpenRouter(g,o.openrouterApiKey);}return r._apiProviders.size>0&&P("api",(s,d)=>{let p=r._apiProviders.get(s);if(!p)throw new l(`Unknown api provider: ${s}`,d);return p}),r}async _initWebLLM(e,o){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not available. Chrome 113+ or Edge 113+ required.");let r=await j("https://esm.run/@mlc-ai/web-llm"),i=e[0]?.inline?.model??"gemma-2-2b-it-q4f16_1-MLC",t=await r.CreateMLCEngine(i,{initProgressCallback:o?g=>o(g):void 0}),c=[];this._apiProviders.set("webllm",{async query(g,s){let d=[];s?.systemPrompt&&d.push({role:"system",content:s.systemPrompt}),d.push(...c),d.push({role:"user",content:g});let p="",u=await t.chat.completions.create({messages:d,stream:true,temperature:.7,max_tokens:4096});for await(let y of u){let v=y.choices?.[0]?.delta?.content??"";p+=v,s?.onOutput&&s.onOutput(p,"stdout");}return c.push({role:"user",content:g}),c.push({role:"assistant",content:p}),p},async execute(g,s){return this.query(g,s)}});}_initOpenRouter(e,o){let r=e[0]?.inline?.model??"google/gemma-2-2b-it",i=[];this._apiProviders.set("openrouter",{async query(t,c){let g=[];c?.systemPrompt&&g.push({role:"system",content:c.systemPrompt}),g.push(...i),g.push({role:"user",content:t});let s=await fetch("https://openrouter.ai/api/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json"},body:JSON.stringify({model:c?.model||r,messages:g,stream:true})});if(!s.ok){let v=await s.text();throw new Error(`OpenRouter API error (${s.status}): ${v}`)}let d=s.body.getReader(),p=new TextDecoder,u="",y="";for(;;){let{done:v,value:M}=await d.read();if(v)break;y+=p.decode(M,{stream:true});let b=y.split(`
2
+ `);y=b.pop();for(let _ of b){let h=_.trim();if(!h||!h.startsWith("data: "))continue;let R=h.slice(6);if(R!=="[DONE]")try{let k=JSON.parse(R).choices?.[0]?.delta?.content??"";u+=k,k&&c?.onOutput&&c.onOutput(u,"stdout");}catch{}}}return i.push({role:"user",content:t}),i.push({role:"assistant",content:u}),u},async execute(t,c){return this.query(t,c)}});}get agents(){return this._agents}get config(){return this._config}get tools(){return this._tools}registerTool(e,o){this._tools.set(e,{name:e,...o});}async query(e,o,r){let i=Date.now(),t;try{t=x(e,Array.from(this._agents.values()));}catch(p){if(p instanceof m)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:p.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-i}};throw p}let c=Array.isArray(t.provider)?t.provider[0]??"api/default":t.provider,g=r?.provider??c,s=r?.model??t.inline?.model,d;try{d=w(g);}catch(p){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:p.message},meta:{agentId:t.id,provider:g,model:s,durationMs:Date.now()-i}}}try{return {ok:!0,data:await d.query(o,{model:s,context:r?.context,systemPrompt:t.inline?.system_prompt??t.inline?.prompt,onOutput:r?.onOutput?u=>r.onOutput(u):void 0}),meta:{agentId:t.id,provider:g,model:s,durationMs:Date.now()-i}}}catch(p){return {ok:false,data:"",error:{code:"QUERY_FAILED",message:p.message},meta:{agentId:t.id,provider:g,model:s,durationMs:Date.now()-i}}}}async execute(e,o,r){let i=Date.now(),t;try{t=x(e,Array.from(this._agents.values()));}catch(p){if(p instanceof m)return {ok:false,data:"",error:{code:"AGENT_NOT_FOUND",message:p.message},meta:{agentId:e.replace(/^@/,""),provider:"",durationMs:Date.now()-i}};throw p}let c=Array.isArray(t.provider)?t.provider[0]??"api/default":t.provider,g=r?.provider??c,s=r?.model??t.inline?.model,d;try{d=w(g);}catch(p){return {ok:false,data:"",error:{code:"PROVIDER_ERROR",message:p.message},meta:{agentId:t.id,provider:g,model:s,durationMs:Date.now()-i}}}try{return {ok:!0,data:await d.execute(o,{model:s,context:r?.context,systemPrompt:t.inline?.system_prompt??t.inline?.prompt}),meta:{agentId:t.id,provider:g,model:s,durationMs:Date.now()-i}}}catch(p){return {ok:false,data:"",error:{code:"EXECUTE_FAILED",message:p.message},meta:{agentId:t.id,provider:g,model:s,durationMs:Date.now()-i}}}}};var F=z.object({model:z.string().optional(),system_prompt:z.string().optional(),prompt:z.string().optional(),layout:z.union([z.string(),z.object({id:z.string(),props:z.record(z.unknown()).optional()})]).optional()}).catchall(z.unknown()),D=z.object({id:z.string(),name:z.string().optional(),role:z.string().optional(),team:z.string().optional(),provider:z.union([z.string(),z.array(z.string())]),working_directory:z.string().optional(),description:z.string().optional(),tags:z.array(z.string()).optional(),inline:F.optional()}).catchall(z.unknown()),E=z.object({agents:z.array(D).optional(),hooks:z.array(z.unknown()).optional(),settings:z.record(z.unknown()).optional(),skills:z.unknown().optional(),layouts:z.record(z.unknown()).optional(),documents:z.record(z.unknown()).optional()}).catchall(z.unknown());var f=class extends Error{constructor(o,r){super(o);this.cause=r;this.name="ConfigLoadError";}cause};function Q(a){if(!a||typeof a!="string"||!a.trim())throw new f("YAML content must be a non-empty string");let e;try{e=load(a);}catch(i){throw new f(`YAML parse error: ${i.message}`,i)}let o=$(e),r=E.safeParse(o);if(!r.success)throw new f(`Config validation error: ${r.error.message}`);return r.data}function $(a){if(!a||typeof a!="object")return {agents:[]};let e=a;if(e.agents&&typeof e.agents=="object"&&!Array.isArray(e.agents)){let o=e.agents,r=Object.entries(o).map(([i,t])=>({id:i,...t&&typeof t=="object"?t:{}}));return {...e,agents:r}}return e.agents?e:{...e,agents:[]}}var L="crewx:fs:",A=class{prefix;store;constructor(e){this.prefix=e?.prefix??L,this.store=e?.storage??new Map;}async readFile(e){let o=this.toKey(e),r=this.store.get(o);if(r===void 0)throw new Error(`BrowserFsAdapter: file not found: ${e}`);return r}async exists(e){return this.store.has(this.toKey(e))}resolvePath(...e){let o=e.map(c=>c.replace(/\\/g,"/")).join("/").replace(/\/+/g,"/"),r=o.split("/"),i=[];for(let c of r)c==="."||c===""||(c===".."?i.pop():i.push(c));let t=i.join("/");return o.startsWith("/")?`/${t}`:t}isAbsolute(e){return e.startsWith("/")}setItem(e,o){this.store.set(this.toKey(e),o);}removeItem(e){this.store.delete(this.toKey(e));}keys(){return Array.from(this.store.keys()).filter(e=>e.startsWith(this.prefix)).map(e=>e.slice(this.prefix.length))}toKey(e){return `${this.prefix}${e.replace(/\\/g,"/")}`}};export{A as BrowserFsAdapter,f as ConfigLoadError,C as Crewx,l as ProviderError,w as createProvider,Q as parseYamlContent,P as registerProviderFactory};
package/dist/index.d.ts CHANGED
@@ -1,6 +1,3 @@
1
- /**
2
- * @crewx/sdk public API surface.
3
- */
4
1
  export { Crewx } from './facade/Crewx';
5
2
  export type { ToolDefinition } from './facade/Crewx';
6
3
  export { CrewxPlugin } from './plugin';
@@ -68,4 +65,3 @@ export { createScopedAdapterStore } from './adapter/scoped-store';
68
65
  export { createAdapterContext, runInSyncWindow, getSyncWindowStore } from './adapter/context-builder';
69
66
  export type { SyncWindow, AdapterContextOptions } from './adapter/context-builder';
70
67
  export type { ChannelAdapterPluginSpec } from './adapter/plugin-helper';
71
- //# sourceMappingURL=index.d.ts.map