genaicode 2.9.1 → 2.13.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 (94) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +142 -16
  3. package/dist/agents/cli-agent.d.ts +6 -3
  4. package/dist/agents/cli-agent.js +57 -35
  5. package/dist/agents/cli-agent.js.map +1 -1
  6. package/dist/agents/drivers/antigravity.d.ts +7 -1
  7. package/dist/agents/drivers/antigravity.js +27 -2
  8. package/dist/agents/drivers/antigravity.js.map +1 -1
  9. package/dist/agents/drivers/claude-approvals.d.ts +86 -0
  10. package/dist/agents/drivers/claude-approvals.js +277 -0
  11. package/dist/agents/drivers/claude-approvals.js.map +1 -0
  12. package/dist/agents/drivers/claude.d.ts +12 -2
  13. package/dist/agents/drivers/claude.js +73 -11
  14. package/dist/agents/drivers/claude.js.map +1 -1
  15. package/dist/agents/drivers/codex-approvals.d.ts +10 -0
  16. package/dist/agents/drivers/codex-approvals.js +102 -0
  17. package/dist/agents/drivers/codex-approvals.js.map +1 -0
  18. package/dist/agents/drivers/codex-live.d.ts +12 -1
  19. package/dist/agents/drivers/codex-live.js +46 -32
  20. package/dist/agents/drivers/codex-live.js.map +1 -1
  21. package/dist/agents/drivers/codex.d.ts +10 -1
  22. package/dist/agents/drivers/codex.js +48 -2
  23. package/dist/agents/drivers/codex.js.map +1 -1
  24. package/dist/agents/drivers/copilot.d.ts +9 -1
  25. package/dist/agents/drivers/copilot.js +31 -1
  26. package/dist/agents/drivers/copilot.js.map +1 -1
  27. package/dist/agents/drivers/cursor.d.ts +10 -1
  28. package/dist/agents/drivers/cursor.js +48 -5
  29. package/dist/agents/drivers/cursor.js.map +1 -1
  30. package/dist/agents/drivers/gemini.d.ts +11 -1
  31. package/dist/agents/drivers/gemini.js +46 -2
  32. package/dist/agents/drivers/gemini.js.map +1 -1
  33. package/dist/agents/drivers/muse-approvals.d.ts +19 -0
  34. package/dist/agents/drivers/muse-approvals.js +156 -0
  35. package/dist/agents/drivers/muse-approvals.js.map +1 -0
  36. package/dist/agents/drivers/muse-live.d.ts +5 -1
  37. package/dist/agents/drivers/muse-live.js +21 -109
  38. package/dist/agents/drivers/muse-live.js.map +1 -1
  39. package/dist/agents/drivers/opencode.d.ts +7 -1
  40. package/dist/agents/drivers/opencode.js +28 -2
  41. package/dist/agents/drivers/opencode.js.map +1 -1
  42. package/dist/agents/drivers/permission-args.d.ts +14 -0
  43. package/dist/agents/drivers/permission-args.js +40 -0
  44. package/dist/agents/drivers/permission-args.js.map +1 -0
  45. package/dist/agents/drivers/vibe.d.ts +9 -1
  46. package/dist/agents/drivers/vibe.js +40 -2
  47. package/dist/agents/drivers/vibe.js.map +1 -1
  48. package/dist/agents/hosted.js +6 -0
  49. package/dist/agents/hosted.js.map +1 -1
  50. package/dist/agents/live-agent.d.ts +49 -4
  51. package/dist/agents/live-agent.js +84 -15
  52. package/dist/agents/live-agent.js.map +1 -1
  53. package/dist/agents/permissions.d.ts +27 -0
  54. package/dist/agents/permissions.js +79 -0
  55. package/dist/agents/permissions.js.map +1 -0
  56. package/dist/agents/prepare.d.ts +12 -1
  57. package/dist/agents/prepare.js +18 -3
  58. package/dist/agents/prepare.js.map +1 -1
  59. package/dist/agents/rpc.d.ts +13 -2
  60. package/dist/agents/rpc.js +20 -2
  61. package/dist/agents/rpc.js.map +1 -1
  62. package/dist/agents/runtime.d.ts +2 -0
  63. package/dist/agents/runtime.js +10 -0
  64. package/dist/agents/runtime.js.map +1 -1
  65. package/dist/agents/session.d.ts +9 -1
  66. package/dist/agents/session.js +71 -16
  67. package/dist/agents/session.js.map +1 -1
  68. package/dist/agents/types.d.ts +56 -7
  69. package/dist/agents.d.ts +21 -13
  70. package/dist/agents.js +14 -9
  71. package/dist/agents.js.map +1 -1
  72. package/dist/react/agent-chat.css +506 -0
  73. package/dist/react/agent-chat.d.ts +65 -0
  74. package/dist/react/agent-chat.js +148 -0
  75. package/dist/react/agent-chat.js.map +1 -0
  76. package/dist/react/format.d.ts +16 -0
  77. package/dist/react/format.js +95 -0
  78. package/dist/react/format.js.map +1 -0
  79. package/dist/react/markdown.d.ts +6 -0
  80. package/dist/react/markdown.js +163 -0
  81. package/dist/react/markdown.js.map +1 -0
  82. package/dist/react.d.ts +19 -0
  83. package/dist/react.js +17 -0
  84. package/dist/react.js.map +1 -0
  85. package/dist/ui/index.js +78 -136
  86. package/dist/ui/web-client.js +520 -13
  87. package/dist/ui.d.ts +71 -0
  88. package/dist/ui.js +25 -0
  89. package/dist/ui.js.map +1 -0
  90. package/dist/vite/overlay.js +132 -8
  91. package/dist/vite/overlay.js.map +1 -1
  92. package/docs/agents.md +130 -19
  93. package/docs/semver.md +2 -0
  94. package/package.json +22 -7
