@kitman-sh/cli 0.7.4 → 0.7.5

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.
@@ -100,7 +100,7 @@ import {
100
100
  toCodecJson,
101
101
  Json,
102
102
  LoopCapabilities
103
- } from "./chunk-jd09xfx0.js";
103
+ } from "./chunk-p2wk2v39.js";
104
104
 
105
105
  // packages/sdk/src/loop/define.ts
106
106
  var LoopOutcome = Literals(["feature", "bug", "refactor", "investigation", "docs", "migration"]);
@@ -41,14 +41,14 @@ import {
41
41
  KitAssignmentDeclaration,
42
42
  PackageDeclarations,
43
43
  RunnerRpcProtocolVersion
44
- } from "./chunk-jd09xfx0.js";
45
- import"./chunk-q6hk9ceb.js";
46
- import"./chunk-j2psmzr4.js";
47
- import"./chunk-h12rxyy9.js";
44
+ } from "./chunk-p2wk2v39.js";
45
+ import"./chunk-tk0gy9wq.js";
46
+ import"./chunk-1f7qe00x.js";
47
+ import"./chunk-a44szh8v.js";
48
48
  import {
49
49
  describeFlag,
50
50
  Described
51
- } from "./chunk-7f20xrc0.js";
51
+ } from "./chunk-4gc7b9qt.js";
52
52
 
53
53
  // packages/sdk/src/build/index.ts
