takt 0.35.2 → 0.35.4
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/builtins/en/facets/policies/review.md +12 -0
- package/builtins/ja/facets/policies/review.md +12 -0
- package/dist/core/models/piece-types.d.ts +3 -0
- package/dist/core/models/piece-types.d.ts.map +1 -1
- package/dist/core/models/workflow-schemas.d.ts +98 -0
- package/dist/core/models/workflow-schemas.d.ts.map +1 -1
- package/dist/core/models/workflow-schemas.js +2 -0
- package/dist/core/models/workflow-schemas.js.map +1 -1
- package/dist/core/piece/engine/MovementExecutor.d.ts +3 -3
- package/dist/core/piece/engine/MovementExecutor.d.ts.map +1 -1
- package/dist/core/piece/engine/MovementExecutor.js +7 -7
- package/dist/core/piece/engine/MovementExecutor.js.map +1 -1
- package/dist/core/piece/engine/OptionsBuilder.d.ts +7 -7
- package/dist/core/piece/engine/OptionsBuilder.d.ts.map +1 -1
- package/dist/core/piece/engine/OptionsBuilder.js +18 -15
- package/dist/core/piece/engine/OptionsBuilder.js.map +1 -1
- package/dist/core/piece/engine/PieceEngine.d.ts.map +1 -1
- package/dist/core/piece/engine/PieceEngine.js +36 -6
- package/dist/core/piece/engine/PieceEngine.js.map +1 -1
- package/dist/core/piece/phase-runner.js +3 -1
- package/dist/core/piece/phase-runner.js.map +1 -1
- package/dist/core/piece/provider-model-compatibility.d.ts +7 -0
- package/dist/core/piece/provider-model-compatibility.d.ts.map +1 -0
- package/dist/core/piece/provider-model-compatibility.js +20 -0
- package/dist/core/piece/provider-model-compatibility.js.map +1 -0
- package/dist/core/piece/provider-resolution.d.ts +13 -1
- package/dist/core/piece/provider-resolution.d.ts.map +1 -1
- package/dist/core/piece/provider-resolution.js +13 -0
- package/dist/core/piece/provider-resolution.js.map +1 -1
- package/dist/core/piece/session-key.d.ts +2 -1
- package/dist/core/piece/session-key.d.ts.map +1 -1
- package/dist/core/piece/session-key.js +3 -2
- package/dist/core/piece/session-key.js.map +1 -1
- package/dist/core/piece/types.d.ts +3 -0
- package/dist/core/piece/types.d.ts.map +1 -1
- package/dist/features/tasks/execute/postExecution.d.ts.map +1 -1
- package/dist/features/tasks/execute/postExecution.js +14 -22
- package/dist/features/tasks/execute/postExecution.js.map +1 -1
- package/dist/features/tasks/list/index.js +2 -2
- package/dist/features/tasks/list/index.js.map +1 -1
- package/dist/features/tasks/list/listNonInteractive.d.ts.map +1 -1
- package/dist/features/tasks/list/listNonInteractive.js +8 -16
- package/dist/features/tasks/list/listNonInteractive.js.map +1 -1
- package/dist/features/tasks/list/taskActionTarget.d.ts +1 -0
- package/dist/features/tasks/list/taskActionTarget.d.ts.map +1 -1
- package/dist/features/tasks/list/taskActionTarget.js +43 -2
- package/dist/features/tasks/list/taskActionTarget.js.map +1 -1
- package/dist/features/tasks/list/taskActions.d.ts +1 -1
- package/dist/features/tasks/list/taskActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskActions.js +1 -1
- package/dist/features/tasks/list/taskActions.js.map +1 -1
- package/dist/features/tasks/list/taskBranchLifecycleActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskBranchLifecycleActions.js +24 -3
- package/dist/features/tasks/list/taskBranchLifecycleActions.js.map +1 -1
- package/dist/features/tasks/list/taskDiffActions.d.ts +2 -1
- package/dist/features/tasks/list/taskDiffActions.d.ts.map +1 -1
- package/dist/features/tasks/list/taskDiffActions.js +22 -9
- package/dist/features/tasks/list/taskDiffActions.js.map +1 -1
- package/dist/features/tasks/list/taskSyncAction.d.ts.map +1 -1
- package/dist/features/tasks/list/taskSyncAction.js +30 -10
- package/dist/features/tasks/list/taskSyncAction.js.map +1 -1
- package/dist/infra/claude-headless/headless-spawn.d.ts.map +1 -1
- package/dist/infra/claude-headless/headless-spawn.js +2 -2
- package/dist/infra/claude-headless/headless-spawn.js.map +1 -1
- package/dist/infra/codex/client.d.ts.map +1 -1
- package/dist/infra/codex/client.js +7 -5
- package/dist/infra/codex/client.js.map +1 -1
- package/dist/infra/config/loaders/pieceParser.d.ts.map +1 -1
- package/dist/infra/config/loaders/pieceParser.js +30 -3
- package/dist/infra/config/loaders/pieceParser.js.map +1 -1
- package/dist/infra/config/providerModelCompatibility.d.ts +1 -6
- package/dist/infra/config/providerModelCompatibility.d.ts.map +1 -1
- package/dist/infra/config/providerModelCompatibility.js +1 -19
- package/dist/infra/config/providerModelCompatibility.js.map +1 -1
- package/dist/infra/copilot/client.d.ts.map +1 -1
- package/dist/infra/copilot/client.js +2 -3
- package/dist/infra/copilot/client.js.map +1 -1
- package/dist/infra/cursor/client.d.ts.map +1 -1
- package/dist/infra/cursor/client.js +2 -3
- package/dist/infra/cursor/client.js.map +1 -1
- package/dist/infra/task/autoCommit.js +3 -3
- package/dist/infra/task/autoCommit.js.map +1 -1
- package/dist/infra/task/clone.d.ts +1 -1
- package/dist/infra/task/clone.d.ts.map +1 -1
- package/dist/infra/task/clone.js +1 -1
- package/dist/infra/task/clone.js.map +1 -1
- package/dist/infra/task/git.d.ts +1 -0
- package/dist/infra/task/git.d.ts.map +1 -1
- package/dist/infra/task/git.js +7 -0
- package/dist/infra/task/git.js.map +1 -1
- package/dist/infra/task/index.d.ts +2 -2
- package/dist/infra/task/index.d.ts.map +1 -1
- package/dist/infra/task/index.js +2 -2
- package/dist/infra/task/index.js.map +1 -1
- package/dist/shared/prompt/select-menu.d.ts +45 -0
- package/dist/shared/prompt/select-menu.d.ts.map +1 -0
- package/dist/shared/prompt/select-menu.js +95 -0
- package/dist/shared/prompt/select-menu.js.map +1 -0
- package/dist/shared/prompt/select-viewport.d.ts +27 -0
- package/dist/shared/prompt/select-viewport.d.ts.map +1 -0
- package/dist/shared/prompt/select-viewport.js +124 -0
- package/dist/shared/prompt/select-viewport.js.map +1 -0
- package/dist/shared/prompt/select.d.ts +4 -44
- package/dist/shared/prompt/select.d.ts.map +1 -1
- package/dist/shared/prompt/select.js +30 -101
- package/dist/shared/prompt/select.js.map +1 -1
- package/dist/shared/utils/index.d.ts +1 -0
- package/dist/shared/utils/index.d.ts.map +1 -1
- package/dist/shared/utils/index.js +1 -0
- package/dist/shared/utils/index.js.map +1 -1
- package/dist/shared/utils/providerModel.js +1 -1
- package/dist/shared/utils/providerModel.js.map +1 -1
- package/dist/shared/utils/spawn.d.ts +11 -0
- package/dist/shared/utils/spawn.d.ts.map +1 -0
- package/dist/shared/utils/spawn.js +17 -0
- package/dist/shared/utils/spawn.js.map +1 -0
- package/package.json +1 -1
|
@@ -2,94 +2,15 @@
|
|
|
2
2
|
* Interactive cursor-based selection menus.
|
|
3
3
|
*
|
|
4
4
|
* Provides arrow-key navigation for option selection in the terminal.
|
|
5
|
+
* Pure functions live in select-menu.ts (rendering, input) and
|
|
6
|
+
* select-viewport.ts (viewport scrolling).
|
|
5
7
|
*/
|
|
6
8
|
import chalk from 'chalk';
|
|
7
|
-
import { truncateText } from '../utils/index.js';
|
|
8
9
|
import { resolveTtyPolicy, assertTtyIfForced } from './tty.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export function renderMenu(options, selectedIndex, hasCancelOption, cancelLabel = 'Cancel') {
|
|
14
|
-
const maxWidth = process.stdout.columns || 80;
|
|
15
|
-
const labelPrefix = 4;
|
|
16
|
-
const descPrefix = 5;
|
|
17
|
-
const detailPrefix = 9;
|
|
18
|
-
const lines = [];
|
|
19
|
-
for (let i = 0; i < options.length; i++) {
|
|
20
|
-
const opt = options[i];
|
|
21
|
-
if (!opt)
|
|
22
|
-
continue;
|
|
23
|
-
const isSelected = i === selectedIndex;
|
|
24
|
-
const cursor = isSelected ? chalk.cyan('❯') : ' ';
|
|
25
|
-
const truncatedLabel = truncateText(opt.label, maxWidth - labelPrefix);
|
|
26
|
-
const label = isSelected ? chalk.cyan.bold(truncatedLabel) : truncatedLabel;
|
|
27
|
-
lines.push(` ${cursor} ${label}`);
|
|
28
|
-
if (opt.description) {
|
|
29
|
-
const truncatedDesc = truncateText(opt.description, maxWidth - descPrefix);
|
|
30
|
-
lines.push(chalk.gray(` ${truncatedDesc}`));
|
|
31
|
-
}
|
|
32
|
-
if (opt.details && opt.details.length > 0) {
|
|
33
|
-
for (const detail of opt.details) {
|
|
34
|
-
const truncatedDetail = truncateText(detail, maxWidth - detailPrefix);
|
|
35
|
-
lines.push(chalk.dim(` • ${truncatedDetail}`));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
if (hasCancelOption) {
|
|
40
|
-
const isCancelSelected = selectedIndex === options.length;
|
|
41
|
-
const cursor = isCancelSelected ? chalk.cyan('❯') : ' ';
|
|
42
|
-
const label = isCancelSelected ? chalk.cyan.bold(cancelLabel) : chalk.gray(cancelLabel);
|
|
43
|
-
lines.push(` ${cursor} ${label}`);
|
|
44
|
-
}
|
|
45
|
-
return lines;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Count total rendered lines for a set of options.
|
|
49
|
-
* Exported for testing.
|
|
50
|
-
*/
|
|
51
|
-
export function countRenderedLines(options, hasCancelOption) {
|
|
52
|
-
let count = 0;
|
|
53
|
-
for (const opt of options) {
|
|
54
|
-
count++;
|
|
55
|
-
if (opt.description)
|
|
56
|
-
count++;
|
|
57
|
-
if (opt.details)
|
|
58
|
-
count += opt.details.length;
|
|
59
|
-
}
|
|
60
|
-
if (hasCancelOption)
|
|
61
|
-
count++;
|
|
62
|
-
return count;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Pure function for key input state transitions.
|
|
66
|
-
* Exported for testing.
|
|
67
|
-
*/
|
|
68
|
-
export function handleKeyInput(key, currentIndex, totalItems, hasCancelOption, optionCount) {
|
|
69
|
-
if (key === '\x1B[A' || key === 'k') {
|
|
70
|
-
return { action: 'move', newIndex: (currentIndex - 1 + totalItems) % totalItems };
|
|
71
|
-
}
|
|
72
|
-
if (key === '\x1B[B' || key === 'j') {
|
|
73
|
-
return { action: 'move', newIndex: (currentIndex + 1) % totalItems };
|
|
74
|
-
}
|
|
75
|
-
if (key === '\r' || key === '\n') {
|
|
76
|
-
return { action: 'confirm', selectedIndex: currentIndex };
|
|
77
|
-
}
|
|
78
|
-
if (key === '\x03') {
|
|
79
|
-
return { action: 'exit' };
|
|
80
|
-
}
|
|
81
|
-
if (key === '\x1B') {
|
|
82
|
-
return { action: 'cancel', cancelIndex: hasCancelOption ? optionCount : -1 };
|
|
83
|
-
}
|
|
84
|
-
if (key === 'b') {
|
|
85
|
-
return { action: 'bookmark', selectedIndex: currentIndex };
|
|
86
|
-
}
|
|
87
|
-
if (key === 'r') {
|
|
88
|
-
return { action: 'remove_bookmark', selectedIndex: currentIndex };
|
|
89
|
-
}
|
|
90
|
-
return { action: 'none' };
|
|
91
|
-
}
|
|
92
|
-
/** Print the menu header (message + hint). */
|
|
10
|
+
import { renderMenu, handleKeyInput, } from './select-menu.js';
|
|
11
|
+
import { createViewportState, adjustScrollOffset, renderMenuWithViewport, } from './select-viewport.js';
|
|
12
|
+
// Re-export public symbols so index.ts imports stay unchanged
|
|
13
|
+
export { renderMenu, countRenderedLines, handleKeyInput, } from './select-menu.js';
|
|
93
14
|
function printHeader(message, hasCustomKeyHandler) {
|
|
94
15
|
console.log();
|
|
95
16
|
console.log(chalk.cyan(message));
|
|
@@ -99,7 +20,6 @@ function printHeader(message, hasCustomKeyHandler) {
|
|
|
99
20
|
console.log(chalk.gray(hint));
|
|
100
21
|
console.log();
|
|
101
22
|
}
|
|
102
|
-
/** Set up raw mode on stdin and return cleanup function. */
|
|
103
23
|
function setupRawMode() {
|
|
104
24
|
const wasRaw = process.stdin.isRaw;
|
|
105
25
|
process.stdin.setRawMode(true);
|
|
@@ -113,26 +33,30 @@ function setupRawMode() {
|
|
|
113
33
|
},
|
|
114
34
|
};
|
|
115
35
|
}
|
|
116
|
-
|
|
117
|
-
function redrawMenu(options, selectedIndex, hasCancelOption, prevTotalLines, cancelLabel) {
|
|
36
|
+
function redrawMenu(options, selectedIndex, hasCancelOption, prevTotalLines, cancelLabel, viewport) {
|
|
118
37
|
process.stdout.write(`\x1B[${prevTotalLines}A`);
|
|
119
38
|
process.stdout.write('\x1B[J');
|
|
120
|
-
const newLines =
|
|
39
|
+
const newLines = viewport.active
|
|
40
|
+
? renderMenuWithViewport(options, selectedIndex, hasCancelOption, viewport.scrollOffset, viewport.maxOptionLines, cancelLabel)
|
|
41
|
+
: renderMenu(options, selectedIndex, hasCancelOption, cancelLabel);
|
|
121
42
|
process.stdout.write(newLines.join('\n') + '\n');
|
|
122
43
|
return newLines.length;
|
|
123
44
|
}
|
|
124
|
-
/** Interactive cursor-based menu selection. */
|
|
125
45
|
function interactiveSelect(message, options, initialIndex, hasCancelOption, callbacks) {
|
|
126
46
|
return new Promise((resolve) => {
|
|
127
47
|
let currentOptions = options;
|
|
128
48
|
let totalItems = hasCancelOption ? currentOptions.length + 1 : currentOptions.length;
|
|
129
49
|
let selectedIndex = initialIndex;
|
|
130
50
|
const cancelLabel = callbacks?.cancelLabel ?? 'Cancel';
|
|
51
|
+
const terminalRows = process.stdout.rows ?? 24;
|
|
52
|
+
let viewport = createViewportState(terminalRows, currentOptions, hasCancelOption);
|
|
131
53
|
printHeader(message, !!callbacks?.onKeyPress);
|
|
132
54
|
process.stdout.write('\x1B[?7l');
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
55
|
+
const initialLines = viewport.active
|
|
56
|
+
? renderMenuWithViewport(currentOptions, selectedIndex, hasCancelOption, viewport.scrollOffset, viewport.maxOptionLines, cancelLabel)
|
|
57
|
+
: renderMenu(currentOptions, selectedIndex, hasCancelOption, cancelLabel);
|
|
58
|
+
let totalLines = initialLines.length;
|
|
59
|
+
process.stdout.write(initialLines.join('\n') + '\n');
|
|
136
60
|
const { useTty, forceTouchTty } = resolveTtyPolicy();
|
|
137
61
|
assertTtyIfForced(forceTouchTty);
|
|
138
62
|
if (!useTty) {
|
|
@@ -148,29 +72,37 @@ function interactiveSelect(message, options, initialIndex, hasCancelOption, call
|
|
|
148
72
|
const onKeypress = (data) => {
|
|
149
73
|
try {
|
|
150
74
|
const key = data.toString();
|
|
151
|
-
// Try custom key handler first
|
|
152
75
|
if (callbacks?.onKeyPress && selectedIndex < currentOptions.length) {
|
|
153
76
|
const item = currentOptions[selectedIndex];
|
|
154
77
|
if (item) {
|
|
155
78
|
const customResult = callbacks.onKeyPress(key, item.value, selectedIndex);
|
|
156
79
|
if (customResult !== null) {
|
|
157
|
-
// Custom handler processed the key
|
|
158
80
|
const currentValue = item.value;
|
|
159
81
|
currentOptions = customResult;
|
|
160
82
|
totalItems = hasCancelOption ? currentOptions.length + 1 : currentOptions.length;
|
|
161
83
|
const newIdx = currentOptions.findIndex((o) => o.value === currentValue);
|
|
162
84
|
selectedIndex = newIdx >= 0 ? newIdx : Math.min(selectedIndex, currentOptions.length - 1);
|
|
163
|
-
|
|
85
|
+
const newViewport = createViewportState(terminalRows, currentOptions, hasCancelOption);
|
|
86
|
+
viewport = {
|
|
87
|
+
...newViewport,
|
|
88
|
+
scrollOffset: adjustScrollOffset(selectedIndex, newViewport.scrollOffset, currentOptions, hasCancelOption, newViewport.maxOptionLines),
|
|
89
|
+
};
|
|
90
|
+
totalLines = redrawMenu(currentOptions, selectedIndex, hasCancelOption, totalLines, cancelLabel, viewport);
|
|
164
91
|
return;
|
|
165
92
|
}
|
|
166
93
|
}
|
|
167
94
|
}
|
|
168
|
-
// Delegate to default handler
|
|
169
95
|
const result = handleKeyInput(key, selectedIndex, totalItems, hasCancelOption, currentOptions.length);
|
|
170
96
|
switch (result.action) {
|
|
171
97
|
case 'move':
|
|
172
98
|
selectedIndex = result.newIndex;
|
|
173
|
-
|
|
99
|
+
if (viewport.active) {
|
|
100
|
+
viewport = {
|
|
101
|
+
...viewport,
|
|
102
|
+
scrollOffset: adjustScrollOffset(selectedIndex, viewport.scrollOffset, currentOptions, hasCancelOption, viewport.maxOptionLines),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
totalLines = redrawMenu(currentOptions, selectedIndex, hasCancelOption, totalLines, cancelLabel, viewport);
|
|
174
106
|
break;
|
|
175
107
|
case 'confirm':
|
|
176
108
|
cleanup(onKeypress);
|
|
@@ -181,10 +113,7 @@ function interactiveSelect(message, options, initialIndex, hasCancelOption, call
|
|
|
181
113
|
resolve({ selectedIndex: result.cancelIndex, finalOptions: currentOptions });
|
|
182
114
|
break;
|
|
183
115
|
case 'bookmark':
|
|
184
|
-
// Handled by custom onKeyPress
|
|
185
|
-
break;
|
|
186
116
|
case 'remove_bookmark':
|
|
187
|
-
// Ignore - should be handled by custom onKeyPress
|
|
188
117
|
break;
|
|
189
118
|
case 'exit':
|
|
190
119
|
cleanup(onKeypress);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/shared/prompt/select.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/shared/prompt/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export * from './reportDir.js';
|
|
|
10
10
|
export * from './slackWebhook.js';
|
|
11
11
|
export * from './sleep.js';
|
|
12
12
|
export * from './slug.js';
|
|
13
|
+
export * from './spawn.js';
|
|
13
14
|
export * from './streamDiagnostics.js';
|
|
14
15
|
export * from './structuredOutput.js';
|
|
15
16
|
export * from './taskPaths.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
@@ -10,6 +10,7 @@ export * from './reportDir.js';
|
|
|
10
10
|
export * from './slackWebhook.js';
|
|
11
11
|
export * from './sleep.js';
|
|
12
12
|
export * from './slug.js';
|
|
13
|
+
export * from './spawn.js';
|
|
13
14
|
export * from './streamDiagnostics.js';
|
|
14
15
|
export * from './structuredOutput.js';
|
|
15
16
|
export * from './taskPaths.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
@@ -9,7 +9,7 @@ export function parseProviderModel(value, fieldName) {
|
|
|
9
9
|
throw new Error(`${fieldName} must not be empty`);
|
|
10
10
|
}
|
|
11
11
|
const slashIndex = trimmed.indexOf('/');
|
|
12
|
-
if (slashIndex <= 0 || slashIndex === trimmed.length - 1
|
|
12
|
+
if (slashIndex <= 0 || slashIndex === trimmed.length - 1) {
|
|
13
13
|
throw new Error(`${fieldName} must be in 'provider/model' format: received '${value}'`);
|
|
14
14
|
}
|
|
15
15
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerModel.js","sourceRoot":"","sources":["../../../src/shared/utils/providerModel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,SAAiB;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"providerModel.js","sourceRoot":"","sources":["../../../src/shared/utils/providerModel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,SAAiB;IACjE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,oBAAoB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,kDAAkD,KAAK,GAAG,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;QACxC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform spawn wrapper.
|
|
3
|
+
*
|
|
4
|
+
* On Windows, npm-installed CLIs are `.cmd` shim files that cannot be
|
|
5
|
+
* executed by Node.js `spawn()` with `shell: false`. This wrapper
|
|
6
|
+
* transparently adds `shell: true` when the platform is Windows and the
|
|
7
|
+
* command is not an `.exe` binary, so callers don't need platform checks.
|
|
8
|
+
*/
|
|
9
|
+
import { type SpawnOptions, type ChildProcess } from 'node:child_process';
|
|
10
|
+
export declare function crossSpawn(command: string, args: readonly string[], options: SpawnOptions): ChildProcess;
|
|
11
|
+
//# sourceMappingURL=spawn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjF,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,YAAY,GACpB,YAAY,CAOd"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform spawn wrapper.
|
|
3
|
+
*
|
|
4
|
+
* On Windows, npm-installed CLIs are `.cmd` shim files that cannot be
|
|
5
|
+
* executed by Node.js `spawn()` with `shell: false`. This wrapper
|
|
6
|
+
* transparently adds `shell: true` when the platform is Windows and the
|
|
7
|
+
* command is not an `.exe` binary, so callers don't need platform checks.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
export function crossSpawn(command, args, options) {
|
|
11
|
+
const needsShell = process.platform === 'win32' && !command.toLowerCase().endsWith('.exe');
|
|
12
|
+
return spawn(command, args, {
|
|
13
|
+
...options,
|
|
14
|
+
...(needsShell ? { shell: true } : {}),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/shared/utils/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAwC,MAAM,oBAAoB,CAAC;AAEjF,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAuB,EACvB,OAAqB;IAErB,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,OAAO,EAAE,IAAgB,EAAE;QACtC,GAAG,OAAO;QACV,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvC,CAAC,CAAC;AACL,CAAC"}
|