@@ -0,0 +1,40 @@
1
+ import { mergePermissionFlags, resolvePermissions } from '../permissions.js';
2
+ import { antigravityPermissionFlags } from './antigravity.js';
3
+ import { claudePermissionFlags } from './claude-approvals.js';
4
+ import { codexPermissionFlags } from './codex.js';
5
+ import { copilotPermissionFlags } from './copilot.js';
6
+ import { cursorPermissionFlags } from './cursor.js';
7
+ import { geminiPermissionFlags } from './gemini.js';
8
+ import { opencodePermissionFlags } from './opencode.js';
9
+ import { vibePermissionFlags } from './vibe.js';
10
+ const FLAGS = {
11
+ claude: claudePermissionFlags,
12
+ codex: codexPermissionFlags,
13
+ gemini: geminiPermissionFlags,
14
+ cursor: cursorPermissionFlags,
15
+ copilot: copilotPermissionFlags,
16
+ opencode: opencodePermissionFlags,
17
+ vibe: vibePermissionFlags,
18
+ antigravity: antigravityPermissionFlags,
19
+ agy: antigravityPermissionFlags,
20
+ };
21
+ /** Agents `applyPermissionArgs` can translate for (`agy` is Antigravity). */
22
+ export const PERMISSION_AGENTS = Object.keys(FLAGS);
23
+ /**
24
+ * Rewrite an agent's own headless argument list (one an app keeps outside the genaicode
25
+ * drivers) for `permissions`: flags the translation owns are replaced, the rest kept. Each
26
+ * agent's translation is the one its driver uses (`claudePermissionFlags`, ...). Throws for an
27
+ * unknown agent or a combination it cannot honor. For Claude, `ask` and `auto-approve` also
28
+ * need the permission prompt tool (`claudeApprovalTool` with the same sandbox).
29
+ */
30
+ export function applyPermissionArgs(agent, args, permissions) {
31
+ const translate = FLAGS[agent];
32
+ if (!translate)
33
+ throw new Error(`No permission translation for agent ${JSON.stringify(agent)}.`);
34
+ const resolved = resolvePermissions(permissions);
35
+ if (resolved.approval === undefined && resolved.sandbox === undefined)
36
+ return { args: [...args], env: {} };
37
+ const flags = translate(resolved);
38
+ return { args: mergePermissionFlags(args, flags), env: { ...flags.env } };
39
+ }
40
+ //# sourceMappingURL=permission-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-args.js","sourceRoot":"","sources":["../../../src/agents/drivers/permission-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAEnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,KAAK,GAAuE;IAChF,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE,oBAAoB;IAC3B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,uBAAuB;IACjC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,0BAA0B;IACvC,GAAG,EAAE,0BAA0B;CAChC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAsB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,IAAuB,EACvB,WAAqC;IAErC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IAC3G,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5E,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type AgentOutputParser } from '../cli-agent.js';
2
- import type { AgentTask, CodingAgent } from '../types.js';
2
+ import { type PermissionFlags } from '../permissions.js';
3
+ import type { AgentPermissions, AgentTask, CodingAgent } from '../types.js';
3
4
  export interface VibeAgentOptions {
4
5
  /** Executable name or path. Default `vibe`. */
5
6
  command?: string;
@@ -18,6 +19,13 @@ export interface VibeAgentOptions {
18
19
  * Vibe has no model flag; `task.model` is passed as `VIBE_ACTIVE_MODEL`.
19
20
  */
20
21
  export declare function vibe(options?: VibeAgentOptions): CodingAgent;
22
+ /**
23
+ * Vibe flags for `permissions`: `auto-approve` is `--auto-approve` for the selected agent
24
+ * profile, `deny` leaves it off (a headless run declines what it would ask about), and
25
+ * `read-only` is the `plan` profile, which cannot be combined with `auto-approve`. Vibe has
26
+ * no sandbox, so `workspace-write` is not offered. `ask` is not possible headless.
27
+ */
28
+ export declare function vibePermissionFlags(permissions: AgentPermissions): PermissionFlags;
21
29
  export declare function vibeArgs(task: AgentTask, options?: VibeAgentOptions): string[];
22
30
  /** Decodes `--output streaming`: one completed history entry per line. */
23
31
  export declare function createVibeParser(): AgentOutputParser;
@@ -1,4 +1,5 @@
1
1
  import { cliAgent } from '../cli-agent.js';
2
+ import { exclusiveOption, resolvePermissions } from '../permissions.js';
2
3
  import { isObject, stringField } from './json.js';
3
4
  const EDIT_KINDS = new Set(['file_edit', 'file_write']);
4
5
  /**
@@ -9,7 +10,10 @@ export function vibe(options = {}) {
9
10
  return cliAgent({
10
11
  name: 'vibe',
11
12
  command: options.command ?? 'vibe',
12
- capabilities: { maxTurns: true },
13
+ capabilities: {
14
+ maxTurns: true,
15
+ permissions: { approval: ['auto-approve', 'deny'], sandbox: ['read-only', 'unrestricted'] },
16
+ },
13
17
  args: (task) => vibeArgs(task, options),
14
18
  prepare: (task) => prepareVibe(task, options),
15
19
  createParser: createVibeParser,
@@ -18,8 +22,42 @@ export function vibe(options = {}) {
18
22
  function prepareVibe(task, options) {
19
23
  return { args: vibeArgs(task, options), ...(task.model ? { env: { VIBE_ACTIVE_MODEL: task.model } } : {}) };
20
24
  }
25
+ /**
26
+ * Vibe flags for `permissions`: `auto-approve` is `--auto-approve` for the selected agent
27
+ * profile, `deny` leaves it off (a headless run declines what it would ask about), and
28
+ * `read-only` is the `plan` profile, which cannot be combined with `auto-approve`. Vibe has
29
+ * no sandbox, so `workspace-write` is not offered. `ask` is not possible headless.
30
+ */
31
+ export function vibePermissionFlags(permissions) {
32
+ const { approval, sandbox } = permissions;
33
+ if (approval === 'ask')
34
+ throw new Error("vibe cannot ask for approval headless (permissions.approval 'ask').");
35
+ if (sandbox === 'workspace-write')
36
+ throw new Error("vibe has no sandbox ('workspace-write').");
37
+ if (sandbox === 'read-only' && approval === 'auto-approve')
38
+ throw new Error("vibe's read-only profile (plan) cannot be combined with permissions.approval 'auto-approve'.");
39
+ const args = [];
40
+ const replaces = {};
41
+ if (approval) {
42
+ Object.assign(replaces, { '--auto-approve': 'flag', '--yolo': 'flag', '--smart-approve': 'flag' });
43
+ if (approval === 'auto-approve')
44
+ args.push('--auto-approve');
45
+ }
46
+ if (sandbox === 'read-only') {
47
+ replaces['--agent'] = 'value';
48
+ args.push('--agent', 'plan');
49
+ }
50
+ return { args, replaces };
51
+ }
21
52
  export function vibeArgs(task, options = {}) {
22
- const args = ['--output', 'streaming', '--agent', options.agent ?? 'accept-edits'];
53
+ const permissions = resolvePermissions(task.permissions);
54
+ const readOnly = permissions.sandbox === 'read-only';
55
+ exclusiveOption('vibe', 'agent', options.agent !== undefined, 'sandbox', readOnly);
56
+ const flags = vibePermissionFlags(permissions);
57
+ const args = ['--output', 'streaming'];
58
+ if (!readOnly)
59
+ args.push('--agent', options.agent ?? 'accept-edits');
60
+ args.push(...flags.args);
23
61
  if (options.trustWorkspace ?? true)
24
62
  args.push('--trust');
25
63
  if (task.maxTurns !== undefined)
@@ -1 +1 @@
1
- {"version":3,"file":"vibe.js","sourceRoot":"","sources":["../../../src/agents/drivers/vibe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA0B,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAmB,MAAM,WAAW,CAAC;AAgBnE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,UAA4B,EAAE;IACjD,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,MAAM;QAClC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;QAC7C,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAe,EAAE,OAAyB;IAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAe,EAAE,UAA4B,EAAE;IACtE,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7F,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,mFAAmF;IACnF,OAAO,CAAC,GAAG,IAAI,EAAE,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB;IAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,OAAO;QACL,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9B,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;wBAAE,MAAM;oBACtC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxC,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC;oBACtF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAC5C,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,YAAY;wBAClB,GAAG,MAAM;wBACT,IAAI;wBACJ,GAAG,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChE,CAAC,CAAC;oBACH,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;wBAAE,MAAM;oBAChF,MAAM,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM;wBACnB,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;wBAC5G,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnG,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;oBACpD,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBACzE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,OAAO;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAChF,MAAM;gBACR,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SAChF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7B,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"vibe.js","sourceRoot":"","sources":["../../../src/agents/drivers/vibe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA0B,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAmB,MAAM,WAAW,CAAC;AAgBnE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,UAA4B,EAAE;IACjD,OAAO,QAAQ,CAAC;QACd,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,MAAM;QAClC,YAAY,EAAE;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE;SAC5F;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;QAC7C,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,IAAe,EAAE,OAAyB;IAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAA6B;IAC/D,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IAC1C,IAAI,QAAQ,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC/G,IAAI,OAAO,KAAK,iBAAiB;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC/F,IAAI,OAAO,KAAK,WAAW,IAAI,QAAQ,KAAK,cAAc;QACxD,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;IAClH,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAqC,EAAE,CAAC;IACtD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;QACnG,IAAI,QAAQ,KAAK,cAAc;YAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAe,EAAE,UAA4B,EAAE;IACtE,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC;IACrD,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjF,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7F,IAAI,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,mFAAmF;IACnF,OAAO,CAAC,GAAG,IAAI,EAAE,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB;IAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,OAAO;QACL,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,SAAS,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9B,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;wBAAE,MAAM;oBACtC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxC,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;oBACjE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC;oBACtF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAC5C,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,YAAY;wBAClB,GAAG,MAAM;wBACT,IAAI;wBACJ,GAAG,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAChE,CAAC,CAAC;oBACH,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;wBAAE,MAAM;oBAChF,MAAM,MAAM,GAAG,MAAM,KAAK,WAAW,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM;wBACnB,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;wBAC5G,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBACrC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnG,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;oBACpD,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBACzE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,OAAO;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAChF,MAAM;gBACR,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SAChF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7B,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { resolvePermissions, unsupportedPermissions } from './permissions.js';
1
2
  import { RunRecorder } from './runtime.js';
2
3
  const TERMINAL = new Set(['completed', 'failed', 'cancelled']);
3
4
  /** Adapt a `HostedAgentProvider` to `CodingAgent`, so hosted and local agents share one API. */
@@ -38,6 +39,11 @@ function runHosted(provider, task, pollIntervalMs) {
38
39
  delete request.signal;
39
40
  delete request.onApproval;
40
41
  delete request.timeoutMs;
42
+ const refused = unsupportedPermissions(provider.name, provider.capabilities ?? {}, task);
43
+ if (refused)
44
+ return { exit: exit('spawn-error', new Error(refused)) };
45
+ if (task.permissions !== undefined)
46
+ request.permissions = resolvePermissions(task.permissions);
41
47
  try {
42
48
  taskId = (await provider.start(request, controller.signal)).id;
43
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hosted.js","sourceRoot":"","sources":["../../src/agents/hosted.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hosted.js","sourceRoot":"","sources":["../../src/agents/hosted.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type PreparedRun } from './prepare.js';
2
- import { RpcPeer } from './rpc.js';
2
+ import { RpcPeer, type RpcRequestContext } from './rpc.js';
3
3
  import { type AgentOutcome } from './runtime.js';
4
4
  import type { AgentCapabilities, AgentEvent, AgentTask, ApprovalDecision, ApprovalRequest, CodingAgent } from './types.js';
5
5
  /** What a live driver gets for one task. */
@@ -10,12 +10,35 @@ export interface LiveSession {
10
10
  /** Called for each notification the agent sends. Set once, before the first request. */
11
11
  onNotification(handler: (method: string, params: unknown) => void): void;
12
12
  /** Called for each request the agent sends. Throw `RpcError` to decline. Unhandled requests are declined. */
13
- onRequest(handler: (method: string, params: unknown) => unknown | Promise<unknown>): void;
14
- /** Ask `task.onApproval` (deny when absent or when it throws), emitting request and decision events. */
15
- approve(request: ApprovalRequest): Promise<ApprovalDecision>;
13
+ onRequest(handler: (method: string, params: unknown, context: RpcRequestContext) => unknown | Promise<unknown>): void;
14
+ /**
15
+ * Decide a request with `decideApproval`, emitting request and decision events. The decision
16
+ * is `deny` when there is no handler, it throws, `signal` aborts, or the task ends first; the
17
+ * handler's signal aborts in the last two cases.
18
+ */
19
+ approve(request: ApprovalRequest, signal?: AbortSignal): Promise<ApprovalDecision>;
20
+ /** Aborts once the task is over: its process exited, or it was stopped. */
21
+ readonly signal: AbortSignal;
16
22
  /** Make `AgentRun.steer` send input, or pass undefined once the task stops accepting it. */
17
23
  setSteer(steer: ((text: string) => Promise<void>) | undefined): void;
18
24
  }
25
+ /**
26
+ * A vendor's approval protocol over a live session. A driver hands it each request and
27
+ * notification first; methods it does not own come back as `undefined` / `false`.
28
+ */
29
+ export interface LiveApprovals {
30
+ /** Answer an approval request, or `undefined` when `method` is not one. Rejects requests from another thread or turn. */
31
+ request(method: string, params: unknown, context?: RpcRequestContext): Promise<unknown> | undefined;
32
+ /** Handle an approval notification. True when `method` belonged to the approval protocol. */
33
+ notification(method: string, params: unknown): boolean;
34
+ /** The turn ended: close open questions, and deny whatever is answered afterwards. */
35
+ close(): void;
36
+ }
37
+ /** Which thread (or session) and turn approvals must belong to. Undefined until the agent names them. */
38
+ export interface LiveApprovalIds {
39
+ session?: string;
40
+ turn?: string;
41
+ }
19
42
  export interface LiveAgentDefinition {
20
43
  name: string;
21
44
  command: string;
@@ -33,5 +56,27 @@ export interface LiveAgentDefinition {
33
56
  * stays up for the whole task, so the caller can `steer()` it and answer approvals.
34
57
  */
35
58
  export declare function liveAgent(definition: LiveAgentDefinition): CodingAgent;
59
+ /**
60
+ * `task.onApproval`'s answer, or `deny`: without a handler, when it throws, and when `signal`
61
+ * aborts first (the handler is not waited for then).
62
+ */
63
+ export declare function askApproval(task: Pick<AgentTask, 'onApproval'>, request: ApprovalRequest, signal: AbortSignal): Promise<ApprovalDecision>;
64
+ /**
65
+ * Emit `approval-request`, run `decide`, and emit one `approval-resolved`. When `signal`
66
+ * aborts first, the denial is emitted right away, before the run's event stream can close.
67
+ */
68
+ export declare function reportApproval(emit: (event: AgentEvent) => void, request: ApprovalRequest, signal: AbortSignal, decide: () => Promise<{
69
+ decision: ApprovalDecision;
70
+ automatic: boolean;
71
+ }>): Promise<ApprovalDecision>;
72
+ /**
73
+ * Decide one request under `task.permissions.approval`: `deny` and `auto-approve` answer
74
+ * without asking (`automatic`), otherwise `askApproval`. An approval that arrives after
75
+ * `signal` aborted is a denial either way.
76
+ */
77
+ export declare function decideApproval(task: Pick<AgentTask, 'onApproval' | 'permissions'>, request: ApprovalRequest, signal: AbortSignal): Promise<{
78
+ decision: ApprovalDecision;
79
+ automatic: boolean;
80
+ }>;
36
81
  /** RFC 9562 UUIDv7: time-ordered ids some agents require for idempotent commands. */
37
82
  export declare function uuidv7(now?: number): string;
@@ -1,8 +1,9 @@
1
1
  import { randomBytes } from 'node:crypto';
2
+ import { resolvePermissions } from './permissions.js';
2
3
  import { planSpawn } from './prepare.js';
3
4
  import { startProcess } from './process.js';
4
5
  import { RpcError, RpcPeer } from './rpc.js';
5
- import { invalidCwd, RunRecorder } from './runtime.js';
6
+ import { invalidCwd, linkAbort, RunRecorder } from './runtime.js';
6
7
  /**
7
8
  * Build a `CodingAgent` from a CLI that serves JSON-RPC over stdio. The process
8
9
  * stays up for the whole task, so the caller can `steer()` it and answer approvals.
@@ -75,8 +76,11 @@ function runLiveAgent(definition, task) {
75
76
  };
76
77
  const rpc = new RpcPeer((line) => handle.write(line), {
77
78
  notification: (method, params) => notificationHandler(method, params),
78
- request: (method, params) => requestHandler(method, params),
79
+ request: (method, params, context) => requestHandler(method, params, context),
79
80
  });
81
+ // Ends every open approval question when the task is over.
82
+ const lifetime = new AbortController();
83
+ linkAbort(task.signal, lifetime);
80
84
  const session = {
81
85
  task,
82
86
  rpc,
@@ -87,24 +91,17 @@ function runLiveAgent(definition, task) {
87
91
  onRequest(handler) {
88
92
  requestHandler = handler;
89
93
  },
90
- async approve(request) {
91
- recorder.emit({ type: 'approval-request', request });
92
- let decision = 'deny';
93
- try {
94
- if (task.onApproval)
95
- decision = (await task.onApproval(request)) === 'approve' ? 'approve' : 'deny';
96
- }
97
- catch {
98
- decision = 'deny';
99
- }
100
- recorder.emit({ type: 'approval-resolved', id: request.id, decision });
101
- return decision;
94
+ signal: lifetime.signal,
95
+ approve(request, signal) {
96
+ const ended = signal ? AbortSignal.any([lifetime.signal, signal]) : lifetime.signal;
97
+ return reportApproval((event) => recorder.emit(event), request, ended, () => decideApproval(task, request, ended));
102
98
  },
103
99
  setSteer(next) {
104
100
  steer = next;
105
101
  },
106
102
  };
107
103
  const exited = handle.exit.then((exit) => {
104
+ lifetime.abort();
108
105
  plan.cleanup();
109
106
  steer = undefined;
110
107
  rpc.fail(new Error(`${definition.name} exited before the task finished.`));
@@ -113,6 +110,7 @@ function runLiveAgent(definition, task) {
113
110
  const outcome = definition.drive(session).then((verdict) => verdict, (error) => ({ ok: false, error: error instanceof Error ? error.message : String(error) }));
114
111
  const result = Promise.race([outcome.then(() => undefined), exited]).then(async (early) => {
115
112
  steer = undefined;
113
+ lifetime.abort();
116
114
  // Exiting before the turn ends is a failure even with exit code 0.
117
115
  if (early)
118
116
  return recorder.finish(early, (await settledOrUndefined(outcome)) ?? {
@@ -122,7 +120,78 @@ function runLiveAgent(definition, task) {
122
120
  handle.close();
123
121
  return recorder.finish(await exited, await outcome);
124
122
  });
125
- return { result, abort: handle.kill, steer: steerRun, [Symbol.asyncIterator]: iterate };
123
+ const abort = () => {
124
+ lifetime.abort();
125
+ handle.kill();
126
+ };
127
+ return { result, abort, steer: steerRun, [Symbol.asyncIterator]: iterate };
128
+ }
129
+ /**
130
+ * `task.onApproval`'s answer, or `deny`: without a handler, when it throws, and when `signal`
131
+ * aborts first (the handler is not waited for then).
132
+ */
133
+ export async function askApproval(task, request, signal) {
134
+ const handler = task.onApproval;
135
+ if (!handler || signal.aborted)
136
+ return 'deny';
137
+ let stop = () => { };
138
+ const withdrawn = new Promise((resolve) => {
139
+ stop = () => resolve('deny');
140
+ signal.addEventListener('abort', stop, { once: true });
141
+ });
142
+ try {
143
+ const answer = await Promise.race([Promise.resolve().then(() => handler(request, signal)), withdrawn]);
144
+ return answer === 'approve' && !signal.aborted ? 'approve' : 'deny';
145
+ }
146
+ catch {
147
+ return 'deny';
148
+ }
149
+ finally {
150
+ signal.removeEventListener('abort', stop);
151
+ }
152
+ }
153
+ /**
154
+ * Emit `approval-request`, run `decide`, and emit one `approval-resolved`. When `signal`
155
+ * aborts first, the denial is emitted right away, before the run's event stream can close.
156
+ */
157
+ export async function reportApproval(emit, request, signal, decide) {
158
+ emit({ type: 'approval-request', request });
159
+ let reported;
160
+ const report = (decision, automatic) => {
161
+ if (reported)
162
+ return;
163
+ reported = decision;
164
+ emit({ type: 'approval-resolved', id: request.id, decision, ...(automatic ? { automatic } : {}) });
165
+ };
166
+ const withdrawn = () => report('deny', false);
167
+ signal.addEventListener('abort', withdrawn, { once: true });
168
+ try {
169
+ const { decision, automatic } = await decide();
170
+ report(decision, automatic);
171
+ return reported;
172
+ }
173
+ finally {
174
+ signal.removeEventListener('abort', withdrawn);
175
+ }
176
+ }
177
+ /**
178
+ * Decide one request under `task.permissions.approval`: `deny` and `auto-approve` answer
179
+ * without asking (`automatic`), otherwise `askApproval`. An approval that arrives after
180
+ * `signal` aborted is a denial either way.
181
+ */
182
+ export async function decideApproval(task, request, signal) {
183
+ let policy;
184
+ try {
185
+ policy = resolvePermissions(task.permissions).approval;
186
+ }
187
+ catch {
188
+ return { decision: 'deny', automatic: true };
189
+ }
190
+ if (policy === 'deny')
191
+ return { decision: 'deny', automatic: true };
192
+ if (policy === 'auto-approve')
193
+ return { decision: signal.aborted ? 'deny' : 'approve', automatic: true };
194
+ return { decision: await askApproval(task, request, signal), automatic: false };
126
195
  }
127
196
  /** A driver's verdict when it already settled; undefined when it was still waiting. */
128
197
  async function settledOrUndefined(outcome) {
@@ -1 +1 @@
1
- {"version":3,"file":"live-agent.js","sourceRoot":"","sources":["../../src/agents/live-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"live-agent.js","sourceRoot":"","sources":["../../src/agents/live-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AgentCapabilities, AgentPermissions, AgentTask } from './types.js';
2
+ /** Full access, no questions. */
3
+ export declare const YOLO: Readonly<Required<AgentPermissions>>;
4
+ /** `task.permissions` as an object: `'yolo'` expanded, nothing set for an omitted value. */
5
+ export declare function resolvePermissions(permissions: AgentTask['permissions']): AgentPermissions;
6
+ /** Why `task.permissions` cannot run on this agent, or undefined when it can. */
7
+ export declare function unsupportedPermissions(name: string, capabilities: AgentCapabilities, task: Pick<AgentTask, 'permissions' | 'onApproval'>): string | undefined;
8
+ /**
9
+ * One agent's command-line translation of `AgentPermissions` (see `applyPermissionArgs`).
10
+ * Throws when the agent cannot honor the combination.
11
+ */
12
+ export interface PermissionFlags {
13
+ /** Arguments to add. */
14
+ args: string[];
15
+ /** Flags these arguments replace; any already present are removed first, with their values. */
16
+ replaces: Readonly<Record<string, 'flag' | 'value'>>;
17
+ /** Environment variables to set. */
18
+ env?: Record<string, string>;
19
+ }
20
+ /**
21
+ * Remove the flags `replaces` names from `args` (both `--flag value` and `--flag=value`), then
22
+ * insert `flags.args` after a leading subcommand word (`exec`, `run`...), so a trailing
23
+ * `-p` / `--prompt` keeps its value and `exec resume <id> <prompt>` keeps its positionals.
24
+ */
25
+ export declare function mergePermissionFlags(args: readonly string[], flags: PermissionFlags): string[];
26
+ /** Throw unless the agent option the permissions would set was left at its default. */
27
+ export declare function exclusiveOption(name: string, option: string, set: boolean, field: string, wanted: boolean): void;
@@ -0,0 +1,79 @@
1
+ /** Full access, no questions. */
2
+ export const YOLO = Object.freeze({
3
+ approval: 'auto-approve',
4
+ sandbox: 'unrestricted',
5
+ });
6
+ const APPROVALS = ['ask', 'auto-approve', 'deny'];
7
+ const SANDBOXES = ['workspace-write', 'read-only', 'unrestricted'];
8
+ /** `task.permissions` as an object: `'yolo'` expanded, nothing set for an omitted value. */
9
+ export function resolvePermissions(permissions) {
10
+ if (permissions === undefined)
11
+ return {};
12
+ if (permissions === 'yolo')
13
+ return { ...YOLO };
14
+ if (typeof permissions !== 'object' || permissions === null || Array.isArray(permissions))
15
+ throw new Error(`Invalid task.permissions: ${JSON.stringify(permissions)}.`);
16
+ // A misspelled field must not quietly fall back to the driver's defaults.
17
+ const unknown = Object.keys(permissions).filter((key) => key !== 'approval' && key !== 'sandbox');
18
+ if (unknown.length)
19
+ throw new Error(`Unknown task.permissions field: ${unknown.join(', ')}.`);
20
+ const { approval, sandbox } = permissions;
21
+ if (approval !== undefined && !APPROVALS.includes(approval))
22
+ throw new Error(`Unknown permissions.approval: ${JSON.stringify(approval)}.`);
23
+ if (sandbox !== undefined && !SANDBOXES.includes(sandbox))
24
+ throw new Error(`Unknown permissions.sandbox: ${JSON.stringify(sandbox)}.`);
25
+ return {
26
+ ...(approval !== undefined ? { approval } : {}),
27
+ ...(sandbox !== undefined ? { sandbox } : {}),
28
+ };
29
+ }
30
+ /** Why `task.permissions` cannot run on this agent, or undefined when it can. */
31
+ export function unsupportedPermissions(name, capabilities, task) {
32
+ let permissions;
33
+ try {
34
+ permissions = resolvePermissions(task.permissions);
35
+ }
36
+ catch (error) {
37
+ return error.message;
38
+ }
39
+ const supported = capabilities.permissions ?? {};
40
+ const check = (field, value, values = []) => value === undefined || values.includes(value)
41
+ ? undefined
42
+ : `${name} cannot run with permissions.${field} '${value}' (supported: ${values.join(', ') || 'none'}).`;
43
+ const refused = check('approval', permissions.approval, supported.approval) ??
44
+ check('sandbox', permissions.sandbox, supported.sandbox);
45
+ if (refused)
46
+ return refused;
47
+ if (permissions.approval === 'ask' && !task.onApproval)
48
+ return "permissions.approval 'ask' needs task.onApproval.";
49
+ return undefined;
50
+ }
51
+ /**
52
+ * Remove the flags `replaces` names from `args` (both `--flag value` and `--flag=value`), then
53
+ * insert `flags.args` after a leading subcommand word (`exec`, `run`...), so a trailing
54
+ * `-p` / `--prompt` keeps its value and `exec resume <id> <prompt>` keeps its positionals.
55
+ */
56
+ export function mergePermissionFlags(args, flags) {
57
+ const kept = [];
58
+ for (let i = 0; i < args.length; i++) {
59
+ const arg = args[i];
60
+ if (arg === '--') {
61
+ kept.push(...args.slice(i));
62
+ break;
63
+ }
64
+ const name = arg.includes('=') ? arg.slice(0, arg.indexOf('=')) : arg;
65
+ const kind = flags.replaces[name];
66
+ if (!kind)
67
+ kept.push(arg);
68
+ else if (kind === 'value' && name === arg)
69
+ i++;
70
+ }
71
+ const at = kept.length && !kept[0].startsWith('-') ? 1 : 0;
72
+ return [...kept.slice(0, at), ...flags.args, ...kept.slice(at)];
73
+ }
74
+ /** Throw unless the agent option the permissions would set was left at its default. */
75
+ export function exclusiveOption(name, option, set, field, wanted) {
76
+ if (set && wanted)
77
+ throw new Error(`${name}: set either the ${option} option or task.permissions.${field}, not both.`);
78
+ }
79
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/agents/permissions.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AgentCapabilities, AgentTask, McpServer } from './types.js';
1
+ import type { AgentCapabilities, AgentEvent, AgentTask, McpServer } from './types.js';
2
2
  /** Everything a driver needs to start one task's process. */
3
3
  export interface PreparedRun {
4
4
  args: string[];
@@ -7,6 +7,13 @@ export interface PreparedRun {
7
7
  /** Called once the process has exited (temp files, for example). */
8
8
  cleanup?(): void;
9
9
  }
10
+ /** What `prepare` can use beyond the task. */
11
+ export interface PrepareContext {
12
+ /** Add an event to the run's stream. */
13
+ emit(event: AgentEvent): void;
14
+ /** Aborts once the task is over: the process exited, or it was stopped before it started. */
15
+ readonly signal: AbortSignal;
16
+ }
10
17
  /** Reject a task the agent cannot honor before anything is spawned. */
11
18
  export declare function unsupportedTask(name: string, capabilities: AgentCapabilities, task: AgentTask): string | undefined;
12
19
  export declare function isHttpServer(server: McpServer): server is Extract<McpServer, {
@@ -30,4 +37,8 @@ export type SpawnPlan = {
30
37
  };
31
38
  /** Check the task, then resolve arguments and environment for the child process. */
32
39
  export declare function planSpawn(definition: SpawnDefinition, task: AgentTask, cwdError: string | undefined): SpawnPlan;
40
+ /** `planSpawn` for a `prepare` that may need to wait (start a server, for example). */
41
+ export declare function planSpawnAsync(definition: Omit<SpawnDefinition, 'prepare'> & {
42
+ prepare?(task: AgentTask, context: PrepareContext): PreparedRun | Promise<PreparedRun>;
43
+ }, task: AgentTask, cwdError: string | undefined, context: PrepareContext): Promise<SpawnPlan>;
33
44
  export {};