cmdr-agent 2.1.2 → 2.3.0

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 (139) hide show
  1. package/dist/bin/cmdr.js +4 -0
  2. package/dist/bin/cmdr.js.map +1 -1
  3. package/dist/package.json +1 -1
  4. package/dist/src/cli/args.d.ts +4 -0
  5. package/dist/src/cli/args.d.ts.map +1 -1
  6. package/dist/src/cli/args.js +15 -0
  7. package/dist/src/cli/args.js.map +1 -1
  8. package/dist/src/cli/commands.js +21 -1
  9. package/dist/src/cli/commands.js.map +1 -1
  10. package/dist/src/cli/ink/App.d.ts +2 -0
  11. package/dist/src/cli/ink/App.d.ts.map +1 -1
  12. package/dist/src/cli/ink/App.js +71 -7
  13. package/dist/src/cli/ink/App.js.map +1 -1
  14. package/dist/src/cli/repl.d.ts +4 -0
  15. package/dist/src/cli/repl.d.ts.map +1 -1
  16. package/dist/src/cli/repl.js +83 -20
  17. package/dist/src/cli/repl.js.map +1 -1
  18. package/dist/src/config/mcp-registry.d.ts +45 -0
  19. package/dist/src/config/mcp-registry.d.ts.map +1 -0
  20. package/dist/src/config/mcp-registry.js +156 -0
  21. package/dist/src/config/mcp-registry.js.map +1 -0
  22. package/dist/src/config/schema.d.ts +8 -8
  23. package/dist/src/core/agent-runner.d.ts +5 -0
  24. package/dist/src/core/agent-runner.d.ts.map +1 -1
  25. package/dist/src/core/agent-runner.js +34 -2
  26. package/dist/src/core/agent-runner.js.map +1 -1
  27. package/dist/src/core/agent.d.ts +2 -1
  28. package/dist/src/core/agent.d.ts.map +1 -1
  29. package/dist/src/core/agent.js +5 -1
  30. package/dist/src/core/agent.js.map +1 -1
  31. package/dist/src/core/content-replacement.d.ts +44 -0
  32. package/dist/src/core/content-replacement.d.ts.map +1 -0
  33. package/dist/src/core/content-replacement.js +67 -0
  34. package/dist/src/core/content-replacement.js.map +1 -0
  35. package/dist/src/core/event-bus.d.ts +129 -0
  36. package/dist/src/core/event-bus.d.ts.map +1 -0
  37. package/dist/src/core/event-bus.js +103 -0
  38. package/dist/src/core/event-bus.js.map +1 -0
  39. package/dist/src/core/hooks.d.ts +61 -0
  40. package/dist/src/core/hooks.d.ts.map +1 -0
  41. package/dist/src/core/hooks.js +140 -0
  42. package/dist/src/core/hooks.js.map +1 -0
  43. package/dist/src/core/orchestrator.d.ts +17 -1
  44. package/dist/src/core/orchestrator.d.ts.map +1 -1
  45. package/dist/src/core/orchestrator.js +95 -1
  46. package/dist/src/core/orchestrator.js.map +1 -1
  47. package/dist/src/core/permissions.d.ts +74 -3
  48. package/dist/src/core/permissions.d.ts.map +1 -1
  49. package/dist/src/core/permissions.js +230 -11
  50. package/dist/src/core/permissions.js.map +1 -1
  51. package/dist/src/core/presets.d.ts.map +1 -1
  52. package/dist/src/core/presets.js +1 -0
  53. package/dist/src/core/presets.js.map +1 -1
  54. package/dist/src/core/types.d.ts +22 -1
  55. package/dist/src/core/types.d.ts.map +1 -1
  56. package/dist/src/llm/anthropic.d.ts +27 -0
  57. package/dist/src/llm/anthropic.d.ts.map +1 -0
  58. package/dist/src/llm/anthropic.js +269 -0
  59. package/dist/src/llm/anthropic.js.map +1 -0
  60. package/dist/src/llm/ollama.d.ts.map +1 -1
  61. package/dist/src/llm/ollama.js +16 -4
  62. package/dist/src/llm/ollama.js.map +1 -1
  63. package/dist/src/llm/openai.d.ts +25 -0
  64. package/dist/src/llm/openai.d.ts.map +1 -0
  65. package/dist/src/llm/openai.js +299 -0
  66. package/dist/src/llm/openai.js.map +1 -0
  67. package/dist/src/llm/provider-factory.d.ts +35 -0
  68. package/dist/src/llm/provider-factory.d.ts.map +1 -0
  69. package/dist/src/llm/provider-factory.js +73 -0
  70. package/dist/src/llm/provider-factory.js.map +1 -0
  71. package/dist/src/memory/consolidation.d.ts +37 -0
  72. package/dist/src/memory/consolidation.d.ts.map +1 -0
  73. package/dist/src/memory/consolidation.js +148 -0
  74. package/dist/src/memory/consolidation.js.map +1 -0
  75. package/dist/src/memory/memory-manager.d.ts +39 -0
  76. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  77. package/dist/src/memory/memory-manager.js +96 -0
  78. package/dist/src/memory/memory-manager.js.map +1 -0
  79. package/dist/src/plugins/mcp-client.d.ts +14 -5
  80. package/dist/src/plugins/mcp-client.d.ts.map +1 -1
  81. package/dist/src/plugins/mcp-client.js +197 -43
  82. package/dist/src/plugins/mcp-client.js.map +1 -1
  83. package/dist/src/scheduling/task-scheduler.d.ts +51 -0
  84. package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
  85. package/dist/src/scheduling/task-scheduler.js +127 -0
  86. package/dist/src/scheduling/task-scheduler.js.map +1 -0
  87. package/dist/src/session/prompt-builder.d.ts +6 -0
  88. package/dist/src/session/prompt-builder.d.ts.map +1 -1
  89. package/dist/src/session/prompt-builder.js +21 -2
  90. package/dist/src/session/prompt-builder.js.map +1 -1
  91. package/dist/src/session/prompt-cache.d.ts +33 -0
  92. package/dist/src/session/prompt-cache.d.ts.map +1 -0
  93. package/dist/src/session/prompt-cache.js +54 -0
  94. package/dist/src/session/prompt-cache.js.map +1 -0
  95. package/dist/src/tools/built-in/cron-tools.d.ts +19 -0
  96. package/dist/src/tools/built-in/cron-tools.d.ts.map +1 -0
  97. package/dist/src/tools/built-in/cron-tools.js +86 -0
  98. package/dist/src/tools/built-in/cron-tools.js.map +1 -0
  99. package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
  100. package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
  101. package/dist/src/tools/built-in/diagnostics.js +119 -0
  102. package/dist/src/tools/built-in/diagnostics.js.map +1 -0
  103. package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
  104. package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
  105. package/dist/src/tools/built-in/git-worktree.js +75 -0
  106. package/dist/src/tools/built-in/git-worktree.js.map +1 -0
  107. package/dist/src/tools/built-in/index.d.ts +11 -1
  108. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  109. package/dist/src/tools/built-in/index.js +19 -2
  110. package/dist/src/tools/built-in/index.js.map +1 -1
  111. package/dist/src/tools/built-in/mcp-resource-tools.d.ts +16 -0
  112. package/dist/src/tools/built-in/mcp-resource-tools.d.ts.map +1 -0
  113. package/dist/src/tools/built-in/mcp-resource-tools.js +73 -0
  114. package/dist/src/tools/built-in/mcp-resource-tools.js.map +1 -0
  115. package/dist/src/tools/built-in/memory.d.ts +15 -0
  116. package/dist/src/tools/built-in/memory.d.ts.map +1 -0
  117. package/dist/src/tools/built-in/memory.js +58 -0
  118. package/dist/src/tools/built-in/memory.js.map +1 -0
  119. package/dist/src/tools/built-in/notebook.d.ts +22 -0
  120. package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
  121. package/dist/src/tools/built-in/notebook.js +207 -0
  122. package/dist/src/tools/built-in/notebook.js.map +1 -0
  123. package/dist/src/tools/built-in/plan-tools.d.ts +13 -0
  124. package/dist/src/tools/built-in/plan-tools.d.ts.map +1 -0
  125. package/dist/src/tools/built-in/plan-tools.js +42 -0
  126. package/dist/src/tools/built-in/plan-tools.js.map +1 -0
  127. package/dist/src/tools/built-in/task-tools.d.ts +22 -0
  128. package/dist/src/tools/built-in/task-tools.d.ts.map +1 -0
  129. package/dist/src/tools/built-in/task-tools.js +113 -0
  130. package/dist/src/tools/built-in/task-tools.js.map +1 -0
  131. package/dist/src/tools/built-in/todo-tool.d.ts +21 -0
  132. package/dist/src/tools/built-in/todo-tool.d.ts.map +1 -0
  133. package/dist/src/tools/built-in/todo-tool.js +52 -0
  134. package/dist/src/tools/built-in/todo-tool.js.map +1 -0
  135. package/dist/src/tools/built-in/web-search.d.ts +9 -0
  136. package/dist/src/tools/built-in/web-search.d.ts.map +1 -0
  137. package/dist/src/tools/built-in/web-search.js +89 -0
  138. package/dist/src/tools/built-in/web-search.js.map +1 -0
  139. package/package.json +1 -1
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Hooks — shell-based pre/post hooks for tool and command lifecycle.
3
+ *
4
+ * Hooks are defined in .cmdr.toml under [hooks]:
5
+ * [hooks]
6
+ * "pre:tool:bash" = "echo 'About to run bash tool'"
7
+ * "post:tool:file_write" = "./scripts/lint-changed.sh"
8
+ * "pre:command:commit" = "npm test"
9
+ * "session:end" = "./scripts/cleanup.sh"
10
+ *
11
+ * Hook types:
12
+ * pre:tool:<name> — runs before a tool executes (can block on non-zero exit)
13
+ * post:tool:<name> — runs after a tool completes
14
+ * pre:command:<name> — runs before a slash command
15
+ * post:command:<name> — runs after a slash command
16
+ * session:start — runs when session begins
17
+ * session:end — runs when session ends
18
+ *
19
+ * Hooks receive context via environment variables:
20
+ * CMDR_HOOK_TYPE, CMDR_TOOL_NAME, CMDR_TOOL_INPUT (JSON), CMDR_CWD
21
+ */
22
+ export interface HookConfig {
23
+ [pattern: string]: string;
24
+ }
25
+ export interface HookResult {
26
+ success: boolean;
27
+ output?: string;
28
+ error?: string;
29
+ }
30
+ export declare class HookManager {
31
+ private hooks;
32
+ private cwd;
33
+ constructor(hookConfig?: HookConfig, cwd?: string);
34
+ /** Register hooks from config. */
35
+ loadConfig(config: HookConfig): void;
36
+ /** Find matching hooks for a given event pattern. */
37
+ private findHooks;
38
+ /** Execute a hook command. Returns result with success/failure info. */
39
+ private executeHook;
40
+ /**
41
+ * Run pre-tool hooks. Returns false if a hook blocks execution (non-zero exit).
42
+ */
43
+ runPreTool(toolName: string, input: Record<string, unknown>): Promise<{
44
+ allowed: boolean;
45
+ output?: string;
46
+ }>;
47
+ /** Run post-tool hooks (informational — cannot block). */
48
+ runPostTool(toolName: string, input: Record<string, unknown>, success: boolean): Promise<void>;
49
+ /** Run session lifecycle hooks. */
50
+ runSessionHook(type: 'session:start' | 'session:end'): Promise<void>;
51
+ /** Wire hooks into the EventBus for automatic firing. */
52
+ wireEventBus(): void;
53
+ /** Get the number of registered hooks. */
54
+ get count(): number;
55
+ /** List all registered hook patterns. */
56
+ list(): Array<{
57
+ pattern: string;
58
+ command: string;
59
+ }>;
60
+ }
61
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,MAAM,WAAW,UAAU;IACzB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,GAAG,CAAQ;gBAEP,UAAU,GAAE,UAAe,EAAE,GAAG,GAAE,MAAsB;IAOpE,kCAAkC;IAClC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAMpC,qDAAqD;IACrD,OAAO,CAAC,SAAS;IAUjB,wEAAwE;IACxE,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBjD,0DAA0D;IACpD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAiBhB,mCAAmC;IAC7B,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1E,yDAAyD;IACzD,YAAY,IAAI,IAAI;IAepB,0CAA0C;IAC1C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,yCAAyC;IACzC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGpD"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Hooks — shell-based pre/post hooks for tool and command lifecycle.
3
+ *
4
+ * Hooks are defined in .cmdr.toml under [hooks]:
5
+ * [hooks]
6
+ * "pre:tool:bash" = "echo 'About to run bash tool'"
7
+ * "post:tool:file_write" = "./scripts/lint-changed.sh"
8
+ * "pre:command:commit" = "npm test"
9
+ * "session:end" = "./scripts/cleanup.sh"
10
+ *
11
+ * Hook types:
12
+ * pre:tool:<name> — runs before a tool executes (can block on non-zero exit)
13
+ * post:tool:<name> — runs after a tool completes
14
+ * pre:command:<name> — runs before a slash command
15
+ * post:command:<name> — runs after a slash command
16
+ * session:start — runs when session begins
17
+ * session:end — runs when session ends
18
+ *
19
+ * Hooks receive context via environment variables:
20
+ * CMDR_HOOK_TYPE, CMDR_TOOL_NAME, CMDR_TOOL_INPUT (JSON), CMDR_CWD
21
+ */
22
+ import { execSync } from 'node:child_process';
23
+ import { globalEventBus } from './event-bus.js';
24
+ const HOOK_TIMEOUT_MS = 30_000;
25
+ export class HookManager {
26
+ hooks = new Map();
27
+ cwd;
28
+ constructor(hookConfig = {}, cwd = process.cwd()) {
29
+ this.cwd = cwd;
30
+ for (const [pattern, command] of Object.entries(hookConfig)) {
31
+ this.hooks.set(pattern, command);
32
+ }
33
+ }
34
+ /** Register hooks from config. */
35
+ loadConfig(config) {
36
+ for (const [pattern, command] of Object.entries(config)) {
37
+ this.hooks.set(pattern, command);
38
+ }
39
+ }
40
+ /** Find matching hooks for a given event pattern. */
41
+ findHooks(pattern) {
42
+ const matches = [];
43
+ for (const [hookPattern, command] of this.hooks) {
44
+ if (hookPattern === pattern) {
45
+ matches.push({ pattern: hookPattern, command });
46
+ }
47
+ }
48
+ return matches;
49
+ }
50
+ /** Execute a hook command. Returns result with success/failure info. */
51
+ executeHook(command, env) {
52
+ try {
53
+ const output = execSync(command, {
54
+ cwd: this.cwd,
55
+ timeout: HOOK_TIMEOUT_MS,
56
+ stdio: ['pipe', 'pipe', 'pipe'],
57
+ env: { ...process.env, ...env },
58
+ }).toString().trim();
59
+ return { success: true, output };
60
+ }
61
+ catch (err) {
62
+ const message = err instanceof Error ? err.message : String(err);
63
+ return { success: false, error: message };
64
+ }
65
+ }
66
+ /**
67
+ * Run pre-tool hooks. Returns false if a hook blocks execution (non-zero exit).
68
+ */
69
+ async runPreTool(toolName, input) {
70
+ const hooks = this.findHooks(`pre:tool:${toolName}`);
71
+ if (hooks.length === 0)
72
+ return { allowed: true };
73
+ const env = {
74
+ CMDR_HOOK_TYPE: 'pre:tool',
75
+ CMDR_TOOL_NAME: toolName,
76
+ CMDR_TOOL_INPUT: JSON.stringify(input),
77
+ CMDR_CWD: this.cwd,
78
+ };
79
+ for (const hook of hooks) {
80
+ const result = this.executeHook(hook.command, env);
81
+ if (!result.success) {
82
+ return { allowed: false, output: result.error };
83
+ }
84
+ }
85
+ return { allowed: true };
86
+ }
87
+ /** Run post-tool hooks (informational — cannot block). */
88
+ async runPostTool(toolName, input, success) {
89
+ const hooks = this.findHooks(`post:tool:${toolName}`);
90
+ if (hooks.length === 0)
91
+ return;
92
+ const env = {
93
+ CMDR_HOOK_TYPE: 'post:tool',
94
+ CMDR_TOOL_NAME: toolName,
95
+ CMDR_TOOL_INPUT: JSON.stringify(input),
96
+ CMDR_TOOL_SUCCESS: String(success),
97
+ CMDR_CWD: this.cwd,
98
+ };
99
+ for (const hook of hooks) {
100
+ this.executeHook(hook.command, env);
101
+ }
102
+ }
103
+ /** Run session lifecycle hooks. */
104
+ async runSessionHook(type) {
105
+ const hooks = this.findHooks(type);
106
+ if (hooks.length === 0)
107
+ return;
108
+ const env = {
109
+ CMDR_HOOK_TYPE: type,
110
+ CMDR_CWD: this.cwd,
111
+ };
112
+ for (const hook of hooks) {
113
+ this.executeHook(hook.command, env);
114
+ }
115
+ }
116
+ /** Wire hooks into the EventBus for automatic firing. */
117
+ wireEventBus() {
118
+ globalEventBus.on('tool:before', async (data) => {
119
+ await this.runPreTool(data.name, data.input);
120
+ });
121
+ globalEventBus.on('tool:after', async (data) => {
122
+ await this.runPostTool(data.name, {}, !data.result.isError);
123
+ });
124
+ globalEventBus.on('session:start', async () => {
125
+ await this.runSessionHook('session:start');
126
+ });
127
+ globalEventBus.on('session:end', async () => {
128
+ await this.runSessionHook('session:end');
129
+ });
130
+ }
131
+ /** Get the number of registered hooks. */
132
+ get count() {
133
+ return this.hooks.size;
134
+ }
135
+ /** List all registered hook patterns. */
136
+ list() {
137
+ return Array.from(this.hooks.entries()).map(([pattern, command]) => ({ pattern, command }));
138
+ }
139
+ }
140
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/core/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAY/C,MAAM,eAAe,GAAG,MAAM,CAAA;AAE9B,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACjC,GAAG,CAAQ;IAEnB,YAAY,aAAyB,EAAE,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;QAClE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,UAAU,CAAC,MAAkB;QAC3B,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,qDAAqD;IAC7C,SAAS,CAAC,OAAe;QAC/B,MAAM,OAAO,GAAgD,EAAE,CAAA;QAC/D,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChD,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,wEAAwE;IAChE,WAAW,CACjB,OAAe,EACf,GAA2B;QAE3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;gBAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;aAChC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;YAEpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,QAAgB,EAChB,KAA8B;QAE9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAA;QACpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAEhD,MAAM,GAAG,GAA2B;YAClC,cAAc,EAAE,UAAU;YAC1B,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACtC,QAAQ,EAAE,IAAI,CAAC,GAAG;SACnB,CAAA;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;YACjD,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,KAA8B,EAC9B,OAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;QACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE9B,MAAM,GAAG,GAA2B;YAClC,cAAc,EAAE,WAAW;YAC3B,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACtC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC;YAClC,QAAQ,EAAE,IAAI,CAAC,GAAG;SACnB,CAAA;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,cAAc,CAAC,IAAqC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE9B,MAAM,GAAG,GAA2B;YAClC,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,IAAI,CAAC,GAAG;SACnB,CAAA;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,YAAY;QACV,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC9C,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QACF,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QACF,cAAc,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QACF,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,0CAA0C;IAC1C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,yCAAyC;IACzC,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IAC7F,CAAC;CACF"}
@@ -1,13 +1,22 @@
1
1
  /**
2
2
  * Orchestrator — top-level coordinator for multi-agent workflows.
3
3
  *
4
- * Provides runAgent(), runTeam(), and runTasks() entry points.
4
+ * Provides runAgent(), runTeam(), runTasks(), and coordinate() entry points.
5
+ * The coordinate() method adds a planning phase where an LLM decomposes a
6
+ * complex goal into tasks with dependencies before executing them.
5
7
  */