54
54
  class DependencyInstallFailed extends TaggedError2()("DependencyInstallFailed", {
@@ -11620,7 +11620,7 @@ var make28 = (params) => {
11620
11620
  self.params = params;
11621
11621
  return self;
11622
11622
  };
11623
- var fromInput3 = (input) => {
11623
+ var fromInput2 = (input) => {
11624
11624
  if (isUrlParams(input)) {
11625
11625
  return input;
11626
11626
  }
@@ -11661,7 +11661,7 @@ var Equivalence5 = /* @__PURE__ */ make((a, b) => arrayEquivalence(a.params, b.p
11661
11661
  var arrayEquivalence = /* @__PURE__ */ makeEquivalence3(/* @__PURE__ */ makeEquivalence([/* @__PURE__ */ strictEqual(), /* @__PURE__ */ strictEqual()]));
11662
11662
  var empty6 = /* @__PURE__ */ make28([]);
11663
11663
  var setAll2 = /* @__PURE__ */ dual(2, (self, input) => {
11664
- const params = fromInput3(input).params.slice();
11664
+ const params = fromInput2(input).params.slice();
11665
11665
  const keys = new Set;
11666
11666
  for (let i = 0;i < params.length; i++) {
11667
11667
  keys.add(params[i][0]);
@@ -14831,7 +14831,7 @@ function isRfc3339Time(value) {
14831
14831
  const utcMinutes = hour * 60 + minute - sign * (Number(match[6] ?? 0) * 60 + Number(match[7] ?? 0));
14832
14832
  return (utcMinutes % 1440 + 1440) % 1440 === 1439;
14833
14833
  }
14834
- var isDateTime3 = makeFilter((value) => {
14834
+ var isDateTime2 = makeFilter((value) => {
14835
14835
  const parts = value.split(/T/i);
14836
14836
  return parts.length === 2 && isRfc3339Date(parts[0] ?? "") && isRfc3339Time(parts[1] ?? "");
14837
14837
  }, { expected: "an RFC 3339 date-time", toJsonSchema: () => ({ format: "date-time" }) });
@@ -14885,7 +14885,7 @@ function wallClockMillis() {
14885
14885
  // packages/core/src/common.ts
14886
14886
  var Id = String2.check(isMinLength(1));
14887
14887
  var Slug = String2.check(isMinLength(1), isPattern(new RegExp("^[a-z0-9]+(?:-[a-z0-9]+)*$", "u")));
14888
- var Timestamp = String2.check(isDateTime3);
14888
+ var Timestamp = String2.check(isDateTime2);
14889
14889
  var ApiError = Struct({
14890
14890
  error: Struct({
14891
14891
  code: String2,
@@ -16238,8 +16238,8 @@ var RedactionWaiver = Struct({
16238
16238
  ]),
16239
16239
  authorityActorId: String2.check(isMinLength(1)),
16240
16240
  authorityRole: Union([Literal("owner"), Literal("admin")]),
16241
- expiresAt: optionalKey(String2.check(isDateTime3)),
16242
- createdAt: String2.check(isDateTime3)
16241
+ expiresAt: optionalKey(String2.check(isDateTime2)),
16242
+ createdAt: String2.check(isDateTime2)
16243
16243
  });
16244
16244
  class DurableSurfaceScanError extends TaggedError("DurableSurfaceScanError") {
16245
16245
  constructor(findings) {
@@ -18037,6 +18037,16 @@ var StepSessionUpdate = Struct({
18037
18037
  kind: String2.check(isMinLength(1), isMaxLength(80)),
18038
18038
  content: String2.check(isMinLength(1), isMaxLength(4000))
18039
18039
  });
18040
+ var StepAttemptSessionUpdate = Struct({
18041
+ id: Id,
18042
+ kind: String2,
18043
+ content: String2,
18044
+ createdAt: Timestamp
18045
+ });
18046
+ var StepAttemptSessionUpdateList = Struct({
18047
+ items: ArraySchema(StepAttemptSessionUpdate),
18048
+ next: optionalKey(String2)
18049
+ });
18040
18050
  var StepOutputSubmissionResult = Union([
18041
18051
  Struct({ status: Literal("accepted") }),
18042
18052
  Struct({
@@ -18149,7 +18159,9 @@ var RunStepSummary = Struct({
18149
18159
  id: Id,
18150
18160
  attempt: Int.check(isGreaterThanOrEqualTo(1)),
18151
18161
  status: StepAttemptStatus,
18152
- failureSummary: optionalKey(String2)
18162
+ failureSummary: optionalKey(String2),
18163
+ output: optionalKey(Unknown),
18164
+ revision: optionalKey(String2)
18153
18165
  }))
18154
18166
  });
18155
18167
  var RunSteerDeliveries = ["queued", "delivered", "failed"];
@@ -18162,14 +18174,73 @@ var RunSteer = Struct({
18162
18174
  });
18163
18175
  var RunSteerInput = Struct({
18164
18176
  text: LoopSafeText,
18177
+ stepAttemptId: optionalKey(Id),
18165
18178
  idempotencyKey: String2.check(isMinLength(1), isMaxLength(240))
18166
18179
  });
18167
18180
  var RunSteerSent = Struct({
18168
18181
  steer: RunSteer,
18169
18182
  target: Literals(["session", "next_step"])
18170
18183
  });
18184
+ var RunDisplayStates = [
18185
+ "queued",
18186
+ "running",
18187
+ "needs_you",
18188
+ "blocked",
18189
+ "failed",
18190
+ "stopped",
18191
+ "succeeded",
18192
+ "partial"
18193
+ ];
18194
+ var RunDisplay = Struct({
18195
+ state: Literals(RunDisplayStates),
18196
+ retried: Boolean2,
18197
+ summary: optionalKey(String2)
18198
+ });
18199
+ var RunGraphNodeKinds = ["agent", "check", "question", "child", "wait", "activity"];
18200
+ var RunGraphNode = Struct({
18201
+ id: Id,
18202
+ name: String2,
18203
+ kind: Literals(RunGraphNodeKinds),
18204
+ status: Literals(RunDisplayStates),
18205
+ startedAt: Timestamp,
18206
+ endedAt: optionalKey(Timestamp),
18207
+ attempts: ArraySchema(Struct({
18208
+ id: Id,
18209
+ attempt: Int.check(isGreaterThanOrEqualTo(1)),
18210
+ status: Literals(RunDisplayStates),
18211
+ failureSummary: optionalKey(String2)
18212
+ })),
18213
+ agent: optionalKey(Struct({
18214
+ id: Id,
18215
+ harness: optionalKey(String2),
18216
+ model: optionalKey(String2),
18217
+ runner: optionalKey(Struct({ id: Id, name: String2 }))
18218
+ })),
18219
+ child: optionalKey(Struct({
18220
+ runId: Id,
18221
+ loopTitle: String2,
18222
+ display: RunDisplay,
18223
+ task: optionalKey(Struct({ id: Id, key: String2, title: String2 }))
18224
+ }))
18225
+ });
18226
+ var RunGraph = Struct({
18227
+ columns: ArraySchema(ArraySchema(RunGraphNode)),
18228
+ needs: ArraySchema(Struct({ from: Id, to: Id }))
18229
+ });
18230
+ var RunHeader = Struct({
18231
+ loopTitle: String2,
18232
+ branch: optionalKey(String2),
18233
+ changeRequest: optionalKey(Struct({ id: Id, title: String2, url: String2 })),
18234
+ startedBy: optionalKey(Union([
18235
+ Struct({ kind: Literal("person"), name: String2 }),
18236
+ Struct({ kind: Literal("event"), event: String2 })
18237
+ ]))
18238
+ });
18171
18239
  var RunShow = Struct({
18172
18240
  run: Run,
18241
+ header: RunHeader,
18242
+ display: RunDisplay,
18243
+ graph: RunGraph,
18173
18244
  steps: ArraySchema(RunStepSummary),
18174
18245
  questions: ArraySchema(Question),
18175
18246
  children: ArraySchema(Struct({ runId: Id, name: String2, status: RunStatus, createdAt: Timestamp })),
@@ -18180,6 +18251,7 @@ var RunShow = Struct({
18180
18251
  recordedAt: Timestamp
18181
18252
  })),
18182
18253
  artifacts: ArraySchema(RunArtifact),
18254
+ findings: ArraySchema(RunArtifact),
18183
18255
  events: ArraySchema(Struct({ id: Id, type: String2, occurredAt: Timestamp })),
18184
18256
  evidence: ArraySchema(RunEvidence),
18185
18257
  steers: ArraySchema(RunSteer),
@@ -18210,7 +18282,6 @@ var ProgramLoop = Struct({
18210
18282
  publishedAt: Timestamp,
18211
18283
  package: String2
18212
18284
  });
18213
- var LoopDetail = Struct({ id: String2, resolved: optionalKey(ProgramLoop) });
18214
18285
  var AutomaticStart = Struct({
18215
18286
  eventId: String2,
18216
18287
  eventType: String2,
@@ -18245,7 +18316,17 @@ var ProgramAgent = Struct({
18245
18316
  });
18246
18317
  var ProgramAgentList = Struct({ items: ArraySchema(ProgramAgent) });
18247
18318
  var ProgramLoopList = Struct({ items: ArraySchema(ProgramLoop) });
18248
- var RunList = Struct({ items: ArraySchema(Run) });
18319
+ var RunListItem = Struct({
18320
+ run: Run,
18321
+ loop: Struct({ id: String2, title: String2 }),
18322
+ task: optionalKey(Struct({ id: Id, key: String2, title: String2 })),
18323
+ display: RunDisplay,
18324
+ miniGraph: ArraySchema(Literals(RunDisplayStates))
18325
+ });
18326
+ var RunList = Struct({
18327
+ items: ArraySchema(RunListItem),
18328
+ next: optionalKey(String2)
18329
+ });
18249
18330
  var RunWaitReasons = ["question", "completed", "failed", "stopped", "timeout"];
18250
18331
  var RunWaitResult = Struct({
18251
18332
  reason: Literals(RunWaitReasons),
@@ -19788,6 +19869,18 @@ var WorkspacePolicyKitBackfillCancelResult = Struct({
19788
19869
  state: Literal("cancelled")
19789
19870
  });
19790
19871
 
19872
+ // packages/core/src/run-display.ts
19873
+ var runDisplayLabels = {
19874
+ queued: "Queued",
19875
+ running: "Running",
19876
+ needs_you: "Needs you",
19877
+ blocked: "Blocked",
19878
+ failed: "Failed",
19879
+ stopped: "Stopped",
19880
+ succeeded: "Succeeded",
19881
+ partial: "Partial"
19882
+ };
19883
+
19791
19884
  // packages/core/src/run-launch.ts
19792
19885
  var repositoryKey = (url) => url.trim().toLowerCase().replace(/^[a-z+]+:\/\//, "").replace(/^[^@/]+@/, "").replace(/^([^/:]+):(?!\d+\/)/, "$1/").replace(/^([^/:]+):\d+\//, "$1/").replace(/\.git$/, "").replace(/\/+$/, "");
19793
19886
 
@@ -22348,7 +22441,7 @@ var setUrl = /* @__PURE__ */ dual(2, (self, url) => {
22348
22441
  return makeWith(self.method, url, self.urlParams, self.hash, self.headers, self.body);
22349
22442
  }
22350
22443
  const clone = new URL(url.toString());
22351
- const urlParams = fromInput3(clone.searchParams);
22444
+ const urlParams = fromInput2(clone.searchParams);
22352
22445
  const hash = fromNullishOr(clone.hash === "" ? undefined : clone.hash.slice(1));
22353
22446
  clone.search = "";
22354
22447
  clone.hash = "";
@@ -22488,7 +22581,7 @@ class WebHttpClientResponse extends Class3 {
22488
22581
  }
22489
22582
  get urlParamsBody() {
22490
22583
  return flatMap2(this.text, (_) => try_({
22491
- try: () => fromInput3(new URLSearchParams(_)),
22584
+ try: () => fromInput2(new URLSearchParams(_)),
22492
22585
  catch: (cause) => new HttpClientError({
22493
22586
  reason: new DecodeError({
22494
22587
  request: this.request,
@@ -24216,8 +24309,8 @@ class KitmanEffectClient {
24216
24309
  showRun(runId) {
24217
24310
  return this.request("showRun", `/runs/${segment(runId)}/overview`, { headers: this.headers() });
24218
24311
  }
24219
- listRuns(projectId, options = {}) {
24220
- return this.request("listRuns", `/projects/${segment(projectId)}/runs${runListQuery(options)}`, {
24312
+ listRuns(workspaceId, options = {}) {
24313
+ return this.request("listRuns", `/workspaces/${segment(workspaceId)}/runs${runListQuery(options)}`, {
24221
24314
  headers: this.headers()
24222
24315
  });
24223
24316
  }
@@ -24893,12 +24986,12 @@ function teamTaskListQuery(options) {
24893
24986
  function limitQuery(limit) {
24894
24987
  return limit === undefined ? "" : `?limit=${limit}`;
24895
24988
  }
24896
- function runListQuery(options) {
24897
- const search = new URLSearchParams;
24898
- if (options.status !== undefined)
24899
- search.set("status", options.status);
24900
- if (options.limit !== undefined)
24901
- search.set("limit", String(options.limit));
24989
+ function runListQuery({ states, limit, ...options }) {
24990
+ const search = new URLSearchParams(Object.entries(options).filter((entry) => entry[1] !== undefined));
24991
+ if (states !== undefined && states.length > 0)
24992
+ search.set("state", states.join(","));
24993
+ if (limit !== undefined)
24994
+ search.set("limit", String(limit));
24902
24995
  return search.size === 0 ? "" : `?${search.toString()}`;
24903
24996
  }
24904
24997
  function runWaitQuery(options) {
@@ -25547,6 +25640,10 @@ var LoopManifest = Struct({
25547
25640
  secrets: optionalKey(ArraySchema(SecretName)),
25548
25641
  network: optionalKey(AgentSandboxNetwork)
25549
25642
  });
25643
+ var LoopDetail = Struct({
25644
+ id: String2,
25645
+ resolved: optionalKey(Struct({ ...ProgramLoop.fields, agents: LoopManifest.fields.agents, when: LoopManifest.fields.when }))
25646
+ });
25550
25647
  var AgentDeclaration = Struct({
25551
25648
  extends: optionalKey(String2),
25552
25649
  instructions: optionalKey(String2),
@@ -26498,4 +26595,4 @@ function assertHerdrRunnerCapability2(capabilities) {
26498
26595
  throw new Error("herdr_runner_capability_mismatch");
26499
26596
  }
26500
26597
 
26501
- export { pipeArguments, dual, identity, constVoid, flow, isString, isUndefined, isNotUndefined, isNotNull, isNullish, hasProperty, isTagged, toJsonValue, isOneOf, toJsonObject, isBigInt, isBoolean, isFunction, isNumber, isObject, isJsonObject, isString2, kindOf, assignProperty, Prototype, none, isNone, isSome, match, getOrElse, fromUndefinedOr, getOrUndefined, map, flatMap, Service, empty, add, getOrUndefined2, getOrUndefinedUnsafe, getUnsafe, get, merge, Reference, succeed, fail, isResult, isFailure, isSuccess, ensure, of, map2, fromInputUnsafe, isZero, zero, infinity, millis, seconds, toMillis, max, subtract, isLessThanOrEqualTo, TaggedClass, TaggedError, die, hasInterruptsOnly, combine, squash, findError, findErrorOption, hasInterrupts, interruptors, pretty, Done, done, UnknownError, succeed2, failCause, fail2, die2, interrupt, void_, isSuccess2, isFailure2, makeUnsafe, make6, _await, fail3, isDone, isDoneUnsafe, succeed3, doneUnsafe, Scope, make7, makeUnsafe2, provide, addFinalizerExit, addFinalizer, close, build2, buildWithScope, succeed4, effect, effectDiscard, mergeAll, provide2, provideMerge, Clock, currentTimeMillis, Random, catchDone, min, exponential, jittered, spaced, while_, setInputType, all, findFirst, forEach, whileLoop, promise, tryPromise, succeed5, suspend, sync, void_2, undefined_, callback, never, gen, fail4, failCause2, die3, try_, yieldNow, withFiber, flatMap2, andThen, tap, result, option, exit, map3, as, asSome, asVoid, catch_, catchTag, catchTags, catchReason, catchCause, catchDefect, catchIf, catchCauseIf, mapError, orDie, tapError, tapCause, retry, retryOrElse, sandbox, ignore, ignoreCause, orElseSucceed, timeout, timeoutOrElse, delay, sleep, raceFirst, filterOrFail, matchCauseEffect, matchEffect, context, contextWith, provide3, provideContext, serviceOption, updateContext, updateService, provideService, scope, scoped, acquireRelease, acquireUseRelease, addFinalizer2, ensuring, onError, onExit, cached, interrupt2, interruptible, onInterrupt, uninterruptible, uninterruptibleMask, forever, repeat, annotateCurrentSpan, makeSpanScoped, useSpan, withSpan, withParentSpan, forkIn, forkScoped, forkDetach, runFork, runForkWith, runPromise, runPromiseWith, runSync, fnUntraced, fn, logWarning, logError, logInfo, annotateLogs, runMain, systemError, badArgument, join, interrupt3, getCurrent, makeUnsafe3, make8, make9, bounded, unbounded, offer, offerUnsafe, offerAll, failCause3, end, endUnsafe, shutdownUnsafe, take, poll, makeUnsafe4, fromTransform, mapDone, isSink, fromChannel, drain, make10, get2, isStream, fromChannel2, empty2, make11, fromQueue, unwrap, map4, merge2, filter, transduce, decodeText, splitLines, run, runHead, runForEach, mkString, FileSystem, Path, makeUnsafe5, formatIso, encode, encode2, transform, encodeBase64Url, decodeBase64UrlString, ExitCode, ProcessId, makeHandle, make12, ChildProcessSpawner, make13, parseFdName, fdName, handleErrnoException, Crypto, layer, layer2, layer3, value, empty3, fromInput, merge3, is, decodeUnknownEffect, decodeEffect, decodeUnknownOption, decodeSync, encodeUnknownEffect, encodeEffect, encodeSync, isSchema, optionalKey, optional, Literal, Never, Unknown, String2, Boolean2, Void, Struct, Record, StructWithRest, Tuple, ArraySchema, NonEmptyArray, Union, Literals, NullOr, decodeTo, tag, TaggedStruct, makeFilter, isPattern, Finite, isGreaterThanOrEqualTo, isLessThanOrEqualTo2, Int, isMinLength, isMaxLength, Defect, Date2, fromJsonString, Cause, Exit, Class, Error2, TaggedError2, toJsonSchemaDocument, toCodecJson, Json, JsonObject, error, log, guard, toDate, parseDate, toIso, currentDate, wallClockMillis, Id, Timestamp, ActorType, ProposalStatuses, ProposalTargetTypes, ContextPackModes, DefaultContextPackMode, MemoryStatuses, MemoryScopes, MaxMemoryListLimit, RepoBindingProviders, RepoBindingCredentialProviderTypes, findForbiddenRepoBindingSecretPath, Session, SessionEnd, SessionUpdate, SessionUpdateCreate, runnerAgentSandboxPolicy, agentNetworkAllowlist, AgentHarnessIds, findForbiddenAgentEnvironmentSecretPath, scanDurableSurface, redactDurableSurface, redactedOutputTail, canonicalSha256, RunStatuses, KitmanAgentCapabilityNames, DecisionStatuses, FixFlowRecoveryActions, createId, KitKinds, KitInstallationScopes, KitCreate, KitUpdate, repositoryKey, ProgramWorkUnit, RunnerOwnership, defaultRunnerCapabilities, isSyncKitHashValid, isSyncKitSafe, resolveSyncKit, decodeJsonString, decodeJsonStringOption, encodeJsonStringSync, encodePrettyJsonString, decodeJsonStringSync, encodeUnknownJsonStringSync, map5, all2, withDefault, option2, String3, CliError, DefaultApiUrl, resolveConfig, apiUrlFromEnv, stepCredentialFromEnv, stepOutputOnlyFromEnv, mcpCredentialNameFromEnv, userConfigPath, userAuthPath, userHarnessSyncPath, localConfigPath, readUserConfig, writeUserConfig, sessionForApi, readAuthStore, storeSession, removeSession, removeAllSessions, agentCredentialForApi, storeAgentCredential, raw, HttpClientErrorSchema, make14, get3, put, schemaBodyJson, filterStatusOk, execute, get4, Fetch, layer4, KitmanClientError, KitmanEffectClient, digestSha256, parseCallbackUrl, revokeToken, toStoredSession, browserLogin, openBrowser, shouldRefresh, createSdkClient, refreshSession, AgentAuthClientError, executeAgentCapability, createAgentAuthBearerToken, McpPlatformLive, runMcpEffect, createAgentAuthSignedFetch, LoopCapabilities, LoopManifest, AgentDeclaration, KitInstallationDeclaration, KitAssignmentDeclaration, PackageDeclarations, isStreamSchema, getStreamSchemas, make15, exitSchema, make16, Service2, RunnerHeaders, RunnerRpcProtocolVersion, RunnerRpcError, RunSettled, RunnerRpcs, setupMcpAgentCredential, generateAgentKeyPair, CommandFailed2, runCommand2, shellOutputTailChars2, runProcess2, CommandRunner2, runShell2, optionalEnv, detectHarnesses2, herdrExecutionExtension2, herdrNativeExtensionIds2, herdrRunnerCapabilitiesForRepoBinding2, herdrRunnerCapabilities2, assertHerdrRunnerCapability2 };
26598
+ export { pipeArguments, dual, identity, constVoid, flow, isString, isUndefined, isNotUndefined, isNotNull, isNullish, hasProperty, isTagged, toJsonValue, isOneOf, toJsonObject, isBigInt, isBoolean, isFunction, isNumber, isObject, isJsonObject, isString2, kindOf, assignProperty, Prototype, none, isNone, isSome, match, getOrElse, fromUndefinedOr, getOrUndefined, map, flatMap, Service, empty, add, getOrUndefined2, getOrUndefinedUnsafe, getUnsafe, get, merge, Reference, succeed, fail, isResult, isFailure, isSuccess, ensure, of, map2, fromInputUnsafe, isZero, zero, infinity, millis, seconds, toMillis, max, subtract, isLessThanOrEqualTo, TaggedClass, TaggedError, die, hasInterruptsOnly, combine, squash, findError, findErrorOption, hasInterrupts, interruptors, pretty, Done, done, UnknownError, succeed2, failCause, fail2, die2, interrupt, void_, isSuccess2, isFailure2, makeUnsafe, make6, _await, fail3, isDone, isDoneUnsafe, succeed3, doneUnsafe, Scope, make7, makeUnsafe2, provide, addFinalizerExit, addFinalizer, close, build2, buildWithScope, succeed4, effect, effectDiscard, mergeAll, provide2, provideMerge, Clock, currentTimeMillis, Random, catchDone, min, exponential, jittered, spaced, while_, setInputType, all, findFirst, forEach, whileLoop, promise, tryPromise, succeed5, suspend, sync, void_2, undefined_, callback, never, gen, fail4, failCause2, die3, try_, yieldNow, withFiber, flatMap2, andThen, tap, result, option, exit, map3, as, asSome, asVoid, catch_, catchTag, catchTags, catchReason, catchCause, catchDefect, catchIf, catchCauseIf, mapError, orDie, tapError, tapCause, retry, retryOrElse, sandbox, ignore, ignoreCause, orElseSucceed, timeout, timeoutOrElse, delay, sleep, raceFirst, filterOrFail, matchCauseEffect, matchEffect, context, contextWith, provide3, provideContext, serviceOption, updateContext, updateService, provideService, scope, scoped, acquireRelease, acquireUseRelease, addFinalizer2, ensuring, onError, onExit, cached, interrupt2, interruptible, onInterrupt, uninterruptible, uninterruptibleMask, forever, repeat, annotateCurrentSpan, makeSpanScoped, useSpan, withSpan, withParentSpan, forkIn, forkScoped, forkDetach, runFork, runForkWith, runPromise, runPromiseWith, runSync, fnUntraced, fn, logWarning, logError, logInfo, annotateLogs, runMain, systemError, badArgument, join, interrupt3, getCurrent, makeUnsafe3, make8, make9, bounded, unbounded, offer, offerUnsafe, offerAll, failCause3, end, endUnsafe, shutdownUnsafe, take, poll, makeUnsafe4, fromTransform, mapDone, isSink, fromChannel, drain, make10, get2, isStream, fromChannel2, empty2, make11, fromQueue, unwrap, map4, merge2, filter, transduce, decodeText, splitLines, run, runHead, runForEach, mkString, FileSystem, Path, makeUnsafe5, formatIso, encode, encode2, transform, encodeBase64Url, decodeBase64UrlString, ExitCode, ProcessId, makeHandle, make12, ChildProcessSpawner, make13, parseFdName, fdName, handleErrnoException, Crypto, layer, layer2, layer3, value, empty3, fromInput, merge3, is, decodeUnknownEffect, decodeEffect, decodeUnknownOption, decodeSync, encodeUnknownEffect, encodeEffect, encodeSync, isSchema, optionalKey, optional, Literal, Never, Unknown, String2, Boolean2, Void, Struct, Record, StructWithRest, Tuple, ArraySchema, NonEmptyArray, Union, Literals, NullOr, decodeTo, tag, TaggedStruct, makeFilter, isPattern, Finite, isGreaterThanOrEqualTo, isLessThanOrEqualTo2, Int, isMinLength, isMaxLength, Defect, Date2, fromJsonString, Cause, Exit, Class, Error2, TaggedError2, toJsonSchemaDocument, toCodecJson, Json, JsonObject, error, log, guard, toDate, parseDate, toIso, currentDate, wallClockMillis, Id, Timestamp, ActorType, ProposalStatuses, ProposalTargetTypes, ContextPackModes, DefaultContextPackMode, MemoryStatuses, MemoryScopes, MaxMemoryListLimit, RepoBindingProviders, RepoBindingCredentialProviderTypes, findForbiddenRepoBindingSecretPath, Session, SessionEnd, SessionUpdate, SessionUpdateCreate, runnerAgentSandboxPolicy, agentNetworkAllowlist, AgentHarnessIds, findForbiddenAgentEnvironmentSecretPath, scanDurableSurface, redactDurableSurface, redactedOutputTail, canonicalSha256, RunDisplayStates, KitmanAgentCapabilityNames, DecisionStatuses, FixFlowRecoveryActions, createId, KitKinds, KitInstallationScopes, KitCreate, KitUpdate, runDisplayLabels, repositoryKey, ProgramWorkUnit, RunnerOwnership, defaultRunnerCapabilities, isSyncKitHashValid, isSyncKitSafe, resolveSyncKit, decodeJsonString, decodeJsonStringOption, encodeJsonStringSync, encodePrettyJsonString, decodeJsonStringSync, encodeUnknownJsonStringSync, map5, all2, withDefault, option2, String3, CliError, DefaultApiUrl, resolveConfig, apiUrlFromEnv, stepCredentialFromEnv, stepOutputOnlyFromEnv, mcpCredentialNameFromEnv, userConfigPath, userAuthPath, userHarnessSyncPath, localConfigPath, readUserConfig, writeUserConfig, sessionForApi, readAuthStore, storeSession, removeSession, removeAllSessions, agentCredentialForApi, storeAgentCredential, raw, HttpClientErrorSchema, make14, get3, put, schemaBodyJson, filterStatusOk, execute, get4, Fetch, layer4, KitmanClientError, KitmanEffectClient, digestSha256, parseCallbackUrl, revokeToken, toStoredSession, browserLogin, openBrowser, shouldRefresh, createSdkClient, refreshSession, AgentAuthClientError, executeAgentCapability, createAgentAuthBearerToken, McpPlatformLive, runMcpEffect, createAgentAuthSignedFetch, LoopCapabilities, LoopManifest, AgentDeclaration, KitInstallationDeclaration, KitAssignmentDeclaration, PackageDeclarations, isStreamSchema, getStreamSchemas, make15, exitSchema, make16, Service2, RunnerHeaders, RunnerRpcProtocolVersion, RunnerRpcError, RunSettled, RunnerRpcs, setupMcpAgentCredential, generateAgentKeyPair, CommandFailed2, runCommand2, shellOutputTailChars2, runProcess2, CommandRunner2, runShell2, optionalEnv, detectHarnesses2, herdrExecutionExtension2, herdrNativeExtensionIds2, herdrRunnerCapabilitiesForRepoBinding2, herdrRunnerCapabilities2, assertHerdrRunnerCapability2 };
@@ -3,7 +3,7 @@ import {
3
3
  Random,
4
4
  succeed5,
5
5
  withFiber
6
- } from "./chunk-jd09xfx0.js";
6
+ } from "./chunk-p2wk2v39.js";
7
7
 
8
8
  // node_modules/.bun/effect@4.0.4/node_modules/effect/dist/Random.js
9
9
  var Random2 = Random;
@@ -121,7 +121,7 @@ import {
121
121
  isStreamSchema,
122
122
  getStreamSchemas,
123
123
  exitSchema
124
- } from "./chunk-jd09xfx0.js";
124
+ } from "./chunk-p2wk2v39.js";
125
125
 
126
126
  // node_modules/.bun/effect@4.0.4/node_modules/effect/dist/socket/Socket.js
127
127
  var TypeId = "~effect/socket/Socket";
@@ -184,7 +184,7 @@ import {
184
184
  herdrRunnerCapabilitiesForRepoBinding2,
185
185
  herdrRunnerCapabilities2,
186
186
  assertHerdrRunnerCapability2
187
- } from "./chunk-jd09xfx0.js";
187
+ } from "./chunk-p2wk2v39.js";
188
188
  import {
189
189
  make4,
190
190
  readerString,
@@ -195,17 +195,17 @@ import {
195
195
  SocketUpgradeError,
196
196
  SocketCloseError,
197
197
  SocketError
198
- } from "./chunk-q6hk9ceb.js";
199
- import"./chunk-h12rxyy9.js";
198
+ } from "./chunk-tk0gy9wq.js";
199
+ import"./chunk-a44szh8v.js";
200
200
  import {
201
201
  programLease,
202
202
  programHostsEnv,
203
203
  undeclaredHostsEnv
204
- } from "./chunk-7f20xrc0.js";
205
- import"./chunk-j2psmzr4.js";
204
+ } from "./chunk-4gc7b9qt.js";
205
+ import"./chunk-1f7qe00x.js";
206
206
  import {
207
207
  nextInt
208
- } from "./chunk-20nwe9zd.js";
208
+ } from "./chunk-sq2brwmh.js";
209
209
 
210
210
  // packages/core/src/runner-trust.ts
211
211
  import { createHash } from "crypto";
@@ -3,9 +3,9 @@ import {
3
3
  runnerWebSocketProtocol2,
4
4
  runnerRpcUrl2,
5
5
  makeRunnerRpcClient2
6
- } from "./chunk-j2psmzr4.js";
7
- import"./chunk-q6hk9ceb.js";
8
- import"./chunk-jd09xfx0.js";
6
+ } from "./chunk-1f7qe00x.js";
7
+ import"./chunk-tk0gy9wq.js";
8
+ import"./chunk-p2wk2v39.js";
9
9
  export {
10
10
  makeRunnerRpcClient2 as makeRunnerRpcClient,
11
11
  runnerRpcUrl2 as runnerRpcUrl,
package/dist/index.js CHANGED
@@ -143,7 +143,7 @@ import {
143
143
  RepoBindingCredentialProviderTypes,
144
144
  AgentHarnessIds,
145
145
  redactDurableSurface,
146
- RunStatuses,
146
+ RunDisplayStates,
147
147
  KitmanAgentCapabilityNames,
148
148
  DecisionStatuses,
149
149
  FixFlowRecoveryActions,
@@ -152,6 +152,7 @@ import {
152
152
  KitInstallationScopes,
153
153
  KitCreate,
154
154
  KitUpdate,
155
+ runDisplayLabels,
155
156
  repositoryKey,
156
157
  defaultRunnerCapabilities,
157
158
  isSyncKitHashValid,
@@ -207,7 +208,7 @@ import {
207
208
  runCommand2,
208
209
  detectHarnesses2,
209
210
  herdrRunnerCapabilities2
210
- } from "./chunk-jd09xfx0.js";
211
+ } from "./chunk-p2wk2v39.js";
211
212
 
212
213
  // node_modules/.bun/@effect+platform-node-shared@4.0.4+b8cbb99ebc524863/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js
213
214
  import * as NodeChildProcess from "child_process";
@@ -1787,7 +1788,7 @@ var package_default = {
1787
1788
  };
1788
1789
 
1789
1790
  // apps/cli/src/scaffold.ts
1790
- var cliVersion = "0.7.4";
1791
+ var cliVersion = "0.7.5";
1791
1792
  var packageJson = (name, scaffold) => `${JSON.stringify({
1792
1793
  name,
1793
1794
  private: true,
@@ -1907,7 +1908,7 @@ var scaffoldPackage = (directory, scaffold = {}) => gen(function* () {
1907
1908
  const path = yield* Path;
1908
1909
  const root = path.resolve(directory);
1909
1910
  if (scaffold.fork !== undefined) {
1910
- const { shippedLoops } = yield* promise(() => import("./chunk-jwtkec1w.js"));
1911
+ const { shippedLoops } = yield* promise(() => import("./chunk-0pre510a.js"));
1911
1912
  if (!(scaffold.fork in shippedLoops))
1912
1913
  return yield* new CliError({
1913
1914
  message: `Kitman ships no Loop ${scaffold.fork}; fork one of ${Object.keys(shippedLoops).join(", ")}`
@@ -1950,7 +1951,7 @@ var Usage = [
1950
1951
  " kitman run show <run>",
1951
1952
  " kitman run intent <run> [--set-goal <text>] [--add-constraint <text>] [--remove-constraint <id>] [--corrections on|off]",
1952
1953
  " kitman run drift <run> [--dismiss <constraint> --reason <text>]",
1953
- " kitman run list [--status <status>] [--limit <n>]",
1954
+ " kitman run list [--project <id>] [--loop <loop>] [--state <state>[,<state>\u2026]] [--limit <n>]",
1954
1955
  " kitman run wait <run> [--until attention|finished]",
1955
1956
  ' kitman run answer <run> "<option or words>" [--question <name>]',
1956
1957
  ' kitman run steer <run> "<note for the agent>"',
@@ -2001,7 +2002,7 @@ var Usage = [
2001
2002
  `);
2002
2003
  var KitCreateValidator = guard(KitCreate);
2003
2004
  var KitUpdateValidator = guard(KitUpdate);
2004
- var agentRuntime = promise(() => import("./chunk-s92k78ef.js"));
2005
+ var agentRuntime = promise(() => import("./chunk-vz3v0f4j.js"));
2005
2006
  var TuiLauncher = Reference("kitman/cli/TuiLauncher", {
2006
2007
  defaultValue: () => gen(function* () {
2007
2008
  const tui = yield* tryPromise({
@@ -2268,7 +2269,7 @@ function parseCommand(args) {
2268
2269
  if (!value)
2269
2270
  throw new Error("--capabilities requires a value");
2270
2271
  flags.capabilities = validateAgentCapabilities(value);
2271
- } else if (arg === "--name" || arg === "--title" || arg === "--description" || arg === "--summary" || arg === "--rationale" || arg === "--kind" || arg === "--content" || arg === "--source" || arg === "--content-type" || arg === "--filename" || arg === "--session" || arg === "--project" || arg === "--workspace" || arg === "--branch" || arg === "--team" || arg === "--type" || arg === "--status" || arg === "--reason" || arg === "--dismiss" || arg === "--action" || arg === "--step-key" || arg === "--risk" || arg === "--target-type" || arg === "--scope-type" || arg === "--scope-id" || arg === "--project-access" || arg === "--provider" || arg === "--task" || arg === "--input" || arg === "--idempotency-key" || arg === "--key" || arg === "--after" || arg === "--version" || arg === "--alias" || arg === "--profile" || arg === "--event" || arg === "--cascade" || arg === "--run" || arg === "--run-id" || arg === "--replica" || arg === "--work-unit-kind" || arg === "--host" || arg === "--owner" || arg === "--repository-url" || arg === "--default-branch" || arg === "--expected-branch" || arg === "--expected-commit-sha" || arg === "--credential") {
2272
+ } else if (arg === "--name" || arg === "--title" || arg === "--description" || arg === "--summary" || arg === "--rationale" || arg === "--kind" || arg === "--content" || arg === "--source" || arg === "--content-type" || arg === "--filename" || arg === "--session" || arg === "--project" || arg === "--workspace" || arg === "--branch" || arg === "--team" || arg === "--type" || arg === "--status" || arg === "--loop" || arg === "--state" || arg === "--reason" || arg === "--dismiss" || arg === "--action" || arg === "--step-key" || arg === "--risk" || arg === "--target-type" || arg === "--scope-type" || arg === "--scope-id" || arg === "--project-access" || arg === "--provider" || arg === "--task" || arg === "--input" || arg === "--idempotency-key" || arg === "--key" || arg === "--after" || arg === "--version" || arg === "--alias" || arg === "--profile" || arg === "--event" || arg === "--cascade" || arg === "--run" || arg === "--run-id" || arg === "--replica" || arg === "--work-unit-kind" || arg === "--host" || arg === "--owner" || arg === "--repository-url" || arg === "--default-branch" || arg === "--expected-branch" || arg === "--expected-commit-sha" || arg === "--credential") {
2272
2273
  const value = args[++index];
2273
2274
  if (!value)
2274
2275
  throw new Error(`${arg} requires a value`);
@@ -2306,6 +2307,10 @@ function parseCommand(args) {
2306
2307
  flags.taskType = value;
2307
2308
  else if (arg === "--status")
2308
2309
  flags.status = value;
2310
+ else if (arg === "--loop")
2311
+ flags.loop = value;
2312
+ else if (arg === "--state")
2313
+ flags.states = validateRunDisplayStates(value);
2309
2314
  else if (arg === "--reason")
2310
2315
  flags.reason = value;
2311
2316
  else if (arg === "--dismiss")
@@ -3310,7 +3315,7 @@ function startCanonicalHerdrRunnerCommand(input) {
3310
3315
  superviseReplica,
3311
3316
  verificationExecutor
3312
3317
  } = yield* agentRuntime;
3313
- const { makeRunnerRpcClient, runnerRpcUrl, runnerWebSocketProtocol } = yield* promise(() => import("./chunk-5cc3fb7y.js"));
3318
+ const { makeRunnerRpcClient, runnerRpcUrl, runnerWebSocketProtocol } = yield* promise(() => import("./chunk-xnzxpert.js"));
3314
3319
  const settings = yield* runnerSettings;
3315
3320
  const { concurrency, fullAccess, sshAgentAvailable } = settings;
3316
3321
  const personal = input.runner.ownership.kind === "personal";
@@ -3537,7 +3542,7 @@ function mcpCommand(args) {
3537
3542
  if (command.action === "run") {
3538
3543
  if (command.args.length > 0)
3539
3544
  return yield* new CliError({ message: `Unknown command: ${args.join(" ")}` });
3540
- const { runMcpServerCommand } = yield* promise(() => import("./chunk-120n71cv.js"));
3545
+ const { runMcpServerCommand } = yield* promise(() => import("./chunk-64cz9grx.js"));
3541
3546
  return yield* runMcpServerCommand({ flags: command.flags });
3542
3547
  }
3543
3548
  if (command.action !== "setup")
@@ -4217,8 +4222,28 @@ var driftLines = (drift) => [
4217
4222
  ...drift.reports.length === 0 ? ["No Drift Reports", ...judgementLines(drift)] : shownDriftLines(drift),
4218
4223
  ...drift.boundaries.flatMap((boundary) => boundary.uncheckedReason === undefined ? [] : [`Unchecked at ${boundary.stepKey}: ${boundary.uncheckedReason}`])
4219
4224
  ];
4225
+ var graphNodeText = (node) => `${node.name} ${node.kind} ${runDisplayLabels[node.status]}${node.attempts.length > 1 ? `, ${node.attempts.length} attempts` : ""}`;
4226
+ var displayGlyphs = {
4227
+ queued: "\u25CB",
4228
+ running: "\u25D0",
4229
+ needs_you: "?",
4230
+ blocked: "\u25B2",
4231
+ failed: "\u2717",
4232
+ stopped: "\u25A0",
4233
+ succeeded: "\u2713",
4234
+ partial: "\u25D1"
4235
+ };
4236
+ var runListLine = (item) => [
4237
+ `${runDisplayLabels[item.display.state]}${item.display.retried ? " \xB7 Retried" : ""}`,
4238
+ item.miniGraph.map((state) => displayGlyphs[state]).join(""),
4239
+ item.task === undefined ? item.loop.title : `${item.task.key} ${item.task.title}`,
4240
+ item.display.summary ?? "",
4241
+ item.run.id
4242
+ ].filter((part) => part !== "").join(" ");
4220
4243
  var runShowLines = (shown) => [
4221
- `Run ${shown.run.id}: ${shown.run.status}`,
4244
+ `Run ${shown.run.id}: ${runDisplayLabels[shown.display.state]}${shown.display.retried ? " \xB7 Retried" : ""}`,
4245
+ ...shown.display.summary === undefined ? [] : [`Now: ${shown.display.summary}`],
4246
+ ...shown.graph.columns.map((column, index) => `${index + 1}. ${column.map(graphNodeText).join(" \xB7 ")}`),
4222
4247
  ...shown.closures.map((closure, index) => index === 0 ? closureLine(closure) : `Earlier: ${closureLine(closure)}`),
4223
4248
  ...alignmentLines(shown.run.alignment),
4224
4249
  ...shown.run.loopDigest === undefined ? [] : [`Loop from the ${shown.run.loopLayer ?? "shipped"} layer, digest ${shown.run.loopDigest}`],
@@ -4251,7 +4276,7 @@ var myTeamsCardLine = (card) => {
4251
4276
  ...card.questions.map((question) => `asks: ${question.prompt}`),
4252
4277
  ...card.changeRequests.map((changeRequest) => `review ${changeRequest.url}`),
4253
4278
  ...card.proposals.map((proposal) => `decide: ${proposal.title}`),
4254
- ...card.noEligibleRunner ? ["no eligible Runner online"] : []
4279
+ ...latest === undefined ? [] : [runDisplayLabels[latest.display.state]]
4255
4280
  ].join(" \xB7 ");
4256
4281
  };
4257
4282
  var inboxActionLabel = {
@@ -4371,19 +4396,14 @@ function runCommand(args) {
4371
4396
  ]);
4372
4397
  }
4373
4398
  if (command.action === "list") {
4374
- const listed = yield* client.listRuns(yield* activeProjectId(command.flags), {
4375
- ...command.flags.status === undefined ? undefined : { status: validateRunStatus(command.flags.status) },
4376
- ...command.flags.limit === undefined ? undefined : { limit: command.flags.limit }
4399
+ const { project, loop, states, limit } = command.flags;
4400
+ const listed = yield* client.listRuns(yield* activeWorkspaceId(command.flags), {
4401
+ ...project === undefined ? undefined : { projectId: project },
4402
+ ...loop === undefined ? undefined : { loop },
4403
+ ...states === undefined ? undefined : { states },
4404
+ ...limit === undefined ? undefined : { limit }
4377
4405
  });
4378
- return yield* print(listed, (value) => [
4379
- table(value.items.map((item) => ({
4380
- run: item.id,
4381
- status: item.status,
4382
- closed: item.closure?.kind,
4383
- task: item.taskId,
4384
- created: item.createdAt
4385
- })))
4386
- ]);
4406
+ return yield* print(listed, (value) => value.items.length === 0 ? ["No Runs"] : value.items.map(runListLine));
4387
4407
  }
4388
4408
  const runId = requiredArg(command, "a Run");
4389
4409
  switch (command.action) {
@@ -4557,7 +4577,7 @@ function secretCommand(args) {
4557
4577
  });
4558
4578
  }
4559
4579
  var PackageBuilder = Reference("kitman/cli/PackageBuilder", {
4560
- defaultValue: () => (directory) => flatMap2(promise(() => import("./chunk-gew1a5p6.js")), (build) => build.buildPackage(directory))
4580
+ defaultValue: () => (directory) => flatMap2(promise(() => import("./chunk-hpfcwnd9.js")), (build) => build.buildPackage(directory))
4561
4581
  });
4562
4582
  var optionalEnv = (name) => String3(name).pipe(option2, map3(getOrUndefined));
4563
4583
  var ciIdToken = (apiUrl) => gen(function* () {
@@ -4869,10 +4889,11 @@ function constraintCommand(args) {
4869
4889
  }
4870
4890
  });
4871
4891
  }
4872
- var validateRunStatus = (status) => {
4873
- if (!isOneOf(RunStatuses, status))
4874
- throw new Error(`--status must be one of: ${RunStatuses.join(", ")}`);
4875
- return status;
4892
+ var validateRunDisplayStates = (value) => {
4893
+ const states = value.split(",").flatMap((named) => RunDisplayStates.filter((known) => known === named));
4894
+ if (states.length !== value.split(",").length)
4895
+ throw new Error(`--state must be one or more of: ${RunDisplayStates.join(", ")}`);
4896
+ return states;
4876
4897
  };
4877
4898
  function triggerCommand(args) {
4878
4899
  return gen(function* () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitman-sh/cli",
3
- "version": "0.7.4",
3
+ "version": "0.7.5",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "bin": {