@songsid/agend 2.3.0-beta.21 → 2.3.0-beta.23
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.
- package/README.md +2 -2
- package/README.zh-TW.md +2 -2
- package/dist/agent-cli.js +4 -2
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +9 -0
- package/dist/agent-endpoint.js +15 -0
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.d.ts +5 -0
- package/dist/agent-whats-new.js +16 -1
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.d.ts +7 -0
- package/dist/auth-api.js +10 -3
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/codex-package.d.ts +30 -0
- package/dist/backend/codex-package.js +133 -0
- package/dist/backend/codex-package.js.map +1 -0
- package/dist/backend/codex.d.ts +2 -0
- package/dist/backend/codex.js +9 -2
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok.js +56 -3
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +9 -1
- package/dist/backend/kiro.js +102 -1
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/opencode-permission.js +1 -1
- package/dist/backend/opencode-permission.js.map +1 -1
- package/dist/backend/opencode.js +2 -1
- package/dist/backend/opencode.js.map +1 -1
- package/dist/binary-probe.js +1 -1
- package/dist/bug-report-cli.js +1 -1
- package/dist/bundled-skills.d.ts +7 -3
- package/dist/bundled-skills.js +16 -7
- package/dist/bundled-skills.js.map +1 -1
- package/dist/channel/adapters/discord.js +3 -3
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-server.js +12 -4
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +3 -1
- package/dist/channel/mcp-tools.js +38 -2
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/child-process.d.ts +21 -0
- package/dist/child-process.js +54 -0
- package/dist/child-process.js.map +1 -0
- package/dist/cli.js +167 -182
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +1 -1
- package/dist/command-table.js +1 -1
- package/dist/command-table.js.map +1 -1
- package/dist/config-validator.js +28 -2
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +16 -2
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +14 -0
- package/dist/daemon.js +45 -8
- package/dist/daemon.js.map +1 -1
- package/dist/darwin-memory.js +1 -1
- package/dist/doctor.d.ts +5 -0
- package/dist/doctor.js +42 -0
- package/dist/doctor.js.map +1 -1
- package/dist/export-import.js +1 -1
- package/dist/export-import.js.map +1 -1
- package/dist/fleet-level-config.d.ts +1 -1
- package/dist/fleet-level-config.js +2 -0
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +73 -2
- package/dist/fleet-manager.js +400 -33
- package/dist/fleet-manager.js.map +1 -1
- package/dist/full-restart.d.ts +5 -5
- package/dist/full-restart.js +5 -5
- package/dist/full-restart.js.map +1 -1
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +1 -1
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +8 -9
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +319 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +529 -0
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +19 -4
- package/dist/general-knowledge/steering/core-rules.md +1 -1
- package/dist/instance-config-impact.js +13 -3
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.js +6 -6
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.js +2 -1
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +137 -10
- package/dist/locale.js.map +1 -1
- package/dist/login-flows.js +1 -1
- package/dist/login-shell.js +3 -1
- package/dist/login-shell.js.map +1 -1
- package/dist/ls-rows.js +1 -1
- package/dist/needs-you-hub.d.ts +98 -1
- package/dist/needs-you-hub.js +313 -44
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +5 -2
- package/dist/needs-you-live.js +6 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/needs-you.d.ts +58 -3
- package/dist/needs-you.js +36 -3
- package/dist/needs-you.js.map +1 -1
- package/dist/outbound-handlers.js +25 -10
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +3 -3
- package/dist/provider-secret-registry.d.ts +5 -3
- package/dist/provider-secret-registry.js +8 -2
- package/dist/provider-secret-registry.js.map +1 -1
- package/dist/public-link-progress.d.ts +12 -1
- package/dist/public-link-progress.js +5 -10
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-tunnel-config.d.ts +11 -0
- package/dist/public-tunnel-config.js +68 -0
- package/dist/public-tunnel-config.js.map +1 -0
- package/dist/public-web-gateway.d.ts +2 -0
- package/dist/public-web-gateway.js +3 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +13 -2
- package/dist/public-web-link.js +37 -10
- package/dist/public-web-link.js.map +1 -1
- package/dist/quickstart.js +14 -8
- package/dist/quickstart.js.map +1 -1
- package/dist/resource-report.js +1 -1
- package/dist/scheduler/task-board.d.ts +41 -1
- package/dist/scheduler/task-board.js +150 -4
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/sd-notify.js +2 -1
- package/dist/sd-notify.js.map +1 -1
- package/dist/secret-store.d.ts +2 -0
- package/dist/secret-store.js +21 -0
- package/dist/secret-store.js.map +1 -1
- package/dist/service-installer.d.ts +69 -0
- package/dist/service-installer.js +181 -0
- package/dist/service-installer.js.map +1 -1
- package/dist/service-owner.d.ts +44 -0
- package/dist/service-owner.js +48 -0
- package/dist/service-owner.js.map +1 -0
- package/dist/settings-api.d.ts +5 -0
- package/dist/settings-api.js +32 -10
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +86 -3
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +6 -1
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.d.ts +2 -0
- package/dist/settings-http-confirmation.js +4 -3
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/settings-request-capability.d.ts +4 -1
- package/dist/settings-request-capability.js +11 -3
- package/dist/settings-request-capability.js.map +1 -1
- package/dist/setup-host.js +1 -1
- package/dist/setup-wizard.js +1 -1
- package/dist/setup-wizard.js.map +1 -1
- package/dist/task-board-summary.d.ts +101 -0
- package/dist/task-board-summary.js +177 -0
- package/dist/task-board-summary.js.map +1 -0
- package/dist/task-board-waker.d.ts +8 -1
- package/dist/task-board-waker.js +15 -6
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tmux-control.js +1 -1
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-exec-helper.d.ts +5 -1
- package/dist/tmux-exec-helper.js +13 -21
- package/dist/tmux-exec-helper.js.map +1 -1
- package/dist/tmux-manager.js +1 -1
- package/dist/tmux-read.js +1 -1
- package/dist/tmux-read.js.map +1 -1
- package/dist/topic-commands.d.ts +3 -0
- package/dist/topic-commands.js +29 -18
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.js +5 -0
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +2 -0
- package/dist/transcript-sources.js +4 -0
- package/dist/transcript-sources.js.map +1 -1
- package/dist/tunnel/cloudflared-install.js +3 -1
- package/dist/tunnel/cloudflared-install.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -16
- package/dist/tunnel/cloudflared.js +65 -13
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/named-diagnostics.d.ts +13 -0
- package/dist/tunnel/named-diagnostics.js +52 -0
- package/dist/tunnel/named-diagnostics.js.map +1 -0
- package/dist/tunnel/types.d.ts +2 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/types.d.ts +12 -0
- package/dist/ui/app-effects.js +10 -4
- package/dist/ui/app.html +2 -0
- package/dist/ui/chat-render.js +39 -0
- package/dist/ui/chat-store.js +8 -0
- package/dist/ui/chat-strings.js +5 -2
- package/dist/ui/chat-thread.js +15 -8
- package/dist/ui/effect-trial-offer.js +2 -31
- package/dist/ui/effects-waker.js +2 -70
- package/dist/ui/fleet-canvas.js +14 -6
- package/dist/ui/fleet-route-scene.js +86 -21
- package/dist/ui/fleet-task-card.js +5 -5
- package/dist/ui/fleet-task-common.js +41 -7
- package/dist/ui/fleet-task-work.js +107 -0
- package/dist/ui/fleet-tasks.js +46 -12
- package/dist/ui/fleet-traffic.js +57 -10
- package/dist/ui/icons/icon-192.png +0 -0
- package/dist/ui/icons/icon-512.png +0 -0
- package/dist/ui/image-lightbox.js +39 -1
- package/dist/ui/image-zoom.js +242 -0
- package/dist/ui/panel-chat.js +24 -13
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +6 -2
- package/dist/ui/panel-needs.js +21 -6
- package/dist/ui/panel-settings.js +90 -15
- package/dist/ui/preview-panel.js +2 -1
- package/dist/ui/search-dialog.js +2 -1
- package/dist/ui/settings-appearance.js +159 -9
- package/dist/ui/settings-dialogs.js +33 -17
- package/dist/ui/settings-discord.js +6 -2
- package/dist/ui/settings-guests.js +2 -1
- package/dist/ui/settings-learn.js +1 -0
- package/dist/ui/settings-model.js +2 -11
- package/dist/ui/settings-mods.js +6 -3
- package/dist/ui/settings-strings.js +80 -0
- package/dist/ui/settings-token.js +3 -1
- package/dist/ui/settings-web-authority.js +6 -3
- package/dist/ui/settings-wizard.js +13 -7
- package/dist/ui/shared/app-i18n.js +2 -2
- package/dist/ui/shared/app-needs.js +2 -2
- package/dist/ui/shared/app-store.js +2 -2
- package/dist/ui/shared/app-stream.js +2 -1
- package/dist/ui/shared/app.css +125 -28
- package/dist/ui/shared/app.js +5 -1
- package/dist/ui/shared/effect-app-runtime.js +7 -5
- package/dist/ui/shared/effect-chat-runtime.js +2 -7
- package/dist/ui/shared/effect-cursor.js +3 -2
- package/dist/ui/shared/effect-display-metadata.js +39 -0
- package/dist/ui/shared/effect-registry.js +4 -2
- package/dist/ui/shared/effect-runtime-loader.js +3 -1
- package/dist/ui/shared/effect-stock-trust.js +1 -1
- package/dist/ui/shared/feature-flags.js +127 -0
- package/dist/ui/shared/identity-color.js +6 -3
- package/dist/ui/shared/instance-nav.js +3 -2
- package/dist/ui/shared/text-undo.js +210 -0
- package/dist/ui/shared/ui-dialog.js +4 -3
- package/dist/ui/shared/ui-icons.js +2 -0
- package/dist/ui/signin.html +2 -0
- package/dist/update-dispatch.js +1 -1
- package/dist/update-launch.d.ts +1 -1
- package/dist/update-launch.js +1 -2
- package/dist/update-launch.js.map +1 -1
- package/dist/usage/providers.js +1 -1
- package/dist/usage/providers.js.map +1 -1
- package/dist/view-api.js +1 -1
- package/dist/web-api.d.ts +12 -2
- package/dist/web-api.js +266 -18
- package/dist/web-api.js.map +1 -1
- package/dist/web-app-icon-worker.d.ts +1 -0
- package/dist/web-app-icon-worker.js +15 -0
- package/dist/web-app-icon-worker.js.map +1 -0
- package/dist/web-app-icon.d.ts +107 -0
- package/dist/web-app-icon.js +256 -0
- package/dist/web-app-icon.js.map +1 -0
- package/dist/web-appearance-tools.d.ts +1 -0
- package/dist/web-appearance-tools.js +7 -3
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance.d.ts +4 -10
- package/dist/web-appearance.js +4 -3
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-chat-history.d.ts +37 -0
- package/dist/web-chat-history.js +57 -2
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-experimental-http.d.ts +2 -0
- package/dist/web-experimental-http.js +12 -0
- package/dist/web-experimental-http.js.map +1 -0
- package/dist/web-experimental.d.ts +11 -0
- package/dist/web-experimental.js +49 -0
- package/dist/web-experimental.js.map +1 -0
- package/dist/web-guest-access.d.ts +1 -0
- package/dist/web-guest-access.js +11 -3
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-icons.d.ts +33 -1
- package/dist/web-icons.js +83 -11
- package/dist/web-icons.js.map +1 -1
- package/dist/web-mod-store.d.ts +2 -0
- package/dist/web-mod-store.js +10 -0
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-png.d.ts +29 -0
- package/dist/web-png.js +321 -0
- package/dist/web-png.js.map +1 -0
- package/dist/web-preview.d.ts +2 -0
- package/dist/web-preview.js +2 -0
- package/dist/web-preview.js.map +1 -1
- package/dist/web-reactions.d.ts +34 -0
- package/dist/web-reactions.js +47 -0
- package/dist/web-reactions.js.map +1 -0
- package/dist/web-settings-patch.d.ts +2 -1
- package/dist/web-settings-patch.js +5 -1
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +1 -0
- package/dist/web-settings-tools.js +14 -10
- package/dist/web-settings-tools.js.map +1 -1
- package/dist/web-terminal.js +1 -1
- package/dist/web-theme-store.d.ts +2 -2
- package/dist/web-theme-store.js +6 -3
- package/dist/web-theme-store.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* without pulling in channel infrastructure.
|
|
7
7
|
*/
|
|
8
8
|
import { z } from "zod";
|
|
9
|
+
import { isCanvasWorkerTool } from "../web-experimental.js";
|
|
9
10
|
import * as schemas from "../outbound-schemas.js";
|
|
10
11
|
/** Strip client-incompatible keys and server-owned channel routing metadata. */
|
|
11
12
|
function toToolInputSchema(schema) {
|
|
@@ -25,7 +26,7 @@ const DEFS = [
|
|
|
25
26
|
["reply", schemas.ReplyArgs,
|
|
26
27
|
"Reply on the channel. Routing is handled automatically — do not pass chat_id or thread_id. Add `buttons` to offer choices people can click."],
|
|
27
28
|
["react", schemas.ReactArgs,
|
|
28
|
-
"Add an emoji reaction to a
|
|
29
|
+
"Add an emoji reaction to a message — a Discord/Telegram message or a web chat message (its message_id starts with web-). A reaction is a complete answer to a message that only acknowledges or thanks (\"OK\", \"thanks\", \"收到\"), on every platform including the web chat; a task that needs a conclusion still needs reply. On the web chat use one emoji from the reaction set (e.g. 👍 👌 ❤ 🙏 🎉 🔥 💯) and never AgEnD's delivery marks; another emoji is refused with an error naming allowed ones."],
|
|
29
30
|
["edit_message", schemas.EditMessageArgs,
|
|
30
31
|
"Edit a message the bot previously sent. Useful for interim progress updates."],
|
|
31
32
|
["download_attachment", schemas.DownloadAttachmentArgs,
|
|
@@ -108,7 +109,7 @@ const DEFS = [
|
|
|
108
109
|
["update_fleet_defaults", schemas.UpdateFleetDefaultsArgs,
|
|
109
110
|
"Update fleet-wide defaults (backend, model, auto_pause_after, max_cross_instance_message_bytes). Saves to fleet.yaml."],
|
|
110
111
|
["create_instance", schemas.CreateInstanceArgs,
|
|
111
|
-
"Create a new instance bound to a project directory with a channel topic. If directory is omitted, a workspace is auto-created at ~/.agend/workspaces/<instance-name>. Use backend_options.codex.provider (for example, 'glm') to select a Codex custom provider. tool_set and skipPermissions are refused here (set them in Settings or fleet.yaml)."],
|
|
112
|
+
"Create a new instance bound to a project directory with a channel topic. If directory is omitted, a workspace is auto-created at ~/.agend/workspaces/<instance-name>. Use backend_options.codex.provider (for example, 'glm') to select a Codex custom provider. tool_set and skipPermissions are refused here (set them in Settings or fleet.yaml). The fleet reconciles automatically after create — do not run `agend reload` afterwards (a redundant reload will restart every instance whose config changed, including ones you did not intend to touch)."],
|
|
112
113
|
["delete_instance", schemas.DeleteInstanceArgs,
|
|
113
114
|
"Delete an instance: stop daemon, remove config, optionally delete topic. An instance may delete only itself; a General may delete any."],
|
|
114
115
|
["replace_instance", schemas.ReplaceInstanceArgs,
|
|
@@ -201,4 +202,39 @@ export const TOOLS = DEFS.map(([name, schema, description]) => ({
|
|
|
201
202
|
* a control, so it stopped being defined next to the schemas and moved next to
|
|
202
203
|
* the thing that enforces it.
|
|
203
204
|
*/
|
|
205
|
+
/** #2275: keep non-CW appearance tools useful without advertising disabled branches. */
|
|
206
|
+
export function toolsWithCanvasWorker(enabled, definitions = TOOLS) {
|
|
207
|
+
if (enabled)
|
|
208
|
+
return [...definitions];
|
|
209
|
+
const descriptions = {
|
|
210
|
+
get_web_settings: "Read Settings → Web appearance: themes, colours, cards, widgets, custom CSS and ambient presets. General, coordinators and full profiles.",
|
|
211
|
+
set_web_settings: "Change Settings → Web appearance: host settings, colours, cards, custom CSS, ambient presets, or Restore defaults. General, coordinators and full profiles.",
|
|
212
|
+
get_web_appearance: "Read your own appearance on the dashboard: face, ring colour, identity card, theme, widgets, ambient presets and limits.",
|
|
213
|
+
set_web_ambient: "Set your own ambient preset (fall, rise, twinkle, burst-on-click) with glyphs, colours and numbers. Declarative data only; no code or preview is needed. Shares the theme-change limit and respects a person's lock.",
|
|
214
|
+
};
|
|
215
|
+
return definitions.filter(t => !isCanvasWorkerTool(t.name)).map(t => {
|
|
216
|
+
const schema = structuredClone(t.inputSchema);
|
|
217
|
+
if (t.name === "set_web_settings") {
|
|
218
|
+
const change = schema.properties?.change;
|
|
219
|
+
for (const key of ["oneOf", "anyOf"]) {
|
|
220
|
+
if (Array.isArray(change?.[key]))
|
|
221
|
+
change[key] = change[key].filter(branch => !["effect", "effect_slot", "mod"].includes(branch.properties?.what?.const ?? ""));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// `person` is shared with effect slots in the on schema; no disabled capability leaks via nested descriptions.
|
|
225
|
+
const stripDescriptions = (node) => {
|
|
226
|
+
if (!node || typeof node !== "object")
|
|
227
|
+
return;
|
|
228
|
+
for (const [key, value] of Object.entries(node)) {
|
|
229
|
+
if (key === "description" && typeof value === "string") {
|
|
230
|
+
node[key] = value.replace(/custom CSS, effect slots/g, "custom CSS").replace(/themes, effects and widgets/g, "themes and widgets");
|
|
231
|
+
}
|
|
232
|
+
else
|
|
233
|
+
stripDescriptions(value);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
stripDescriptions(schema);
|
|
237
|
+
return { ...t, description: descriptions[t.name] ?? t.description, inputSchema: schema };
|
|
238
|
+
});
|
|
239
|
+
}
|
|
204
240
|
//# sourceMappingURL=mcp-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/channel/mcp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAWlD,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,MAAe;IACxC,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAA4B,CAAC;IAC9D,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,UAAqC,CAAC;IACzG,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAsB,CAAC;AACrD,CAAC;AAQD;;;GAGG;AACH,MAAM,IAAI,GAAqC;IAC7C,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS;QACzB,6IAA6I,CAAC;IAChJ,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS;QACzB,
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/channel/mcp-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2374: `spawn` and `execFile` for the fleet's own code, with every piped stdio stream heard.
|
|
3
|
+
*
|
|
4
|
+
* A child's stdin/stdout/stderr pipes are EventEmitters of their own: `child.on("error")` and the `execFile` callback
|
|
5
|
+
* never see their errors, and an `error` nobody listens to is an uncaught exception, which stops the fleet (#2243).
|
|
6
|
+
* Here each pipe gets a listener for its whole life. By default a pipe error kills the child and is passed on as the
|
|
7
|
+
* child's own `error` (when anything listens for one), so the call fails with it: `execFile`'s callback and promise get
|
|
8
|
+
* the pipe error even if the child then exits 0, or had already exited while something else held the pipe, and nothing
|
|
9
|
+
* half-read passes for an answer. A caller that listens on the pipe itself keeps its own handling; one with a different
|
|
10
|
+
* response passes `onError` to `guardStdio`. The `*Sync` forms have no streams and come from node:child_process directly.
|
|
11
|
+
*/
|
|
12
|
+
import * as cp from "node:child_process";
|
|
13
|
+
/**
|
|
14
|
+
* An `error` listener on each of the child's pipes. The default response kills the child and passes the error on as
|
|
15
|
+
* the child's `error` (only to a listener: unheard, it would be uncaught again), unless the caller heard that pipe's
|
|
16
|
+
* errors itself (another listener): then the caller's own handling is the response. Tolerates test doubles.
|
|
17
|
+
*/
|
|
18
|
+
export declare function guardStdio<T>(child: T, onError?: (err: Error) => void): T;
|
|
19
|
+
export declare const spawn: typeof cp.spawn;
|
|
20
|
+
export declare const execFile: typeof cp.execFile;
|
|
21
|
+
export declare const exec: typeof cp.exec;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #2374: `spawn` and `execFile` for the fleet's own code, with every piped stdio stream heard.
|
|
3
|
+
*
|
|
4
|
+
* A child's stdin/stdout/stderr pipes are EventEmitters of their own: `child.on("error")` and the `execFile` callback
|
|
5
|
+
* never see their errors, and an `error` nobody listens to is an uncaught exception, which stops the fleet (#2243).
|
|
6
|
+
* Here each pipe gets a listener for its whole life. By default a pipe error kills the child and is passed on as the
|
|
7
|
+
* child's own `error` (when anything listens for one), so the call fails with it: `execFile`'s callback and promise get
|
|
8
|
+
* the pipe error even if the child then exits 0, or had already exited while something else held the pipe, and nothing
|
|
9
|
+
* half-read passes for an answer. A caller that listens on the pipe itself keeps its own handling; one with a different
|
|
10
|
+
* response passes `onError` to `guardStdio`. The `*Sync` forms have no streams and come from node:child_process directly.
|
|
11
|
+
*/
|
|
12
|
+
import * as cp from "node:child_process";
|
|
13
|
+
import { promisify } from "node:util";
|
|
14
|
+
/**
|
|
15
|
+
* An `error` listener on each of the child's pipes. The default response kills the child and passes the error on as
|
|
16
|
+
* the child's `error` (only to a listener: unheard, it would be uncaught again), unless the caller heard that pipe's
|
|
17
|
+
* errors itself (another listener): then the caller's own handling is the response. Tolerates test doubles.
|
|
18
|
+
*/
|
|
19
|
+
export function guardStdio(child, onError) {
|
|
20
|
+
const c = child;
|
|
21
|
+
if (!c)
|
|
22
|
+
return child;
|
|
23
|
+
for (const stream of [c.stdin, c.stdout, c.stderr]) {
|
|
24
|
+
if (!stream || typeof stream.on !== "function")
|
|
25
|
+
continue;
|
|
26
|
+
stream.on("error", onError ?? ((err) => {
|
|
27
|
+
if ((stream.listenerCount?.("error") ?? 1) > 1)
|
|
28
|
+
return;
|
|
29
|
+
try {
|
|
30
|
+
c.kill?.();
|
|
31
|
+
}
|
|
32
|
+
catch { /* already gone */ }
|
|
33
|
+
if ((c.listenerCount?.("error") ?? 0) > 0)
|
|
34
|
+
c.emit?.("error", err);
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
return child;
|
|
38
|
+
}
|
|
39
|
+
export const spawn = ((...args) => guardStdio(cp.spawn(...args)));
|
|
40
|
+
/** `execFile`/`exec` guarded; `promisify` of it keeps node's own { stdout, stderr } form, with its `.child` guarded. */
|
|
41
|
+
function guarded(original) {
|
|
42
|
+
const call = (...args) => guardStdio(original()(...args));
|
|
43
|
+
Object.defineProperty(call, promisify.custom, {
|
|
44
|
+
value: (...args) => {
|
|
45
|
+
const promise = promisify(original())(...args);
|
|
46
|
+
guardStdio(promise.child);
|
|
47
|
+
return promise;
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
return call;
|
|
51
|
+
}
|
|
52
|
+
export const execFile = guarded(() => cp.execFile);
|
|
53
|
+
export const exec = guarded(() => cp.exec);
|
|
54
|
+
//# sourceMappingURL=child-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-process.js","sourceRoot":"","sources":["../src/child-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAMtC;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAI,KAAQ,EAAE,OAA8B;IACpE,MAAM,CAAC,GAAG,KAAiC,CAAC;IAC5C,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAc,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,UAAU;YAAE,SAAS;QACzD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,GAAU,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;gBAAE,OAAO;YACvD,IAAI,CAAC;gBAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,IAAe,EAAE,EAAE,CAC3C,UAAU,CAAE,EAAE,CAAC,KAA8C,CAAC,GAAG,IAAI,CAAC,CAAC,CAAoB,CAAC;AAE9F,wHAAwH;AACxH,SAAS,OAAO,CAAI,QAAiB;IACnC,MAAM,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAE,QAAQ,EAA2C,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/G,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE;QAC5C,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAI,SAAS,CAAC,QAAQ,EAAW,CAAiE,CAAC,GAAG,IAAI,CAAC,CAAC;YACzH,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,IAAoB,CAAC;AAC9B,CAAC;AACD,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC"}
|