@agentteams/runner 0.0.95 → 0.0.97

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 (34) hide show
  1. package/dist/handlers/trigger-handler.js +5 -2
  2. package/dist/handlers/trigger-handler.js.map +1 -1
  3. package/dist/handlers/trigger-handler.test.js +1 -0
  4. package/dist/handlers/trigger-handler.test.js.map +1 -1
  5. package/dist/poller.test.js +1 -0
  6. package/dist/poller.test.js.map +1 -1
  7. package/dist/runners/capabilities.d.ts +23 -2
  8. package/dist/runners/capabilities.js +25 -9
  9. package/dist/runners/capabilities.js.map +1 -1
  10. package/dist/runners/capabilities.test.js +55 -2
  11. package/dist/runners/capabilities.test.js.map +1 -1
  12. package/dist/runners/claude-code.d.ts +4 -1
  13. package/dist/runners/claude-code.js +35 -21
  14. package/dist/runners/claude-code.js.map +1 -1
  15. package/dist/runners/claude-code.test.js +48 -1
  16. package/dist/runners/claude-code.test.js.map +1 -1
  17. package/dist/runners/codex.d.ts +2 -2
  18. package/dist/runners/codex.js +18 -6
  19. package/dist/runners/codex.js.map +1 -1
  20. package/dist/runners/codex.test.js +44 -0
  21. package/dist/runners/codex.test.js.map +1 -1
  22. package/dist/runners/copilot-cli.d.ts +6 -0
  23. package/dist/runners/copilot-cli.js +228 -0
  24. package/dist/runners/copilot-cli.js.map +1 -0
  25. package/dist/runners/copilot-cli.test.d.ts +1 -0
  26. package/dist/runners/copilot-cli.test.js +39 -0
  27. package/dist/runners/copilot-cli.test.js.map +1 -0
  28. package/dist/runners/index.js +3 -0
  29. package/dist/runners/index.js.map +1 -1
  30. package/dist/runners/index.test.js +2 -0
  31. package/dist/runners/index.test.js.map +1 -1
  32. package/dist/runners/types.d.ts +1 -0
  33. package/dist/types.d.ts +1 -0
  34. package/package.json +1 -1
@@ -133,4 +133,48 @@ test('resolveCodexSandboxLevel reads from process.env when no argument given', (
133
133
  }
134
134
  }
135
135
  });
