agent-dag 1.33.62 → 1.33.63

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.
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <title>agents-deck</title>
7
7
  <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ctext y='84' font-size='84'%3E%E2%97%89%3C/text%3E%3C/svg%3E" />
8
- <script type="module" crossorigin src="/assets/index-DrFdTGt-.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DQe_LZzS.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-CF2yG9oG.css">
10
10
  </head>
11
11
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-dag",
3
- "version": "1.33.62",
3
+ "version": "1.33.63",
4
4
  "description": "Live deck of Claude Code and Codex agents — watch parallel subagents fork, call tools, and return on one calm canvas. Also available as npx ccdeck and npx agent-dag.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -80,21 +80,54 @@ async function download(url, { asText = false } = {}) {
80
80
  }
81
81
 
82
82
  /**
83
- * Unpack the artifact.
83
+ * A path as a PowerShell single-quoted string literal.
84
+ *
85
+ * Inside single quotes PowerShell expands nothing, so a doubled quote is both
86
+ * the only escape it has and the only one needed. Windows filenames cannot
87
+ * contain `"`, `<`, `>` or `|`, but they can contain an apostrophe — and the
88
+ * archive lands under os.tmpdir(), which on Windows is inside the user's own
89
+ * profile: C:\Users\O'Brien\AppData\Local\Temp. Pasted in raw, that apostrophe
90
+ * ended the string mid-path and Expand-Archive died of a syntax error, so uv
91
+ * could never be bootstrapped on an account whose owner has that name.
92
+ */
93
+ const psQuote = (s) => `'${String(s).replace(/'/g, "''")}'`;
94
+
95
+ /**
96
+ * The command that unpacks the artifact, as file + argv.
84
97
  *
85
98
  * `tar` is present on macOS, on Linux, and on Windows 10 1803 and later (as
86
99
  * bsdtar), but Windows ships .zip and older Windows has no tar at all — so zip
87
100
  * goes through PowerShell's Expand-Archive, which is always there.
101
+ *
102
+ * Exported, pure, and with the platform as a parameter, because the branch that
103
+ * needs checking is the one that never runs on the machine running the tests.
104
+ *
105
+ * Only the tar branch gets to pass its paths as arguments. `powershell.exe
106
+ * -Command` has no argument channel to pass them through — everything after
107
+ * -Command is joined back into the script text — so the paths are part of a
108
+ * PowerShell program either way, and quoting them for PowerShell is the whole
109
+ * job. Nothing else is quoting them on the way there: powershell.exe is an .exe,
110
+ * so exec.mjs spawns it directly with shell:false and the -Command string
111
+ * arrives as one intact argv entry, never seeing cmd.exe.
88
112
  */
89
- async function extract(archivePath, destDir) {
90
- if (archivePath.endsWith(".zip")) {
91
- const r = await run("powershell.exe", [
92
- "-NoProfile", "-NonInteractive", "-Command",
93
- `Expand-Archive -LiteralPath '${archivePath}' -DestinationPath '${destDir}' -Force`,
94
- ], { timeout: 120_000 });
95
- return r.ok;
113
+ export function extractCommand(archivePath, destDir, platform = process.platform) {
114
+ if (platform === "win32" && archivePath.endsWith(".zip")) {
115
+ return {
116
+ file: "powershell.exe",
117
+ args: [
118
+ "-NoProfile", "-NonInteractive", "-Command",
119
+ `Expand-Archive -LiteralPath ${psQuote(archivePath)} ` +
120
+ `-DestinationPath ${psQuote(destDir)} -Force`,
121
+ ],
122
+ };
96
123
  }
97
- const r = await run("tar", ["-xzf", archivePath, "-C", destDir], { timeout: 120_000 });
124
+ return { file: "tar", args: ["-xzf", archivePath, "-C", destDir] };
125
+ }
126
+
127
+ /** Unpack the artifact. */
128
+ async function extract(archivePath, destDir) {
129
+ const { file, args } = extractCommand(archivePath, destDir);
130
+ const r = await run(file, args, { timeout: 120_000 });
98
131
  return r.ok;
99
132
  }
100
133