kiro-spec-engine 1.45.9 → 1.45.11

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/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.45.11] - 2026-02-13
11
+
12
+ ### Fixed
13
+ - **Windows filename special characters**: `AgentSpawner.spawn()` now sanitizes agentId by removing Windows reserved characters `[:<>"|?*]` before using in temp file path, fixing file path parsing errors when agentId contains colon (e.g., `"zeno-v4-uuid:1"` format)
14
+
15
+ ## [1.45.10] - 2026-02-13
16
+
17
+ ### Fixed
18
+ - **Windows prompt temp file write failure**: `AgentSpawner.spawn()` now performs shell argument escaping BEFORE extracting prompt from finalArgs, fixing empty temp file issue (0 bytes) that caused `error: unexpected argument 'Spec' found` in v1.45.9
19
+
10
20
  ## [1.45.9] - 2026-02-13
11
21
 
12
22
  ### Fixed
@@ -104,17 +104,6 @@ class AgentSpawner extends EventEmitter {
104
104
  let stdinPrompt = null;
105
105
  const finalArgs = [...prependArgs, ...args];
106
106
 
107
- if (isWindows) {
108
- // Remove the prompt (last element of args portion) from command line
109
- // and deliver it via stdin to avoid cmd.exe length limit.
110
- stdinPrompt = finalArgs.pop(); // remove prompt
111
- // If the prompt was quoted by the escaping below, unwrap it
112
- if (stdinPrompt.startsWith('"') && stdinPrompt.endsWith('"')) {
113
- stdinPrompt = stdinPrompt.slice(1, -1).replace(/\\"/g, '"');
114
- }
115
- useStdinPrompt = true;
116
- }
117
-
118
107
  // When shell: true, Node.js concatenates args into a single string without
119
108
  // escaping. Arguments containing spaces must be quoted so the shell does
120
109
  // not split them into separate tokens.
@@ -126,6 +115,17 @@ class AgentSpawner extends EventEmitter {
126
115
  }
127
116
  }
128
117
 
118
+ if (isWindows) {
119
+ // Remove the prompt (last element of args portion) from command line
120
+ // and deliver it via stdin to avoid cmd.exe length limit.
121
+ stdinPrompt = finalArgs.pop(); // remove prompt
122
+ // If the prompt was quoted by the escaping above, unwrap it
123
+ if (stdinPrompt.startsWith('"') && stdinPrompt.endsWith('"')) {
124
+ stdinPrompt = stdinPrompt.slice(1, -1).replace(/\\"/g, '"');
125
+ }
126
+ useStdinPrompt = true;
127
+ }
128
+
129
129
  const env = { ...process.env, [apiKeyEnvVar]: apiKey };
130
130
 
131
131
  // When using stdin for the prompt, write it to a temp file and pass
@@ -134,7 +134,9 @@ class AgentSpawner extends EventEmitter {
134
134
  // write prompt → pass file path via shell read.
135
135
  let promptTmpFile = null;
136
136
  if (useStdinPrompt) {
137
- promptTmpFile = path.join(os.tmpdir(), `kse-prompt-${agentId}-${Date.now()}.txt`);
137
+ // Sanitize agentId for use in filename - remove Windows reserved characters: < > : " | ? *
138
+ const safeAgentId = agentId.replace(/[:<>"|?*]/g, '-');
139
+ promptTmpFile = path.join(os.tmpdir(), `kse-prompt-${safeAgentId}-${Date.now()}.txt`);
138
140
  fs.writeFileSync(promptTmpFile, stdinPrompt, 'utf-8');
139
141
  }
140
142
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kiro-spec-engine",
3
- "version": "1.45.9",
3
+ "version": "1.45.11",
4
4
  "description": "kiro-spec-engine (kse) - A CLI tool and npm package for spec-driven development with AI coding assistants. NOT the Kiro IDE desktop application.",
5
5
  "main": "index.js",
6
6
  "bin": {