@kitman-sh/cli 0.7.2 → 0.7.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/dist/{chunk-226sychh.js → chunk-120n71cv.js} +66 -39
- package/dist/{chunk-6f4anyec.js → chunk-20nwe9zd.js} +1 -1
- package/dist/{chunk-gzhxsb25.js → chunk-5cc3fb7y.js} +3 -3
- package/dist/{chunk-6kdj8psf.js → chunk-7f20xrc0.js} +2 -2
- package/dist/{chunk-hrd7xmax.js → chunk-gew1a5p6.js} +9 -9
- package/dist/{chunk-ztmwmk8t.js → chunk-h12rxyy9.js} +12 -12
- package/dist/{chunk-ae7gx971.js → chunk-j2psmzr4.js} +4 -4
- package/dist/{chunk-704ws2q7.js → chunk-jd09xfx0.js} +433 -257
- package/dist/{chunk-epdajq63.js → chunk-jwtkec1w.js} +2 -2
- package/dist/{chunk-dwgta18y.js → chunk-q6hk9ceb.js} +5 -5
- package/dist/{chunk-vjnae06n.js → chunk-s92k78ef.js} +784 -141
- package/dist/index.js +103 -235
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
3
|
import {
|
|
4
|
-
pipeArguments,
|
|
5
4
|
identity,
|
|
6
5
|
isUndefined,
|
|
7
6
|
isNotUndefined,
|
|
@@ -20,12 +19,8 @@ import {
|
|
|
20
19
|
fromUndefinedOr,
|
|
21
20
|
getOrUndefined,
|
|
22
21
|
Service,
|
|
23
|
-
add,
|
|
24
|
-
get,
|
|
25
22
|
Reference,
|
|
26
23
|
of,
|
|
27
|
-
fromInputUnsafe,
|
|
28
|
-
isFinite,
|
|
29
24
|
toMillis,
|
|
30
25
|
TaggedError,
|
|
31
26
|
squash,
|
|
@@ -34,19 +29,12 @@ import {
|
|
|
34
29
|
UnknownError,
|
|
35
30
|
succeed2,
|
|
36
31
|
fail2,
|
|
37
|
-
void_,
|
|
38
|
-
isSuccess2,
|
|
39
|
-
isFailure2,
|
|
40
32
|
makeUnsafe,
|
|
41
33
|
_await,
|
|
42
34
|
isDone,
|
|
43
35
|
isDoneUnsafe,
|
|
44
36
|
doneUnsafe,
|
|
45
|
-
Scope,
|
|
46
|
-
makeUnsafe2,
|
|
47
|
-
addFinalizerExit,
|
|
48
37
|
addFinalizer,
|
|
49
|
-
close,
|
|
50
38
|
succeed4,
|
|
51
39
|
effect,
|
|
52
40
|
mergeAll,
|
|
@@ -66,8 +54,7 @@ import {
|
|
|
66
54
|
gen,
|
|
67
55
|
fail4,
|
|
68
56
|
try_,
|
|
69
|
-
|
|
70
|
-
flatMap,
|
|
57
|
+
flatMap2,
|
|
71
58
|
andThen,
|
|
72
59
|
tap,
|
|
73
60
|
map3,
|
|
@@ -86,31 +73,22 @@ import {
|
|
|
86
73
|
provide3,
|
|
87
74
|
provideContext,
|
|
88
75
|
provideService,
|
|
89
|
-
scope,
|
|
90
76
|
scoped,
|
|
91
77
|
acquireRelease,
|
|
92
78
|
addFinalizer2,
|
|
93
79
|
ensuring,
|
|
94
|
-
onExit,
|
|
95
|
-
interrupt2,
|
|
96
80
|
uninterruptible,
|
|
97
|
-
uninterruptibleMask,
|
|
98
81
|
forever,
|
|
99
82
|
forkScoped,
|
|
100
|
-
runForkWith,
|
|
101
83
|
fnUntraced,
|
|
102
84
|
logWarning,
|
|
103
85
|
logError,
|
|
104
86
|
runMain,
|
|
105
87
|
systemError,
|
|
106
88
|
badArgument,
|
|
107
|
-
join,
|
|
108
|
-
interrupt3,
|
|
109
|
-
getCurrent,
|
|
110
|
-
runIn,
|
|
111
89
|
makeUnsafe3,
|
|
112
|
-
make7,
|
|
113
90
|
make8,
|
|
91
|
+
make9,
|
|
114
92
|
offerUnsafe,
|
|
115
93
|
endUnsafe,
|
|
116
94
|
take,
|
|
@@ -120,6 +98,8 @@ import {
|
|
|
120
98
|
isSink,
|
|
121
99
|
fromChannel,
|
|
122
100
|
drain,
|
|
101
|
+
make10,
|
|
102
|
+
get2,
|
|
123
103
|
isStream,
|
|
124
104
|
fromChannel2,
|
|
125
105
|
empty2,
|
|
@@ -135,9 +115,9 @@ import {
|
|
|
135
115
|
ExitCode,
|
|
136
116
|
ProcessId,
|
|
137
117
|
makeHandle,
|
|
138
|
-
|
|
118
|
+
make12,
|
|
139
119
|
ChildProcessSpawner,
|
|
140
|
-
|
|
120
|
+
make13,
|
|
141
121
|
parseFdName,
|
|
142
122
|
fdName,
|
|
143
123
|
handleErrnoException,
|
|
@@ -203,8 +183,8 @@ import {
|
|
|
203
183
|
agentCredentialForApi,
|
|
204
184
|
storeAgentCredential,
|
|
205
185
|
raw,
|
|
206
|
-
|
|
207
|
-
|
|
186
|
+
make14,
|
|
187
|
+
get3,
|
|
208
188
|
put,
|
|
209
189
|
execute,
|
|
210
190
|
Fetch,
|
|
@@ -227,146 +207,7 @@ import {
|
|
|
227
207
|
runCommand2,
|
|
228
208
|
detectHarnesses2,
|
|
229
209
|
herdrRunnerCapabilities2
|
|
230
|
-
} from "./chunk-
|
|
231
|
-
|
|
232
|
-
// node_modules/.bun/effect@4.0.4/node_modules/effect/dist/internal/rcRef.js
|
|
233
|
-
var TypeId = "~effect/RcRef";
|
|
234
|
-
var stateEmpty = {
|
|
235
|
-
_tag: "Empty"
|
|
236
|
-
};
|
|
237
|
-
var stateClosed = {
|
|
238
|
-
_tag: "Closed"
|
|
239
|
-
};
|
|
240
|
-
var variance = {
|
|
241
|
-
_A: identity,
|
|
242
|
-
_E: identity
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
class RcRefImpl {
|
|
246
|
-
[TypeId] = variance;
|
|
247
|
-
pipe() {
|
|
248
|
-
return pipeArguments(this, arguments);
|
|
249
|
-
}
|
|
250
|
-
state = stateEmpty;
|
|
251
|
-
acquire;
|
|
252
|
-
context;
|
|
253
|
-
scope;
|
|
254
|
-
idleTimeToLive;
|
|
255
|
-
constructor(acquire, context, scope, idleTimeToLive) {
|
|
256
|
-
this.acquire = acquire;
|
|
257
|
-
this.context = context;
|
|
258
|
-
this.scope = scope;
|
|
259
|
-
this.idleTimeToLive = idleTimeToLive;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
var make = (options) => withFiber((fiber) => {
|
|
263
|
-
const context = fiber.context;
|
|
264
|
-
const scope = get(context, Scope);
|
|
265
|
-
const ref = new RcRefImpl(options.acquire, context, scope, options.idleTimeToLive !== undefined ? fromInputUnsafe(options.idleTimeToLive) : undefined);
|
|
266
|
-
return as(addFinalizerExit(scope, () => {
|
|
267
|
-
const state = ref.state;
|
|
268
|
-
ref.state = stateClosed;
|
|
269
|
-
if (state._tag === "Acquired")
|
|
270
|
-
return close(state.scope, void_);
|
|
271
|
-
if (state._tag === "Acquiring")
|
|
272
|
-
return interrupt3(state.fiber);
|
|
273
|
-
return void_2;
|
|
274
|
-
}), ref);
|
|
275
|
-
});
|
|
276
|
-
var getState = (self, restore) => {
|
|
277
|
-
switch (self.state._tag) {
|
|
278
|
-
case "Closed": {
|
|
279
|
-
return interrupt2;
|
|
280
|
-
}
|
|
281
|
-
case "Acquired": {
|
|
282
|
-
const state = self.state;
|
|
283
|
-
state.refCount++;
|
|
284
|
-
return state.fiber ? as(interrupt3(state.fiber), state) : succeed5(state);
|
|
285
|
-
}
|
|
286
|
-
case "Acquiring": {
|
|
287
|
-
const state = self.state;
|
|
288
|
-
state.awaiters++;
|
|
289
|
-
return awaitAcquiring(self, state, restore);
|
|
290
|
-
}
|
|
291
|
-
case "Empty": {
|
|
292
|
-
const acquiring = {
|
|
293
|
-
_tag: "Acquiring",
|
|
294
|
-
fiber: undefined,
|
|
295
|
-
awaiters: 1,
|
|
296
|
-
acquired: undefined
|
|
297
|
-
};
|
|
298
|
-
self.state = acquiring;
|
|
299
|
-
const scope = makeUnsafe2();
|
|
300
|
-
const acquire = provideContext(self.acquire, add(self.context, Scope, scope)).pipe(flatMap((value) => {
|
|
301
|
-
if (self.state !== acquiring) {
|
|
302
|
-
return interrupt2;
|
|
303
|
-
}
|
|
304
|
-
const state = {
|
|
305
|
-
_tag: "Acquired",
|
|
306
|
-
value,
|
|
307
|
-
scope,
|
|
308
|
-
fiber: undefined,
|
|
309
|
-
refCount: acquiring.awaiters,
|
|
310
|
-
invalidated: false
|
|
311
|
-
};
|
|
312
|
-
self.state = state;
|
|
313
|
-
acquiring.acquired = state;
|
|
314
|
-
return succeed5(state);
|
|
315
|
-
}), onExit((exit) => {
|
|
316
|
-
if (isSuccess2(exit))
|
|
317
|
-
return void_2;
|
|
318
|
-
if (self.state === acquiring)
|
|
319
|
-
self.state = stateEmpty;
|
|
320
|
-
return close(scope, exit);
|
|
321
|
-
}));
|
|
322
|
-
acquiring.fiber = runForkWith(getCurrent().context)(acquire);
|
|
323
|
-
return awaitAcquiring(self, acquiring, restore);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
var awaitAcquiring = (self, acquiring, restore) => onExit(restore(join(acquiring.fiber)), (exit) => {
|
|
328
|
-
const acquired = acquiring.acquired;
|
|
329
|
-
if (acquired !== undefined) {
|
|
330
|
-
return isFailure2(exit) ? release(self, acquired) : void_2;
|
|
331
|
-
}
|
|
332
|
-
if (--acquiring.awaiters > 0 || self.state !== acquiring)
|
|
333
|
-
return void_2;
|
|
334
|
-
self.state = stateEmpty;
|
|
335
|
-
return interrupt3(acquiring.fiber);
|
|
336
|
-
});
|
|
337
|
-
var get3 = (self_) => {
|
|
338
|
-
const self = self_;
|
|
339
|
-
return uninterruptibleMask((restore) => flatMap(scope, (scope) => flatMap(getState(self, restore), (state) => as(addFinalizerExit(scope, () => release(self, state)), state.value))));
|
|
340
|
-
};
|
|
341
|
-
var release = (self, state) => {
|
|
342
|
-
state.refCount--;
|
|
343
|
-
if (state.refCount > 0) {
|
|
344
|
-
return void_2;
|
|
345
|
-
}
|
|
346
|
-
const idleTimeToLive = self.idleTimeToLive;
|
|
347
|
-
if (idleTimeToLive === undefined || state.invalidated) {
|
|
348
|
-
if (self.state === state) {
|
|
349
|
-
self.state = stateEmpty;
|
|
350
|
-
}
|
|
351
|
-
return close(state.scope, void_);
|
|
352
|
-
} else if (!isFinite(idleTimeToLive)) {
|
|
353
|
-
return void_2;
|
|
354
|
-
}
|
|
355
|
-
state.fiber = uninterruptibleMask((restore) => flatMap(restore(sleep(idleTimeToLive)), () => {
|
|
356
|
-
if (self.state === state && state.refCount === 0) {
|
|
357
|
-
self.state = stateEmpty;
|
|
358
|
-
return close(state.scope, void_);
|
|
359
|
-
}
|
|
360
|
-
return void_2;
|
|
361
|
-
})).pipe(ensuring(sync(() => {
|
|
362
|
-
state.fiber = undefined;
|
|
363
|
-
})), runForkWith(self.context), runIn(self.scope));
|
|
364
|
-
return void_2;
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
// node_modules/.bun/effect@4.0.4/node_modules/effect/dist/RcRef.js
|
|
368
|
-
var make2 = make;
|
|
369
|
-
var get4 = get3;
|
|
210
|
+
} from "./chunk-jd09xfx0.js";
|
|
370
211
|
|
|
371
212
|
// node_modules/.bun/@effect+platform-node-shared@4.0.4+b8cbb99ebc524863/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js
|
|
372
213
|
import * as NodeChildProcess from "child_process";
|
|
@@ -393,7 +234,7 @@ var fromWritableChannel = (options) => fromTransform((pull) => {
|
|
|
393
234
|
pull
|
|
394
235
|
}));
|
|
395
236
|
});
|
|
396
|
-
var pullIntoWritable = (options) => options.pull.pipe(
|
|
237
|
+
var pullIntoWritable = (options) => options.pull.pipe(flatMap2((chunk) => {
|
|
397
238
|
let i = 0;
|
|
398
239
|
return callback((resume) => {
|
|
399
240
|
let cancelled = false;
|
|
@@ -454,7 +295,7 @@ var fromReadableChannel = (options) => fromTransform((_, scope) => readableToPul
|
|
|
454
295
|
var readableToPullUnsafe = (options) => {
|
|
455
296
|
const readable = options.readable;
|
|
456
297
|
const closeOnDone = options.closeOnDone ?? true;
|
|
457
|
-
const exit = options.exit ??
|
|
298
|
+
const exit = options.exit ?? make8(undefined);
|
|
458
299
|
const latch = options.latch ?? makeUnsafe3(false);
|
|
459
300
|
function onReadable() {
|
|
460
301
|
latch.openUnsafe();
|
|
@@ -480,7 +321,7 @@ var readableToPullUnsafe = (options) => {
|
|
|
480
321
|
return fail4(Done());
|
|
481
322
|
}
|
|
482
323
|
latch.closeUnsafe();
|
|
483
|
-
return
|
|
324
|
+
return flatMap2(latch.await, loop);
|
|
484
325
|
}
|
|
485
326
|
const chunk = of(item);
|
|
486
327
|
while (true) {
|
|
@@ -544,7 +385,7 @@ var taskkill = (childProcess, onExit = () => {}) => {
|
|
|
544
385
|
windowsHide: true
|
|
545
386
|
}, onExit);
|
|
546
387
|
};
|
|
547
|
-
var
|
|
388
|
+
var make = /* @__PURE__ */ gen(function* () {
|
|
548
389
|
const fs = yield* FileSystem;
|
|
549
390
|
const path = yield* Path;
|
|
550
391
|
const resolveWorkingDirectory = fnUntraced(function* (options) {
|
|
@@ -910,7 +751,7 @@ var make3 = /* @__PURE__ */ gen(function* () {
|
|
|
910
751
|
getOutputFd
|
|
911
752
|
} = yield* setupAdditionalFds(cmd, childProcess, resolvedAdditionalFds);
|
|
912
753
|
const isRunning = map3(isDone(exitSignal), (done) => !done);
|
|
913
|
-
const exitCode =
|
|
754
|
+
const exitCode = flatMap2(_await(exitSignal), ([code, signal]) => {
|
|
914
755
|
if (isNotNull(code)) {
|
|
915
756
|
return succeed5(ExitCode(code));
|
|
916
757
|
}
|
|
@@ -946,7 +787,7 @@ var make3 = /* @__PURE__ */ gen(function* () {
|
|
|
946
787
|
const sourceStream = unwrap(succeed5(getSourceStream(handles[handles.length - 1], options.from)));
|
|
947
788
|
const toOption = options.to ?? "stdin";
|
|
948
789
|
if (toOption === "stdin") {
|
|
949
|
-
handles.push(yield* spawnCommand(
|
|
790
|
+
handles.push(yield* spawnCommand(make13(command.command, command.args, {
|
|
950
791
|
...command.options,
|
|
951
792
|
stdin: {
|
|
952
793
|
...stdinConfig,
|
|
@@ -958,7 +799,7 @@ var make3 = /* @__PURE__ */ gen(function* () {
|
|
|
958
799
|
if (isNotUndefined(fd)) {
|
|
959
800
|
const fdName2 = fdName(fd);
|
|
960
801
|
const existingFds = command.options.additionalFds ?? {};
|
|
961
|
-
handles.push(yield* spawnCommand(
|
|
802
|
+
handles.push(yield* spawnCommand(make13(command.command, command.args, {
|
|
962
803
|
...command.options,
|
|
963
804
|
additionalFds: {
|
|
964
805
|
...existingFds,
|
|
@@ -969,7 +810,7 @@ var make3 = /* @__PURE__ */ gen(function* () {
|
|
|
969
810
|
}
|
|
970
811
|
})));
|
|
971
812
|
} else {
|
|
972
|
-
handles.push(yield* spawnCommand(
|
|
813
|
+
handles.push(yield* spawnCommand(make13(command.command, command.args, {
|
|
973
814
|
...command.options,
|
|
974
815
|
stdin: {
|
|
975
816
|
...stdinConfig,
|
|
@@ -1008,9 +849,9 @@ var make3 = /* @__PURE__ */ gen(function* () {
|
|
|
1008
849
|
}
|
|
1009
850
|
}
|
|
1010
851
|
});
|
|
1011
|
-
return
|
|
852
|
+
return make12(spawnCommand);
|
|
1012
853
|
});
|
|
1013
|
-
var layer5 = /* @__PURE__ */ effect(ChildProcessSpawner,
|
|
854
|
+
var layer5 = /* @__PURE__ */ effect(ChildProcessSpawner, make);
|
|
1014
855
|
var flattenCommand = (command) => {
|
|
1015
856
|
const commands = [];
|
|
1016
857
|
const pipeOptions = [];
|
|
@@ -1041,10 +882,10 @@ var flattenCommand = (command) => {
|
|
|
1041
882
|
};
|
|
1042
883
|
|
|
1043
884
|
// node_modules/.bun/effect@4.0.4/node_modules/effect/dist/Stdio.js
|
|
1044
|
-
var
|
|
1045
|
-
var Stdio = /* @__PURE__ */ Service(
|
|
1046
|
-
var
|
|
1047
|
-
[
|
|
885
|
+
var TypeId = "~effect/Stdio";
|
|
886
|
+
var Stdio = /* @__PURE__ */ Service(TypeId);
|
|
887
|
+
var make2 = (options) => ({
|
|
888
|
+
[TypeId]: TypeId,
|
|
1048
889
|
stdinIsTerminal: succeed5(false),
|
|
1049
890
|
stdoutIsTerminal: succeed5(false),
|
|
1050
891
|
stderrIsTerminal: succeed5(false),
|
|
@@ -1052,7 +893,7 @@ var make4 = (options) => ({
|
|
|
1052
893
|
});
|
|
1053
894
|
|
|
1054
895
|
// node_modules/.bun/@effect+platform-node-shared@4.0.4+b8cbb99ebc524863/node_modules/@effect/platform-node-shared/dist/NodeStdio.js
|
|
1055
|
-
var layer6 = /* @__PURE__ */ succeed4(Stdio, /* @__PURE__ */
|
|
896
|
+
var layer6 = /* @__PURE__ */ succeed4(Stdio, /* @__PURE__ */ make2({
|
|
1056
897
|
args: /* @__PURE__ */ sync(() => process.argv.slice(2)),
|
|
1057
898
|
stdinIsTerminal: /* @__PURE__ */ sync(() => process.stdin.isTTY === true),
|
|
1058
899
|
stdoutIsTerminal: /* @__PURE__ */ sync(() => process.stdout.isTTY === true),
|
|
@@ -1093,7 +934,7 @@ var layer6 = /* @__PURE__ */ succeed4(Stdio, /* @__PURE__ */ make4({
|
|
|
1093
934
|
var layer7 = layer6;
|
|
1094
935
|
|
|
1095
936
|
// node_modules/.bun/effect@4.0.4/node_modules/effect/dist/Terminal.js
|
|
1096
|
-
var
|
|
937
|
+
var TypeId2 = "~effect/Terminal";
|
|
1097
938
|
var QuitErrorTypeId = "~effect/Terminal/QuitError";
|
|
1098
939
|
|
|
1099
940
|
class QuitError extends (/* @__PURE__ */ Error2("QuitError")({
|
|
@@ -1102,17 +943,17 @@ class QuitError extends (/* @__PURE__ */ Error2("QuitError")({
|
|
|
1102
943
|
[QuitErrorTypeId] = QuitErrorTypeId;
|
|
1103
944
|
}
|
|
1104
945
|
var Terminal = /* @__PURE__ */ Service("effect/Terminal");
|
|
1105
|
-
var
|
|
946
|
+
var make3 = (impl) => Terminal.of({
|
|
1106
947
|
...impl,
|
|
1107
|
-
[
|
|
948
|
+
[TypeId2]: TypeId2
|
|
1108
949
|
});
|
|
1109
950
|
|
|
1110
951
|
// node_modules/.bun/@effect+platform-node-shared@4.0.4+b8cbb99ebc524863/node_modules/@effect/platform-node-shared/dist/NodeTerminal.js
|
|
1111
952
|
import * as readline from "readline";
|
|
1112
|
-
var
|
|
953
|
+
var make4 = /* @__PURE__ */ fnUntraced(function* (shouldQuit = defaultShouldQuit) {
|
|
1113
954
|
const stdin = process.stdin;
|
|
1114
955
|
const stdout = process.stdout;
|
|
1115
|
-
const lines = yield*
|
|
956
|
+
const lines = yield* make9();
|
|
1116
957
|
let inputEnded = stdin.readableEnded;
|
|
1117
958
|
let readlineActive = false;
|
|
1118
959
|
const onStdinEnd = () => {
|
|
@@ -1123,7 +964,7 @@ var make6 = /* @__PURE__ */ fnUntraced(function* (shouldQuit = defaultShouldQuit
|
|
|
1123
964
|
};
|
|
1124
965
|
stdin.once("end", onStdinEnd);
|
|
1125
966
|
yield* addFinalizer2(() => sync(() => stdin.off("end", onStdinEnd)));
|
|
1126
|
-
const rlRef = yield*
|
|
967
|
+
const rlRef = yield* make10({
|
|
1127
968
|
acquire: acquireRelease(sync(() => {
|
|
1128
969
|
const rl = readline.createInterface({
|
|
1129
970
|
input: stdin,
|
|
@@ -1167,7 +1008,7 @@ var make6 = /* @__PURE__ */ fnUntraced(function* (shouldQuit = defaultShouldQuit
|
|
|
1167
1008
|
const columns = sync(() => stdout.columns ?? 0);
|
|
1168
1009
|
const rows = sync(() => stdout.rows ?? 0);
|
|
1169
1010
|
const readInput = gen(function* () {
|
|
1170
|
-
const queue = yield*
|
|
1011
|
+
const queue = yield* make9();
|
|
1171
1012
|
const handleKeypress = (s, k) => {
|
|
1172
1013
|
const userInput = {
|
|
1173
1014
|
input: fromUndefinedOr(s),
|
|
@@ -1197,13 +1038,13 @@ var make6 = /* @__PURE__ */ fnUntraced(function* (shouldQuit = defaultShouldQuit
|
|
|
1197
1038
|
if (inputEnded) {
|
|
1198
1039
|
handleEnd();
|
|
1199
1040
|
} else {
|
|
1200
|
-
yield*
|
|
1041
|
+
yield* get2(rlRef);
|
|
1201
1042
|
stdin.once("end", handleEnd);
|
|
1202
1043
|
}
|
|
1203
1044
|
return queue;
|
|
1204
1045
|
});
|
|
1205
|
-
const readLine = suspend(() => poll(lines).pipe(
|
|
1206
|
-
onNone: () => scoped(andThen(
|
|
1046
|
+
const readLine = suspend(() => poll(lines).pipe(flatMap2(match({
|
|
1047
|
+
onNone: () => scoped(andThen(get2(rlRef), take(lines))),
|
|
1207
1048
|
onSome: succeed5
|
|
1208
1049
|
})), mapError(() => new QuitError({}))));
|
|
1209
1050
|
const display = (prompt2) => uninterruptible(callback((resume) => {
|
|
@@ -1214,7 +1055,7 @@ var make6 = /* @__PURE__ */ fnUntraced(function* (shouldQuit = defaultShouldQuit
|
|
|
1214
1055
|
cause: err
|
|
1215
1056
|
}))));
|
|
1216
1057
|
}));
|
|
1217
|
-
return
|
|
1058
|
+
return make3({
|
|
1218
1059
|
columns,
|
|
1219
1060
|
rows,
|
|
1220
1061
|
readInput,
|
|
@@ -1222,7 +1063,7 @@ var make6 = /* @__PURE__ */ fnUntraced(function* (shouldQuit = defaultShouldQuit
|
|
|
1222
1063
|
display
|
|
1223
1064
|
});
|
|
1224
1065
|
});
|
|
1225
|
-
var layer8 = /* @__PURE__ */ effect(Terminal, /* @__PURE__ */
|
|
1066
|
+
var layer8 = /* @__PURE__ */ effect(Terminal, /* @__PURE__ */ make4(defaultShouldQuit));
|
|
1226
1067
|
function defaultShouldQuit(input) {
|
|
1227
1068
|
const key = input.key;
|
|
1228
1069
|
return key.name === "escape" || key.ctrl && (key.name === "c" || key.name === "d");
|
|
@@ -1334,9 +1175,9 @@ function renderMaterializationPlan(plan) {
|
|
|
1334
1175
|
harness: plan.harness,
|
|
1335
1176
|
operations: plan.operations.map((operation) => ({
|
|
1336
1177
|
kind: operation.kind,
|
|
1337
|
-
skillName: operation
|
|
1178
|
+
skillName: auditOperationName(operation),
|
|
1338
1179
|
skillIdentityHash: hashIdentity(auditOperationIdentity(operation)),
|
|
1339
|
-
target: operation.kind === "
|
|
1180
|
+
target: operation.kind === "symlink_skill" ? operation.targetPath : operation.path
|
|
1340
1181
|
})),
|
|
1341
1182
|
materializedSkills: plan.materializedSkills.map((skill) => ({
|
|
1342
1183
|
name: skill.name,
|
|
@@ -1361,8 +1202,25 @@ function renderConfigPlan(plan) {
|
|
|
1361
1202
|
warnings: plan.warnings.map((warning) => warning.message)
|
|
1362
1203
|
};
|
|
1363
1204
|
}
|
|
1205
|
+
function auditOperationName(operation) {
|
|
1206
|
+
if (operation.kind === "fetch_git_plugin")
|
|
1207
|
+
return operation.pluginName;
|
|
1208
|
+
if (operation.kind === "write_codex_marketplace" || operation.kind === "unlink_stale_links")
|
|
1209
|
+
return "kitman";
|
|
1210
|
+
return operation.skillName;
|
|
1211
|
+
}
|
|
1364
1212
|
function auditOperationIdentity(operation) {
|
|
1365
|
-
|
|
1213
|
+
if (operation.kind === "write_skill")
|
|
1214
|
+
return `write_skill:${operation.skillName}:content_sha256:${hashIdentity(operation.content)}:${operation.path}`;
|
|
1215
|
+
if (operation.kind === "fetch_git_skill")
|
|
1216
|
+
return `fetch_git_skill:${operation.skillName}:${operation.url}#${operation.ref}:${operation.repositoryPath ?? ""}:${operation.path}`;
|
|
1217
|
+
if (operation.kind === "fetch_git_plugin")
|
|
1218
|
+
return `fetch_git_plugin:${operation.pluginName}:${operation.url}#${operation.ref}:${operation.path}`;
|
|
1219
|
+
if (operation.kind === "write_codex_marketplace")
|
|
1220
|
+
return `write_codex_marketplace:content_sha256:${hashIdentity(operation.content)}:${operation.path}`;
|
|
1221
|
+
if (operation.kind === "unlink_stale_links")
|
|
1222
|
+
return `unlink_stale_links:${operation.sourceRoot}:${operation.keepPaths.join(",")}:${operation.path}`;
|
|
1223
|
+
return `symlink_skill:${operation.skillName}:symlink:${operation.sourcePath}:${operation.targetPath}`;
|
|
1366
1224
|
}
|
|
1367
1225
|
function auditMaterializedSkillIdentity(skill) {
|
|
1368
1226
|
return `${skill.harness}:${skill.name}:${skill.source.kind}:${skill.skillPath ?? ""}:${skill.managed}`;
|
|
@@ -1468,7 +1326,7 @@ function createOperationalCliClient(client) {
|
|
|
1468
1326
|
};
|
|
1469
1327
|
}
|
|
1470
1328
|
function parseJsonInput(value, label) {
|
|
1471
|
-
return decodeJsonString(value).pipe(mapError(() => new CliError({ message: `${label} requires valid JSON` })),
|
|
1329
|
+
return decodeJsonString(value).pipe(mapError(() => new CliError({ message: `${label} requires valid JSON` })), flatMap2((json) => isJsonObject(json) ? succeed5(json) : fail4(new CliError({ message: `${label} requires a JSON object` }))));
|
|
1472
1330
|
}
|
|
1473
1331
|
function idempotencyKey(value, operation) {
|
|
1474
1332
|
const explicit = value?.trim();
|
|
@@ -1527,7 +1385,7 @@ import { hostname } from "os";
|
|
|
1527
1385
|
var Git = Reference("kitman/cli/Git", {
|
|
1528
1386
|
defaultValue: () => (args) => runCommand2("git", args).pipe(map3((stdout) => stdout.trim()))
|
|
1529
1387
|
});
|
|
1530
|
-
var repoBindingInputFromCurrentRepo =
|
|
1388
|
+
var repoBindingInputFromCurrentRepo = flatMap2(Git, repoBindingInput);
|
|
1531
1389
|
function repoBindingInput(git) {
|
|
1532
1390
|
return gen(function* () {
|
|
1533
1391
|
const remoteUrl = yield* git(["remote", "get-url", "origin"]);
|
|
@@ -1790,7 +1648,7 @@ var kitmanCommand = () => {
|
|
|
1790
1648
|
const [runtime, script] = process.argv;
|
|
1791
1649
|
return script === undefined || script.startsWith("/$bunfs/") ? [process.execPath] : [runtime ?? process.execPath, script];
|
|
1792
1650
|
};
|
|
1793
|
-
var readText = (path) =>
|
|
1651
|
+
var readText = (path) => flatMap2(FileSystem, (fs) => fs.readFileString(path)).pipe(orElseSucceed(() => {
|
|
1794
1652
|
return;
|
|
1795
1653
|
}));
|
|
1796
1654
|
var verificationStep = (client, projectId, binding, confirm, step) => gen(function* () {
|
|
@@ -1929,7 +1787,7 @@ var package_default = {
|
|
|
1929
1787
|
};
|
|
1930
1788
|
|
|
1931
1789
|
// apps/cli/src/scaffold.ts
|
|
1932
|
-
var cliVersion = "0.7.
|
|
1790
|
+
var cliVersion = "0.7.4";
|
|
1933
1791
|
var packageJson = (name, scaffold) => `${JSON.stringify({
|
|
1934
1792
|
name,
|
|
1935
1793
|
private: true,
|
|
@@ -2049,7 +1907,7 @@ var scaffoldPackage = (directory, scaffold = {}) => gen(function* () {
|
|
|
2049
1907
|
const path = yield* Path;
|
|
2050
1908
|
const root = path.resolve(directory);
|
|
2051
1909
|
if (scaffold.fork !== undefined) {
|
|
2052
|
-
const { shippedLoops } = yield* promise(() => import("./chunk-
|
|
1910
|
+
const { shippedLoops } = yield* promise(() => import("./chunk-jwtkec1w.js"));
|
|
2053
1911
|
if (!(scaffold.fork in shippedLoops))
|
|
2054
1912
|
return yield* new CliError({
|
|
2055
1913
|
message: `Kitman ships no Loop ${scaffold.fork}; fork one of ${Object.keys(shippedLoops).join(", ")}`
|
|
@@ -2143,7 +2001,7 @@ var Usage = [
|
|
|
2143
2001
|
`);
|
|
2144
2002
|
var KitCreateValidator = guard(KitCreate);
|
|
2145
2003
|
var KitUpdateValidator = guard(KitUpdate);
|
|
2146
|
-
var agentRuntime = promise(() => import("./chunk-
|
|
2004
|
+
var agentRuntime = promise(() => import("./chunk-s92k78ef.js"));
|
|
2147
2005
|
var TuiLauncher = Reference("kitman/cli/TuiLauncher", {
|
|
2148
2006
|
defaultValue: () => gen(function* () {
|
|
2149
2007
|
const tui = yield* tryPromise({
|
|
@@ -2623,7 +2481,7 @@ function harnessSync(args) {
|
|
|
2623
2481
|
};
|
|
2624
2482
|
});
|
|
2625
2483
|
const projectRoot = command.flags.projectScope ? yield* resolveProjectWriteRoot : undefined;
|
|
2626
|
-
const targetPlans = yield* previewEnvironmentPlans(environments, command, projectRoot, config.mcpCredentialName, syncKits);
|
|
2484
|
+
const targetPlans = yield* previewEnvironmentPlans(environments, command, projectRoot, config.mcpCredentialName, syncKits, (yield* readUserConfig()) ?? {});
|
|
2627
2485
|
const environmentPlan = composeAgentEnvironmentSyncPlan(targetPlans);
|
|
2628
2486
|
const materializationPlans = targetPlans.map((target) => target.skills);
|
|
2629
2487
|
const userConfigPlans = command.flags.projectScope ? [] : targetPlans.map((target) => target.harnessConfig);
|
|
@@ -2640,15 +2498,14 @@ function harnessSync(args) {
|
|
|
2640
2498
|
syncKits
|
|
2641
2499
|
});
|
|
2642
2500
|
const applied = !command.flags.preview;
|
|
2643
|
-
if (applied)
|
|
2501
|
+
if (applied)
|
|
2644
2502
|
yield* writeHarnessSyncPlan(outputPath, plan);
|
|
2645
|
-
|
|
2646
|
-
}
|
|
2503
|
+
const resultPlan = applied ? yield* applyAgentEnvironmentPlans(environmentPlan) : environmentPlan;
|
|
2647
2504
|
return {
|
|
2648
2505
|
command,
|
|
2649
2506
|
plan,
|
|
2650
|
-
environmentPlan,
|
|
2651
|
-
materializationPlans,
|
|
2507
|
+
environmentPlan: resultPlan,
|
|
2508
|
+
materializationPlans: resultPlan.targets.map((target) => target.skills),
|
|
2652
2509
|
configPlans,
|
|
2653
2510
|
userConfigPlans,
|
|
2654
2511
|
projectConfigPlans,
|
|
@@ -2795,8 +2652,8 @@ function isInstallDefaultKit(kit) {
|
|
|
2795
2652
|
const rollout = isObject(marketplace) && marketplace !== null && "rollout" in marketplace ? marketplace.rollout : undefined;
|
|
2796
2653
|
return isObject(rollout) && rollout !== null && "installDefault" in rollout && rollout.installDefault === true;
|
|
2797
2654
|
}
|
|
2798
|
-
function previewEnvironmentPlans(environments, command, projectRoot, mcpCredentialName, syncKits = []) {
|
|
2799
|
-
|
|
2655
|
+
function previewEnvironmentPlans(environments, command, projectRoot, mcpCredentialName, syncKits = [], userConfig = {}) {
|
|
2656
|
+
const previews = forEach(environments, (environment, index) => gen(function* () {
|
|
2800
2657
|
const rootDir = command.flags.projectScope ? projectRoot : getOrUndefined(yield* option2(String3("HOME")));
|
|
2801
2658
|
const { previewAgentEnvironmentPlan } = yield* agentRuntime;
|
|
2802
2659
|
return yield* previewAgentEnvironmentPlan({
|
|
@@ -2805,12 +2662,16 @@ function previewEnvironmentPlans(environments, command, projectRoot, mcpCredenti
|
|
|
2805
2662
|
scope: command.flags.projectScope ? "project" : "user",
|
|
2806
2663
|
...rootDir === undefined ? undefined : { rootDir },
|
|
2807
2664
|
...command.flags.noInstall === undefined ? undefined : { noInstall: command.flags.noInstall },
|
|
2665
|
+
...userConfig.approvedSkillSources === undefined ? undefined : { approvedSkillSources: userConfig.approvedSkillSources },
|
|
2666
|
+
...userConfig.requireReviewedSources === undefined ? undefined : { requireReviewedSources: userConfig.requireReviewedSources },
|
|
2667
|
+
...userConfig.versions === undefined ? undefined : { versions: userConfig.versions },
|
|
2808
2668
|
...mcpCredentialName === undefined ? undefined : { mcpCredentialName }
|
|
2809
2669
|
});
|
|
2810
2670
|
}));
|
|
2671
|
+
return flatMap2(agentRuntime, ({ withSourceResolutionCache }) => withSourceResolutionCache(previews));
|
|
2811
2672
|
}
|
|
2812
2673
|
var confirmSyncAfterKitToggle = map3(promptLine("Sync enabled kits now? [Y/n] "), (answer) => ["", "y", "yes"].includes(answer.trim().toLowerCase()));
|
|
2813
|
-
var readStdin = Stdio.pipe(
|
|
2674
|
+
var readStdin = Stdio.pipe(flatMap2((stdio) => mkString(decodeText(stdio.stdin))), map3((text) => text.trim()));
|
|
2814
2675
|
function promptLine(prompt2) {
|
|
2815
2676
|
return gen(function* () {
|
|
2816
2677
|
const terminal = yield* Terminal;
|
|
@@ -2935,7 +2796,7 @@ function interactiveKitToggle(kits, harnesses, preferences) {
|
|
|
2935
2796
|
}
|
|
2936
2797
|
}
|
|
2937
2798
|
return { ...preferences, perHarnessKitActivations: [...updates.values()] };
|
|
2938
|
-
}).pipe(ensuring(ignore(Terminal.pipe(
|
|
2799
|
+
}).pipe(ensuring(ignore(Terminal.pipe(flatMap2((terminal) => terminal.display("\x1B[?25h"))))), scoped);
|
|
2939
2800
|
}
|
|
2940
2801
|
function mixedKitState(kit, harnesses, preferences) {
|
|
2941
2802
|
const states = harnesses.map((harness) => kitEnabledForHarness(preferences, harness, kit.id));
|
|
@@ -3041,7 +2902,7 @@ function browserSession(apiUrl) {
|
|
|
3041
2902
|
clientId: ClientId,
|
|
3042
2903
|
onUrl: (url) => andThen(log(`Open this URL to log in:
|
|
3043
2904
|
${url}`), openBrowser(url)),
|
|
3044
|
-
onTimeout: (state) => promptLine("Paste the full callback URL: ").pipe(mapError(() => new CliError({ message: "No callback URL provided" })),
|
|
2905
|
+
onTimeout: (state) => promptLine("Paste the full callback URL: ").pipe(mapError(() => new CliError({ message: "No callback URL provided" })), flatMap2((line) => parseCallbackUrl(line.trim(), state)))
|
|
3045
2906
|
});
|
|
3046
2907
|
const session = toStoredSession(token);
|
|
3047
2908
|
yield* storeSession(apiUrl, session);
|
|
@@ -3393,7 +3254,7 @@ function runnerCommand(args) {
|
|
|
3393
3254
|
});
|
|
3394
3255
|
}
|
|
3395
3256
|
var SandboxHostProbe = Reference("kitman/cli/SandboxHostProbe", {
|
|
3396
|
-
defaultValue: () =>
|
|
3257
|
+
defaultValue: () => flatMap2(agentRuntime, (runtime) => runtime.commandHostProbe)
|
|
3397
3258
|
});
|
|
3398
3259
|
var runnerSettings = gen(function* () {
|
|
3399
3260
|
const optional = (name) => String3(name).pipe(option2, map3((value) => getOrUndefined(value)?.trim()));
|
|
@@ -3449,7 +3310,7 @@ function startCanonicalHerdrRunnerCommand(input) {
|
|
|
3449
3310
|
superviseReplica,
|
|
3450
3311
|
verificationExecutor
|
|
3451
3312
|
} = yield* agentRuntime;
|
|
3452
|
-
const { makeRunnerRpcClient, runnerRpcUrl, runnerWebSocketProtocol } = yield* promise(() => import("./chunk-
|
|
3313
|
+
const { makeRunnerRpcClient, runnerRpcUrl, runnerWebSocketProtocol } = yield* promise(() => import("./chunk-5cc3fb7y.js"));
|
|
3453
3314
|
const settings = yield* runnerSettings;
|
|
3454
3315
|
const { concurrency, fullAccess, sshAgentAvailable } = settings;
|
|
3455
3316
|
const personal = input.runner.ownership.kind === "personal";
|
|
@@ -3461,6 +3322,15 @@ function startCanonicalHerdrRunnerCommand(input) {
|
|
|
3461
3322
|
});
|
|
3462
3323
|
const repoBinding = input.projectId === undefined ? undefined : (yield* input.client.listRepoBindings(input.projectId)).items.find((binding) => binding.status === "active");
|
|
3463
3324
|
const harnesses = yield* detectHarnesses;
|
|
3325
|
+
if (harnesses.harnesses.length > 0)
|
|
3326
|
+
yield* harnessSync([
|
|
3327
|
+
"sync",
|
|
3328
|
+
...harnesses.harnesses.map((harness) => harness === "claude" ? "claude-code" : harness),
|
|
3329
|
+
"--workspace",
|
|
3330
|
+
input.workspaceId,
|
|
3331
|
+
"--api-url",
|
|
3332
|
+
input.apiUrl
|
|
3333
|
+
]).pipe(catch_((error2) => error(`Harness sync failed; the Runner starts on the previous one: ${error2.message}`)));
|
|
3464
3334
|
const advertisedCapabilities = repoBinding === undefined ? herdrRunnerCapabilities({ harnesses, fullAccess, sandbox: host, shared: !personal }) : herdrRunnerCapabilitiesForRepoBinding(repoBinding, {
|
|
3465
3335
|
harnesses,
|
|
3466
3336
|
fullAccess,
|
|
@@ -3602,7 +3472,7 @@ function startCanonicalHerdrRunnerCommand(input) {
|
|
|
3602
3472
|
healthStatus: "healthy",
|
|
3603
3473
|
capabilities,
|
|
3604
3474
|
labels: input.runner.labels
|
|
3605
|
-
}).pipe(
|
|
3475
|
+
}).pipe(flatMap2(() => controlPlane.client.heartbeatRunnerReplica(input.runner.id, replica.id, {
|
|
3606
3476
|
healthStatus: "healthy",
|
|
3607
3477
|
drainState: "accepting",
|
|
3608
3478
|
capacity: { maxConcurrentRuns: concurrency },
|
|
@@ -3667,7 +3537,7 @@ function mcpCommand(args) {
|
|
|
3667
3537
|
if (command.action === "run") {
|
|
3668
3538
|
if (command.args.length > 0)
|
|
3669
3539
|
return yield* new CliError({ message: `Unknown command: ${args.join(" ")}` });
|
|
3670
|
-
const { runMcpServerCommand } = yield* promise(() => import("./chunk-
|
|
3540
|
+
const { runMcpServerCommand } = yield* promise(() => import("./chunk-120n71cv.js"));
|
|
3671
3541
|
return yield* runMcpServerCommand({ flags: command.flags });
|
|
3672
3542
|
}
|
|
3673
3543
|
if (command.action !== "setup")
|
|
@@ -4003,7 +3873,7 @@ function taskCommand(args) {
|
|
|
4003
3873
|
const sourcePath = command.args[1];
|
|
4004
3874
|
if (!sourcePath)
|
|
4005
3875
|
return yield* new CliError({ message: `${command.group} upload-asset requires file path` });
|
|
4006
|
-
const bytes = yield* FileSystem.pipe(
|
|
3876
|
+
const bytes = yield* FileSystem.pipe(flatMap2((fs) => fs.readFile(sourcePath)));
|
|
4007
3877
|
const input = {
|
|
4008
3878
|
filename: command.flags.filename ?? (yield* Path).basename(sourcePath),
|
|
4009
3879
|
contentType: command.flags.contentType ?? "application/octet-stream",
|
|
@@ -4278,7 +4148,7 @@ function loopCatalogCommand(args) {
|
|
|
4278
4148
|
return yield* new CliError({ message: `Unknown command: ${args.join(" ")}` });
|
|
4279
4149
|
});
|
|
4280
4150
|
}
|
|
4281
|
-
var taskTypeNamed = (client, workspaceId, named) =>
|
|
4151
|
+
var taskTypeNamed = (client, workspaceId, named) => flatMap2(client.listTaskTypes(workspaceId), (types) => {
|
|
4282
4152
|
const found = types.items.find((type) => type.id === named || type.name.toLowerCase() === named.toLowerCase());
|
|
4283
4153
|
return found === undefined ? fail4(new CliError({
|
|
4284
4154
|
message: `No Task Type "${named}"; the Workspace has ${types.items.map((type) => type.name).join(", ")}`
|
|
@@ -4653,7 +4523,7 @@ function verifyCommand(args) {
|
|
|
4653
4523
|
}
|
|
4654
4524
|
});
|
|
4655
4525
|
}
|
|
4656
|
-
var secretValueFromStdin = Stdio.pipe(
|
|
4526
|
+
var secretValueFromStdin = Stdio.pipe(flatMap2((stdio) => mkString(decodeText(stdio.stdin))), map3((text) => text.replace(/\r?\n$/, "")));
|
|
4657
4527
|
function secretCommand(args) {
|
|
4658
4528
|
return gen(function* () {
|
|
4659
4529
|
const command = parseCommand(args.length === 1 ? [...args, "list"] : args);
|
|
@@ -4687,7 +4557,7 @@ function secretCommand(args) {
|
|
|
4687
4557
|
});
|
|
4688
4558
|
}
|
|
4689
4559
|
var PackageBuilder = Reference("kitman/cli/PackageBuilder", {
|
|
4690
|
-
defaultValue: () => (directory) =>
|
|
4560
|
+
defaultValue: () => (directory) => flatMap2(promise(() => import("./chunk-gew1a5p6.js")), (build) => build.buildPackage(directory))
|
|
4691
4561
|
});
|
|
4692
4562
|
var optionalEnv = (name) => String3(name).pipe(option2, map3(getOrUndefined));
|
|
4693
4563
|
var ciIdToken = (apiUrl) => gen(function* () {
|
|
@@ -4701,7 +4571,7 @@ var ciIdToken = (apiUrl) => gen(function* () {
|
|
|
4701
4571
|
const url = new URL(requestUrl);
|
|
4702
4572
|
const refused = (reason) => new CliError({ message: `GitHub Actions issued no ID token: ${reason}` });
|
|
4703
4573
|
url.searchParams.set("audience", apiUrl.replace(/\/+$/, ""));
|
|
4704
|
-
const response = yield* send(
|
|
4574
|
+
const response = yield* send(get3(url, { headers: { authorization: `Bearer ${requestToken}` } }), (cause) => refused(String(cause)));
|
|
4705
4575
|
if (response.status < 200 || response.status >= 300)
|
|
4706
4576
|
return yield* refused(`${response.status}; does the job have id-token: write?`);
|
|
4707
4577
|
const body = yield* response.text.pipe(mapError((error) => refused(error.message)));
|
|
@@ -5192,9 +5062,7 @@ function runnerOwnershipFromCommand(command, required) {
|
|
|
5192
5062
|
const ownerUserId = command.flags.scopeId;
|
|
5193
5063
|
if (!ownerUserId)
|
|
5194
5064
|
throw new Error("personal runner scope requires --scope-id <owner-user-id>");
|
|
5195
|
-
|
|
5196
|
-
throw new Error("personal runner scope does not accept --project-access");
|
|
5197
|
-
return { kind: "personal", ownerUserId };
|
|
5065
|
+
return { kind: "personal", ownerUserId, projectAccess: command.flags.projectAccess ?? "all" };
|
|
5198
5066
|
}
|
|
5199
5067
|
throw new Error("--scope-type must be workspace, project, or personal");
|
|
5200
5068
|
}
|
|
@@ -5450,12 +5318,12 @@ function repoBindingCredentialRefLabel(ref) {
|
|
|
5450
5318
|
function runnerRow(runner) {
|
|
5451
5319
|
const ownership = runner.ownership;
|
|
5452
5320
|
let effectiveProjectAccess;
|
|
5453
|
-
if (ownership.kind === "
|
|
5454
|
-
effectiveProjectAccess = ownership.projectAccess === "all" ? "workspace_all" : runner.projectGrantIds.join(",") || "selected_none";
|
|
5455
|
-
else if (ownership.kind === "project")
|
|
5321
|
+
if (ownership.kind === "project")
|
|
5456
5322
|
effectiveProjectAccess = `project:${ownership.projectId}`;
|
|
5323
|
+
else if (ownership.projectAccess === "selected")
|
|
5324
|
+
effectiveProjectAccess = runner.projectGrantIds.join(",") || "selected_none";
|
|
5457
5325
|
else
|
|
5458
|
-
effectiveProjectAccess = `personal:${ownership.ownerUserId}`;
|
|
5326
|
+
effectiveProjectAccess = ownership.kind === "workspace" ? "workspace_all" : `personal:${ownership.ownerUserId}`;
|
|
5459
5327
|
return {
|
|
5460
5328
|
id: runner.id,
|
|
5461
5329
|
name: runner.name,
|
|
@@ -5469,7 +5337,7 @@ function runnerRow(runner) {
|
|
|
5469
5337
|
sandboxes: runner.capabilities.sandboxBackends.join(","),
|
|
5470
5338
|
labels: runner.labels.join(","),
|
|
5471
5339
|
ownership: ownership.kind,
|
|
5472
|
-
projectAccess: ownership.kind === "
|
|
5340
|
+
projectAccess: ownership.kind === "project" ? undefined : ownership.projectAccess,
|
|
5473
5341
|
ownerUserId: ownership.kind === "personal" ? ownership.ownerUserId : undefined,
|
|
5474
5342
|
scopedProjectId: ownership.kind === "project" ? ownership.projectId : undefined,
|
|
5475
5343
|
effectiveProjectAccess,
|
|
@@ -5588,7 +5456,7 @@ function downloadPresignedAsset(download, outputPath) {
|
|
|
5588
5456
|
return gen(function* () {
|
|
5589
5457
|
const fs = yield* FileSystem;
|
|
5590
5458
|
const failed = (cause) => new CliError({ message: `Asset download failed: ${String(cause)}` });
|
|
5591
|
-
const response = yield* send(
|
|
5459
|
+
const response = yield* send(make14(download.method)(download.url), failed);
|
|
5592
5460
|
if (response.status < 200 || response.status >= 300)
|
|
5593
5461
|
return yield* new CliError({ message: `Asset download failed with ${response.status}` });
|
|
5594
5462
|
const body = yield* response.arrayBuffer.pipe(mapError((error) => failed(error.message)));
|
|
@@ -5774,7 +5642,7 @@ function kitCreateInput(command) {
|
|
|
5774
5642
|
return yield* new CliError({
|
|
5775
5643
|
message: "kit create --source cannot be combined with --name, --description, --kind, --content, or --stdin"
|
|
5776
5644
|
});
|
|
5777
|
-
const content = yield* FileSystem.pipe(
|
|
5645
|
+
const content = yield* FileSystem.pipe(flatMap2((fs) => fs.readFileString(command.flags.source ?? "")));
|
|
5778
5646
|
return yield* parseKitCreateSource(content);
|
|
5779
5647
|
}
|
|
5780
5648
|
const name = command.flags.name ?? prompt("Kit name: ");
|
|
@@ -5801,7 +5669,7 @@ function kitUpdateInput(command) {
|
|
|
5801
5669
|
return yield* new CliError({
|
|
5802
5670
|
message: "kit update --source cannot be combined with --name, --description, --kind, --content, or --stdin"
|
|
5803
5671
|
});
|
|
5804
|
-
const content = yield* FileSystem.pipe(
|
|
5672
|
+
const content = yield* FileSystem.pipe(flatMap2((fs) => fs.readFileString(command.flags.source ?? "")));
|
|
5805
5673
|
return yield* parseKitUpdateSource(content);
|
|
5806
5674
|
}
|
|
5807
5675
|
const input = {
|