@openclaw/crabline 0.1.10 → 0.1.12

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 (197) hide show
  1. package/README.md +99 -12
  2. package/dist/src/bin/crabline.js +3 -1
  3. package/dist/src/bin/crabline.js.map +1 -1
  4. package/dist/src/cli/program.d.ts +5 -1
  5. package/dist/src/cli/program.js +264 -50
  6. package/dist/src/cli/program.js.map +1 -1
  7. package/dist/src/config/load.js +39 -3
  8. package/dist/src/config/load.js.map +1 -1
  9. package/dist/src/config/schema.d.ts +20 -0
  10. package/dist/src/config/schema.js +163 -35
  11. package/dist/src/config/schema.js.map +1 -1
  12. package/dist/src/core/errors.d.ts +1 -0
  13. package/dist/src/core/errors.js +6 -3
  14. package/dist/src/core/errors.js.map +1 -1
  15. package/dist/src/core/http-path.d.ts +1 -0
  16. package/dist/src/core/http-path.js +14 -0
  17. package/dist/src/core/http-path.js.map +1 -0
  18. package/dist/src/core/matcher.d.ts +3 -1
  19. package/dist/src/core/matcher.js +58 -2
  20. package/dist/src/core/matcher.js.map +1 -1
  21. package/dist/src/core/nonces.d.ts +2 -0
  22. package/dist/src/core/nonces.js +11 -1
  23. package/dist/src/core/nonces.js.map +1 -1
  24. package/dist/src/core/reporters.d.ts +5 -0
  25. package/dist/src/core/reporters.js +26 -2
  26. package/dist/src/core/reporters.js.map +1 -1
  27. package/dist/src/core/run.d.ts +3 -1
  28. package/dist/src/core/run.js +178 -66
  29. package/dist/src/core/run.js.map +1 -1
  30. package/dist/src/matrix-ids.d.ts +5 -0
  31. package/dist/src/matrix-ids.js +83 -0
  32. package/dist/src/matrix-ids.js.map +1 -0
  33. package/dist/src/openclaw/artifact-generation.d.ts +12 -2
  34. package/dist/src/openclaw/artifact-generation.js +436 -15
  35. package/dist/src/openclaw/artifact-generation.js.map +1 -1
  36. package/dist/src/openclaw/bridges/matrix.js +21 -4
  37. package/dist/src/openclaw/bridges/matrix.js.map +1 -1
  38. package/dist/src/openclaw/bridges/mattermost.js +13 -8
  39. package/dist/src/openclaw/bridges/mattermost.js.map +1 -1
  40. package/dist/src/openclaw/bridges/probe-response.d.ts +1 -0
  41. package/dist/src/openclaw/bridges/probe-response.js +5 -0
  42. package/dist/src/openclaw/bridges/probe-response.js.map +1 -0
  43. package/dist/src/openclaw/bridges/signal.js +15 -6
  44. package/dist/src/openclaw/bridges/signal.js.map +1 -1
  45. package/dist/src/openclaw/bridges/slack.js +116 -23
  46. package/dist/src/openclaw/bridges/slack.js.map +1 -1
  47. package/dist/src/openclaw/bridges/telegram.js +45 -19
  48. package/dist/src/openclaw/bridges/telegram.js.map +1 -1
  49. package/dist/src/openclaw/bridges/whatsapp.js +32 -16
  50. package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
  51. package/dist/src/openclaw/bridges/zalo.js +8 -3
  52. package/dist/src/openclaw/bridges/zalo.js.map +1 -1
  53. package/dist/src/openclaw/private-file.d.ts +40 -3
  54. package/dist/src/openclaw/private-file.js +2070 -95
  55. package/dist/src/openclaw/private-file.js.map +1 -1
  56. package/dist/src/openclaw/shared.d.ts +1 -0
  57. package/dist/src/openclaw/shared.js +48 -13
  58. package/dist/src/openclaw/shared.js.map +1 -1
  59. package/dist/src/openclaw/smoke-lock.d.ts +9 -0
  60. package/dist/src/openclaw/smoke-lock.js +696 -187
  61. package/dist/src/openclaw/smoke-lock.js.map +1 -1
  62. package/dist/src/openclaw.js +352 -29
  63. package/dist/src/openclaw.js.map +1 -1
  64. package/dist/src/platform/process-owned-lock.d.ts +11 -0
  65. package/dist/src/platform/process-owned-lock.js +1698 -0
  66. package/dist/src/platform/process-owned-lock.js.map +1 -0
  67. package/dist/src/platform/recorder-directory.d.ts +1 -0
  68. package/dist/src/platform/recorder-directory.js +14 -0
  69. package/dist/src/platform/recorder-directory.js.map +1 -0
  70. package/dist/src/platform/windows-acl.d.ts +18 -0
  71. package/dist/src/platform/windows-acl.js +1367 -0
  72. package/dist/src/platform/windows-acl.js.map +1 -0
  73. package/dist/src/platform/windows-lock-root.d.ts +13 -0
  74. package/dist/src/platform/windows-lock-root.js +98 -0
  75. package/dist/src/platform/windows-lock-root.js.map +1 -0
  76. package/dist/src/providers/builtin/discord.d.ts +4 -0
  77. package/dist/src/providers/builtin/discord.js +52 -9
  78. package/dist/src/providers/builtin/discord.js.map +1 -1
  79. package/dist/src/providers/builtin/external-webhook-auth.d.ts +1 -0
  80. package/dist/src/providers/builtin/external-webhook-auth.js +38 -1
  81. package/dist/src/providers/builtin/external-webhook-auth.js.map +1 -1
  82. package/dist/src/providers/builtin/feishu.d.ts +1 -0
  83. package/dist/src/providers/builtin/feishu.js +96 -26
  84. package/dist/src/providers/builtin/feishu.js.map +1 -1
  85. package/dist/src/providers/builtin/googlechat.d.ts +1 -0
  86. package/dist/src/providers/builtin/googlechat.js +95 -26
  87. package/dist/src/providers/builtin/googlechat.js.map +1 -1
  88. package/dist/src/providers/builtin/imessage.js +60 -17
  89. package/dist/src/providers/builtin/imessage.js.map +1 -1
  90. package/dist/src/providers/builtin/loopback.js +88 -35
  91. package/dist/src/providers/builtin/loopback.js.map +1 -1
  92. package/dist/src/providers/builtin/matrix.d.ts +2 -2
  93. package/dist/src/providers/builtin/matrix.js +78 -21
  94. package/dist/src/providers/builtin/matrix.js.map +1 -1
  95. package/dist/src/providers/builtin/mattermost.d.ts +11 -7
  96. package/dist/src/providers/builtin/mattermost.js +138 -24
  97. package/dist/src/providers/builtin/mattermost.js.map +1 -1
  98. package/dist/src/providers/builtin/msteams.d.ts +1 -0
  99. package/dist/src/providers/builtin/msteams.js +118 -38
  100. package/dist/src/providers/builtin/msteams.js.map +1 -1
  101. package/dist/src/providers/builtin/native-local-mock.js +4 -4
  102. package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
  103. package/dist/src/providers/builtin/script.js +1057 -146
  104. package/dist/src/providers/builtin/script.js.map +1 -1
  105. package/dist/src/providers/builtin/slack.d.ts +8 -1
  106. package/dist/src/providers/builtin/slack.js +327 -24
  107. package/dist/src/providers/builtin/slack.js.map +1 -1
  108. package/dist/src/providers/builtin/telegram.d.ts +1 -1
  109. package/dist/src/providers/builtin/telegram.js +55 -14
  110. package/dist/src/providers/builtin/telegram.js.map +1 -1
  111. package/dist/src/providers/builtin/whatsapp.d.ts +4 -3
  112. package/dist/src/providers/builtin/whatsapp.js +157 -29
  113. package/dist/src/providers/builtin/whatsapp.js.map +1 -1
  114. package/dist/src/providers/builtin/zalo.d.ts +5 -2
  115. package/dist/src/providers/builtin/zalo.js +31 -7
  116. package/dist/src/providers/builtin/zalo.js.map +1 -1
  117. package/dist/src/providers/catalog.d.ts +1 -1
  118. package/dist/src/providers/catalog.js +1 -1
  119. package/dist/src/providers/catalog.js.map +1 -1
  120. package/dist/src/providers/local-mock.d.ts +4 -0
  121. package/dist/src/providers/local-mock.js +162 -35
  122. package/dist/src/providers/local-mock.js.map +1 -1
  123. package/dist/src/providers/native-ids.d.ts +2 -0
  124. package/dist/src/providers/native-ids.js +3 -0
  125. package/dist/src/providers/native-ids.js.map +1 -1
  126. package/dist/src/providers/recorder.d.ts +14 -3
  127. package/dist/src/providers/recorder.js +532 -42
  128. package/dist/src/providers/recorder.js.map +1 -1
  129. package/dist/src/providers/registry.d.ts +1 -0
  130. package/dist/src/providers/registry.js +65 -20
  131. package/dist/src/providers/registry.js.map +1 -1
  132. package/dist/src/providers/signed-jwt.d.ts +6 -1
  133. package/dist/src/providers/signed-jwt.js +241 -50
  134. package/dist/src/providers/signed-jwt.js.map +1 -1
  135. package/dist/src/providers/slack-ids.d.ts +1 -0
  136. package/dist/src/providers/slack-ids.js +5 -0
  137. package/dist/src/providers/slack-ids.js.map +1 -1
  138. package/dist/src/providers/target-normalizers.d.ts +9 -1
  139. package/dist/src/providers/target-normalizers.js +177 -58
  140. package/dist/src/providers/target-normalizers.js.map +1 -1
  141. package/dist/src/providers/webhook-server.d.ts +3 -0
  142. package/dist/src/providers/webhook-server.js +268 -47
  143. package/dist/src/providers/webhook-server.js.map +1 -1
  144. package/dist/src/servers/http.d.ts +14 -2
  145. package/dist/src/servers/http.js +229 -58
  146. package/dist/src/servers/http.js.map +1 -1
  147. package/dist/src/servers/matrix.d.ts +3 -0
  148. package/dist/src/servers/matrix.js +268 -110
  149. package/dist/src/servers/matrix.js.map +1 -1
  150. package/dist/src/servers/mattermost.d.ts +5 -0
  151. package/dist/src/servers/mattermost.js +389 -91
  152. package/dist/src/servers/mattermost.js.map +1 -1
  153. package/dist/src/servers/recorder.d.ts +11 -0
  154. package/dist/src/servers/recorder.js +1241 -22
  155. package/dist/src/servers/recorder.js.map +1 -1
  156. package/dist/src/servers/signal.d.ts +1 -0
  157. package/dist/src/servers/signal.js +279 -44
  158. package/dist/src/servers/signal.js.map +1 -1
  159. package/dist/src/servers/slack.d.ts +15 -0
  160. package/dist/src/servers/slack.js +259 -51
  161. package/dist/src/servers/slack.js.map +1 -1
  162. package/dist/src/servers/telegram-identity.d.ts +6 -0
  163. package/dist/src/servers/telegram-identity.js +27 -0
  164. package/dist/src/servers/telegram-identity.js.map +1 -0
  165. package/dist/src/servers/telegram.d.ts +17 -6
  166. package/dist/src/servers/telegram.js +1193 -118
  167. package/dist/src/servers/telegram.js.map +1 -1
  168. package/dist/src/servers/webhook-target.d.ts +12 -4
  169. package/dist/src/servers/webhook-target.js +226 -28
  170. package/dist/src/servers/webhook-target.js.map +1 -1
  171. package/dist/src/servers/whatsapp-baileys-websocket.d.ts +60 -1
  172. package/dist/src/servers/whatsapp-baileys-websocket.js +782 -112
  173. package/dist/src/servers/whatsapp-baileys-websocket.js.map +1 -1
  174. package/dist/src/servers/whatsapp-jid.d.ts +1 -0
  175. package/dist/src/servers/whatsapp-jid.js +9 -5
  176. package/dist/src/servers/whatsapp-jid.js.map +1 -1
  177. package/dist/src/servers/whatsapp-wire/binary-node.d.ts +1 -0
  178. package/dist/src/servers/whatsapp-wire/binary-node.js +37 -13
  179. package/dist/src/servers/whatsapp-wire/binary-node.js.map +1 -1
  180. package/dist/src/servers/whatsapp-wire/crypto.d.ts +3 -0
  181. package/dist/src/servers/whatsapp-wire/crypto.js +23 -8
  182. package/dist/src/servers/whatsapp-wire/crypto.js.map +1 -1
  183. package/dist/src/servers/whatsapp-wire/handshake.d.ts +9 -3
  184. package/dist/src/servers/whatsapp-wire/handshake.js +173 -12
  185. package/dist/src/servers/whatsapp-wire/handshake.js.map +1 -1
  186. package/dist/src/servers/whatsapp-wire/signal.js +3 -3
  187. package/dist/src/servers/whatsapp-wire/signal.js.map +1 -1
  188. package/dist/src/servers/whatsapp.d.ts +7 -0
  189. package/dist/src/servers/whatsapp.js +149 -24
  190. package/dist/src/servers/whatsapp.js.map +1 -1
  191. package/dist/src/servers/zalo.d.ts +1 -0
  192. package/dist/src/servers/zalo.js +193 -82
  193. package/dist/src/servers/zalo.js.map +1 -1
  194. package/docs/channel-setup.md +185 -43
  195. package/fixtures/examples/crabline.example.yaml +3 -2
  196. package/package.json +18 -10
  197. package/fixtures/examples/openclaw-bridge.yaml +0 -125