6
8
  import type { AgentConfig, AgentRunResult, TeamConfig, TeamRunResult, Task, LLMAdapter, OrchestratorConfig, TokenUsage } from './types.js';
7
9
  import type { ToolRegistry } from '../tools/registry.js';
8
10
  import type { PermissionManager } from './permissions.js';
9
11
  import { Team } from './team.js';
10
12
  import { TaskQueue } from '../communication/task-queue.js';
13
+ export interface CoordinateResult {
14
+ success: boolean;
15
+ taskResults: Map<string, AgentRunResult>;
16
+ totalTokenUsage: TokenUsage;
17
+ plannedTasks: number;
18
+ completedTasks: number;
19
+ }
11
20
  export declare class Orchestrator {
12
21
  private readonly adapter;
13
22
  private readonly toolRegistry;
@@ -30,6 +39,13 @@ export declare class Orchestrator {
30
39
  }>;
31
40
  /** Get the active team (if any). */
32
41
  getActiveTeam(): Team | undefined;
42
+ /**
43
+ * Coordinator mode: LLM-driven task decomposition + parallel execution.
44
+ * Uses the adapter to plan tasks, then executes them via runTasks().
45
+ */
46
+ coordinate(goal: string, agentConfigs: readonly AgentConfig[], options?: {
47
+ maxTokenBudget?: number;
48
+ }): Promise<CoordinateResult>;
33
49
  /** Get status of the active team. */
34
50
  getStatus(): {
35
51
  agents: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EACtD,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAqB,UAAU,EACpE,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAK1D,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAM;gBAGvB,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,YAAY,EAC1B,MAAM,GAAE,kBAAuB,EAC/B,GAAG,CAAC,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,iBAAiB;IASvC,oCAAoC;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB/E,wEAAwE;IAClE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkB3E;;;OAGG;IACG,QAAQ,CACZ,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,SAAS,WAAW,EAAE,GACnC,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC;IAwD5E,oCAAoC;IACpC,aAAa,IAAI,IAAI,GAAG,SAAS;IAIjC,qCAAqC;IACrC,SAAS,IAAI;QAAE,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;KAAE,GAAG,IAAI;IAKjH,OAAO,CAAC,IAAI;CAGb"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EACtD,IAAI,EAAE,UAAU,EAAE,kBAAkB,EAAqB,UAAU,EAEpE,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAsB1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACxC,eAAe,EAAE,UAAU,CAAA;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAmB;IACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAM;gBAGvB,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,YAAY,EAC1B,MAAM,GAAE,kBAAuB,EAC/B,GAAG,CAAC,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,iBAAiB;IASvC,oCAAoC;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB/E,wEAAwE;IAClE,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkB3E;;;OAGG;IACG,QAAQ,CACZ,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,SAAS,WAAW,EAAE,GACnC,OAAO,CAAC;QAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC;IAwD5E,oCAAoC;IACpC,aAAa,IAAI,IAAI,GAAG,SAAS;IAIjC;;;OAGG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GACpC,OAAO,CAAC,gBAAgB,CAAC;IAsF5B,qCAAqC;IACrC,SAAS,IAAI;QAAE,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;KAAE,GAAG,IAAI;IAKjH,OAAO,CAAC,IAAI;CAGb"}
@@ -1,13 +1,31 @@
1
1
  /**
2
2
  * Orchestrator — top-level coordinator for multi-agent workflows.
3
3
  *
4
- * Provides runAgent(), runTeam(), and runTasks() entry points.
4
+ * Provides runAgent(), runTeam(), runTasks(), and coordinate() entry points.
5
+ * The coordinate() method adds a planning phase where an LLM decomposes a
6
+ * complex goal into tasks with dependencies before executing them.
5
7
  */
6
8
  import { Agent } from './agent.js';
7
9
  import { Team } from './team.js';
8
10
  import { TaskQueue } from '../communication/task-queue.js';
9
11
  import { Semaphore } from '../scheduling/semaphore.js';
10
12
  const ZERO_USAGE = { input_tokens: 0, output_tokens: 0 };
13
+ const COORDINATOR_SYSTEM_PROMPT = `You are a task decomposition coordinator. Given a complex goal and a list of available agents, break the goal into concrete tasks.
14
+
15
+ Output a JSON array of tasks. Each task has:
16
+ - "id": unique short string (e.g. "t1", "t2")
17
+ - "title": brief task description (1 line)
18
+ - "description": detailed instructions for the agent
19
+ - "assignee": name of the agent best suited for this task
20
+ - "dependsOn": array of task IDs that must complete first (or empty array)
21
+
22
+ Rules:
23
+ - Minimize dependencies — parallelize when possible
24
+ - Each task should be self-contained enough for one agent to handle
25
+ - Assign tasks to agents based on their roles/specializations
26
+ - Keep the total number of tasks reasonable (2-8)
27
+
28
+ Output ONLY the JSON array, no other text.`;
11
29
  export class Orchestrator {
12
30
  adapter;
13
31
  toolRegistry;
@@ -96,6 +114,82 @@ export class Orchestrator {
96
114
  getActiveTeam() {
97
115
  return this.activeTeam;
98
116
  }
117
+ /**
118
+ * Coordinator mode: LLM-driven task decomposition + parallel execution.
119
+ * Uses the adapter to plan tasks, then executes them via runTasks().
120
+ */
121
+ async coordinate(goal, agentConfigs, options) {
122
+ this.emit({ type: 'message', data: 'Coordinator: planning tasks...' });
123
+ // Step 1: Plan — ask LLM to decompose the goal into tasks
124
+ const agentList = agentConfigs.map(a => `- ${a.name}: ${a.systemPrompt?.slice(0, 100) ?? 'general assistant'}`).join('\n');
125
+ const planMessages = [{
126
+ role: 'user',
127
+ content: [{
128
+ type: 'text',
129
+ text: `Available agents:\n${agentList}\n\nGoal: ${goal}`,
130
+ }],
131
+ }];
132
+ const planOptions = {
133
+ model: this.config.defaultModel ?? agentConfigs[0]?.model ?? 'qwen3',
134
+ systemPrompt: COORDINATOR_SYSTEM_PROMPT,
135
+ maxTokens: 1024,
136
+ temperature: 0.3,
137
+ };
138
+ let tasks;
139
+ let planUsage = ZERO_USAGE;
140
+ try {
141
+ const response = await this.adapter.chat(planMessages, planOptions);
142
+ planUsage = response.usage;
143
+ const text = response.content
144
+ .filter((b) => b.type === 'text')
145
+ .map(b => b.text)
146
+ .join('');
147
+ // Parse JSON from response (handle markdown code blocks)
148
+ const jsonMatch = text.match(/\[[\s\S]*\]/);
149
+ if (!jsonMatch)
150
+ throw new Error('No JSON array in planner response');
151
+ const parsed = JSON.parse(jsonMatch[0]);
152
+ tasks = parsed.map(t => ({
153
+ id: t.id,
154
+ title: t.title,
155
+ description: t.description,
156
+ status: 'pending',
157
+ assignee: t.assignee,
158
+ dependsOn: t.dependsOn,
159
+ createdAt: new Date(),
160
+ updatedAt: new Date(),
161
+ }));
162
+ this.emit({ type: 'message', data: `Coordinator: planned ${tasks.length} tasks` });
163
+ }
164
+ catch (err) {
165
+ // Fallback: single task assigned to first agent
166
+ tasks = [{
167
+ id: 't1',
168
+ title: goal.slice(0, 80),
169
+ description: goal,
170
+ status: 'pending',
171
+ assignee: agentConfigs[0]?.name,
172
+ createdAt: new Date(),
173
+ updatedAt: new Date(),
174
+ }];
175
+ this.emit({ type: 'message', data: 'Coordinator: plan failed, using single-task fallback' });
176
+ }
177
+ // Step 2: Execute
178
+ const { results: taskResults, totalUsage: execUsage } = await this.runTasks(tasks, agentConfigs);
179
+ const totalUsage = addUsage(planUsage, execUsage);
180
+ const completed = Array.from(taskResults.values()).filter(r => r.success).length;
181
+ // Check token budget
182
+ if (options?.maxTokenBudget && (totalUsage.input_tokens + totalUsage.output_tokens) > options.maxTokenBudget) {
183
+ this.emit({ type: 'message', data: 'Coordinator: token budget exceeded' });
184
+ }
185
+ return {
186
+ success: completed === tasks.length,
187
+ taskResults,
188
+ totalTokenUsage: totalUsage,
189
+ plannedTasks: tasks.length,
190
+ completedTasks: completed,
191
+ };
192
+ }
99
193
  /** Get status of the active team. */
100
194
  getStatus() {
101
195
  if (!this.activeTeam)
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,33 @@
3
3
  *
4
4
  * Classifies tools by risk level and gates execution on user approval
5
5
  * depending on the current permission mode.
6
+ *
7
+ * Supports fine-grained rules:
8
+ * - Glob patterns for file paths (e.g. "src/**" allows all file writes under src/)
9
+ * - Prefix matching for bash commands (e.g. "npm test" allows "npm test --watch")
6
10
  */
7
11
  import type { PermissionMode, ToolRiskLevel, ApprovalCallback } from './types.js';
12
+ /**
13
+ * Pattern rule: "Tool(specifier)" format.
14
+ * Examples:
15
+ * allow: ["bash(npm run *)", "file_read(src/**)"]
16
+ * deny: ["bash(curl *)", "file_read(.env)"]
17
+ * ask: ["bash(git push *)"]
18
+ *
19
+ * Priority: deny > ask > allow (most restrictive wins).
20
+ */
21
+ export interface PermissionRule {
22
+ /** 'allow' auto-approves, 'deny' auto-blocks, 'ask' always prompts. */
23
+ action: 'allow' | 'deny' | 'ask';
24
+ /** Tool name to match. */
25
+ tool: string;
26
+ /** Optional glob pattern for the tool's primary argument. */
27
+ pattern?: string;
28
+ }
29
+ /**
30
+ * Parse a permission rule string like "bash(npm run *)" into structured form.
31
+ */
32
+ export declare function parsePermissionRule(rule: string, action: 'allow' | 'deny' | 'ask'): PermissionRule;
8
33
  export declare function classifyTool(toolName: string): ToolRiskLevel;
9
34
  export declare class PermissionManager {
10
35
  private mode;
@@ -12,22 +37,68 @@ export declare class PermissionManager {
12
37
  private sessionAllowed;
13
38
  /** Tools persisted in ~/.cmdr/settings.json. */
14
39
  private persistedAllowed;
40
+ /** Path-based rules for file tools. */
41
+ private pathRules;
42
+ /** Command-prefix rules for bash tool. */
43
+ private bashRules;
44
+ /** Pattern-based permission rules (Tool(pattern) syntax). */
45
+ private permissionRules;
46
+ /** Project root for resolving relative paths in rules. */
47
+ private projectRoot;
15
48
  constructor(mode?: PermissionMode);
49
+ setProjectRoot(root: string): void;
16
50
  /** Load persisted settings from ~/.cmdr/settings.json. */
17
51
  loadSettings(): Promise<void>;
18
52
  /** Save current persisted allow-list to disk. */
19
53
  private saveSettings;
20
54
  getMode(): PermissionMode;
21
55
  setMode(mode: PermissionMode): void;
56
+ /** Add a path rule (e.g. allow writes to "src/**"). */
57
+ addPathRule(pattern: string, allow?: boolean): void;
58
+ /** Add a bash command rule (e.g. allow "npm test"). */
59
+ addBashRule(prefix: string, allow?: boolean): void;
60
+ /** Add a pattern permission rule (e.g. "bash(npm run *)" with action "allow"). */
61
+ addPermissionRule(ruleString: string, action: 'allow' | 'deny' | 'ask'): void;
62
+ /** Load permission rules from config format: { allow: [...], deny: [...], ask: [...] } */
63
+ loadPermissionRules(config: {
64
+ allow?: string[];
65
+ deny?: string[];
66
+ ask?: string[];
67
+ }): void;
68
+ /**
69
+ * Check if a specific file path is allowed by path rules.
70
+ * Returns true (allowed), false (denied), or undefined (no matching rule).
71
+ */
72
+ private checkPathRules;
73
+ /**
74
+ * Check if a bash command matches any bash rules.
75
+ * Returns true (allowed), false (denied), or undefined (no matching rule).
76
+ */
77
+ private checkBashRules;
78
+ /**
79
+ * Check fine-grained rules for a specific tool invocation.
80
+ * Returns true if auto-approved by rules, false otherwise.
81
+ */
82
+ private checkFineGrainedRules;
83
+ /**
84
+ * Check pattern-based permission rules.
85
+ * Priority: deny > ask > allow (most restrictive wins).
86
+ * Returns 'allow', 'deny', 'ask', or undefined if no matching rule.
87
+ */
88
+ private checkPermissionRules;
89
+ /**
90
+ * Extract the primary argument from tool input for pattern matching.
91
+ * Each tool type uses a different "primary" argument.
92
+ */
93
+ private getPrimaryArg;
22
94
  /**
23
95
  * Decide whether a tool call should proceed.
24
- *
25
- * Returns true if auto-approved, false if the user must be prompted.
26
96
  */
27
- needsApproval(toolName: string): boolean;
97
+ needsApproval(toolName: string, input?: Record<string, unknown>): boolean;
28
98
  /**
29
99
  * Gate a tool call. If approval is needed, calls the approvalCallback.
30
100
  * Returns the decision (allow/deny). Handles 'allow-always' by recording it.
101
+ * Pattern deny rules auto-block without prompting.
31
102
  */
32
103
  gate(toolName: string, input: Record<string, unknown>, approvalCallback: ApprovalCallback): Promise<'allow' | 'deny'>;
33
104
  /** Reset session-allowed set (e.g. on /clear). */
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/core/permissions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAA;AA6BnG,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAI5D;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAgB;IAC5B,+DAA+D;IAC/D,OAAO,CAAC,cAAc,CAAoB;IAC1C,gDAAgD;IAChD,OAAO,CAAC,gBAAgB,CAAoB;gBAEhC,IAAI,GAAE,cAAyB;IAI3C,0DAA0D;IACpD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBnC,iDAAiD;YACnC,YAAY;IAa1B,OAAO,IAAI,cAAc;IAIzB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAMnC;;;;OAIG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAmBxC;;;OAGG;IACG,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;IAkB5B,kDAAkD;IAClD,YAAY,IAAI,IAAI;CAGrB"}
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/core/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAiCnG;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;IAChC,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,cAAc,CAUlG;AAkCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAI5D;AAyBD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,IAAI,CAAgB;IAC5B,+DAA+D;IAC/D,OAAO,CAAC,cAAc,CAAoB;IAC1C,gDAAgD;IAChD,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,uCAAuC;IACvC,OAAO,CAAC,SAAS,CAAiB;IAClC,0CAA0C;IAC1C,OAAO,CAAC,SAAS,CAAiB;IAClC,6DAA6D;IAC7D,OAAO,CAAC,eAAe,CAAuB;IAC9C,0DAA0D;IAC1D,OAAO,CAAC,WAAW,CAAwB;gBAE/B,IAAI,GAAE,cAAyB;IAI3C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,0DAA0D;IACpD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BnC,iDAAiD;YACnC,YAAY;IAgB1B,OAAO,IAAI,cAAc;IAIzB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,uDAAuD;IACvD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,OAAc,GAAG,IAAI;IAIzD,uDAAuD;IACvD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,OAAc,GAAG,IAAI;IAIxD,kFAAkF;IAClF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI;IAI7E,0FAA0F;IAC1F,mBAAmB,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAYxF;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAWtB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAmC5B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAsBzE;;;;OAIG;IACG,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;IAsB5B,kDAAkD;IAClD,YAAY,IAAI,IAAI;CAGrB"}