@sweny-ai/providers 0.2.0 → 0.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 (127) hide show
  1. package/dist/coding-agent/claude-code.d.ts +11 -2
  2. package/dist/coding-agent/claude-code.d.ts.map +1 -1
  3. package/dist/coding-agent/claude-code.js +97 -2
  4. package/dist/coding-agent/claude-code.js.map +1 -1
  5. package/dist/coding-agent/google-gemini.d.ts +7 -2
  6. package/dist/coding-agent/google-gemini.d.ts.map +1 -1
  7. package/dist/coding-agent/google-gemini.js +11 -1
  8. package/dist/coding-agent/google-gemini.js.map +1 -1
  9. package/dist/coding-agent/index.d.ts +3 -1
  10. package/dist/coding-agent/index.d.ts.map +1 -1
  11. package/dist/coding-agent/index.js +1 -0
  12. package/dist/coding-agent/index.js.map +1 -1
  13. package/dist/coding-agent/mock.d.ts +17 -0
  14. package/dist/coding-agent/mock.d.ts.map +1 -0
  15. package/dist/coding-agent/mock.js +17 -0
  16. package/dist/coding-agent/mock.js.map +1 -0
  17. package/dist/coding-agent/openai-codex.d.ts +7 -2
  18. package/dist/coding-agent/openai-codex.d.ts.map +1 -1
  19. package/dist/coding-agent/openai-codex.js +11 -1
  20. package/dist/coding-agent/openai-codex.js.map +1 -1
  21. package/dist/coding-agent/shared.d.ts +16 -0
  22. package/dist/coding-agent/shared.d.ts.map +1 -1
  23. package/dist/coding-agent/shared.js +89 -1
  24. package/dist/coding-agent/shared.js.map +1 -1
  25. package/dist/coding-agent/types.d.ts +24 -0
  26. package/dist/coding-agent/types.d.ts.map +1 -1
  27. package/dist/credential-vault/aws-secrets-manager.d.ts +2 -10
  28. package/dist/credential-vault/aws-secrets-manager.d.ts.map +1 -1
  29. package/dist/incident/opsgenie.d.ts +6 -11
  30. package/dist/incident/opsgenie.d.ts.map +1 -1
  31. package/dist/incident/pagerduty.d.ts +2 -10
  32. package/dist/incident/pagerduty.d.ts.map +1 -1
  33. package/dist/issue-tracking/file.d.ts +10 -0
  34. package/dist/issue-tracking/file.d.ts.map +1 -0
  35. package/dist/issue-tracking/file.js +180 -0
  36. package/dist/issue-tracking/file.js.map +1 -0
  37. package/dist/issue-tracking/github-issues.d.ts +2 -12
  38. package/dist/issue-tracking/github-issues.d.ts.map +1 -1
  39. package/dist/issue-tracking/index.d.ts +1 -0
  40. package/dist/issue-tracking/index.d.ts.map +1 -1
  41. package/dist/issue-tracking/index.js +1 -0
  42. package/dist/issue-tracking/index.js.map +1 -1
  43. package/dist/issue-tracking/jira.d.ts +5 -15
  44. package/dist/issue-tracking/jira.d.ts.map +1 -1
  45. package/dist/issue-tracking/jira.js +57 -0
  46. package/dist/issue-tracking/jira.js.map +1 -1
  47. package/dist/issue-tracking/linear.d.ts +2 -8
  48. package/dist/issue-tracking/linear.d.ts.map +1 -1
  49. package/dist/issue-tracking/types.d.ts +2 -0
  50. package/dist/issue-tracking/types.d.ts.map +1 -1
  51. package/dist/issue-tracking/types.js.map +1 -1
  52. package/dist/messaging/slack.d.ts +2 -8
  53. package/dist/messaging/slack.d.ts.map +1 -1
  54. package/dist/messaging/teams.d.ts +2 -12
  55. package/dist/messaging/teams.d.ts.map +1 -1
  56. package/dist/notification/discord-webhook.d.ts +2 -8
  57. package/dist/notification/discord-webhook.d.ts.map +1 -1
  58. package/dist/notification/email.d.ts +3 -13
  59. package/dist/notification/email.d.ts.map +1 -1
  60. package/dist/notification/file.d.ts +10 -0
  61. package/dist/notification/file.d.ts.map +1 -0
  62. package/dist/notification/file.js +81 -0
  63. package/dist/notification/file.js.map +1 -0
  64. package/dist/notification/github-summary.d.ts +2 -6
  65. package/dist/notification/github-summary.d.ts.map +1 -1
  66. package/dist/notification/index.d.ts +1 -0
  67. package/dist/notification/index.d.ts.map +1 -1
  68. package/dist/notification/index.js +1 -0
  69. package/dist/notification/index.js.map +1 -1
  70. package/dist/notification/slack-webhook.d.ts +2 -8
  71. package/dist/notification/slack-webhook.d.ts.map +1 -1
  72. package/dist/notification/teams-webhook.d.ts +2 -8
  73. package/dist/notification/teams-webhook.d.ts.map +1 -1
  74. package/dist/notification/webhook.d.ts +6 -18
  75. package/dist/notification/webhook.d.ts.map +1 -1
  76. package/dist/notification/webhook.js +1 -1
  77. package/dist/notification/webhook.js.map +1 -1
  78. package/dist/observability/cloudwatch.d.ts +2 -10
  79. package/dist/observability/cloudwatch.d.ts.map +1 -1
  80. package/dist/observability/datadog.d.ts +2 -12
  81. package/dist/observability/datadog.d.ts.map +1 -1
  82. package/dist/observability/elastic.d.ts +3 -31
  83. package/dist/observability/elastic.d.ts.map +1 -1
  84. package/dist/observability/elastic.js +7 -11
  85. package/dist/observability/elastic.js.map +1 -1
  86. package/dist/observability/file.d.ts +2 -8
  87. package/dist/observability/file.d.ts.map +1 -1
  88. package/dist/observability/file.js +29 -7
  89. package/dist/observability/file.js.map +1 -1
  90. package/dist/observability/index.d.ts +2 -0
  91. package/dist/observability/index.d.ts.map +1 -1
  92. package/dist/observability/index.js +2 -0
  93. package/dist/observability/index.js.map +1 -1
  94. package/dist/observability/loki.d.ts +2 -12
  95. package/dist/observability/loki.d.ts.map +1 -1
  96. package/dist/observability/newrelic.d.ts +6 -13
  97. package/dist/observability/newrelic.d.ts.map +1 -1
  98. package/dist/observability/pagerduty.d.ts +10 -0
  99. package/dist/observability/pagerduty.d.ts.map +1 -0
  100. package/dist/observability/pagerduty.js +134 -0
  101. package/dist/observability/pagerduty.js.map +1 -0
  102. package/dist/observability/prometheus.d.ts +11 -0
  103. package/dist/observability/prometheus.d.ts.map +1 -0
  104. package/dist/observability/prometheus.js +129 -0
  105. package/dist/observability/prometheus.js.map +1 -0
  106. package/dist/observability/sentry.d.ts +2 -14
  107. package/dist/observability/sentry.d.ts.map +1 -1
  108. package/dist/observability/splunk.d.ts +2 -12
  109. package/dist/observability/splunk.d.ts.map +1 -1
  110. package/dist/source-control/file.d.ts +11 -0
  111. package/dist/source-control/file.d.ts.map +1 -0
  112. package/dist/source-control/file.js +211 -0
  113. package/dist/source-control/file.js.map +1 -0
  114. package/dist/source-control/github.d.ts.map +1 -1
  115. package/dist/source-control/github.js +14 -3
  116. package/dist/source-control/github.js.map +1 -1
  117. package/dist/source-control/gitlab.d.ts +3 -15
  118. package/dist/source-control/gitlab.d.ts.map +1 -1
  119. package/dist/source-control/gitlab.js +3 -0
  120. package/dist/source-control/gitlab.js.map +1 -1
  121. package/dist/source-control/index.d.ts +1 -0
  122. package/dist/source-control/index.d.ts.map +1 -1
  123. package/dist/source-control/index.js +1 -0
  124. package/dist/source-control/index.js.map +1 -1
  125. package/dist/source-control/types.d.ts +6 -0
  126. package/dist/source-control/types.d.ts.map +1 -1
  127. package/package.json +8 -7