136
+ test('buildCodexExecArgs injects exactly one model_reasoning_effort override when effort is set', () => {
137
+ const args = buildCodexExecArgs('hello', 'gpt-5-codex', 'workspace-write', false, 'high');
138
+ assert.deepEqual(args, [
139
+ '-a',
140
+ 'never',
141
+ 'exec',
142
+ '-s',
143
+ 'workspace-write',
144
+ '-c',
145
+ 'sandbox_workspace_write.network_access=true',
146
+ '-c',
147
+ 'model_reasoning_effort="high"',
148
+ '--model',
149
+ 'gpt-5-codex',
150
+ 'hello',
151
+ ]);
152
+ assert.equal(args.filter((arg) => arg.startsWith('model_reasoning_effort=')).length, 1);
153
+ });
154
+ test('buildCodexExecArgs keeps both fast mode and effort overrides when combined', () => {
155
+ const args = buildCodexExecArgs('hello', 'gpt-5-codex', 'workspace-write', true, 'xhigh');
156
+ assert.ok(args.includes('features.fast_mode=true'));
157
+ assert.ok(args.includes('service_tier="fast"'));
158
+ assert.ok(args.includes('model_reasoning_effort="xhigh"'));
159
+ // prompt must remain the final positional arg
160
+ assert.equal(args[args.length - 1], 'hello');
161
+ });
162
+ test('buildCodexExecArgs omits effort override when effort is missing or blank', () => {
163
+ const withoutEffort = buildCodexExecArgs('hello', 'gpt-5-codex', 'workspace-write', false);
164
+ const blankEffort = buildCodexExecArgs('hello', 'gpt-5-codex', 'workspace-write', false, ' ');
165
+ assert.equal(withoutEffort.filter((arg) => arg.startsWith('model_reasoning_effort=')).length, 0);
166
+ assert.deepEqual(blankEffort, withoutEffort);
167
+ });
168
+ test('toPowerShellEncodedCommand includes model_reasoning_effort override when effort is set', () => {
169
+ const encoded = toPowerShellEncodedCommand('C:\\codex.cmd', 'C:\\repo\\.agentteams\\runner\\tmp\\t.prompt.txt', 'gpt-5.5', 'workspace-write', true, 'high');
170
+ const decoded = decodeEncodedCommand(encoded);
171
+ assert.ok(decoded.includes('model_reasoning_effort="high"'));
172
+ assert.ok(decoded.includes('features.fast_mode=true'));
173
+ assert.ok(decoded.includes("'--model' 'gpt-5.5'"));
174
+ });
175
+ test('toPowerShellEncodedCommand omits effort override when effort is missing', () => {
176
+ const encoded = toPowerShellEncodedCommand('C:\\codex.cmd', 'C:\\repo\\.agentteams\\runner\\tmp\\t.prompt.txt', 'gpt-5.5', 'workspace-write', false);
177
+ const decoded = decodeEncodedCommand(encoded);
178
+ assert.ok(!decoded.includes('model_reasoning_effort'));
179
+ });
136
180
  //# sourceMappingURL=codex.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.test.js","sourceRoot":"","sources":["../../src/runners/codex.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.test.js","sourceRoot":"","sources":["../../src/runners/codex.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAEpB,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAE7G,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAClF,CAAC;YAAS,CAAC;QACT,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;IAC3F,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QAEhD,MAAM,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAC,WAAW,CAAC,EAAE,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1F,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC1D,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,CAAC,EAAE;QAC9E,IAAI;QACJ,OAAO;QACP,MAAM;QACN,IAAI;QACJ,iBAAiB;QACjB,IAAI;QACJ,6CAA6C;QAC7C,SAAS;QACT,aAAa;QACb,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;IACzE,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE;QAChF,IAAI;QACJ,OAAO;QACP,MAAM;QACN,IAAI;QACJ,iBAAiB;QACjB,IAAI;QACJ,6CAA6C;QAC7C,IAAI;QACJ,yBAAyB;QACzB,IAAI;QACJ,qBAAqB;QACrB,SAAS;QACT,SAAS;QACT,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;QACzD,IAAI;QACJ,OAAO;QACP,MAAM;QACN,4CAA4C;QAC5C,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,MAAM,cAAc,GAAG,4DAA4D,CAAC;IACpF,MAAM,OAAO,GAAG,0BAA0B,CACxC,2BAA2B,EAC3B,cAAc,EACd,aAAa,EACb,iBAAiB,CAClB,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9C,0CAA0C;IAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1C,iDAAiD;IACjD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC/E,MAAM,cAAc,GAAG,4DAA4D,CAAC;IACpF,+DAA+D;IAC/D,MAAM,YAAY,GAAG,0BAA0B,CAAC,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACnH,MAAM,WAAW,GAAG,0BAA0B,CAAC,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAElH,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACxC,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACnF,MAAM,OAAO,GAAG,0BAA0B,CACxC,eAAe,EACf,kDAAkD,EAClD,SAAS,EACT,iBAAiB,EACjB,IAAI,CACL,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8EAA8E,EAAE,GAAG,EAAE;IACxF,MAAM,OAAO,GAAG,0BAA0B,CACxC,eAAe,EACf,kDAAkD,EAClD,IAAI,EACJ,KAAK,CACN,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAC1E,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,KAAK,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,iBAAiB,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAE5D,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC9D,CAAC;YAAS,CAAC;QACT,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,QAAQ,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,GAAG,EAAE;IACrG,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1F,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;QACrB,IAAI;QACJ,OAAO;QACP,MAAM;QACN,IAAI;QACJ,iBAAiB;QACjB,IAAI;QACJ,6CAA6C;QAC7C,IAAI;QACJ,+BAA+B;QAC/B,SAAS;QACT,aAAa;QACb,OAAO;KACR,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE;IACtF,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1F,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC3D,8CAA8C;IAC9C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/F,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wFAAwF,EAAE,GAAG,EAAE;IAClG,MAAM,OAAO,GAAG,0BAA0B,CACxC,eAAe,EACf,kDAAkD,EAClD,SAAS,EACT,iBAAiB,EACjB,IAAI,EACJ,MAAM,CACP,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACnF,MAAM,OAAO,GAAG,0BAA0B,CACxC,eAAe,EACf,kDAAkD,EAClD,SAAS,EACT,iBAAiB,EACjB,KAAK,CACN,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Runner, RunnerOptions, RunResult } from './types.js';