@@ -1 +1 @@
1
- {"version":3,"file":"script.js","sourceRoot":"","sources":["../../../../src/providers/builtin/script.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn, type ChildProcess, type ChildProcessByStdio } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { z } from \"zod\";\nimport { CrablineError, ensureErrorMessage } from \"../../core/errors.js\";\nimport type {\n InboundEnvelope,\n ProviderAdapter,\n ProviderContext,\n SendContext,\n WaitContext,\n WatchContext,\n} from \"../types.js\";\n\nconst MAX_SCRIPT_OUTPUT_BYTES = 1024 * 1024;\nconst SCRIPT_WAIT_EXIT_GRACE_MS = 250;\nconst WINDOWS_TERMINATION_TIMEOUT_MS = 5_000;\n\ntype ScriptWatchIterator = AsyncIterableIterator<InboundEnvelope> & {\n [Symbol.asyncIterator](): ScriptWatchIterator;\n return(): Promise<IteratorResult<InboundEnvelope, undefined>>;\n throw(error?: unknown): Promise<IteratorResult<InboundEnvelope, undefined>>;\n};\n\ntype ScriptPayload = {\n fixture: ProviderContext[\"fixture\"];\n provider: {\n config: ProviderContext[\"config\"];\n id: string;\n manifestPath: string;\n };\n};\n\ntype ScriptDiagnosticsSnapshot = {\n configuredCommands: string[];\n sensitiveEnvironmentValues: string[];\n sensitivePayloadValues: string[];\n};\n\ntype SpawnedScriptChild = ChildProcessByStdio<Writable, Readable, Readable>;\n\nconst ScriptMessageSchema = z.object({\n author: z.enum([\"assistant\", \"system\", \"user\"]),\n id: z.string().min(1),\n raw: z.unknown().optional(),\n sentAt: z.string().min(1),\n text: z.string(),\n threadId: z.string().min(1),\n});\n\nconst ScriptProbeResultSchema = z.object({\n details: z.array(z.string()).optional(),\n healthy: z.boolean(),\n});\n\nconst ScriptSendResultSchema = z.object({\n accepted: z.boolean(),\n messageId: z.string().min(1),\n threadId: z.string().min(1),\n});\n\nconst ScriptInboundResultSchema = z\n .object({\n message: ScriptMessageSchema.optional(),\n timeout: z.boolean().optional(),\n })\n .refine(\n (result) =>\n (result.timeout === true && result.message === undefined) ||\n (result.timeout !== true && result.message !== undefined),\n { message: \"result must contain either a message or timeout: true\" },\n );\n\nasync function terminateChild(child: ChildProcess): Promise<void> {\n if (process.platform === \"win32\" && child.pid) {\n await new Promise<void>((resolve) => {\n let taskkill: ChildProcess;\n try {\n taskkill = spawn(\"taskkill.exe\", [\"/PID\", String(child.pid), \"/T\", \"/F\"], {\n stdio: \"ignore\",\n windowsHide: true,\n });\n } catch {\n resolve();\n return;\n }\n let settled = false;\n const finish = () => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n resolve();\n };\n const timeout = setTimeout(() => {\n taskkill.kill(\"SIGKILL\");\n finish();\n }, WINDOWS_TERMINATION_TIMEOUT_MS);\n timeout.unref();\n taskkill.once(\"close\", finish);\n taskkill.once(\"error\", finish);\n });\n } else if (child.pid) {\n try {\n process.kill(-child.pid, \"SIGKILL\");\n } catch {\n // The process group may have exited with the shell.\n }\n }\n\n if (child.exitCode === null && child.signalCode === null) {\n child.kill(\"SIGKILL\");\n }\n}\n\nfunction formatValidationError(error: z.ZodError): string {\n return error.issues\n .map((issue) => `${issue.path.length > 0 ? issue.path.join(\".\") : \"result\"}: ${issue.message}`)\n .join(\"; \");\n}\n\nconst sensitiveEnvironmentNameFragmentPattern =\n /(?:AUTH|BEARER|CREDENTIAL|KEY|PASS|PRIVATE|SECRET|TOKEN)/iu;\nconst nonSensitiveWorkingDirectoryNames = new Set([\"PWD\", \"OLDPWD\"]);\n\nfunction isSensitiveEnvironmentName(name: string): boolean {\n const upperName = name.toUpperCase();\n return (\n sensitiveEnvironmentNameFragmentPattern.test(upperName) ||\n (!nonSensitiveWorkingDirectoryNames.has(upperName) && upperName.includes(\"PWD\")) ||\n /PAT(?!H)/u.test(upperName)\n );\n}\n\nfunction commandContainsSensitiveValue(command: string): boolean {\n const assignments = [\n ...command.matchAll(/(?:^|[\\s;&|])[\"']?([A-Za-z_][A-Za-z0-9_]*)\\s*\\+?=/gu),\n ...command.matchAll(/\\$env:([A-Za-z_][A-Za-z0-9_]*)\\s*\\+?=/giu),\n ...command.matchAll(/\\$\\{env:([A-Za-z_][A-Za-z0-9_]*)\\}\\s*\\+?=/giu),\n ];\n if (assignments.some((match) => isSensitiveEnvironmentName(match[1] ?? \"\"))) {\n return true;\n }\n return [...command.matchAll(/(?:^|[\\s;&|])[\"']?--([A-Za-z0-9][A-Za-z0-9_-]*)(?:=|\\s)/gu)].some(\n (match) => isSensitiveEnvironmentName((match[1] ?? \"\").replaceAll(\"-\", \"_\")),\n );\n}\n\nfunction snapshotSensitiveEnvironmentValues(): string[] {\n const representations = new Set<string>();\n const values = Object.entries(process.env)\n .filter(\n ([name, value]) =>\n isSensitiveEnvironmentName(name) && value !== undefined && value.length > 0,\n )\n .map(([, value]) => value!)\n .sort((left, right) => right.length - left.length);\n for (const value of values) {\n representations.add(value);\n representations.add(JSON.stringify(value));\n representations.add(JSON.stringify(value).slice(1, -1));\n }\n return [...representations].sort((left, right) => right.length - left.length);\n}\n\nfunction redactSensitiveEnvironmentValues(\n detail: string,\n sensitiveEnvironmentValues: string[],\n): string {\n let redacted = detail;\n for (const representation of sensitiveEnvironmentValues) {\n redacted = redacted.split(representation).join(\"[redacted environment value]\");\n }\n return redacted;\n}\n\nfunction collectSensitivePayloadValues(\n value: unknown,\n values: Set<string>,\n seen: { nonSensitive: WeakSet<object>; sensitive: WeakSet<object> },\n sensitive = false,\n): void {\n if (typeof value === \"string\") {\n if (sensitive && value.length > 0) {\n values.add(value);\n const serialized = JSON.stringify(value);\n values.add(serialized);\n values.add(serialized.slice(1, -1));\n }\n return;\n }\n if (sensitive && typeof value === \"number\" && Number.isFinite(value)) {\n values.add(String(value));\n return;\n }\n if (!value || typeof value !== \"object\") {\n return;\n }\n const visited = sensitive ? seen.sensitive : seen.nonSensitive;\n if (visited.has(value)) {\n return;\n }\n visited.add(value);\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectSensitivePayloadValues(entry, values, seen, sensitive);\n }\n return;\n }\n for (const [name, entry] of Object.entries(value)) {\n collectSensitivePayloadValues(\n entry,\n values,\n seen,\n sensitive || isSensitiveEnvironmentName(name),\n );\n }\n}\n\nfunction snapshotSensitivePayloadValues(payload: unknown): string[] {\n const values = new Set<string>();\n collectSensitivePayloadValues(payload, values, {\n nonSensitive: new WeakSet(),\n sensitive: new WeakSet(),\n });\n return [...values].sort((left, right) => right.length - left.length);\n}\n\nfunction redactSensitivePayloadValues(detail: string, sensitivePayloadValues: string[]): string {\n let redacted = detail;\n for (const value of sensitivePayloadValues) {\n redacted = redacted.split(value).join(\"[redacted configured value]\");\n }\n return redacted;\n}\n\nfunction formatScriptError(\n summary: string,\n detail: string,\n command: string,\n diagnostics: ScriptDiagnosticsSnapshot,\n): string {\n if (!detail.trim()) {\n return summary;\n }\n if (commandContainsSensitiveValue(command)) {\n return `${summary}\\n[script diagnostics redacted]`;\n }\n let redacted = redactSensitivePayloadValues(\n redactSensitiveEnvironmentValues(detail, diagnostics.sensitiveEnvironmentValues),\n diagnostics.sensitivePayloadValues,\n );\n for (const configuredCommand of diagnostics.configuredCommands) {\n redacted = redacted.split(configuredCommand).join(\"[configured script command]\");\n }\n redacted = redacted.trim();\n return redacted ? `${summary}\\n${redacted}` : summary;\n}\n\nfunction createScriptDiagnosticsSnapshot(\n command: string,\n serializedPayload: string,\n): ScriptDiagnosticsSnapshot {\n const payload = JSON.parse(serializedPayload) as unknown;\n const configuredCommands = new Set([command]);\n const commands = (\n payload as {\n provider?: { config?: { script?: { commands?: Record<string, unknown> } } };\n }\n ).provider?.config?.script?.commands;\n for (const configuredCommand of Object.values(commands ?? {})) {\n if (typeof configuredCommand === \"string\" && configuredCommand.length > 0) {\n configuredCommands.add(configuredCommand);\n }\n }\n return {\n configuredCommands: [...configuredCommands].sort((left, right) => right.length - left.length),\n sensitiveEnvironmentValues: snapshotSensitiveEnvironmentValues(),\n sensitivePayloadValues: snapshotSensitivePayloadValues(payload),\n };\n}\n\nfunction parseScriptJson<T>(params: {\n command: string;\n diagnostics: ScriptDiagnosticsSnapshot;\n output: string;\n schema: z.ZodType<T>;\n}): T {\n let parsed: unknown;\n try {\n parsed = JSON.parse(params.output);\n } catch (error) {\n throw new CrablineError(\n formatScriptError(\n \"Script command did not return valid JSON.\",\n ensureErrorMessage(error),\n params.command,\n params.diagnostics,\n ),\n { kind: \"config\" },\n );\n }\n\n const result = params.schema.safeParse(parsed);\n if (!result.success) {\n throw new CrablineError(\n `Script command returned invalid result.\\n${formatValidationError(result.error)}`,\n { kind: \"config\" },\n );\n }\n return result.data;\n}\n\nfunction runScript<T>(params: {\n acceptResultDuringTimeoutGrace?: ((result: T) => boolean) | undefined;\n command: string;\n cwd?: string | undefined;\n payload: unknown;\n schema: z.ZodType<T>;\n shell?: string | undefined;\n signal?: AbortSignal | undefined;\n timeoutGraceMs?: number | undefined;\n timeoutMs: number;\n}): Promise<T> {\n if (params.signal?.aborted) {\n return Promise.reject(params.signal.reason ?? new Error(\"Script command aborted.\"));\n }\n const serializedPayload = JSON.stringify(params.payload);\n const diagnostics = createScriptDiagnosticsSnapshot(params.command, serializedPayload);\n return new Promise((resolve, reject) => {\n let child: SpawnedScriptChild;\n try {\n child = spawn(params.command, {\n cwd: params.cwd ? path.resolve(params.cwd) : process.cwd(),\n env: process.env,\n shell: params.shell ?? true,\n detached: process.platform !== \"win32\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n } catch (error) {\n reject(\n new CrablineError(\n formatScriptError(\n \"Script command failed to start.\",\n ensureErrorMessage(error),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n ),\n );\n return;\n }\n\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n let deadlineExceeded = false;\n let outputBytes = 0;\n let settled = false;\n let timeoutGrace: NodeJS.Timeout | undefined;\n const abort = () => {\n finish(async () => {\n await terminateChild(child);\n reject(params.signal?.reason ?? new Error(\"Script command aborted.\"));\n });\n };\n\n const finish = (callback: () => Promise<void> | void) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n clearTimeout(timeoutGrace);\n params.signal?.removeEventListener(\"abort\", abort);\n void callback();\n };\n\n const failForOutputLimit = () => {\n finish(async () => {\n await terminateChild(child);\n reject(\n new CrablineError(`Script command exceeded ${MAX_SCRIPT_OUTPUT_BYTES} bytes of output.`, {\n kind: \"connectivity\",\n }),\n );\n });\n };\n\n child.stdout.on(\"data\", (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n outputBytes += buffer.length;\n if (outputBytes > MAX_SCRIPT_OUTPUT_BYTES) {\n failForOutputLimit();\n return;\n }\n stdout.push(buffer);\n });\n\n child.stderr.on(\"data\", (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n outputBytes += buffer.length;\n if (outputBytes > MAX_SCRIPT_OUTPUT_BYTES) {\n failForOutputLimit();\n return;\n }\n stderr.push(buffer);\n });\n\n child.stdin.on(\"error\", () => {\n // Child closure is reported through the process error/close handlers.\n });\n child.once(\"error\", (error) => {\n finish(() => {\n reject(\n new CrablineError(\n formatScriptError(\n \"Script command failed to start.\",\n ensureErrorMessage(error),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n ),\n );\n });\n });\n child.once(\"close\", (code, signal) => {\n finish(() => {\n const stdoutText = Buffer.concat(stdout).toString(\"utf8\");\n const stderrText = Buffer.concat(stderr).toString(\"utf8\");\n if (code !== 0) {\n reject(\n new CrablineError(\n formatScriptError(\n `Script command failed${signal ? ` (${signal})` : \"\"}.`,\n stderrText.trim() ? stderrText : stdoutText,\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n ),\n );\n return;\n }\n\n try {\n const result = parseScriptJson({\n command: params.command,\n diagnostics,\n output: stdoutText,\n schema: params.schema,\n });\n if (deadlineExceeded && !params.acceptResultDuringTimeoutGrace?.(result)) {\n reject(\n new CrablineError(`Script command timed out after ${params.timeoutMs}ms.`, {\n kind: \"timeout\",\n }),\n );\n return;\n }\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n\n const failForTimeout = () => {\n finish(async () => {\n await terminateChild(child);\n reject(\n new CrablineError(`Script command timed out after ${params.timeoutMs}ms.`, {\n kind: \"timeout\",\n }),\n );\n });\n };\n const timeout = setTimeout(() => {\n const timeoutGraceMs = params.timeoutGraceMs ?? 0;\n if (timeoutGraceMs <= 0) {\n failForTimeout();\n return;\n }\n deadlineExceeded = true;\n timeoutGrace = setTimeout(failForTimeout, timeoutGraceMs);\n timeoutGrace.unref();\n }, params.timeoutMs);\n timeout.unref();\n\n if (params.signal?.aborted) {\n abort();\n return;\n }\n params.signal?.addEventListener(\"abort\", abort, { once: true });\n child.stdin.end(serializedPayload);\n });\n}\n\nfunction watchScript(params: {\n cancelSignal: AbortSignal;\n command: string;\n context: WatchContext;\n cwd?: string | undefined;\n id: string;\n normalizeTarget: ProviderAdapter[\"normalizeTarget\"];\n shell?: string | undefined;\n}): AsyncGenerator<InboundEnvelope> {\n return (async function* () {\n if (params.cancelSignal.aborted) {\n return;\n }\n if (params.context.signal?.aborted) {\n throw params.context.signal.reason ?? new Error(\"Script watch command aborted.\");\n }\n const payload = {\n ...createPayload(params.context),\n watch: {\n since: params.context.since,\n target: params.normalizeTarget(params.context.fixture.target),\n },\n };\n const serializedPayload = JSON.stringify(payload);\n const diagnostics = createScriptDiagnosticsSnapshot(params.command, serializedPayload);\n let child: SpawnedScriptChild;\n try {\n child = spawn(params.command, {\n cwd: params.cwd ? path.resolve(params.cwd) : process.cwd(),\n env: process.env,\n shell: params.shell ?? true,\n detached: process.platform !== \"win32\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n } catch (error) {\n throw new CrablineError(\n formatScriptError(\n \"Script watch command failed to start.\",\n ensureErrorMessage(error),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n\n let buffer = \"\";\n let stderr = \"\";\n let childError: unknown;\n let outputLimitError: CrablineError | undefined;\n const stopChild = () => {\n void terminateChild(child);\n };\n params.cancelSignal.addEventListener(\"abort\", stopChild, { once: true });\n params.context.signal?.addEventListener(\"abort\", stopChild, { once: true });\n if (params.cancelSignal.aborted || params.context.signal?.aborted) {\n stopChild();\n }\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdin.on(\"error\", () => {\n // Child closure is reported through the process error/close handlers.\n });\n child.stderr.on(\"data\", (chunk) => {\n if (outputLimitError) {\n return;\n }\n stderr += chunk;\n if (Buffer.byteLength(stderr) > MAX_SCRIPT_OUTPUT_BYTES) {\n outputLimitError = new CrablineError(\n `Script watch command exceeded ${MAX_SCRIPT_OUTPUT_BYTES} bytes of stderr.`,\n { kind: \"connectivity\" },\n );\n void terminateChild(child);\n }\n });\n child.once(\"error\", (error) => {\n childError = error;\n });\n let childCloseObserved = false;\n const childClosed = new Promise<{ code: number | null; signal: NodeJS.Signals | null }>(\n (resolve) => {\n child.once(\"close\", (code, signal) => {\n childCloseObserved = true;\n resolve({ code, signal });\n });\n },\n );\n child.stdin.end(serializedPayload);\n\n try {\n for await (const chunk of child.stdout) {\n buffer += chunk;\n if (Buffer.byteLength(buffer) > MAX_SCRIPT_OUTPUT_BYTES && !buffer.includes(\"\\n\")) {\n throw new CrablineError(\n `Script watch command exceeded ${MAX_SCRIPT_OUTPUT_BYTES} bytes without a newline.`,\n { kind: \"config\" },\n );\n }\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n if (Buffer.byteLength(line) > MAX_SCRIPT_OUTPUT_BYTES) {\n throw new CrablineError(\n `Script watch command emitted a JSON line larger than ${MAX_SCRIPT_OUTPUT_BYTES} bytes.`,\n { kind: \"config\" },\n );\n }\n const parsed = parseScriptJson({\n command: params.command,\n diagnostics,\n output: line,\n schema: ScriptMessageSchema,\n });\n yield {\n ...parsed,\n provider: params.id,\n };\n }\n }\n\n if (params.context.signal?.aborted) {\n throw params.context.signal.reason ?? new Error(\"Script watch command aborted.\");\n }\n if (params.cancelSignal.aborted) {\n return;\n }\n if (buffer.trim()) {\n const parsed = parseScriptJson({\n command: params.command,\n diagnostics,\n output: buffer,\n schema: ScriptMessageSchema,\n });\n yield {\n ...parsed,\n provider: params.id,\n };\n }\n\n const exit = await childClosed;\n if (outputLimitError) {\n throw outputLimitError;\n }\n if (childError) {\n throw new CrablineError(\n formatScriptError(\n \"Script watch command failed to start.\",\n ensureErrorMessage(childError),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n if (exit.code !== 0) {\n throw new CrablineError(\n formatScriptError(\n `Script watch command failed${exit.signal ? ` (${exit.signal})` : \"\"}.`,\n stderr,\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n } catch (error) {\n if (params.cancelSignal.aborted) {\n return;\n }\n if (outputLimitError) {\n throw outputLimitError;\n }\n if (childError) {\n throw new CrablineError(\n formatScriptError(\n \"Script watch command failed to start.\",\n ensureErrorMessage(childError),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n throw error;\n } finally {\n params.cancelSignal.removeEventListener(\"abort\", stopChild);\n params.context.signal?.removeEventListener(\"abort\", stopChild);\n child.stdin.destroy();\n if (!childCloseObserved) {\n await terminateChild(child);\n }\n await childClosed;\n }\n })();\n}\n\nfunction failedScriptWatch(error: unknown): ScriptWatchIterator {\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next() {\n return Promise.reject(error);\n },\n return() {\n return Promise.resolve({ done: true, value: undefined });\n },\n throw(thrown?: unknown) {\n return Promise.reject(thrown);\n },\n };\n}\n\nexport class ScriptProviderAdapter implements ProviderAdapter {\n readonly id;\n readonly platform;\n readonly status = \"bridge\" as const;\n readonly supports;\n readonly #config;\n\n constructor(context: ProviderContext) {\n if (!context.config.script) {\n throw new CrablineError(`Provider \"${context.providerId}\" is missing script configuration.`, {\n kind: \"config\",\n });\n }\n\n this.id = context.providerId;\n this.platform = context.config.platform;\n this.supports = [...context.config.capabilities];\n this.#config = context.config.script;\n }\n\n normalizeTarget(target: ProviderContext[\"fixture\"][\"target\"]) {\n const normalized = {\n id: target.id,\n metadata: target.metadata,\n } as ReturnType<ProviderAdapter[\"normalizeTarget\"]>;\n if (target.channelId) {\n normalized.channelId = target.channelId;\n }\n if (target.threadId) {\n normalized.threadId = target.threadId;\n }\n return normalized;\n }\n\n async probe(context: ProviderContext) {\n const command = this.#config.commands.probe;\n if (!command) {\n return {\n details: [\"probe command not configured\"],\n healthy: false,\n };\n }\n\n const result = await runScript({\n command,\n cwd: this.#config.cwd,\n payload: createPayload(context),\n schema: ScriptProbeResultSchema,\n shell: this.#config.shell,\n signal: context.signal,\n timeoutMs: context.fixture.timeoutMs,\n });\n return {\n details: result.details ?? [],\n healthy: result.healthy,\n };\n }\n\n async send(context: SendContext) {\n const command = this.#config.commands.send;\n if (!command) {\n throw new CrablineError(`Provider \"${this.id}\" is missing send command.`, {\n kind: \"config\",\n });\n }\n\n return runScript({\n command,\n cwd: this.#config.cwd,\n payload: {\n ...createPayload(context),\n outbound: {\n mode: context.mode,\n nonce: context.nonce,\n target: this.normalizeTarget(context.fixture.target),\n text: context.text,\n },\n },\n schema: ScriptSendResultSchema,\n shell: this.#config.shell,\n signal: context.signal,\n timeoutMs: context.fixture.timeoutMs,\n });\n }\n\n async waitForInbound(context: WaitContext) {\n const command = this.#config.commands.waitForInbound;\n if (!command) {\n return null;\n }\n\n const result = await runScript({\n acceptResultDuringTimeoutGrace: (candidate) => candidate.timeout === true,\n command,\n cwd: this.#config.cwd,\n payload: {\n ...createPayload(context),\n wait: {\n excludeIds: context.excludeIds ?? [],\n nonce: context.nonce,\n since: context.since,\n target: this.normalizeTarget(context.fixture.target),\n threadId: context.threadId,\n timeoutMs: context.timeoutMs,\n },\n },\n schema: ScriptInboundResultSchema,\n shell: this.#config.shell,\n signal: context.signal,\n timeoutGraceMs: SCRIPT_WAIT_EXIT_GRACE_MS,\n timeoutMs: context.timeoutMs,\n });\n\n if (result.timeout || !result.message) {\n return null;\n }\n\n return {\n ...result.message,\n provider: this.id,\n };\n }\n\n watch(context: WatchContext): ScriptWatchIterator {\n const command = this.#config.commands.watch;\n if (!command) {\n return failedScriptWatch(\n new CrablineError(`Provider \"${this.id}\" is missing watch command.`, {\n kind: \"config\",\n }),\n );\n }\n\n const controller = new AbortController();\n const source = watchScript({\n cancelSignal: controller.signal,\n command,\n context,\n cwd: this.#config.cwd,\n id: this.id,\n normalizeTarget: (target) => this.normalizeTarget(target),\n shell: this.#config.shell,\n });\n const iterator: ScriptWatchIterator = {\n [Symbol.asyncIterator]() {\n return this;\n },\n next() {\n return source.next();\n },\n async return() {\n if (!controller.signal.aborted) {\n controller.abort();\n }\n await source.return(undefined);\n return { done: true, value: undefined };\n },\n async throw(error?: unknown) {\n if (!controller.signal.aborted) {\n controller.abort();\n }\n await source.return(undefined);\n throw error;\n },\n };\n return iterator;\n }\n}\n\nfunction createPayload(context: ProviderContext): ScriptPayload {\n return {\n fixture: context.fixture,\n provider: {\n config: context.config,\n id: context.providerId,\n manifestPath: context.manifestPath,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"script.js","sourceRoot":"","sources":["../../../../src/providers/builtin/script.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n execFile,\n spawn,\n type ChildProcess,\n type ChildProcessByStdio,\n type ExecFileOptions,\n} from \"node:child_process\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { z } from \"zod\";\nimport { CrablineError, ensureErrorMessage } from \"../../core/errors.js\";\nimport type {\n InboundEnvelope,\n ProviderAdapter,\n ProviderContext,\n SendContext,\n WaitContext,\n WatchContext,\n} from \"../types.js\";\n\nconst MAX_SCRIPT_OUTPUT_BYTES = 1024 * 1024;\nconst SCRIPT_WAIT_EXIT_GRACE_MS = 250;\nconst CHILD_CLOSE_TIMEOUT_MS = 1_000;\nconst WINDOWS_TERMINATION_COMMAND_TIMEOUT_MS = 2_500;\nconst WINDOWS_JOB_COMMAND_ENV = \"CRABLINE_INTERNAL_SCRIPT_JOB_COMMAND\";\nconst WINDOWS_JOB_SHELL_ENV = \"CRABLINE_INTERNAL_SCRIPT_JOB_SHELL\";\nconst WINDOWS_JOB_HELPER_SOURCE_ENV = \"CRABLINE_INTERNAL_SCRIPT_JOB_HELPER_SOURCE\";\nconst WINDOWS_JOB_HELPER_OUTPUT_ENV = \"CRABLINE_INTERNAL_SCRIPT_JOB_HELPER_OUTPUT\";\nconst WINDOWS_JOB_HELPER_SOURCE = [\n \"using System;\",\n \"using System.ComponentModel;\",\n \"using System.Runtime.InteropServices;\",\n \"using System.Text;\",\n \"public static class CrablineScriptJob{\",\n \"private const uint CreateSuspended=0x00000004;\",\n \"private const uint ExtendedStartupInfoPresent=0x00080000;\",\n \"private const uint Infinite=0xffffffff;\",\n \"private const uint JobObjectLimitKillOnJobClose=0x00002000;\",\n \"private const int ProcThreadAttributeJobList=0x0002000d;\",\n \"private const uint StartfUseStdHandles=0x00000100;\",\n \"private const uint DuplicateSameAccess=0x00000002;\",\n \"private const uint ResumeThreadFailed=0xffffffff;\",\n \"private const int JobObjectExtendedLimitInformationClass=9;\",\n \"private const int StdInputHandle=-10;\",\n \"private const int StdOutputHandle=-11;\",\n \"private const int StdErrorHandle=-12;\",\n \"[StructLayout(LayoutKind.Sequential)]\",\n \"private struct ProcessInformation{\",\n \"public IntPtr Process;\",\n \"public IntPtr Thread;\",\n \"public uint ProcessId;\",\n \"public uint ThreadId;\",\n \"}\",\n \"[StructLayout(LayoutKind.Sequential)]\",\n \"private struct StartupInfo{\",\n \"public int Size;\",\n \"public IntPtr Reserved;\",\n \"public IntPtr Desktop;\",\n \"public IntPtr Title;\",\n \"public int X;\",\n \"public int Y;\",\n \"public int XSize;\",\n \"public int YSize;\",\n \"public int XCountChars;\",\n \"public int YCountChars;\",\n \"public int FillAttribute;\",\n \"public uint Flags;\",\n \"public short ShowWindow;\",\n \"public short Reserved2Size;\",\n \"public IntPtr Reserved2;\",\n \"public IntPtr StandardInput;\",\n \"public IntPtr StandardOutput;\",\n \"public IntPtr StandardError;\",\n \"}\",\n \"[StructLayout(LayoutKind.Sequential)]\",\n \"private struct StartupInfoEx{\",\n \"public StartupInfo StartupInfo;\",\n \"public IntPtr AttributeList;\",\n \"}\",\n \"[StructLayout(LayoutKind.Sequential)]\",\n \"private struct JobObjectBasicLimitInformation{\",\n \"public long PerProcessUserTimeLimit;\",\n \"public long PerJobUserTimeLimit;\",\n \"public uint LimitFlags;\",\n \"public UIntPtr MinimumWorkingSetSize;\",\n \"public UIntPtr MaximumWorkingSetSize;\",\n \"public uint ActiveProcessLimit;\",\n \"public IntPtr Affinity;\",\n \"public uint PriorityClass;\",\n \"public uint SchedulingClass;\",\n \"}\",\n \"[StructLayout(LayoutKind.Sequential)]\",\n \"private struct IoCounters{\",\n \"public ulong ReadOperationCount;\",\n \"public ulong WriteOperationCount;\",\n \"public ulong OtherOperationCount;\",\n \"public ulong ReadTransferCount;\",\n \"public ulong WriteTransferCount;\",\n \"public ulong OtherTransferCount;\",\n \"}\",\n \"[StructLayout(LayoutKind.Sequential)]\",\n \"private struct JobObjectExtendedLimitInformation{\",\n \"public JobObjectBasicLimitInformation BasicLimitInformation;\",\n \"public IoCounters IoInfo;\",\n \"public UIntPtr ProcessMemoryLimit;\",\n \"public UIntPtr JobMemoryLimit;\",\n \"public UIntPtr PeakProcessMemoryUsed;\",\n \"public UIntPtr PeakJobMemoryUsed;\",\n \"}\",\n '[DllImport(\"kernel32.dll\",SetLastError=true,CharSet=CharSet.Unicode)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool CreateProcess(string applicationName,StringBuilder commandLine,IntPtr processAttributes,IntPtr threadAttributes,bool inheritHandles,uint creationFlags,IntPtr environment,string currentDirectory,ref StartupInfoEx startupInfo,out ProcessInformation processInformation);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"private static extern IntPtr CreateJobObject(IntPtr jobAttributes,string name);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool SetInformationJobObject(IntPtr job,int informationClass,ref JobObjectExtendedLimitInformation information,uint informationLength);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool InitializeProcThreadAttributeList(IntPtr attributeList,int attributeCount,int flags,ref IntPtr size);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool UpdateProcThreadAttribute(IntPtr attributeList,uint flags,IntPtr attribute,IntPtr value,IntPtr size,IntPtr previousValue,IntPtr returnSize);\",\n '[DllImport(\"kernel32.dll\")]',\n \"private static extern void DeleteProcThreadAttributeList(IntPtr attributeList);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool DuplicateHandle(IntPtr sourceProcess,IntPtr sourceHandle,IntPtr targetProcess,out IntPtr targetHandle,uint desiredAccess,bool inheritHandle,uint options);\",\n '[DllImport(\"kernel32.dll\")]',\n \"private static extern IntPtr GetCurrentProcess();\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"private static extern IntPtr GetStdHandle(int standardHandle);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"private static extern uint ResumeThread(IntPtr thread);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"private static extern uint WaitForSingleObject(IntPtr handle,uint milliseconds);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool GetExitCodeProcess(IntPtr process,out uint exitCode);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool TerminateProcess(IntPtr process,uint exitCode);\",\n '[DllImport(\"kernel32.dll\")]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool CloseHandle(IntPtr handle);\",\n \"private static void ThrowLastError(string operation){throw new Win32Exception(Marshal.GetLastWin32Error(),operation);}\",\n \"private static IntPtr DuplicateStandardHandle(int standardHandle){\",\n \"IntPtr source=GetStdHandle(standardHandle);\",\n \"IntPtr duplicate=IntPtr.Zero;\",\n \"IntPtr process=GetCurrentProcess();\",\n 'if(source==IntPtr.Zero||source==new IntPtr(-1)||!DuplicateHandle(process,source,process,out duplicate,0,true,DuplicateSameAccess)){ThrowLastError(\"Could not duplicate a script standard handle.\");}',\n \"return duplicate;\",\n \"}\",\n \"private static int Run(string applicationName,string commandLine){\",\n \"IntPtr job=IntPtr.Zero;\",\n \"IntPtr attributeList=IntPtr.Zero;\",\n \"IntPtr jobList=IntPtr.Zero;\",\n \"IntPtr standardInput=IntPtr.Zero;\",\n \"IntPtr standardOutput=IntPtr.Zero;\",\n \"IntPtr standardError=IntPtr.Zero;\",\n \"ProcessInformation processInformation=new ProcessInformation();\",\n \"bool processCreated=false;\",\n \"try{\",\n \"job=CreateJobObject(IntPtr.Zero,null);\",\n 'if(job==IntPtr.Zero){ThrowLastError(\"Could not create the script job object.\");}',\n \"JobObjectExtendedLimitInformation limits=new JobObjectExtendedLimitInformation();\",\n \"limits.BasicLimitInformation.LimitFlags=JobObjectLimitKillOnJobClose;\",\n 'if(!SetInformationJobObject(job,JobObjectExtendedLimitInformationClass,ref limits,(uint)Marshal.SizeOf(typeof(JobObjectExtendedLimitInformation)))){ThrowLastError(\"Could not configure the script job object.\");}',\n \"IntPtr attributeListSize=IntPtr.Zero;\",\n \"InitializeProcThreadAttributeList(IntPtr.Zero,1,0,ref attributeListSize);\",\n \"attributeList=Marshal.AllocHGlobal(attributeListSize);\",\n 'if(!InitializeProcThreadAttributeList(attributeList,1,0,ref attributeListSize)){ThrowLastError(\"Could not initialize the script job attribute list.\");}',\n \"jobList=Marshal.AllocHGlobal(IntPtr.Size);\",\n \"Marshal.WriteIntPtr(jobList,job);\",\n 'if(!UpdateProcThreadAttribute(attributeList,0,new IntPtr(ProcThreadAttributeJobList),jobList,new IntPtr(IntPtr.Size),IntPtr.Zero,IntPtr.Zero)){ThrowLastError(\"Could not bind the script process to its job object.\");}',\n \"standardInput=DuplicateStandardHandle(StdInputHandle);\",\n \"standardOutput=DuplicateStandardHandle(StdOutputHandle);\",\n \"standardError=DuplicateStandardHandle(StdErrorHandle);\",\n \"StartupInfoEx startupInfo=new StartupInfoEx();\",\n \"startupInfo.StartupInfo.Size=Marshal.SizeOf(typeof(StartupInfoEx));\",\n \"startupInfo.StartupInfo.Flags=StartfUseStdHandles;\",\n \"startupInfo.StartupInfo.StandardInput=standardInput;\",\n \"startupInfo.StartupInfo.StandardOutput=standardOutput;\",\n \"startupInfo.StartupInfo.StandardError=standardError;\",\n \"startupInfo.AttributeList=attributeList;\",\n 'if(!CreateProcess(applicationName,new StringBuilder(commandLine),IntPtr.Zero,IntPtr.Zero,true,CreateSuspended|ExtendedStartupInfoPresent,IntPtr.Zero,Environment.CurrentDirectory,ref startupInfo,out processInformation)){ThrowLastError(\"Could not start the script command.\");}',\n \"processCreated=true;\",\n 'if(ResumeThread(processInformation.Thread)==ResumeThreadFailed){ThrowLastError(\"Could not resume the script command.\");}',\n 'if(WaitForSingleObject(processInformation.Process,Infinite)==Infinite){ThrowLastError(\"Could not wait for the script command.\");}',\n \"uint exitCode;\",\n 'if(!GetExitCodeProcess(processInformation.Process,out exitCode)){ThrowLastError(\"Could not read the script exit code.\");}',\n \"return unchecked((int)exitCode);\",\n \"}finally{\",\n \"if(processCreated&&processInformation.Process!=IntPtr.Zero){TerminateProcess(processInformation.Process,1);}\",\n \"if(processInformation.Thread!=IntPtr.Zero){CloseHandle(processInformation.Thread);}\",\n \"if(processInformation.Process!=IntPtr.Zero){CloseHandle(processInformation.Process);}\",\n \"if(standardInput!=IntPtr.Zero){CloseHandle(standardInput);}\",\n \"if(standardOutput!=IntPtr.Zero){CloseHandle(standardOutput);}\",\n \"if(standardError!=IntPtr.Zero){CloseHandle(standardError);}\",\n \"if(attributeList!=IntPtr.Zero){DeleteProcThreadAttributeList(attributeList);Marshal.FreeHGlobal(attributeList);}\",\n \"if(jobList!=IntPtr.Zero){Marshal.FreeHGlobal(jobList);}\",\n \"if(job!=IntPtr.Zero){CloseHandle(job);}\",\n \"}\",\n \"}\",\n \"public static int Main(){\",\n \"try{\",\n `string shellValue=Environment.GetEnvironmentVariable(\"${WINDOWS_JOB_SHELL_ENV}\");`,\n `string commandValue=Environment.GetEnvironmentVariable(\"${WINDOWS_JOB_COMMAND_ENV}\");`,\n `Environment.SetEnvironmentVariable(\"${WINDOWS_JOB_SHELL_ENV}\",null);`,\n `Environment.SetEnvironmentVariable(\"${WINDOWS_JOB_COMMAND_ENV}\",null);`,\n 'if(String.IsNullOrEmpty(shellValue)||String.IsNullOrEmpty(commandValue)){throw new InvalidOperationException(\"Missing script job configuration.\");}',\n \"string shell=Encoding.UTF8.GetString(Convert.FromBase64String(shellValue));\",\n \"string commandLine=Encoding.UTF8.GetString(Convert.FromBase64String(commandValue));\",\n \"return Run(shell,commandLine);\",\n \"}catch(Exception error){Console.Error.WriteLine(error.Message);return 1;}\",\n \"}\",\n \"}\",\n].join(\"\");\nconst WINDOWS_PROCESS_TERMINATOR_SOURCE = [\n \"using System;\",\n \"using System.Runtime.InteropServices;\",\n \"public static class CrablineProcessTerminator{\",\n \"private const uint ProcessTerminate=0x0001;\",\n \"private const uint ProcessQueryLimitedInformation=0x1000;\",\n \"private const uint Synchronize=0x00100000;\",\n \"private const uint WaitObject0=0;\",\n \"private const uint WaitTimeout=258;\",\n \"private const int ErrorInvalidParameter=87;\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"private static extern IntPtr OpenProcess(uint access,bool inheritHandle,int processId);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool GetProcessTimes(IntPtr process,out long creationTime,out long exitTime,out long kernelTime,out long userTime);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool TerminateProcess(IntPtr process,uint exitCode);\",\n '[DllImport(\"kernel32.dll\",SetLastError=true)]',\n \"private static extern uint WaitForSingleObject(IntPtr handle,uint milliseconds);\",\n '[DllImport(\"kernel32.dll\")]',\n \"[return:MarshalAs(UnmanagedType.Bool)]\",\n \"private static extern bool CloseHandle(IntPtr handle);\",\n \"public static bool TerminateVerified(int processId,long expectedCreationTime){\",\n \"IntPtr handle=OpenProcess(ProcessTerminate|ProcessQueryLimitedInformation|Synchronize,false,processId);\",\n \"if(handle==IntPtr.Zero){return Marshal.GetLastWin32Error()==ErrorInvalidParameter;}\",\n \"try{\",\n \"long creationTime,exitTime,kernelTime,userTime;\",\n \"if(!GetProcessTimes(handle,out creationTime,out exitTime,out kernelTime,out userTime)){return false;}\",\n \"if(creationTime/10!=expectedCreationTime/10){return true;}\",\n \"uint status=WaitForSingleObject(handle,0);\",\n \"if(status==WaitObject0){return true;}\",\n \"if(status!=WaitTimeout){return false;}\",\n \"if(!TerminateProcess(handle,1)){return WaitForSingleObject(handle,0)==WaitObject0;}\",\n \"return WaitForSingleObject(handle,1000)==WaitObject0;\",\n \"}finally{CloseHandle(handle);}\",\n \"}\",\n \"}\",\n].join(\"\");\n\ntype WindowsJobHelperBootstrap = {\n controller: AbortController;\n promise: Promise<string>;\n waiters: number;\n};\n\nlet windowsJobHelperPath: string | undefined;\nlet windowsJobHelperBootstrap: WindowsJobHelperBootstrap | undefined;\n\nfunction removeWindowsJobHelper(directory: string): void {\n try {\n rmSync(directory, { force: true, recursive: true });\n } catch {\n // The helper may still be exiting during process shutdown.\n }\n}\n\nfunction runWindowsJobHelperCommand(\n executable: string,\n args: string[],\n options: ExecFileOptions,\n signal: AbortSignal,\n): Promise<void> {\n if (signal.aborted) {\n return Promise.reject(signal.reason ?? new Error(\"Windows script helper bootstrap aborted.\"));\n }\n return new Promise((resolve, reject) => {\n const startedAtMs = Date.now();\n let child: ChildProcess;\n let settled = false;\n let aborting = false;\n const finish = (error?: unknown) => {\n if (settled || aborting) {\n return;\n }\n settled = true;\n signal.removeEventListener(\"abort\", abort);\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n };\n const abort = () => {\n if (settled || aborting) {\n return;\n }\n aborting = true;\n signal.removeEventListener(\"abort\", abort);\n void (async () => {\n try {\n await terminateChild(child, startedAtMs, observedAtMs);\n } catch {\n // The command still needs to be drained before returning the original abort.\n }\n await waitForChildClose(childClosed);\n settled = true;\n reject(signal.reason ?? new Error(\"Windows script helper bootstrap aborted.\"));\n })();\n };\n try {\n child = execFile(executable, args, options, (error) => finish(error ?? undefined));\n } catch (error) {\n reject(error);\n return;\n }\n const observedAtMs = Date.now();\n const childClosed = new Promise<ScriptChildExit>((resolveClose) => {\n child.once(\"close\", (code, closeSignal) => resolveClose({ code, signal: closeSignal }));\n });\n signal.addEventListener(\"abort\", abort, { once: true });\n if (signal.aborted) {\n abort();\n }\n });\n}\n\nasync function createWindowsJobHelper(signal: AbortSignal): Promise<string> {\n if (windowsJobHelperPath !== undefined) {\n return windowsJobHelperPath;\n }\n let directory: string;\n try {\n directory = mkdtempSync(path.join(tmpdir(), \"crabline-script-job-\"));\n } catch (error) {\n throw new Error(\"Could not create the Windows script Job Object helper directory.\", {\n cause: error,\n });\n }\n const helperPath = path.join(directory, \"crabline-script-job.exe\");\n try {\n await runWindowsJobHelperCommand(\n \"powershell.exe\",\n [\n \"-NoLogo\",\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n `Add-Type -TypeDefinition $env:${WINDOWS_JOB_HELPER_SOURCE_ENV} -Language CSharp -OutputAssembly $env:${WINDOWS_JOB_HELPER_OUTPUT_ENV} -OutputType ConsoleApplication`,\n ],\n {\n env: {\n ...process.env,\n [WINDOWS_JOB_HELPER_OUTPUT_ENV]: helperPath,\n [WINDOWS_JOB_HELPER_SOURCE_ENV]: WINDOWS_JOB_HELPER_SOURCE,\n },\n timeout: 15_000,\n windowsHide: true,\n },\n signal,\n );\n const probeCommand = windowsShellCommand(\"exit 0\");\n await runWindowsJobHelperCommand(\n helperPath,\n [],\n {\n env: {\n ...process.env,\n [WINDOWS_JOB_COMMAND_ENV]: Buffer.from(probeCommand.commandLine).toString(\"base64\"),\n [WINDOWS_JOB_SHELL_ENV]: Buffer.from(probeCommand.shell).toString(\"base64\"),\n },\n timeout: 5_000,\n windowsHide: true,\n },\n signal,\n );\n } catch (error) {\n removeWindowsJobHelper(directory);\n throw new Error(\"Could not initialize the Windows script Job Object helper.\", {\n cause: error,\n });\n }\n windowsJobHelperPath = helperPath;\n process.once(\"exit\", () => removeWindowsJobHelper(directory));\n return helperPath;\n}\n\nfunction releaseWindowsJobHelperWaiter(\n bootstrap: WindowsJobHelperBootstrap,\n reason?: unknown,\n): boolean {\n bootstrap.waiters -= 1;\n if (\n bootstrap.waiters !== 0 ||\n windowsJobHelperBootstrap !== bootstrap ||\n windowsJobHelperPath !== undefined\n ) {\n return false;\n }\n windowsJobHelperBootstrap = undefined;\n bootstrap.controller.abort(\n reason ?? new Error(\"Windows script helper bootstrap has no active waiters.\"),\n );\n return true;\n}\n\nfunction ensureWindowsJobHelper(signal?: AbortSignal): Promise<string> {\n if (windowsJobHelperPath !== undefined) {\n return Promise.resolve(windowsJobHelperPath);\n }\n if (signal?.aborted) {\n return Promise.reject(signal.reason ?? new Error(\"Script command aborted.\"));\n }\n let bootstrap = windowsJobHelperBootstrap;\n if (!bootstrap) {\n const controller = new AbortController();\n bootstrap = {\n controller,\n promise: Promise.resolve(\"\"),\n waiters: 0,\n };\n bootstrap.promise = createWindowsJobHelper(controller.signal).finally(() => {\n if (windowsJobHelperBootstrap === bootstrap) {\n windowsJobHelperBootstrap = undefined;\n }\n });\n windowsJobHelperBootstrap = bootstrap;\n }\n bootstrap.waiters += 1;\n return new Promise((resolve, reject) => {\n let settled = false;\n const finish = (callback: () => void) => {\n if (settled) {\n return;\n }\n settled = true;\n signal?.removeEventListener(\"abort\", abort);\n callback();\n };\n const abort = () => {\n finish(() => {\n const reason = signal?.reason ?? new Error(\"Script command aborted.\");\n const drainsBootstrap = releaseWindowsJobHelperWaiter(bootstrap, reason);\n if (drainsBootstrap) {\n void bootstrap.promise.then(\n () => reject(reason),\n () => reject(reason),\n );\n } else {\n reject(reason);\n }\n });\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n void bootstrap.promise.then(\n (value) => {\n finish(() => {\n releaseWindowsJobHelperWaiter(bootstrap);\n resolve(value);\n });\n },\n (error: unknown) => {\n finish(() => {\n releaseWindowsJobHelperWaiter(bootstrap);\n reject(error);\n });\n },\n );\n if (signal?.aborted) {\n abort();\n }\n });\n}\n\nfunction quoteWindowsArgument(value: string): string {\n if (!value) {\n return '\"\"';\n }\n if (!/[\\s\"]/u.test(value)) {\n return value;\n }\n let quoted = '\"';\n let backslashes = 0;\n for (const character of value) {\n if (character === \"\\\\\") {\n backslashes += 1;\n continue;\n }\n if (character === '\"') {\n quoted += `${\"\\\\\".repeat(backslashes * 2 + 1)}\"`;\n backslashes = 0;\n continue;\n }\n quoted += \"\\\\\".repeat(backslashes) + character;\n backslashes = 0;\n }\n return `${quoted}${\"\\\\\".repeat(backslashes * 2)}\"`;\n}\n\nfunction windowsShellCommand(\n command: string,\n shell?: string,\n): {\n commandLine: string;\n shell: string;\n} {\n const resolvedShell = shell ?? process.env.ComSpec ?? process.env.COMSPEC ?? \"cmd.exe\";\n const shellCommand = quoteWindowsArgument(resolvedShell);\n const shellName = path.win32.basename(resolvedShell).toLowerCase();\n return {\n commandLine:\n shellName === \"cmd\" || shellName === \"cmd.exe\"\n ? `${shellCommand} /d /s /c \"${command}\"`\n : `${shellCommand} -c ${quoteWindowsArgument(command)}`,\n shell: resolvedShell,\n };\n}\n\nasync function spawnScriptChild(\n params: {\n command: string;\n cwd?: string | undefined;\n shell?: string | undefined;\n },\n signal?: AbortSignal,\n): Promise<{ child: SpawnedScriptChild; observedAtMs: number; startedAtMs: number }> {\n const cwd = params.cwd ? path.resolve(params.cwd) : process.cwd();\n let startedAtMs: number;\n let child: SpawnedScriptChild;\n if (process.platform === \"win32\") {\n const helperPath = await ensureWindowsJobHelper(signal);\n if (signal?.aborted) {\n throw signal.reason ?? new Error(\"Script command aborted.\");\n }\n startedAtMs = Date.now();\n const shellCommand = windowsShellCommand(params.command, params.shell);\n child = spawn(helperPath, [], {\n cwd,\n env: {\n ...process.env,\n [WINDOWS_JOB_COMMAND_ENV]: Buffer.from(shellCommand.commandLine).toString(\"base64\"),\n [WINDOWS_JOB_SHELL_ENV]: Buffer.from(shellCommand.shell).toString(\"base64\"),\n },\n shell: false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n } else {\n startedAtMs = Date.now();\n child = spawn(params.command, {\n cwd,\n env: process.env,\n shell: params.shell ?? true,\n detached: true,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n }\n const observedAtMs = Date.now();\n if (signal?.aborted) {\n await terminateChild(child, startedAtMs, observedAtMs);\n throw signal.reason ?? new Error(\"Script command aborted.\");\n }\n return { child, observedAtMs, startedAtMs };\n}\n\ntype ScriptWatchIterator = AsyncIterableIterator<InboundEnvelope> & {\n [Symbol.asyncIterator](): ScriptWatchIterator;\n return(): Promise<IteratorResult<InboundEnvelope, undefined>>;\n throw(error?: unknown): Promise<IteratorResult<InboundEnvelope, undefined>>;\n};\n\ntype ScriptPayload = {\n fixture: ProviderContext[\"fixture\"];\n provider: {\n config: ProviderContext[\"config\"];\n id: string;\n manifestPath: string;\n };\n};\n\ntype ScriptDiagnosticsSnapshot = {\n commandValues: string[];\n configuredCommands: string[];\n diagnosticsSafe: boolean;\n exactCommandValues: string[];\n sensitiveEnvironmentValues: string[];\n sensitivePayloadValues: string[];\n};\n\ntype SpawnedScriptChild = ChildProcessByStdio<Writable, Readable, Readable>;\ntype ScriptChildExit = {\n code: number | null;\n signal: NodeJS.Signals | null;\n};\n\nconst ScriptMessageSchema = z.object({\n author: z.enum([\"assistant\", \"system\", \"user\"]),\n id: z.string().min(1),\n raw: z.unknown().optional(),\n sentAt: z.string().min(1),\n text: z.string(),\n threadId: z.string().min(1),\n});\n\nconst ScriptProbeResultSchema = z.object({\n details: z.array(z.string()).optional(),\n healthy: z.boolean(),\n});\n\nconst ScriptSendResultSchema = z.object({\n accepted: z.boolean(),\n messageId: z.string().min(1),\n threadId: z.string().min(1),\n});\n\nconst ScriptInboundResultSchema = z\n .object({\n message: ScriptMessageSchema.optional(),\n timeout: z.boolean().optional(),\n })\n .refine(\n (result) =>\n (result.timeout === true && result.message === undefined) ||\n (result.timeout !== true && result.message !== undefined),\n { message: \"result must contain either a message or timeout: true\" },\n );\n\nfunction runTerminationCommand(command: string, args: string[]): Promise<boolean> {\n return new Promise((resolve) => {\n let cleanup: ChildProcess;\n try {\n cleanup = spawn(command, args, {\n stdio: \"ignore\",\n windowsHide: true,\n });\n } catch {\n resolve(false);\n return;\n }\n let settled = false;\n const finish = (succeeded: boolean) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n resolve(succeeded);\n };\n const timeout = setTimeout(() => {\n try {\n cleanup.kill(\"SIGKILL\");\n } catch {\n // The cleanup process may have exited at the timeout boundary.\n }\n finish(false);\n }, WINDOWS_TERMINATION_COMMAND_TIMEOUT_MS);\n timeout.unref();\n cleanup.once(\"close\", (code) => finish(code === 0));\n cleanup.once(\"error\", () => finish(false));\n });\n}\n\nfunction windowsProcessTreeTermination(\n pid: number,\n childStartedAtMs: number,\n childObservedAtMs: number,\n rootExpectedAlive: boolean,\n): string {\n const rootNotBeforeMs = Math.max(0, Math.floor(childStartedAtMs));\n const rootObservedByMs = Math.max(rootNotBeforeMs, Math.ceil(childObservedAtMs) + 1);\n return [\n \"$ErrorActionPreference='Stop'\",\n `$NativeSource='${WINDOWS_PROCESS_TERMINATOR_SOURCE}'`,\n \"Add-Type -TypeDefinition $NativeSource\",\n `$RootProcessId=${pid}`,\n `$RootExpectedAlive=$${rootExpectedAlive ? \"true\" : \"false\"}`,\n `$RootNotBefore=[DateTimeOffset]::FromUnixTimeMilliseconds(${rootNotBeforeMs}).UtcDateTime`,\n `$RootObservedBy=[DateTimeOffset]::FromUnixTimeMilliseconds(${rootObservedByMs}).UtcDateTime`,\n \"$AllProcesses=@(Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,CreationDate)\",\n \"$Snapshot=[System.Collections.Generic.List[object]]::new()\",\n \"$Pending=[System.Collections.Generic.Queue[object]]::new()\",\n \"$Visited=[System.Collections.Generic.HashSet[string]]::new()\",\n \"$RootProcess=$AllProcesses | Where-Object { [int]$_.ProcessId -eq $RootProcessId } | Select-Object -First 1\",\n \"$RootCreated=if($null -ne $RootProcess){([datetime]$RootProcess.CreationDate).ToUniversalTime()}else{$null}\",\n \"$RootMatches=$null -ne $RootProcess -and $RootCreated -ge $RootNotBefore -and $RootCreated -le $RootObservedBy\",\n \"$KillRoot=$RootExpectedAlive -and $RootMatches\",\n \"$CleanupFailed=$RootExpectedAlive -and !$RootMatches\",\n \"if($KillRoot){\",\n \"$Snapshot.Add($RootProcess)\",\n '$Visited.Add(\"$([int]$RootProcess.ProcessId)|$(([datetime]$RootProcess.CreationDate).ToFileTimeUtc())\") | Out-Null',\n \"$Pending.Enqueue($RootProcess)\",\n \"}\",\n \"while($Pending.Count -gt 0){\",\n \"$Parent=$Pending.Dequeue()\",\n \"foreach($Process in @($AllProcesses | Where-Object { [int]$_.ParentProcessId -eq [int]$Parent.ProcessId })){\",\n \"$ChildCreated=([datetime]$Process.CreationDate).ToUniversalTime()\",\n \"$ParentCreated=([datetime]$Parent.CreationDate).ToUniversalTime()\",\n \"if($ChildCreated -lt $ParentCreated){continue}\",\n '$Identity=\"$([int]$Process.ProcessId)|$($ChildCreated.ToFileTimeUtc())\"',\n \"if(!$Visited.Add($Identity)){continue}\",\n \"$Snapshot.Add($Process)\",\n \"$Pending.Enqueue($Process)\",\n \"}\",\n \"}\",\n \"if($KillRoot){\",\n \"$Entries=@($Snapshot)\",\n \"[array]::Reverse($Entries)\",\n \"foreach($Entry in $Entries){\",\n \"$CreationTime=([datetime]$Entry.CreationDate).ToFileTimeUtc()\",\n \"if(![CrablineProcessTerminator]::TerminateVerified([int]$Entry.ProcessId,$CreationTime)){$CleanupFailed=$true}\",\n \"}\",\n \"}\",\n \"if($CleanupFailed){exit 1}\",\n ].join(\";\");\n}\n\nfunction destroyChildPipes(child: ChildProcess): void {\n for (const stream of [child.stdin, child.stdout, child.stderr]) {\n try {\n stream?.destroy();\n } catch {\n // Pipe teardown is best effort after process-tree termination.\n }\n }\n}\n\nfunction isChildRunning(child: ChildProcess): boolean {\n if (child.exitCode !== null || child.signalCode !== null) {\n return false;\n }\n try {\n return child.kill(0);\n } catch {\n return false;\n }\n}\n\nasync function terminateChild(\n child: ChildProcess,\n childStartedAtMs: number,\n childObservedAtMs: number,\n): Promise<void> {\n try {\n const childRunning = isChildRunning(child);\n if (process.platform === \"win32\") {\n if (child.pid) {\n const treeTerminated = await runTerminationCommand(\"powershell.exe\", [\n \"-NoLogo\",\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n windowsProcessTreeTermination(\n child.pid,\n childStartedAtMs,\n childObservedAtMs,\n childRunning,\n ),\n ]);\n if (!treeTerminated && isChildRunning(child)) {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // Closing the helper handle is the bounded fallback for its Job Object.\n }\n }\n }\n } else if (child.pid) {\n try {\n process.kill(-child.pid, \"SIGKILL\");\n } catch {\n // The process group may have exited with the shell.\n }\n }\n\n if (isChildRunning(child)) {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // The process may have exited while its descendants retained the pipes.\n }\n }\n } finally {\n destroyChildPipes(child);\n }\n}\n\nasync function waitForChildClose(\n childClosed: Promise<ScriptChildExit>,\n): Promise<ScriptChildExit | undefined> {\n let timeout: NodeJS.Timeout | undefined;\n const exit = await Promise.race([\n childClosed,\n new Promise<undefined>((resolve) => {\n timeout = setTimeout(() => resolve(undefined), CHILD_CLOSE_TIMEOUT_MS);\n timeout.unref();\n }),\n ]);\n clearTimeout(timeout);\n return exit;\n}\n\nfunction waitForChildCloseOrAbort(\n childClosed: Promise<ScriptChildExit>,\n signals: Array<AbortSignal | undefined>,\n): Promise<ScriptChildExit | undefined> {\n const activeSignals = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n if (activeSignals.some((signal) => signal.aborted)) {\n return Promise.resolve(undefined);\n }\n return new Promise((resolve) => {\n let settled = false;\n const abort = () => finish(undefined);\n const finish = (exit: ScriptChildExit | undefined) => {\n if (settled) {\n return;\n }\n settled = true;\n for (const signal of activeSignals) {\n signal.removeEventListener(\"abort\", abort);\n }\n resolve(exit);\n };\n for (const signal of activeSignals) {\n signal.addEventListener(\"abort\", abort, { once: true });\n }\n void childClosed.then((exit) => finish(exit));\n });\n}\n\nfunction formatValidationError(error: z.ZodError): string {\n return error.issues\n .map((issue) => `${issue.path.length > 0 ? issue.path.join(\".\") : \"result\"}: ${issue.message}`)\n .join(\"; \");\n}\n\nconst sensitiveEnvironmentNameFragmentPattern =\n /(?:AUTH|BEARER|CREDENTIAL|JWT|KEY|PASS|PRIVATE|SECRET|TOKEN)/iu;\nconst nonSensitiveWorkingDirectoryNames = new Set([\"PWD\", \"OLDPWD\"]);\n\nfunction isSensitiveEnvironmentName(name: string): boolean {\n const upperName = name.toUpperCase();\n return (\n sensitiveEnvironmentNameFragmentPattern.test(upperName) ||\n (!nonSensitiveWorkingDirectoryNames.has(upperName) && upperName.includes(\"PWD\")) ||\n /PAT(?!H)/u.test(upperName)\n );\n}\n\nfunction redactCredentialSyntax(detail: string): string {\n let redacted = detail.replace(\n /\\b([a-z][a-z0-9+.-]*:\\/\\/)([^/\\s@]+)@/giu,\n \"$1[redacted credentials]@\",\n );\n redacted = redacted.replace(\n /(\\bauthorization\\b[\"']?\\s*[:=]\\s*[\"']?\\s*)(?:(basic|bearer)\\s+)?([^\\s\"',;}]+)/giu,\n (_match, prefix: string, scheme: string | undefined) =>\n `${prefix}${scheme ? `${scheme} ` : \"\"}[redacted credential]`,\n );\n redacted = redacted.replace(\n /\\b([A-Za-z_][A-Za-z0-9_-]*)\\s*(\\+?=|:)\\s*(\"[^\"]*\"|'[^']*'|[^,;}\\]\\r\\n]+)/gu,\n (match, name: string, operator: string) =>\n name.toLowerCase() !== \"authorization\" && isSensitiveEnvironmentName(name)\n ? `${name}${operator}[redacted credential]`\n : match,\n );\n return redacted.replace(\n /--([A-Za-z0-9][A-Za-z0-9_-]*)(=|\\s+)(\"[^\"]*\"|'[^']*'|[^\\s,;]+)/gu,\n (match, name: string, separator: string) =>\n isSensitiveEnvironmentName(name.replaceAll(\"-\", \"_\"))\n ? `--${name}${separator}[redacted credential]`\n : match,\n );\n}\n\nfunction commandContainsSensitiveValue(command: string): boolean {\n if (redactCredentialSyntax(command) !== command) {\n return true;\n }\n const assignments = [\n ...command.matchAll(/(?:^|[\\s;&|])[\"']?([A-Za-z_][A-Za-z0-9_]*)\\s*\\+?=/gu),\n ...command.matchAll(/\\$env:([A-Za-z_][A-Za-z0-9_]*)\\s*\\+?=/giu),\n ...command.matchAll(/\\$\\{env:([A-Za-z_][A-Za-z0-9_]*)\\}\\s*\\+?=/giu),\n ];\n if (assignments.some((match) => isSensitiveEnvironmentName(match[1] ?? \"\"))) {\n return true;\n }\n return [...command.matchAll(/(?:^|[\\s;&|])[\"']?--([A-Za-z0-9][A-Za-z0-9_-]*)(?:=|\\s)/gu)].some(\n (match) => isSensitiveEnvironmentName((match[1] ?? \"\").replaceAll(\"-\", \"_\")),\n );\n}\n\nfunction addRedactionRepresentations(values: Set<string>, value: string): void {\n if (!value) {\n return;\n }\n values.add(value);\n const serialized = JSON.stringify(value);\n values.add(serialized);\n values.add(serialized.slice(1, -1));\n}\n\nfunction addCommandValueRedactions(substringValues: Set<string>, value: string): void {\n addRedactionRepresentations(substringValues, value);\n}\n\nfunction tokenizeLiteralCommand(command: string): string[] | undefined {\n const tokens: string[] = [];\n let current = \"\";\n let quote: '\"' | \"'\" | undefined;\n for (let index = 0; index < command.length; index += 1) {\n const character = command[index]!;\n if (character === \"\\n\" || character === \"\\r\") {\n return undefined;\n }\n if (process.platform === \"win32\" && character === \"\\\\\" && command[index + 1] === '\"') {\n return undefined;\n }\n if (process.platform === \"win32\" && character === '\"' && command[index + 1] === '\"') {\n return undefined;\n }\n if (quote) {\n if (character === quote) {\n quote = undefined;\n continue;\n }\n if (quote === '\"' && /[$`%!]/u.test(character)) {\n return undefined;\n }\n if (character === \"\\\\\" && quote === '\"' && process.platform !== \"win32\") {\n return undefined;\n }\n current += character;\n continue;\n }\n if (character === '\"' || (character === \"'\" && process.platform !== \"win32\")) {\n quote = character;\n continue;\n }\n if (/\\s/u.test(character)) {\n if (current) {\n tokens.push(current);\n current = \"\";\n }\n continue;\n }\n if (\n /[;&|<>(){}$`%!*?[\\]~]/u.test(character) ||\n (process.platform === \"win32\" && character === \"^\")\n ) {\n return undefined;\n }\n if (character === \"\\\\\") {\n if (process.platform !== \"win32\") {\n return undefined;\n }\n }\n current += character;\n }\n if (quote) {\n return undefined;\n }\n if (current) {\n tokens.push(current);\n }\n return tokens;\n}\n\nfunction snapshotCommandValues(\n command: string,\n): { exactValues: string[]; substringValues: string[] } | undefined {\n const tokens = tokenizeLiteralCommand(command);\n if (!tokens) {\n return undefined;\n }\n const exactValues = new Set<string>();\n const substringValues = new Set<string>();\n let executableSeen = false;\n for (const token of tokens) {\n if (!executableSeen) {\n const assignment = /^([A-Za-z_][A-Za-z0-9_]*)\\+?=(.*)$/u.exec(token);\n if (assignment) {\n addCommandValueRedactions(substringValues, assignment[2] ?? \"\");\n continue;\n }\n executableSeen = true;\n continue;\n }\n if (/^--[A-Za-z0-9][A-Za-z0-9_-]*$/u.test(token)) {\n const value = token.slice(2);\n if (value.length < 3) {\n return undefined;\n }\n addRedactionRepresentations(exactValues, token);\n addCommandValueRedactions(substringValues, value);\n continue;\n }\n if (/^-[A-Za-z0-9][A-Za-z0-9_-]+$/u.test(token)) {\n const value = token.slice(2);\n if (value.length < 3) {\n return undefined;\n }\n addRedactionRepresentations(exactValues, token);\n addCommandValueRedactions(substringValues, token.slice(1));\n addCommandValueRedactions(substringValues, value);\n continue;\n }\n const option = /^--?[A-Za-z0-9][A-Za-z0-9_-]*=(.*)$/u.exec(token);\n if (option) {\n const value = option[1] ?? \"\";\n if (value.length < 3) {\n return undefined;\n }\n addCommandValueRedactions(substringValues, value);\n continue;\n }\n if (process.platform === \"win32\" && token.startsWith(\"/\")) {\n const slashOption = /^\\/[A-Za-z0-9][A-Za-z0-9_-]*[:=](.*)$/u.exec(token);\n const value = slashOption?.[1] ?? \"\";\n if (value.length < 3) {\n return undefined;\n }\n addCommandValueRedactions(substringValues, value);\n continue;\n }\n if (token.length < 3) {\n return undefined;\n }\n if (token.startsWith(\"-\")) {\n return undefined;\n } else {\n addRedactionRepresentations(substringValues, token);\n }\n }\n return {\n exactValues: [...exactValues].sort((left, right) => right.length - left.length),\n substringValues: [...substringValues].sort((left, right) => right.length - left.length),\n };\n}\n\nfunction snapshotSensitiveEnvironmentValues(): string[] {\n const representations = new Set<string>();\n const values = Object.entries(process.env)\n .filter(\n ([name, value]) =>\n isSensitiveEnvironmentName(name) && value !== undefined && value.length > 0,\n )\n .map(([, value]) => value!)\n .sort((left, right) => right.length - left.length);\n for (const value of values) {\n addRedactionRepresentations(representations, value);\n }\n return [...representations].sort((left, right) => right.length - left.length);\n}\n\nfunction collectSensitivePayloadValues(\n value: unknown,\n values: Set<string>,\n seen: { nonSensitive: WeakSet<object>; sensitive: WeakSet<object> },\n sensitive = false,\n): void {\n if (typeof value === \"string\") {\n if (sensitive && value.length > 0) {\n values.add(value);\n const serialized = JSON.stringify(value);\n values.add(serialized);\n values.add(serialized.slice(1, -1));\n }\n return;\n }\n if (sensitive && typeof value === \"number\" && Number.isFinite(value)) {\n values.add(String(value));\n return;\n }\n if (!value || typeof value !== \"object\") {\n return;\n }\n const visited = sensitive ? seen.sensitive : seen.nonSensitive;\n if (visited.has(value)) {\n return;\n }\n visited.add(value);\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectSensitivePayloadValues(entry, values, seen, sensitive);\n }\n return;\n }\n for (const [name, entry] of Object.entries(value)) {\n collectSensitivePayloadValues(\n entry,\n values,\n seen,\n sensitive || isSensitiveEnvironmentName(name),\n );\n }\n}\n\nfunction snapshotSensitivePayloadValues(payload: unknown): string[] {\n const values = new Set<string>();\n collectSensitivePayloadValues(payload, values, {\n nonSensitive: new WeakSet(),\n sensitive: new WeakSet(),\n });\n return [...values].sort((left, right) => right.length - left.length);\n}\n\nfunction isExactCommandValueBoundary(character: string | undefined): boolean {\n return character === undefined || /[\\s\"'`=,:;.()[\\]{}<>!?]/u.test(character);\n}\n\ntype DiagnosticRedactionSpan = {\n end: number;\n label: string;\n priority: number;\n sourceLength: number;\n start: number;\n};\n\nfunction collectDiagnosticRedactionSpans(\n detail: string,\n values: string[],\n label: string,\n priority: number,\n exact = false,\n): DiagnosticRedactionSpan[] {\n const spans: DiagnosticRedactionSpan[] = [];\n for (const value of values) {\n let cursor = 0;\n while (cursor < detail.length) {\n const start = detail.indexOf(value, cursor);\n if (start < 0) {\n break;\n }\n const end = start + value.length;\n if (\n !exact ||\n (isExactCommandValueBoundary(detail[start - 1]) && isExactCommandValueBoundary(detail[end]))\n ) {\n spans.push({ end, label, priority, sourceLength: value.length, start });\n }\n cursor = end;\n }\n }\n return spans;\n}\n\nfunction redactDiagnosticValues(detail: string, diagnostics: ScriptDiagnosticsSnapshot): string {\n const spans = [\n ...collectDiagnosticRedactionSpans(\n detail,\n diagnostics.sensitiveEnvironmentValues,\n \"[redacted environment value]\",\n 4,\n ),\n ...collectDiagnosticRedactionSpans(\n detail,\n diagnostics.configuredCommands,\n \"[configured script command]\",\n 3,\n ),\n ...collectDiagnosticRedactionSpans(\n detail,\n diagnostics.commandValues,\n \"[redacted command value]\",\n 3,\n ),\n ...collectDiagnosticRedactionSpans(\n detail,\n diagnostics.exactCommandValues,\n \"[redacted command value]\",\n 3,\n true,\n ),\n ...collectDiagnosticRedactionSpans(\n detail,\n diagnostics.sensitivePayloadValues,\n \"[redacted configured value]\",\n 2,\n ),\n ].sort(\n (left, right) =>\n left.start - right.start || right.end - left.end || right.priority - left.priority,\n );\n const merged: DiagnosticRedactionSpan[] = [];\n for (const span of spans) {\n const previous = merged.at(-1);\n if (!previous || span.start >= previous.end) {\n merged.push({ ...span });\n continue;\n }\n previous.end = Math.max(previous.end, span.end);\n if (\n span.sourceLength > previous.sourceLength ||\n (span.sourceLength === previous.sourceLength && span.priority > previous.priority)\n ) {\n previous.label = span.label;\n previous.priority = span.priority;\n previous.sourceLength = span.sourceLength;\n }\n }\n let redacted = detail;\n for (const span of merged.toReversed()) {\n redacted = redacted.slice(0, span.start) + span.label + redacted.slice(span.end);\n }\n return redacted;\n}\n\nfunction formatScriptError(\n summary: string,\n detail: string,\n command: string,\n diagnostics: ScriptDiagnosticsSnapshot,\n): string {\n if (!detail.trim()) {\n return summary;\n }\n if (!diagnostics.diagnosticsSafe || commandContainsSensitiveValue(command)) {\n return `${summary}\\n[script diagnostics redacted]`;\n }\n let redacted = redactDiagnosticValues(detail, diagnostics);\n redacted = redactCredentialSyntax(redacted);\n redacted = redacted.trim();\n return redacted ? `${summary}\\n${redacted}` : summary;\n}\n\nfunction usesSupportedDiagnosticShell(shell?: string | undefined): boolean {\n if (shell !== undefined) {\n return false;\n }\n if (process.platform !== \"win32\") {\n return true;\n }\n const comspec = process.env.ComSpec ?? process.env.COMSPEC;\n return comspec === undefined || /(?:^|[\\\\/])cmd(?:\\.exe)?$/iu.test(comspec);\n}\n\nfunction createScriptDiagnosticsSnapshot(\n command: string,\n serializedPayload: string,\n shell?: string | undefined,\n): ScriptDiagnosticsSnapshot {\n const payload = JSON.parse(serializedPayload) as unknown;\n const configuredCommands = new Set([command]);\n const commands = (\n payload as {\n provider?: { config?: { script?: { commands?: Record<string, unknown> } } };\n }\n ).provider?.config?.script?.commands;\n for (const configuredCommand of Object.values(commands ?? {})) {\n if (typeof configuredCommand === \"string\" && configuredCommand.length > 0) {\n configuredCommands.add(configuredCommand);\n }\n }\n const commandValues = new Set<string>();\n const exactCommandValues = new Set<string>();\n let diagnosticsSafe = usesSupportedDiagnosticShell(shell);\n for (const configuredCommand of configuredCommands) {\n if (commandContainsSensitiveValue(configuredCommand)) {\n diagnosticsSafe = false;\n }\n const values = snapshotCommandValues(configuredCommand);\n if (!values) {\n diagnosticsSafe = false;\n continue;\n }\n for (const value of values.substringValues) {\n commandValues.add(value);\n }\n for (const value of values.exactValues) {\n exactCommandValues.add(value);\n }\n }\n return {\n commandValues: [...commandValues].sort((left, right) => right.length - left.length),\n configuredCommands: [...configuredCommands].sort((left, right) => right.length - left.length),\n diagnosticsSafe,\n exactCommandValues: [...exactCommandValues].sort((left, right) => right.length - left.length),\n sensitiveEnvironmentValues: snapshotSensitiveEnvironmentValues(),\n sensitivePayloadValues: snapshotSensitivePayloadValues(payload),\n };\n}\n\nfunction parseScriptJson<T>(params: {\n command: string;\n diagnostics: ScriptDiagnosticsSnapshot;\n output: string;\n schema: z.ZodType<T>;\n}): T {\n let parsed: unknown;\n try {\n parsed = JSON.parse(params.output);\n } catch (error) {\n throw new CrablineError(\n formatScriptError(\n \"Script command did not return valid JSON.\",\n ensureErrorMessage(error),\n params.command,\n params.diagnostics,\n ),\n { kind: \"config\" },\n );\n }\n\n const result = params.schema.safeParse(parsed);\n if (!result.success) {\n throw new CrablineError(\n `Script command returned invalid result.\\n${formatValidationError(result.error)}`,\n { kind: \"config\" },\n );\n }\n return result.data;\n}\n\nfunction runScript<T>(params: {\n acceptResultDuringTimeoutGrace?: ((result: T) => boolean) | undefined;\n command: string;\n cwd?: string | undefined;\n payload: unknown;\n schema: z.ZodType<T>;\n shell?: string | undefined;\n signal?: AbortSignal | undefined;\n timeoutGraceMs?: number | undefined;\n timeoutMs: number;\n}): Promise<T> {\n if (params.signal?.aborted) {\n return Promise.reject(params.signal.reason ?? new Error(\"Script command aborted.\"));\n }\n const serializedPayload = JSON.stringify(params.payload);\n const diagnostics = createScriptDiagnosticsSnapshot(\n params.command,\n serializedPayload,\n params.shell,\n );\n return new Promise((resolve, reject) => {\n let child: SpawnedScriptChild | undefined;\n let childStartedAtMs = 0;\n let childObservedAtMs = 0;\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n let deadlineExceeded = false;\n let outputBytes = 0;\n let settled = false;\n let timeout: NodeJS.Timeout;\n let timeoutGrace: NodeJS.Timeout | undefined;\n const spawnAbortController = new AbortController();\n let spawnCompletion: Promise<void> | undefined;\n\n const finish = (callback: () => Promise<void> | void) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeout);\n clearTimeout(timeoutGrace);\n spawnAbortController.abort();\n params.signal?.removeEventListener(\"abort\", abort);\n void callback();\n };\n\n const stopChild = async () => {\n if (child) {\n await terminateChild(child, childStartedAtMs, childObservedAtMs);\n } else {\n await spawnCompletion;\n }\n };\n\n const abort = () => {\n finish(async () => {\n await stopChild();\n reject(params.signal?.reason ?? new Error(\"Script command aborted.\"));\n });\n };\n\n const failForOutputLimit = () => {\n finish(async () => {\n await stopChild();\n reject(\n new CrablineError(`Script command exceeded ${MAX_SCRIPT_OUTPUT_BYTES} bytes of output.`, {\n kind: \"connectivity\",\n }),\n );\n });\n };\n\n const startChild = (spawnedChild: SpawnedScriptChild) => {\n spawnedChild.stdout.on(\"data\", (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n outputBytes += buffer.length;\n if (outputBytes > MAX_SCRIPT_OUTPUT_BYTES) {\n failForOutputLimit();\n return;\n }\n stdout.push(buffer);\n });\n\n spawnedChild.stderr.on(\"data\", (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n outputBytes += buffer.length;\n if (outputBytes > MAX_SCRIPT_OUTPUT_BYTES) {\n failForOutputLimit();\n return;\n }\n stderr.push(buffer);\n });\n\n spawnedChild.stdin.on(\"error\", () => {\n // Child closure is reported through the process error/close handlers.\n });\n spawnedChild.once(\"error\", (error) => {\n finish(() => {\n reject(\n new CrablineError(\n formatScriptError(\n \"Script command failed to start.\",\n ensureErrorMessage(error),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n ),\n );\n });\n });\n spawnedChild.once(\"close\", (code, signal) => {\n finish(() => {\n const stdoutText = Buffer.concat(stdout).toString(\"utf8\");\n const stderrText = Buffer.concat(stderr).toString(\"utf8\");\n if (code !== 0) {\n reject(\n new CrablineError(\n formatScriptError(\n `Script command failed${signal ? ` (${signal})` : \"\"}.`,\n stderrText.trim() ? stderrText : stdoutText,\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n ),\n );\n return;\n }\n\n try {\n const result = parseScriptJson({\n command: params.command,\n diagnostics,\n output: stdoutText,\n schema: params.schema,\n });\n if (deadlineExceeded && !params.acceptResultDuringTimeoutGrace?.(result)) {\n reject(\n new CrablineError(`Script command timed out after ${params.timeoutMs}ms.`, {\n kind: \"timeout\",\n }),\n );\n return;\n }\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n });\n spawnedChild.stdin.end(serializedPayload);\n };\n\n const failForTimeout = () => {\n finish(async () => {\n await stopChild();\n reject(\n new CrablineError(`Script command timed out after ${params.timeoutMs}ms.`, {\n kind: \"timeout\",\n }),\n );\n });\n };\n timeout = setTimeout(() => {\n const timeoutGraceMs = params.timeoutGraceMs ?? 0;\n if (timeoutGraceMs <= 0) {\n failForTimeout();\n return;\n }\n deadlineExceeded = true;\n timeoutGrace = setTimeout(failForTimeout, timeoutGraceMs);\n timeoutGrace.unref();\n }, params.timeoutMs);\n timeout.unref();\n\n params.signal?.addEventListener(\"abort\", abort, { once: true });\n if (params.signal?.aborted) {\n abort();\n return;\n }\n\n spawnCompletion = spawnScriptChild(params, spawnAbortController.signal).then(\n async (spawned) => {\n if (settled) {\n await terminateChild(spawned.child, spawned.startedAtMs, spawned.observedAtMs);\n return;\n }\n child = spawned.child;\n childStartedAtMs = spawned.startedAtMs;\n childObservedAtMs = spawned.observedAtMs;\n startChild(spawned.child);\n },\n (error: unknown) => {\n if (settled) {\n return;\n }\n finish(() => {\n reject(\n new CrablineError(\n formatScriptError(\n \"Script command failed to start.\",\n ensureErrorMessage(error),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n ),\n );\n });\n },\n );\n });\n}\n\nfunction watchScript(params: {\n cancelSignal: AbortSignal;\n command: string;\n context: WatchContext;\n cwd?: string | undefined;\n id: string;\n normalizeTarget: ProviderAdapter[\"normalizeTarget\"];\n shell?: string | undefined;\n}): AsyncGenerator<InboundEnvelope> {\n return (async function* () {\n if (params.cancelSignal.aborted) {\n return;\n }\n if (params.context.signal?.aborted) {\n throw params.context.signal.reason ?? new Error(\"Script watch command aborted.\");\n }\n const payload = {\n ...createPayload(params.context),\n watch: {\n since: params.context.since,\n target: params.normalizeTarget(params.context.fixture.target),\n },\n };\n const serializedPayload = JSON.stringify(payload);\n const diagnostics = createScriptDiagnosticsSnapshot(\n params.command,\n serializedPayload,\n params.shell,\n );\n let child: SpawnedScriptChild;\n let childStartedAtMs: number;\n let childObservedAtMs: number;\n const spawnSignal = params.context.signal\n ? AbortSignal.any([params.cancelSignal, params.context.signal])\n : params.cancelSignal;\n try {\n ({\n child,\n observedAtMs: childObservedAtMs,\n startedAtMs: childStartedAtMs,\n } = await spawnScriptChild(params, spawnSignal));\n } catch (error) {\n if (params.cancelSignal.aborted) {\n return;\n }\n if (params.context.signal?.aborted) {\n throw params.context.signal.reason ?? new Error(\"Script watch command aborted.\");\n }\n throw new CrablineError(\n formatScriptError(\n \"Script watch command failed to start.\",\n ensureErrorMessage(error),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n\n let buffer = \"\";\n let stderr = \"\";\n let childError: unknown;\n let outputLimitError: CrablineError | undefined;\n let termination: Promise<void> | undefined;\n const stopChild = () => {\n termination ??= terminateChild(child, childStartedAtMs, childObservedAtMs);\n return termination;\n };\n const requestStopChild = () => {\n void stopChild();\n };\n params.cancelSignal.addEventListener(\"abort\", requestStopChild, { once: true });\n params.context.signal?.addEventListener(\"abort\", requestStopChild, { once: true });\n if (params.cancelSignal.aborted || params.context.signal?.aborted) {\n requestStopChild();\n }\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdin.on(\"error\", () => {\n // Child closure is reported through the process error/close handlers.\n });\n child.stderr.on(\"data\", (chunk) => {\n if (outputLimitError) {\n return;\n }\n stderr += chunk;\n if (Buffer.byteLength(stderr) > MAX_SCRIPT_OUTPUT_BYTES) {\n outputLimitError = new CrablineError(\n `Script watch command exceeded ${MAX_SCRIPT_OUTPUT_BYTES} bytes of stderr.`,\n { kind: \"connectivity\" },\n );\n requestStopChild();\n }\n });\n child.once(\"error\", (error) => {\n childError = error;\n });\n let childCloseObserved = false;\n const childClosed = new Promise<ScriptChildExit>((resolve) => {\n child.once(\"close\", (code, signal) => {\n childCloseObserved = true;\n resolve({ code, signal });\n });\n });\n child.stdin.end(serializedPayload);\n\n try {\n for await (const chunk of child.stdout) {\n buffer += chunk;\n if (Buffer.byteLength(buffer) > MAX_SCRIPT_OUTPUT_BYTES && !buffer.includes(\"\\n\")) {\n throw new CrablineError(\n `Script watch command exceeded ${MAX_SCRIPT_OUTPUT_BYTES} bytes without a newline.`,\n { kind: \"config\" },\n );\n }\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n if (Buffer.byteLength(line) > MAX_SCRIPT_OUTPUT_BYTES) {\n throw new CrablineError(\n `Script watch command emitted a JSON line larger than ${MAX_SCRIPT_OUTPUT_BYTES} bytes.`,\n { kind: \"config\" },\n );\n }\n const parsed = parseScriptJson({\n command: params.command,\n diagnostics,\n output: line,\n schema: ScriptMessageSchema,\n });\n yield {\n ...parsed,\n provider: params.id,\n };\n }\n }\n\n if (params.context.signal?.aborted) {\n throw params.context.signal.reason ?? new Error(\"Script watch command aborted.\");\n }\n if (params.cancelSignal.aborted) {\n return;\n }\n if (buffer.trim()) {\n const parsed = parseScriptJson({\n command: params.command,\n diagnostics,\n output: buffer,\n schema: ScriptMessageSchema,\n });\n yield {\n ...parsed,\n provider: params.id,\n };\n }\n\n if (outputLimitError) {\n await stopChild();\n await waitForChildClose(childClosed);\n throw outputLimitError;\n }\n if (childError) {\n await waitForChildClose(childClosed);\n throw new CrablineError(\n formatScriptError(\n \"Script watch command failed to start.\",\n ensureErrorMessage(childError),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n const exit = await waitForChildCloseOrAbort(childClosed, [\n params.cancelSignal,\n params.context.signal,\n ]);\n if (!exit) {\n await stopChild();\n if (params.cancelSignal.aborted) {\n return;\n }\n if (params.context.signal?.aborted) {\n throw params.context.signal.reason ?? new Error(\"Script watch command aborted.\");\n }\n return;\n }\n if (exit.code !== 0) {\n throw new CrablineError(\n formatScriptError(\n `Script watch command failed${exit.signal ? ` (${exit.signal})` : \"\"}.`,\n stderr,\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n } catch (error) {\n if (params.cancelSignal.aborted) {\n return;\n }\n if (outputLimitError) {\n throw outputLimitError;\n }\n if (childError) {\n throw new CrablineError(\n formatScriptError(\n \"Script watch command failed to start.\",\n ensureErrorMessage(childError),\n params.command,\n diagnostics,\n ),\n { kind: \"connectivity\" },\n );\n }\n throw error;\n } finally {\n params.cancelSignal.removeEventListener(\"abort\", requestStopChild);\n params.context.signal?.removeEventListener(\"abort\", requestStopChild);\n child.stdin.destroy();\n if (!childCloseObserved) {\n await stopChild();\n }\n await waitForChildClose(childClosed);\n }\n })();\n}\n\nfunction failedScriptWatch(error: unknown): ScriptWatchIterator {\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next() {\n return Promise.reject(error);\n },\n return() {\n return Promise.resolve({ done: true, value: undefined });\n },\n throw(thrown?: unknown) {\n return Promise.reject(thrown);\n },\n };\n}\n\nexport class ScriptProviderAdapter implements ProviderAdapter {\n readonly id;\n readonly platform;\n readonly status = \"bridge\" as const;\n readonly supports;\n readonly #config;\n\n constructor(context: ProviderContext) {\n if (!context.config.script) {\n throw new CrablineError(`Provider \"${context.providerId}\" is missing script configuration.`, {\n kind: \"config\",\n });\n }\n\n this.id = context.providerId;\n this.platform = context.config.platform;\n this.supports = [...context.config.capabilities];\n this.#config = context.config.script;\n }\n\n normalizeTarget(target: ProviderContext[\"fixture\"][\"target\"]) {\n const normalized = {\n id: target.id,\n metadata: target.metadata,\n } as ReturnType<ProviderAdapter[\"normalizeTarget\"]>;\n if (target.channelId) {\n normalized.channelId = target.channelId;\n }\n if (target.threadId) {\n normalized.threadId = target.threadId;\n }\n return normalized;\n }\n\n async probe(context: ProviderContext) {\n const command = this.#config.commands.probe;\n if (!command) {\n return {\n details: [\"probe command not configured\"],\n healthy: false,\n };\n }\n\n const result = await runScript({\n command,\n cwd: this.#config.cwd,\n payload: createPayload(context),\n schema: ScriptProbeResultSchema,\n shell: this.#config.shell,\n signal: context.signal,\n timeoutMs: context.fixture.timeoutMs,\n });\n return {\n details: result.details ?? [],\n healthy: result.healthy,\n };\n }\n\n async send(context: SendContext) {\n const command = this.#config.commands.send;\n if (!command) {\n throw new CrablineError(`Provider \"${this.id}\" is missing send command.`, {\n kind: \"config\",\n });\n }\n\n return runScript({\n command,\n cwd: this.#config.cwd,\n payload: {\n ...createPayload(context),\n outbound: {\n mode: context.mode,\n nonce: context.nonce,\n target: this.normalizeTarget(context.fixture.target),\n text: context.text,\n },\n },\n schema: ScriptSendResultSchema,\n shell: this.#config.shell,\n signal: context.signal,\n timeoutMs: context.fixture.timeoutMs,\n });\n }\n\n async waitForInbound(context: WaitContext) {\n const command = this.#config.commands.waitForInbound;\n if (!command) {\n return null;\n }\n\n const result = await runScript({\n acceptResultDuringTimeoutGrace: (candidate) => candidate.timeout === true,\n command,\n cwd: this.#config.cwd,\n payload: {\n ...createPayload(context),\n wait: {\n excludeIds: context.excludeIds ?? [],\n nonce: context.nonce,\n since: context.since,\n target: this.normalizeTarget(context.fixture.target),\n threadId: context.threadId,\n timeoutMs: context.timeoutMs,\n },\n },\n schema: ScriptInboundResultSchema,\n shell: this.#config.shell,\n signal: context.signal,\n timeoutGraceMs: SCRIPT_WAIT_EXIT_GRACE_MS,\n timeoutMs: context.timeoutMs,\n });\n\n if (result.timeout || !result.message) {\n return null;\n }\n\n return {\n ...result.message,\n provider: this.id,\n };\n }\n\n watch(context: WatchContext): ScriptWatchIterator {\n const command = this.#config.commands.watch;\n if (!command) {\n return failedScriptWatch(\n new CrablineError(`Provider \"${this.id}\" is missing watch command.`, {\n kind: \"config\",\n }),\n );\n }\n\n const controller = new AbortController();\n const source = watchScript({\n cancelSignal: controller.signal,\n command,\n context,\n cwd: this.#config.cwd,\n id: this.id,\n normalizeTarget: (target) => this.normalizeTarget(target),\n shell: this.#config.shell,\n });\n const iterator: ScriptWatchIterator = {\n [Symbol.asyncIterator]() {\n return this;\n },\n next() {\n return source.next();\n },\n async return() {\n if (!controller.signal.aborted) {\n controller.abort();\n }\n await source.return(undefined);\n return { done: true, value: undefined };\n },\n async throw(error?: unknown) {\n if (!controller.signal.aborted) {\n controller.abort();\n }\n await source.return(undefined);\n throw error;\n },\n };\n return iterator;\n }\n}\n\nfunction createPayload(context: ProviderContext): ScriptPayload {\n return {\n fixture: context.fixture,\n provider: {\n config: context.config,\n id: context.providerId,\n manifestPath: context.manifestPath,\n },\n };\n}\n"]}
@@ -5,8 +5,15 @@ type SlackEnvironment = Partial<Pick<NodeJS.ProcessEnv, "SLACK_SIGNING_SECRET">>
5
5
  export declare function resolveSlackAdapterConfig(config: ProviderConfig, env?: SlackEnvironment): {
6
6
  signingSecret: string | undefined;
7
7
  };
8
+ export declare function normalizeSlackEventsPayload(payload: unknown): {
9
+ author?: "assistant" | "system" | "user" | undefined;
10
+ authorIsBot?: boolean;
11
+ id?: string | undefined;
12
+ raw: {};
13
+ text?: string | undefined;
14
+ };
8
15
  export declare function handleSlackWebhookPayload(payload: unknown): Response | undefined;
9
16
  export declare class SlackProviderAdapter extends LocalMockProviderAdapter implements ProviderAdapter {
10
- constructor(id: string, config: ProviderConfig, _userName: string, _runtime?: unknown);
17
+ constructor(id: string, config: ProviderConfig, _userName: string, runtime?: unknown);
11
18
  }
12
19
  export {};