@@ -1,10 +1,19 @@
1
- import type { CodingAgent } from "./types.js";
1
+ import type { CodingAgent, AgentEventHandler } from "./types.js";
2
2
  import type { Logger } from "../logger.js";
3
3
  export interface ClaudeCodeConfig {
4
4
  cliFlags?: string[];
5
5
  logger?: Logger;
6
- /** Suppress agent stdout; forward stderr through logger */
6
+ /**
7
+ * Suppress agent stdout; forward stderr through logger.
8
+ * Ignored when onEvent is set (event mode always captures stdout).
9
+ */
7
10
  quiet?: boolean;
11
+ /**
12
+ * Receive structured events during run(). When provided, Claude is invoked
13
+ * with `--output-format stream-json` and each event is parsed and forwarded.
14
+ * Omit to use the default passthrough (stdout → terminal).
15
+ */
16
+ onEvent?: AgentEventHandler;
8
17
  }
9
18
  export declare function claudeCode(config?: ClaudeCodeConfig): CodingAgent;
10
19
  //# sourceMappingURL=claude-code.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/coding-agent/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAsCjE"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/coding-agent/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAqC,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AA2ED,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,WAAW,CA6DjE"}
@@ -1,9 +1,81 @@
1
1
  import { consoleLogger } from "../logger.js";