2
+ export declare const buildCopilotCliArgs: (prompt: string, model?: string | null) => string[];
3
+ export declare const toPowerShellEncodedCommand: (resolvedExecutablePath: string, promptFilePath: string, model?: string | null) => string;
4
+ export declare class CopilotCliRunner implements Runner {
5
+ run(opts: RunnerOptions): Promise<RunResult>;
6
+ }
@@ -0,0 +1,228 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { createWriteStream } from 'node:fs';
3
+ import { mkdir, rm, writeFile } from 'node:fs/promises';
4
+ import { platform } from 'node:os';
5
+ import { dirname, join } from 'node:path';
6
+ import { describeExecutableResolution, resolveExecutablePathWithPreference, spawnExecutable } from '../executable.js';
7
+ import { logger } from '../logger.js';
8
+ import { setupCloseWatchdog, terminateRunnerChild } from './process-control.js';
9
+ const PROMPT_PREVIEW_MAX = 500;
10
+ const OUTPUT_PREVIEW_MAX = 400;
11
+ const OUTPUT_CAPTURE_MAX = 200_000;
12
+ export const buildCopilotCliArgs = (prompt, model) => {
13
+ const modelArgs = model && model !== 'default' ? ['--model', model] : [];
14
+ return ['-p', prompt, '--allow-all', '--no-ask-user', ...modelArgs];
15
+ };
16
+ const toPowerShellLiteral = (value) => `'${value.replaceAll("'", "''")}'`;
17
+ export const toPowerShellEncodedCommand = (resolvedExecutablePath, promptFilePath, model) => {
18
+ const modelSegment = model && model !== 'default' ? ` '--model' ${toPowerShellLiteral(model)}` : '';
19
+ const scriptContent = [
20
+ "$ErrorActionPreference = 'Stop'",
21
+ '$utf8NoBom = [System.Text.UTF8Encoding]::new($false)',
22
+ '[Console]::InputEncoding = $utf8NoBom',
23
+ '[Console]::OutputEncoding = $utf8NoBom',
24
+ '$OutputEncoding = $utf8NoBom',
25
+ 'chcp 65001 > $null',
26
+ `$promptText = [System.IO.File]::ReadAllText(${toPowerShellLiteral(promptFilePath)}, $utf8NoBom)`,
27
+ `& ${toPowerShellLiteral(resolvedExecutablePath)} '-p' $promptText '--allow-all' '--no-ask-user'${modelSegment}`,
28
+ ].join('\r\n');
29
+ return Buffer.from(scriptContent, 'utf16le').toString('base64');
30
+ };
31
+ const toPromptPreview = (prompt) => prompt.length <= PROMPT_PREVIEW_MAX ? prompt : `${prompt.slice(0, PROMPT_PREVIEW_MAX)}...`;
32
+ const toOutputPreview = (chunk) => {
33
+ const text = (typeof chunk === 'string' ? chunk : String(chunk)).trim();
34
+ return text.length <= OUTPUT_PREVIEW_MAX ? text : `${text.slice(0, OUTPUT_PREVIEW_MAX)}...`;
35
+ };
36
+ export class CopilotCliRunner {
37
+ async run(opts) {
38
+ if (!opts.authPath || opts.authPath.trim().length === 0) {
39
+ logger.error('authPath is missing for trigger');
40
+ return { exitCode: 1, errorMessage: 'authPath is missing for trigger' };
41
+ }
42
+ const cwd = opts.authPath;
43
+ const logPath = join(cwd, '.agentteams', 'runner', 'log', `${opts.triggerId}.log`);
44
+ await mkdir(dirname(logPath), { recursive: true });
45
+ const isWindows = platform() === 'win32';
46
+ const resolvedExecutablePath = isWindows
47
+ ? resolveExecutablePathWithPreference('copilot', ['copilot.cmd', 'copilot'])
48
+ : resolveExecutablePathWithPreference('copilot', ['copilot']);
49
+ // Windows에서는 prompt를 PowerShell 코드에 넣지 않는다. here-string 경계를 탈출한 prompt가
50
+ // Runner 계정으로 실행되는 것을 막고, 긴 prompt의 command-line 길이 제한도 피한다.
51
+ const windowsPromptFilePath = isWindows
52
+ ? join(cwd, '.agentteams', 'runner', 'tmp', `${opts.triggerId}.prompt.txt`)
53
+ : null;
54
+ if (windowsPromptFilePath) {
55
+ await mkdir(dirname(windowsPromptFilePath), { recursive: true });
56
+ await writeFile(windowsPromptFilePath, opts.prompt, { encoding: 'utf8' });
57
+ }
58
+ const windowsEncodedCommand = windowsPromptFilePath
59
+ ? toPowerShellEncodedCommand(resolvedExecutablePath, windowsPromptFilePath, opts.model)
60
+ : null;
61
+ const executableInfo = describeExecutableResolution('copilot', {
62
+ platform: () => (isWindows ? 'win32' : platform()),
63
+ });
64
+ const args = buildCopilotCliArgs(opts.prompt, opts.model);
65
+ logger.info('Runner prompt', {
66
+ triggerId: opts.triggerId,
67
+ promptLength: opts.prompt.length,
68
+ promptPreview: toPromptPreview(opts.prompt),
69
+ requestedCommand: executableInfo.requestedCommand,
70
+ resolvedExecutablePath,
71
+ platform: executableInfo.platform,
72
+ shell: executableInfo.shell,
73
+ detached: !isWindows,
74
+ windowsWrapper: isWindows ? 'powershell.exe -EncodedCommand' : null,
75
+ });
76
+ const env = {
77
+ ...process.env,
78
+ AGENTTEAMS_API_KEY: opts.apiKey,
79
+ AGENTTEAMS_API_URL: opts.apiUrl,
80
+ AGENTTEAMS_TEAM_ID: opts.teamId,
81
+ AGENTTEAMS_PROJECT_ID: opts.projectId,
82
+ AGENTTEAMS_AGENT_NAME: opts.agentConfigId,
83
+ };
84
+ const child = isWindows
85
+ ? spawn('powershell.exe', ['-NoLogo', '-NonInteractive', '-ExecutionPolicy', 'Bypass', '-EncodedCommand', windowsEncodedCommand ?? ''], { cwd, detached: false, shell: false, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], env })
86
+ : spawnExecutable('copilot', args, { cwd, detached: true, stdio: ['ignore', 'pipe', 'pipe'], env });
87
+ const logStream = createWriteStream(logPath, { flags: 'a' });
88
+ logStream.on('error', (error) => logger.warn('Runner log stream error', { triggerId: opts.triggerId, error: error.message }));
89
+ child.stdout?.pipe(logStream);
90
+ child.stderr?.pipe(logStream);
91
+ let lastOutput = '';
92
+ let lastErrorOutput = '';
93
+ let outputText = '';
94
+ const appendOutputText = (chunk) => {
95
+ if (outputText.length < OUTPUT_CAPTURE_MAX) {
96
+ outputText += chunk.slice(0, OUTPUT_CAPTURE_MAX - outputText.length);
97
+ }
98
+ };
99
+ const idleTimer = { reset: () => { } };
100
+ child.stdout?.on('data', (chunk) => {
101
+ const rawOutput = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
102
+ appendOutputText(rawOutput);
103
+ const output = toOutputPreview(rawOutput);
104
+ if (output.length > 0) {
105
+ lastOutput = output;
106
+ idleTimer.reset();
107
+ opts.onStdoutChunk?.(output);
108
+ logger.info('Runner stdout', { triggerId: opts.triggerId, pid: child.pid, output });
109
+ }
110
+ });
111
+ child.stderr?.on('data', (chunk) => {
112
+ const rawOutput = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
113
+ appendOutputText(rawOutput);
114
+ const output = toOutputPreview(rawOutput);
115
+ if (output.length > 0) {
116
+ lastOutput = output;
117
+ lastErrorOutput = output;
118
+ idleTimer.reset();
119
+ opts.onStderrChunk?.(output);
120
+ logger.warn('Runner stderr', { triggerId: opts.triggerId, pid: child.pid, output });
121
+ }
122
+ });
123
+ logger.info('Runner started', { triggerId: opts.triggerId, cwd, logPath, pid: child.pid });
124
+ const removeWindowsPromptFile = async () => {
125
+ if (!windowsPromptFilePath)
126
+ return;
127
+ try {
128
+ await rm(windowsPromptFilePath, { force: true });
129
+ }
130
+ catch (error) {
131
+ logger.warn('Failed to remove Windows prompt temp file', {
132
+ triggerId: opts.triggerId,
133
+ promptFilePath: windowsPromptFilePath,
134
+ error: error instanceof Error ? error.message : String(error),
135
+ });
136
+ }
137
+ };
138
+ return await new Promise((resolve) => {
139
+ let finished = false;
140
+ let timedOut = false;
141
+ let idleTimedOut = false;
142
+ let cancelled = false;
143
+ let idleTimeoutId = null;
144
+ const startIdleTimeout = () => {
145
+ if (idleTimeoutId)
146
+ clearTimeout(idleTimeoutId);
147
+ idleTimeoutId = setTimeout(() => {
148
+ idleTimedOut = true;
149
+ timedOut = true;
150
+ logger.warn('Runner idle timeout reached; no output for configured idle period', {
151
+ triggerId: opts.triggerId,
152
+ idleTimeoutMs: opts.idleTimeoutMs,
153
+ });
154
+ terminateRunnerChild(child, isWindows, opts.triggerId, 'timeout');
155
+ }, opts.idleTimeoutMs);
156
+ };
157
+ idleTimer.reset = startIdleTimeout;
158
+ startIdleTimeout();
159
+ const handleAbort = () => {
160
+ cancelled = true;
161
+ terminateRunnerChild(child, isWindows, opts.triggerId, 'cancel');
162
+ };
163
+ const cleanup = () => {
164
+ if (finished)
165
+ return;
166
+ finished = true;
167
+ if (idleTimeoutId)
168
+ clearTimeout(idleTimeoutId);
169
+ idleTimer.reset = () => { };
170
+ logStream.end();
171
+ void removeWindowsPromptFile();
172
+ if (opts.signal)
173
+ opts.signal.removeEventListener('abort', handleAbort);
174
+ };
175
+ const timeoutId = setTimeout(() => {
176
+ timedOut = true;
177
+ terminateRunnerChild(child, isWindows, opts.triggerId, 'timeout');
178
+ }, opts.timeoutMs);
179
+ if (opts.signal?.aborted)
180
+ handleAbort();
181
+ else if (opts.signal)
182
+ opts.signal.addEventListener('abort', handleAbort, { once: true });
183
+ child.on('error', (error) => {
184
+ clearTimeout(timeoutId);
185
+ cleanup();
186
+ logger.error('Runner process launch failed', { triggerId: opts.triggerId, error: error.message });
187
+ resolve({ exitCode: 1, lastOutput, outputText: outputText.trim() || undefined, errorMessage: error.message });
188
+ });
189
+ const closeWatchdog = setupCloseWatchdog(child, opts.triggerId);
190
+ child.on('close', (code) => {
191
+ closeWatchdog.cancel();
192
+ clearTimeout(timeoutId);
193
+ cleanup();
194
+ logger.info('Runner process closed', { triggerId: opts.triggerId, pid: child.pid, exitCode: code, timedOut });
195
+ const finalizedOutputText = outputText.trim() || undefined;
196
+ if (timedOut) {
197
+ resolve({
198
+ exitCode: 1,
199
+ idleTimedOut,
200
+ lastOutput,
201
+ outputText: finalizedOutputText,
202
+ errorMessage: idleTimedOut
203
+ ? `Runner idle timed out after ${Math.round(opts.idleTimeoutMs / 60_000)}m of no output`
204
+ : `Runner fail-safe timed out after ${Math.round(opts.timeoutMs / 3_600_000)}h`,
205
+ });
206
+ return;
207
+ }
208
+ if (cancelled) {
209
+ resolve({
210
+ exitCode: 1,
211
+ cancelled: true,
212
+ lastOutput,
213
+ outputText: finalizedOutputText,
214
+ errorMessage: 'Runner cancelled by user',
215
+ });
216
+ return;
217
+ }
218
+ resolve({
219
+ exitCode: code ?? 1,
220
+ lastOutput,
221
+ outputText: finalizedOutputText,
222
+ errorMessage: code === 0 ? undefined : lastErrorOutput || lastOutput || `Runner exited with code ${code ?? 1}`,
223
+ });
224
+ });
225
+ });
226
+ }
227
+ }
228
+ //# sourceMappingURL=copilot-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.js","sourceRoot":"","sources":["../../src/runners/copilot-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,39 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { buildCopilotCliArgs, toPowerShellEncodedCommand } from './copilot-cli.js';
4
+ test('buildCopilotCliArgs sends the prompt inline and enables unattended allow-all execution', () => {
5
+ assert.deepEqual(buildCopilotCliArgs('hello', null), ['-p', 'hello', '--allow-all', '--no-ask-user']);
6
+ });
7
+ test('buildCopilotCliArgs leaves the client default model to Copilot CLI', () => {
8
+ assert.deepEqual(buildCopilotCliArgs('hello', 'default'), ['-p', 'hello', '--allow-all', '--no-ask-user']);
9
+ });
10
+ test('buildCopilotCliArgs appends a requested model', () => {
11
+ assert.deepEqual(buildCopilotCliArgs('hello', 'gpt-5'), [
12
+ '-p',
13
+ 'hello',
14
+ '--allow-all',
15
+ '--no-ask-user',
16
+ '--model',
17
+ 'gpt-5',
18
+ ]);
19
+ });
20
+ const decodePowerShellCommand = (encoded) => Buffer.from(encoded, 'base64').toString('utf16le');
21
+ test('toPowerShellEncodedCommand reads the prompt from a file and preserves unattended arguments', () => {
22
+ const promptFilePath = 'C:/repo/.agentteams/runner/tmp/trigger-123.prompt.txt';
23
+ const script = decodePowerShellCommand(toPowerShellEncodedCommand('C:/copilot.cmd', promptFilePath, 'gpt-5'));
24
+ assert.match(script, /\[System\.IO\.File\]::ReadAllText/);
25
+ assert.match(script, /'--allow-all' '--no-ask-user' '--model' 'gpt-5'/);
26
+ assert.ok(script.includes(promptFilePath));
27
+ });
28
+ test('toPowerShellEncodedCommand omits the default model', () => {
29
+ const script = decodePowerShellCommand(toPowerShellEncodedCommand('C:/copilot.cmd', 'C:/repo/.agentteams/runner/tmp/trigger-456.prompt.txt', 'default'));
30
+ assert.match(script, /'--allow-all' '--no-ask-user'/);
31
+ assert.doesNotMatch(script, /--model/);
32
+ });
33
+ test('toPowerShellEncodedCommand does not embed a prompt that contains a here-string terminator', () => {
34
+ const maliciousPrompt = "safe text\r\n'@\r\nRemove-Item -Recurse -Force C:\\important";
35
+ const script = decodePowerShellCommand(toPowerShellEncodedCommand('C:/copilot.cmd', 'C:/repo/.agentteams/runner/tmp/trigger-789.prompt.txt', 'default'));
36
+ assert.doesNotMatch(script, new RegExp(maliciousPrompt.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
37
+ assert.doesNotMatch(script, /\$promptText = @'/);
38
+ });
39
+ //# sourceMappingURL=copilot-cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.test.js","sourceRoot":"","sources":["../../src/runners/copilot-cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAEnF,IAAI,CAAC,wFAAwF,EAAE,GAAG,EAAE;IAClG,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;IAC9E,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;QACtD,IAAI;QACJ,OAAO;QACP,aAAa;QACb,eAAe;QACf,SAAS;QACT,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAEhH,IAAI,CAAC,4FAA4F,EAAE,GAAG,EAAE;IACtG,MAAM,cAAc,GAAG,uDAAuD,CAAC;IAC/E,MAAM,MAAM,GAAG,uBAAuB,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9G,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,iDAAiD,CAAC,CAAC;IACxE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,MAAM,GAAG,uBAAuB,CACpC,0BAA0B,CAAC,gBAAgB,EAAE,uDAAuD,EAAE,SAAS,CAAC,CACjH,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;IACtD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2FAA2F,EAAE,GAAG,EAAE;IACrG,MAAM,eAAe,GAAG,8DAA8D,CAAC;IACvF,MAAM,MAAM,GAAG,uBAAuB,CACpC,0BAA0B,CAAC,gBAAgB,EAAE,uDAAuD,EAAE,SAAS,CAAC,CACjH,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC"}
@@ -3,6 +3,7 @@ import { ClaudeCodeRunner } from './claude-code.js';
3
3
  import { CodexRunner } from './codex.js';
4
4
  import { AmpCodeRunner } from './amp.js';
5
5
  import { AntigravityRunner } from './antigravity.js';
6
+ import { CopilotCliRunner } from './copilot-cli.js';
6
7
  export const createRunnerFactory = (runnerCmd) => {
7
8
  return (runnerType) => {
8
9
  // SSOT(RunnerType)와의 exhaustive 일치를 컴파일 타임에 강제한다.
@@ -20,6 +21,8 @@ export const createRunnerFactory = (runnerCmd) => {
20
21
  return new AntigravityRunner();
21
22
  case 'AMP':
22
23
  return new AmpCodeRunner();
24
+ case 'COPILOT_CLI':
25
+ return new CopilotCliRunner();
23
26
  // TODO: AIDER
24
27
  // TODO: GOOSE
25
28
  // TODO: PLANDEX
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runners/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACvD,OAAO,CAAC,UAAkB,EAAU,EAAE;QACpC,kDAAkD;QAClD,+DAA+D;QAC/D,yEAAyE;QACzE,MAAM,IAAI,GAAG,UAAwB,CAAC;QACtC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU;gBACb,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,aAAa;gBAChB,OAAO,IAAI,gBAAgB,EAAE,CAAC;YAChC,KAAK,OAAO;gBACV,OAAO,IAAI,WAAW,EAAE,CAAC;YAC3B,KAAK,aAAa;gBAChB,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACjC,KAAK,KAAK;gBACR,OAAO,IAAI,aAAa,EAAE,CAAC;YAC7B,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,WAAW,GAAU,IAAI,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runners/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACvD,OAAO,CAAC,UAAkB,EAAU,EAAE;QACpC,kDAAkD;QAClD,+DAA+D;QAC/D,yEAAyE;QACzE,MAAM,IAAI,GAAG,UAAwB,CAAC;QACtC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,UAAU;gBACb,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;YACvC,KAAK,aAAa;gBAChB,OAAO,IAAI,gBAAgB,EAAE,CAAC;YAChC,KAAK,OAAO;gBACV,OAAO,IAAI,WAAW,EAAE,CAAC;YAC3B,KAAK,aAAa;gBAChB,OAAO,IAAI,iBAAiB,EAAE,CAAC;YACjC,KAAK,KAAK;gBACR,OAAO,IAAI,aAAa,EAAE,CAAC;YAC7B,KAAK,aAAa;gBAChB,OAAO,IAAI,gBAAgB,EAAE,CAAC;YAChC,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,WAAW,GAAU,IAAI,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -7,6 +7,7 @@ import { CodexRunner } from './codex.js';
7
7
  import { createRunnerFactory } from './index.js';
8
8
  import { OpenCodeRunner } from './opencode.js';
9
9
  import { AntigravityRunner } from './antigravity.js';
10
+ import { CopilotCliRunner } from './copilot-cli.js';
10
11
  test('createRunnerFactory returns the expected runner implementations', () => {
11
12
  const createRunner = createRunnerFactory('custom-opencode');
12
13
  assert.equal(createRunner('OPENCODE') instanceof OpenCodeRunner, true);
@@ -14,6 +15,7 @@ test('createRunnerFactory returns the expected runner implementations', () => {
14
15
  assert.equal(createRunner('CODEX') instanceof CodexRunner, true);
15
16
  assert.equal(createRunner('ANTIGRAVITY') instanceof AntigravityRunner, true);
16
17
  assert.equal(createRunner('AMP') instanceof AmpCodeRunner, true);
18
+ assert.equal(createRunner('COPILOT_CLI') instanceof CopilotCliRunner, true);
17
19
  });
18
20
  // SSOT(@agentteams/core-constants)와 factory가 처리하는 러너 타입 집합이 정확히
19
21
  // 일치하는지 런타임에서 검증한다. SSOT에 값이 추가/삭제되면 이 테스트가 실패한다.
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/runners/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAE5D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,cAAc,EAAE,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,WAAW,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,aAAa,EAAE,IAAI,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,gEAAgE;AAChE,kDAAkD;AAClD,iFAAiF;AACjF,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAE5D,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CACjB,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAC9B,qBAAqB,UAAU,oCAAoC,CACpE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACnE,MAAM,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,kCAAkC,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/runners/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAE5D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,cAAc,EAAE,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,WAAW,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,aAAa,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEH,gEAAgE;AAChE,kDAAkD;AAClD,iFAAiF;AACjF,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAE5D,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CACjB,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAC9B,qBAAqB,UAAU,oCAAoC,CACpE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACnE,MAAM,YAAY,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,kCAAkC,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC"}
@@ -14,6 +14,7 @@ export interface RunnerOptions {
14
14
  agentConfigId: string;
15
15
  model?: string | null;
16
16
  fastMode?: boolean;
17
+ effort?: string | null;
17
18
  signal?: AbortSignal;
18
19
  onStdoutChunk?: (chunk: string) => void;
19
20
  onStderrChunk?: (chunk: string) => void;
package/dist/types.d.ts CHANGED
@@ -30,6 +30,7 @@ export type DaemonTrigger = {
30
30
  runnerType: string;
31
31
  model: string | null;
32
32
  fastMode: boolean;
33
+ effort: string | null;
33
34
  status: string;
34
35
  agentConfigId: string;
35
36
  startedAt: string | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentteams/runner",
3
- "version": "0.0.95",
3
+ "version": "0.0.97",
4
4
  "description": "AgentRunner - Background runner that polls and executes AI agent tasks",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",