2
- import { execCommand, isCliInstalled } from "./shared.js";
2
+ import { execCommand, spawnLines, isCliInstalled } from "./shared.js";
3
+ /**
4
+ * Stateful parser for Claude stream-json NDJSON events.
5
+ *
6
+ * Maintains a tool_use_id → tool_name map so that tool_result events
7
+ * (type === "user") can be emitted with the human-readable tool name
8
+ * rather than the opaque tool_use_id.
9
+ *
10
+ * Verified against Claude Code CLI 2.x stream-json output format:
11
+ * - assistant events carry content blocks: text | tool_use | thinking
12
+ * - user events carry tool_result content blocks (one per tool call)
13
+ * - system / result / rate_limit_event are silently skipped
14
+ *
15
+ * Note: --output-format stream-json requires --verbose (Claude Code CLI
16
+ * returns an error without it). See claudeCode() run() below.
17
+ */
18
+ function makeClaudeEventParser() {
19
+ // tool_use_id (e.g. "toolu_01xxx") → tool name (e.g. "Bash")
20
+ const toolNames = new Map();
21
+ return function parse(raw) {
22
+ if (typeof raw !== "object" || raw === null)
23
+ return null;
24
+ const r = raw;
25
+ if (r["type"] === "assistant") {
26
+ const message = r["message"];
27
+ const content = message?.["content"];
28
+ if (!Array.isArray(content))
29
+ return null;
30
+ for (const block of content) {
31
+ if (typeof block !== "object" || block === null)
32
+ continue;
33
+ const b = block;
34
+ if (b["type"] === "thinking" && typeof b["thinking"] === "string") {
35
+ return { type: "thinking", text: b["thinking"] };
36
+ }
37
+ if (b["type"] === "text" && typeof b["text"] === "string") {
38
+ return { type: "text", text: b["text"] };
39
+ }
40
+ if (b["type"] === "tool_use" && typeof b["name"] === "string") {
41
+ // Register the id→name mapping so tool_result events can look it up
42
+ if (typeof b["id"] === "string")
43
+ toolNames.set(b["id"], b["name"]);
44
+ return { type: "tool_call", tool: b["name"], input: b["input"] };
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ // Tool results arrive as "user" messages with tool_result content blocks.
50
+ // Format confirmed from Claude Code CLI 2.x stream-json output.
51
+ if (r["type"] === "user") {
52
+ const message = r["message"];
53
+ const content = message?.["content"];
54
+ if (!Array.isArray(content))
55
+ return null;
56
+ for (const block of content) {
57
+ if (typeof block !== "object" || block === null)
58
+ continue;
59
+ const b = block;
60
+ if (b["type"] !== "tool_result")
61
+ continue;
62
+ const toolUseId = typeof b["tool_use_id"] === "string" ? b["tool_use_id"] : "";
63
+ const toolName = toolNames.get(toolUseId) ?? toolUseId;
64
+ const isError = b["is_error"] === true;
65
+ const output = typeof b["content"] === "string" ? b["content"] : "";
66
+ return { type: "tool_result", tool: toolName, success: !isError, output };
67
+ }
68
+ return null;
69
+ }
70
+ // system, result, rate_limit_event — silently ignored
71
+ return null;
72
+ };
73
+ }
3
74
  export function claudeCode(config) {
4
75
  const log = config?.logger ?? consoleLogger;
5
76
  const extraFlags = config?.cliFlags ?? [];
6
77
  const quiet = config?.quiet ?? false;
78
+ const onEvent = config?.onEvent;
7
79
  return {
8
80
  async install() {
9
81
  if (isCliInstalled("claude")) {
@@ -26,10 +98,33 @@ export function claudeCode(config) {
26
98
  String(opts.maxTurns),
27
99
  ...extraFlags,
28
100
  ];
29
- return await execCommand("claude", args, {
101
+ if (onEvent) {
102
+ // --output-format stream-json requires --verbose; omitting it causes
103
+ // the CLI to exit with "stream-json requires --verbose" error.
104
+ args.push("--output-format", "stream-json", "--verbose");
105
+ const parse = makeClaudeEventParser();
106
+ return spawnLines("claude", args, {
107
+ env: opts.env,
108
+ timeoutMs: opts.timeoutMs,
109
+ logger: log,
110
+ onLine(line) {
111
+ try {
112
+ const evt = JSON.parse(line);
113
+ const mapped = parse(evt);
114
+ if (mapped)
115
+ return onEvent(mapped);
116
+ }
117
+ catch {
118
+ /* skip malformed JSON lines */
119
+ }
120
+ },
121
+ });
122
+ }
123
+ return execCommand("claude", args, {
30
124
  env: { ...process.env, ...opts.env },
31
125
  ignoreReturnCode: true,
32
126
  quiet,
127
+ timeoutMs: opts.timeoutMs,
33
128
  onStderr: quiet ? (line) => log.debug(line) : undefined,
34
129
  });
35
130
  },
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/coding-agent/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAS1D,MAAM,UAAU,UAAU,CAAC,MAAyB;IAClD,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;IAErC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC1C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,2BAA2B,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACpF,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAA2B;YACnC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAEzC,MAAM,IAAI,GAAG;gBACX,IAAI;gBACJ,IAAI,CAAC,MAAM;gBACX,gBAAgB;gBAChB,GAAG;gBACH,gCAAgC;gBAChC,aAAa;gBACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACrB,GAAG,UAAU;aACd,CAAC;YAEF,OAAO,MAAM,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE;gBACvC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAA4B;gBAC9D,gBAAgB,EAAE,IAAI;gBACtB,KAAK;gBACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/coding-agent/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,15 @@
1
- import type { CodingAgent } from "./types.js";
1
+ import type { CodingAgent, AgentEventHandler } from "./types.js";
2
2
  import type { Logger } from "../logger.js";
3
3
  export interface GoogleGeminiConfig {
4
4
  cliFlags?: string[];
5
5
  logger?: Logger;
6
- /** Suppress agent stdout; forward stderr through logger */
6
+ /** Suppress agent stdout; forward stderr through logger. */
7
7
  quiet?: boolean;
8
+ /**
9
+ * Receive events during run(). Gemini CLI does not emit structured JSON, so
10
+ * each stdout line is forwarded as `{ type: "text", text: line }`.
11
+ */
12
+ onEvent?: AgentEventHandler;
8
13
  }
9
14
  export declare function googleGemini(config?: GoogleGeminiConfig): CodingAgent;
10
15
  //# sourceMappingURL=google-gemini.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../src/coding-agent/google-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,WAAW,CA6BrE"}
1
+ {"version":3,"file":"google-gemini.d.ts","sourceRoot":"","sources":["../../src/coding-agent/google-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAwCrE"}
@@ -1,9 +1,10 @@
1
1
  import { consoleLogger } from "../logger.js";
2
- import { execCommand, isCliInstalled } from "./shared.js";
2
+ import { execCommand, spawnLines, isCliInstalled } from "./shared.js";
3
3
  export function googleGemini(config) {
4
4
  const log = config?.logger ?? consoleLogger;
5
5
  const extraFlags = config?.cliFlags ?? [];
6
6
  const quiet = config?.quiet ?? false;
7
+ const onEvent = config?.onEvent;
7
8
  return {
8
9
  async install() {
9
10
  if (isCliInstalled("gemini")) {
@@ -17,10 +18,19 @@ export function googleGemini(config) {
17
18
  async run(opts) {
18
19
  log.info("Running Google Gemini agent...");
19
20
  const args = ["-y", "-p", opts.prompt, ...extraFlags];
21
+ if (onEvent) {
22
+ return spawnLines("gemini", args, {
23
+ env: opts.env,
24
+ timeoutMs: opts.timeoutMs,
25
+ logger: log,
26
+ onLine: (line) => onEvent({ type: "text", text: line }),
27
+ });
28
+ }
20
29
  return execCommand("gemini", args, {
21
30
  env: { ...process.env, ...opts.env },
22
31
  ignoreReturnCode: true,
23
32
  quiet,
33
+ timeoutMs: opts.timeoutMs,
24
34
  onStderr: quiet ? (line) => log.debug(line) : undefined,
25
35
  });
26
36
  },
@@ -1 +1 @@
1
- {"version":3,"file":"google-gemini.js","sourceRoot":"","sources":["../../src/coding-agent/google-gemini.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAS1D,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;IAErC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC5C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7E,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAA2B;YACnC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAE3C,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;YAEtD,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE;gBACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAA4B;gBAC9D,gBAAgB,EAAE,IAAI;gBACtB,KAAK;gBACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"google-gemini.js","sourceRoot":"","sources":["../../src/coding-agent/google-gemini.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AActE,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAEhC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC5C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7E,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAA2B;YACnC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAE3C,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;YAEtD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE;oBAChC,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,GAAG;oBACX,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE;gBACjC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAA4B;gBAC9D,gBAAgB,EAAE,IAAI;gBACtB,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,8 +1,10 @@
1
- export type { CodingAgent, CodingAgentRunOptions } from "./types.js";
1
+ export type { CodingAgent, CodingAgentRunOptions, AgentEvent, AgentEventHandler } from "./types.js";
2
2
  export type { ClaudeCodeConfig } from "./claude-code.js";
3
3
  export type { OpenAICodexConfig } from "./openai-codex.js";
4
4
  export type { GoogleGeminiConfig } from "./google-gemini.js";
5
+ export type { MockCodingAgentConfig } from "./mock.js";
5
6
  export { claudeCode } from "./claude-code.js";
6
7
  export { openaiCodex } from "./openai-codex.js";
7
8
  export { googleGemini } from "./google-gemini.js";
9
+ export { mockAgent } from "./mock.js";
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coding-agent/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coding-agent/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,qBAAqB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpG,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { claudeCode } from "./claude-code.js";
2
2
  export { openaiCodex } from "./openai-codex.js";
3
3
  export { googleGemini } from "./google-gemini.js";
4
+ export { mockAgent } from "./mock.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coding-agent/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coding-agent/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { CodingAgent, CodingAgentRunOptions, AgentEventHandler } from "./types.js";
2
+ export interface MockCodingAgentConfig {
3
+ /**
4
+ * Called when run() is invoked. Use this to write fixture files, assert
5
+ * prompts, or simulate agent-side side effects.
6
+ */
7
+ onRun?: (opts: CodingAgentRunOptions) => void | Promise<void>;
8
+ /** Exit code returned from run(). Defaults to 0 (success). */
9
+ exitCode?: number;
10
+ onEvent?: AgentEventHandler;
11
+ }
12
+ /**
13
+ * A no-op coding agent for use in tests and local file-provider E2E runs.
14
+ * install() is a no-op. run() calls onRun (if provided) and returns exitCode.
15
+ */
16
+ export declare function mockAgent(config?: MockCodingAgentConfig): CodingAgent;
17
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/coding-agent/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,WAAW,CAYrE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * A no-op coding agent for use in tests and local file-provider E2E runs.
3
+ * install() is a no-op. run() calls onRun (if provided) and returns exitCode.
4
+ */
5
+ export function mockAgent(config) {
6
+ return {
7
+ async install() { },
8
+ async run(opts) {
9
+ await config?.onRun?.(opts);
10
+ if (config?.onEvent) {
11
+ await config.onEvent({ type: "text", text: "mock agent run" });
12
+ }
13
+ return config?.exitCode ?? 0;
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/coding-agent/mock.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAA8B;IACtD,OAAO;QACL,KAAK,CAAC,OAAO,KAAmB,CAAC;QAEjC,KAAK,CAAC,GAAG,CAAC,IAA2B;YACnC,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,10 +1,15 @@
1
- import type { CodingAgent } from "./types.js";
1
+ import type { CodingAgent, AgentEventHandler } from "./types.js";
2
2
  import type { Logger } from "../logger.js";
3
3
  export interface OpenAICodexConfig {
4
4
  cliFlags?: string[];
5
5
  logger?: Logger;
6
- /** Suppress agent stdout; forward stderr through logger */
6
+ /** Suppress agent stdout; forward stderr through logger. */
7
7
  quiet?: boolean;
8
+ /**
9
+ * Receive events during run(). Codex CLI does not emit structured JSON, so
10
+ * each stdout line is forwarded as `{ type: "text", text: line }`.
11
+ */
12
+ onEvent?: AgentEventHandler;
8
13
  }
9
14
  export declare function openaiCodex(config?: OpenAICodexConfig): CodingAgent;
10
15
  //# sourceMappingURL=openai-codex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex.d.ts","sourceRoot":"","sources":["../../src/coding-agent/openai-codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CA6BnE"}
1
+ {"version":3,"file":"openai-codex.d.ts","sourceRoot":"","sources":["../../src/coding-agent/openai-codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAyB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAwCnE"}
@@ -1,9 +1,10 @@
1
1
  import { consoleLogger } from "../logger.js";
2
- import { execCommand, isCliInstalled } from "./shared.js";
2
+ import { execCommand, spawnLines, isCliInstalled } from "./shared.js";
3
3
  export function openaiCodex(config) {
4
4
  const log = config?.logger ?? consoleLogger;
5
5
  const extraFlags = config?.cliFlags ?? [];
6
6
  const quiet = config?.quiet ?? false;
7
+ const onEvent = config?.onEvent;
7
8
  return {
8
9
  async install() {
9
10
  if (isCliInstalled("codex")) {
@@ -17,10 +18,19 @@ export function openaiCodex(config) {
17
18
  async run(opts) {
18
19
  log.info("Running OpenAI Codex agent...");
19
20
  const args = ["exec", "--full-auto", opts.prompt, ...extraFlags];
21
+ if (onEvent) {
22
+ return spawnLines("codex", args, {
23
+ env: opts.env,
24
+ timeoutMs: opts.timeoutMs,
25
+ logger: log,
26
+ onLine: (line) => onEvent({ type: "text", text: line }),
27
+ });
28
+ }
20
29
  return execCommand("codex", args, {
21
30
  env: { ...process.env, ...opts.env },
22
31
  ignoreReturnCode: true,
23
32
  quiet,
33
+ timeoutMs: opts.timeoutMs,
24
34
  onStderr: quiet ? (line) => log.debug(line) : undefined,
25
35
  });
26
36
  },
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex.js","sourceRoot":"","sources":["../../src/coding-agent/openai-codex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAS1D,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;IAErC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC3C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAA2B;YACnC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAE1C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;YAEjE,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;gBAChC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAA4B;gBAC9D,gBAAgB,EAAE,IAAI;gBACtB,KAAK;gBACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"openai-codex.js","sourceRoot":"","sources":["../../src/coding-agent/openai-codex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AActE,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,MAAM,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,aAAa,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAEhC,OAAO;QACL,KAAK,CAAC,OAAO;YACX,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC3C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAA2B;YACnC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAE1C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;YAEjE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE;oBAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,GAAG;oBACX,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;gBAChC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAA4B;gBAC9D,gBAAgB,EAAE,IAAI;gBACtB,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACxD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,10 +1,26 @@
1
+ import type { Logger } from "../logger.js";
1
2
  export interface ExecOptions {
2
3
  env?: Record<string, string>;
3
4
  ignoreReturnCode?: boolean;
4
5
  /** Suppress stdout; pipe stderr through onStderr callback */
5
6
  quiet?: boolean;
6
7
  onStderr?: (line: string) => void;
8
+ /** Kill process after this many ms. */
9
+ timeoutMs?: number;
7
10
  }
8
11
  export declare function execCommand(cmd: string, args: string[], opts?: ExecOptions): Promise<number>;
12
+ export interface SpawnLinesOptions {
13
+ env?: Record<string, string>;
14
+ /** Called for each complete stdout line. Async errors are logged, not swallowed. */
15
+ onLine: (line: string) => void | Promise<void>;
16
+ /** Kill process after this many ms. Resolves with -1 on timeout/signal. */
17
+ timeoutMs?: number;
18
+ logger?: Logger;
19
+ }
20
+ /**
21
+ * Spawns a command, processes stdout line-by-line, forwards stderr to the
22
+ * logger, and resolves with the exit code (-1 if killed by timeout or signal).
23
+ */
24
+ export declare function spawnLines(cmd: string, args: string[], opts: SpawnLinesOptions): Promise<number>;
9
25
  export declare function isCliInstalled(cmd: string): boolean;
10
26
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/coding-agent/shared.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B5F;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/coding-agent/shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C5F;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,oFAAoF;IACpF,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqEhG;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOnD"}
@@ -5,6 +5,13 @@ export function execCommand(cmd, args, opts) {
5
5
  env: opts?.env ?? process.env,
6
6
  stdio: opts?.quiet ? ["ignore", "ignore", "pipe"] : "inherit",
7
7
  });
8
+ let timer;
9
+ if (opts?.timeoutMs) {
10
+ timer = setTimeout(() => {
11
+ child.kill();
12
+ reject(new Error(`${cmd} exceeded timeout (${opts.timeoutMs}ms)`));
13
+ }, opts.timeoutMs);
14
+ }
8
15
  if (opts?.quiet && child.stderr) {
9
16
  let buf = "";
10
17
  child.stderr.on("data", (chunk) => {
@@ -21,8 +28,14 @@ export function execCommand(cmd, args, opts) {
21
28
  opts.onStderr?.(buf.trim());
22
29
  });
23
30
  }
24
- child.on("error", (err) => reject(err));
31
+ child.on("error", (err) => {
32
+ if (timer !== undefined)
33
+ clearTimeout(timer);
34
+ reject(err);
35
+ });
25
36
  child.on("close", (code) => {
37
+ if (timer !== undefined)
38
+ clearTimeout(timer);
26
39
  if (code !== 0 && !opts?.ignoreReturnCode) {
27
40
  reject(new Error(`${cmd} exited with code ${code}`));
28
41
  }
@@ -32,6 +45,81 @@ export function execCommand(cmd, args, opts) {
32
45
  });
33
46
  });
34
47
  }
48
+ /**
49
+ * Spawns a command, processes stdout line-by-line, forwards stderr to the
50
+ * logger, and resolves with the exit code (-1 if killed by timeout or signal).
51
+ */
52
+ export function spawnLines(cmd, args, opts) {
53
+ return new Promise((resolve, reject) => {
54
+ const child = spawn(cmd, args, {
55
+ env: { ...process.env, ...opts.env },
56
+ stdio: ["ignore", "pipe", "pipe"],
57
+ });
58
+ let timer;
59
+ if (opts.timeoutMs) {
60
+ timer = setTimeout(() => {
61
+ opts.logger?.warn(`${cmd} exceeded timeout (${opts.timeoutMs}ms) — killing process`);
62
+ child.kill();
63
+ }, opts.timeoutMs);
64
+ }
65
+ const cleanup = () => {
66
+ if (timer !== undefined)
67
+ clearTimeout(timer);
68
+ };
69
+ const dispatchLine = (line) => {
70
+ if (!line.trim())
71
+ return;
72
+ const result = opts.onLine(line);
73
+ if (result instanceof Promise) {
74
+ result.catch((err) => {
75
+ opts.logger?.warn(`[${cmd}] event handler error: ${err instanceof Error ? err.message : String(err)}`);
76
+ });
77
+ }
78
+ };
79
+ let stdoutBuf = "";
80
+ child.stdout?.on("data", (chunk) => {
81
+ stdoutBuf += chunk.toString();
82
+ const lines = stdoutBuf.split("\n");
83
+ stdoutBuf = lines.pop() ?? "";
84
+ for (const line of lines)
85
+ dispatchLine(line);
86
+ });
87
+ child.stdout?.on("end", () => {
88
+ if (stdoutBuf)
89
+ dispatchLine(stdoutBuf);
90
+ stdoutBuf = "";
91
+ });
92
+ // Stderr is forwarded to the logger — never silently discarded.
93
+ let stderrBuf = "";
94
+ child.stderr?.on("data", (chunk) => {
95
+ stderrBuf += chunk.toString();
96
+ const lines = stderrBuf.split("\n");
97
+ stderrBuf = lines.pop() ?? "";
98
+ for (const line of lines) {
99
+ if (line.trim())
100
+ opts.logger?.warn(`[${cmd} stderr] ${line.trim()}`);
101
+ }
102
+ });
103
+ child.stderr?.on("end", () => {
104
+ if (stderrBuf.trim())
105
+ opts.logger?.warn(`[${cmd} stderr] ${stderrBuf.trim()}`);
106
+ });
107
+ child.on("error", (err) => {
108
+ cleanup();
109
+ reject(err);
110
+ });
111
+ child.on("close", (code, signal) => {
112
+ cleanup();
113
+ if (signal) {
114
+ opts.logger?.warn(`${cmd} killed by signal ${signal}`);
115
+ resolve(-1);
116
+ }
117
+ else {
118
+ resolve(code ?? 0);
119
+ }
120
+ });
121
+ });
122
+ }
35
123
  export function isCliInstalled(cmd) {
36
124
  try {
37
125
  execSync(`${cmd} --version`, { stdio: "ignore" });
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/coding-agent/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAUrD,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,IAAc,EAAE,IAAkB;IACzE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG;YAC7B,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC,CAAC;QAEH,IAAI,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,IAAI,EAAE;wBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBAC1B,IAAI,GAAG,CAAC,IAAI,EAAE;oBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/coding-agent/shared.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,33 @@ export interface CodingAgentRunOptions {
2
2
  prompt: string;
3
3
  maxTurns: number;
4
4
  env?: Record<string, string>;
5
+ /** Kill the agent process after this many milliseconds. No limit if omitted. */
6
+ timeoutMs?: number;
5
7
  }
6
8
  export interface CodingAgent {
7
9
  install(): Promise<void>;
8
10
  run(opts: CodingAgentRunOptions): Promise<number>;
9
11
  }
12
+ /** A real-time event emitted by a coding agent provider during run(). */
13
+ export type AgentEvent = {
14
+ type: "text";
15
+ text: string;
16
+ } | {
17
+ type: "tool_call";
18
+ tool: string;
19
+ input: unknown;
20
+ } | {
21
+ type: "tool_result";
22
+ tool: string;
23
+ success: boolean;
24
+ output: string;
25
+ } | {
26
+ type: "thinking";
27
+ text: string;
28
+ } | {
29
+ type: "error";
30
+ message: string;
31
+ };
32
+ /** Callback signature for receiving agent events. */
33
+ export type AgentEventHandler = (event: AgentEvent) => void | Promise<void>;
10
34
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/coding-agent/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,GAAG,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/coding-agent/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,GAAG,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED,yEAAyE;AACzE,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,qDAAqD;AACrD,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -4,16 +4,8 @@ import type { CredentialVaultProvider } from "./types.js";
4
4
  export declare const awsSecretsManagerConfigSchema: z.ZodObject<{
5
5
  region: z.ZodDefault<z.ZodString>;
6
6
  prefix: z.ZodDefault<z.ZodString>;
7
- logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
8
- }, "strip", z.ZodTypeAny, {
9
- region: string;
10
- prefix: string;
11
- logger?: Logger | undefined;
12
- }, {
13
- logger?: Logger | undefined;
14
- region?: string | undefined;
15
- prefix?: string | undefined;
16
- }>;
7
+ logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
8
+ }, z.core.$strip>;
17
9
  export type AwsSecretsManagerConfig = z.infer<typeof awsSecretsManagerConfigSchema>;
18
10
  export declare function awsSecretsManager(config?: AwsSecretsManagerConfig): CredentialVaultProvider;
19
11
  //# sourceMappingURL=aws-secrets-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aws-secrets-manager.d.ts","sourceRoot":"","sources":["../../src/credential-vault/aws-secrets-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,6BAA6B;;;;;;;;;;;;EAIxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,CAG3F"}
1
+ {"version":3,"file":"aws-secrets-manager.d.ts","sourceRoot":"","sources":["../../src/credential-vault/aws-secrets-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,6BAA6B;;;;iBAIxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,CAG3F"}
@@ -3,17 +3,12 @@ import type { Logger } from "../logger.js";
3
3
  import type { IncidentProvider } from "./types.js";
4
4
  export declare const opsgenieConfigSchema: z.ZodObject<{
5
5
  apiKey: z.ZodString;
6
- region: z.ZodDefault<z.ZodEnum<["us", "eu"]>>;
7
- logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
8
- }, "strip", z.ZodTypeAny, {
9
- apiKey: string;
10
- region: "us" | "eu";
11
- logger?: Logger | undefined;
12
- }, {
13
- apiKey: string;
14
- logger?: Logger | undefined;
15
- region?: "us" | "eu" | undefined;
16
- }>;
6
+ region: z.ZodDefault<z.ZodEnum<{
7
+ us: "us";
8
+ eu: "eu";
9
+ }>>;
10
+ logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
11
+ }, z.core.$strip>;
17
12
  export type OpsGenieConfig = z.infer<typeof opsgenieConfigSchema>;
18
13
  export declare function opsgenie(config: OpsGenieConfig): IncidentProvider;
19
14
  //# sourceMappingURL=opsgenie.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opsgenie.d.ts","sourceRoot":"","sources":["../../src/incident/opsgenie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAgD,MAAM,YAAY,CAAC;AAEjG,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAGjE"}
1
+ {"version":3,"file":"opsgenie.d.ts","sourceRoot":"","sources":["../../src/incident/opsgenie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAgD,MAAM,YAAY,CAAC;AAEjG,eAAO,MAAM,oBAAoB;;;;;;;iBAI/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAGjE"}