codeden 0.6.3 → 0.7.0

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.
Files changed (42) hide show
  1. package/README.md +12 -5
  2. package/dist/cli.js +1 -1
  3. package/dist/drizzle/20261113075317_transcript_search/migration.sql +29 -0
  4. package/dist/drizzle/20261113075317_transcript_search/snapshot.json +3635 -0
  5. package/dist/drizzle/20261113083655_runners/migration.sql +17 -0
  6. package/dist/drizzle/20261113083655_runners/snapshot.json +3792 -0
  7. package/dist/drizzle/20261113165404_search_newest_first/migration.sql +43 -0
  8. package/dist/drizzle/20261113165404_search_newest_first/snapshot.json +3785 -0
  9. package/dist/{main-Bx58CdV4.js → main-BITVD_Bx.js} +4781 -1305
  10. package/dist/main-BITVD_Bx.js.map +1 -0
  11. package/dist/{main-CMt4z1Z9.js → main-NN0iK2tB.js} +2 -2
  12. package/dist/{main-CMt4z1Z9.js.map → main-NN0iK2tB.js.map} +1 -1
  13. package/dist/{mediaType-BCz-hbZl.js → mediaType-N0hKQqG9.js} +2 -2
  14. package/dist/{mediaType-BCz-hbZl.js.map → mediaType-N0hKQqG9.js.map} +1 -1
  15. package/dist/{runner-CiaiUWOE.js → runner-CQYh087M.js} +1302 -304
  16. package/dist/runner-CQYh087M.js.map +1 -0
  17. package/dist/runner.js +1 -1
  18. package/dist/{server-test-b0hHPqXb.js → server-test-BwyCFssm.js} +3 -3
  19. package/dist/{server-test-b0hHPqXb.js.map → server-test-BwyCFssm.js.map} +1 -1
  20. package/dist/{tree-31WAOm5k.js → tree-Bjv-rXir.js} +457 -21
  21. package/dist/tree-Bjv-rXir.js.map +1 -0
  22. package/dist/web/assets/{core-FqX7NQzW.js → core-EsMgAasL.js} +1 -1
  23. package/dist/web/assets/engine-oniguruma-C2eJcn5h.js +1 -0
  24. package/dist/web/assets/{highlighted-body-JLMTFACH-BMKFJRL-.js → highlighted-body-JLMTFACH-Co1oXN1b.js} +1 -1
  25. package/dist/web/assets/{highlights-9yuGk1pg.js → highlights-DUjJZrPQ.js} +1 -1
  26. package/dist/web/assets/index-29XyPQXD.css +1 -0
  27. package/dist/web/assets/index-DK4GsIYY.js +943 -0
  28. package/dist/web/assets/langs-BduZAjBk.js +1 -0
  29. package/dist/web/assets/mermaid-WFAXDIZX-D00b7K53.js +1 -0
  30. package/dist/web/assets/{shiki-Qa-y3xHo.js → shiki-DP8JfDZC.js} +2 -2
  31. package/dist/web/assets/{stream-tokenizer-VL43-ily.js → stream-tokenizer-IR1cpBIQ.js} +1 -1
  32. package/dist/web/assets/{themes-Di4DO5zr.js → themes-D2aixyve.js} +2 -2
  33. package/dist/web/index.html +2 -2
  34. package/package.json +1 -1
  35. package/dist/main-Bx58CdV4.js.map +0 -1
  36. package/dist/runner-CiaiUWOE.js.map +0 -1
  37. package/dist/tree-31WAOm5k.js.map +0 -1
  38. package/dist/web/assets/engine-oniguruma-C5UP18m1.js +0 -1
  39. package/dist/web/assets/index-C3QkKvUn.js +0 -942
  40. package/dist/web/assets/index-CmllrYFx.css +0 -1
  41. package/dist/web/assets/langs-DfCgj44a.js +0 -1
  42. package/dist/web/assets/mermaid-WFAXDIZX-zTA5f8lD.js +0 -1
@@ -6686,7 +6686,14 @@ const UserInput = object({
6686
6686
  * sender without reading the text, a session's opening brief included. Absent on the user's
6687
6687
  * own messages and on every message stored before senders were recorded.
6688
6688
  */
6689
- from: MessageSender.optional()
6689
+ from: MessageSender.optional(),
6690
+ /**
6691
+ * Set by CodeDen on a message the orchestrator passes on to a PM from a turn the user's own
6692
+ * message started (§8.2): the PM's turn it starts carries the user's request, like a message
6693
+ * the user wrote to the PM. Only such turns may start work on issues by authors who aren't
6694
+ * trusted. Absent on every other message.
6695
+ */
6696
+ relayedForUser: boolean().optional()
6690
6697
  });
6691
6698
  /**
6692
6699
  * The first line of a message from a PM or the orchestrator, telling the agent who wrote it.
@@ -6747,7 +6754,8 @@ const ToolOutput = object({
6747
6754
  /** Artifact holding the full output when truncated. */
6748
6755
  artifactId: Id.optional()
6749
6756
  });
6750
- _enum([
6757
+ /** What kind of work a tool call performs; drives rendering, never provider-specific. */
6758
+ const ToolKind = _enum([
6751
6759
  "command",
6752
6760
  "file_edit",
6753
6761
  "file_read",
@@ -6973,6 +6981,24 @@ const UserQuestionItem = object({
6973
6981
  mcpServer: string().min(1).optional()
6974
6982
  });
6975
6983
  /**
6984
+ * Tokens one model used in a subagent run, in the four billed categories (§7.3, §12.6). The
6985
+ * server prices them when it reports the run's cost, like a turn's: the provider's USD figure
6986
+ * when it gave one, else the price table.
6987
+ */
6988
+ const SubagentModelUsage = object({
6989
+ /** Model id as the provider reports it; absent when it doesn't say (the session's model). */
6990
+ model: string().min(1).optional(),
6991
+ /** Uncached input tokens (excludes cache reads and writes). */
6992
+ inputTokens: int().nonnegative(),
6993
+ outputTokens: int().nonnegative(),
6994
+ cacheReadTokens: int().nonnegative(),
6995
+ cacheWriteTokens: int().nonnegative(),
6996
+ /** Reasoning/thinking tokens where reported; already counted in `outputTokens`. */
6997
+ reasoningTokens: int().nonnegative().optional(),
6998
+ /** USD the provider reported for these calls, when it reports one. */
6999
+ costUsd: number$1().nonnegative().optional()
7000
+ });
7001
+ /**
6976
7002
  * What a finished subagent used, as its provider reports it (§7.3). Each figure is optional:
6977
7003
  * a provider that reports none leaves `SubagentItem.stats` out. Display only: never added to
6978
7004
  * usage totals (`usage.updated`), which come from the provider's own turn figures.
@@ -6983,7 +7009,12 @@ const SubagentStats = object({
6983
7009
  /** Tool calls the subagent made. */
6984
7010
  toolUses: int().nonnegative().optional(),
6985
7011
  /** How long the subagent ran, in milliseconds. */
6986
- durationMs: int().nonnegative().optional()
7012
+ durationMs: int().nonnegative().optional(),
7013
+ /**
7014
+ * Tokens per model across the run's own model calls (a nested subagent's are on its own
7015
+ * card), for the card's cost (`SessionUsage.subagents`). Display only, like the rest.
7016
+ */
7017
+ usage: array(SubagentModelUsage).optional()
6987
7018
  });
6988
7019
  /** A subagent run; its transcript lives in the child thread `childThreadId` (§7.3). */
6989
7020
  const SubagentItem = object({
@@ -7796,6 +7827,17 @@ const McpServerConfig = discriminatedUnion("transport", [object({
7796
7827
  args: array(string()).default([]),
7797
7828
  env: record(string(), string()).optional()
7798
7829
  })]);
7830
+ /**
7831
+ * CodeDen's own credential files, relative to its data directory (§15): the install token the
7832
+ * local API accepts, the runner lock holding the runner's bearer token, and the remote access
7833
+ * store (password hash and device sessions). An agent that read the tokens could drive CodeDen
7834
+ * itself, so agents never read or write these without the user, at any level (§11.2).
7835
+ */
7836
+ const CODEDEN_CREDENTIAL_FILES = [
7837
+ "install-token",
7838
+ "runner/runner.json",
7839
+ "remote-access.json"
7840
+ ];
7799
7841
  /** Options for `ProviderAdapter.openSession`. */
7800
7842
  const SessionOptions = object({
7801
7843
  /** CodeDen session id. */
@@ -7835,7 +7877,13 @@ const SessionOptions = object({
7835
7877
  * No writes to the workspace (orchestrator and PMs, §11.2): file edits and writing commands
7836
7878
  * are denied natively (Claude permission policy, Codex read-only sandbox).
7837
7879
  */
7838
- readOnly: boolean().optional()
7880
+ readOnly: boolean().optional(),
7881
+ /**
7882
+ * CodeDen's data directory (§6). Touching its credential files (`CODEDEN_CREDENTIAL_FILES`)
7883
+ * asks at every level and is refused for read-only sessions (§11.2, §15); `$CODEDEN_HOME` in
7884
+ * the agent's commands resolves to it.
7885
+ */
7886
+ codedenHome: string().min(1).optional()
7839
7887
  });
7840
7888
  /** Response to an `approval_request` or `user_question` item (`ProviderSession.respond`). */
7841
7889
  const RuntimeResponse = discriminatedUnion("kind", [
@@ -8003,6 +8051,86 @@ const BrowserHandoffTab = object({
8003
8051
  /** The tab the panel showed. */
8004
8052
  active: boolean()
8005
8053
  });
8054
+ /** A key held down during an agent pointer action (`browser.mouse`). */
8055
+ const BrowserModifierKey = _enum([
8056
+ "Alt",
8057
+ "Control",
8058
+ "Meta",
8059
+ "Shift"
8060
+ ]);
8061
+ /** What an agent does at page coordinates (`browser.mouse`, §12.2 computer use, step 1). */
8062
+ const BrowserMouseAction = _enum([
8063
+ "click",
8064
+ "hover",
8065
+ "drag",
8066
+ "scroll"
8067
+ ]);
8068
+ /** Longest text `browser.type` types as key presses at the focused element (no `ref`). */
8069
+ const MAX_FOCUS_TYPE_CHARS = 2e3;
8070
+ /** Largest scroll per axis in one agent `scroll` (CSS pixels). */
8071
+ const MAX_AGENT_SCROLL = 1e4;
8072
+ /** A coordinate in the page viewport's CSS pixels; the runner checks it against the viewport. */
8073
+ const ViewportCoordinate = number$1().min(0).max(1e5);
8074
+ /**
8075
+ * The fields of an agent pointer action. Coordinates are CSS pixels of the tab's viewport,
8076
+ * origin top-left: the pixels of a viewport `browser.screenshot`, and the units of
8077
+ * `getBoundingClientRect`. Which fields an action takes is checked by `checkBrowserMouse`.
8078
+ */
8079
+ const BrowserMouseFields = {
8080
+ action: BrowserMouseAction,
8081
+ /** The point to act at; the start point of a drag. */
8082
+ x: ViewportCoordinate,
8083
+ y: ViewportCoordinate,
8084
+ /** Where a drag ends (`drag` only, required there). */
8085
+ toX: ViewportCoordinate.optional(),
8086
+ toY: ViewportCoordinate.optional(),
8087
+ /** Scroll amount in CSS pixels (`scroll` only, at least one non-zero); positive `deltaY` scrolls down. */
8088
+ deltaX: number$1().min(-1e4).max(MAX_AGENT_SCROLL).optional(),
8089
+ deltaY: number$1().min(-1e4).max(MAX_AGENT_SCROLL).optional(),
8090
+ /** `click` and `drag`; default `left`. */
8091
+ button: _enum([
8092
+ "left",
8093
+ "middle",
8094
+ "right"
8095
+ ]).optional(),
8096
+ /** `click` only: 2 is a double click, 3 a triple click. Default 1. */
8097
+ clickCount: int().min(1).max(3).optional(),
8098
+ /** Keys held for the whole action (shift-click, ctrl-click, alt-drag). */
8099
+ modifiers: array(BrowserModifierKey).max(4).optional()
8100
+ };
8101
+ /** Fields that belong to one action only. */
8102
+ const ACTION_ONLY_FIELDS = {
8103
+ toX: ["drag"],
8104
+ toY: ["drag"],
8105
+ deltaX: ["scroll"],
8106
+ deltaY: ["scroll"],
8107
+ button: ["click", "drag"],
8108
+ clickCount: ["click"]
8109
+ };
8110
+ /**
8111
+ * Cross-field rules of a pointer action, for `superRefine`: a drag needs `toX` and `toY`, a
8112
+ * scroll needs a non-zero delta, and fields of other actions are refused (so a mistaken call
8113
+ * fails instead of silently doing something else).
8114
+ */
8115
+ function checkBrowserMouse(value, ctx) {
8116
+ for (const [field, actions] of Object.entries(ACTION_ONLY_FIELDS)) if (value[field] !== void 0 && !actions.includes(value.action)) ctx.addIssue({
8117
+ code: "custom",
8118
+ path: [field],
8119
+ message: `${field} is for ${actions.join(" and ")}, not ${value.action}`
8120
+ });
8121
+ if (value.action === "drag") {
8122
+ for (const field of ["toX", "toY"]) if (value[field] === void 0) ctx.addIssue({
8123
+ code: "custom",
8124
+ path: [field],
8125
+ message: `A drag needs ${field}`
8126
+ });
8127
+ }
8128
+ if (value.action === "scroll" && !value.deltaX && !value.deltaY) ctx.addIssue({
8129
+ code: "custom",
8130
+ path: ["deltaY"],
8131
+ message: "A scroll needs a non-zero deltaX or deltaY"
8132
+ });
8133
+ }
8006
8134
  const TabTarget = {
8007
8135
  sessionId: Id,
8008
8136
  tabId: BrowserTabId.optional()
@@ -8105,15 +8233,26 @@ const BrowserCommands = [
8105
8233
  object({
8106
8234
  name: literal("browser.type"),
8107
8235
  ...TabTarget,
8108
- ref: BrowserElementRef,
8236
+ ref: BrowserElementRef.optional(),
8109
8237
  text: string().max(1e5),
8110
8238
  submit: boolean().optional()
8239
+ }).superRefine((v, ctx) => {
8240
+ if (v.ref === void 0 && v.text.length > 2e3) ctx.addIssue({
8241
+ code: "custom",
8242
+ path: ["text"],
8243
+ message: `Without a ref, type at most ${MAX_FOCUS_TYPE_CHARS} characters`
8244
+ });
8111
8245
  }),
8112
8246
  object({
8113
8247
  name: literal("browser.press"),
8114
8248
  ...TabTarget,
8115
8249
  key: string().min(1).max(60)
8116
8250
  }),
8251
+ object({
8252
+ name: literal("browser.mouse"),
8253
+ ...TabTarget,
8254
+ ...BrowserMouseFields
8255
+ }).superRefine(checkBrowserMouse),
8117
8256
  object({
8118
8257
  name: literal("browser.screenshot"),
8119
8258
  ...TabTarget,
@@ -8198,6 +8337,7 @@ const BrowserCommandResults = {
8198
8337
  "browser.click": Empty$1,
8199
8338
  "browser.type": Empty$1,
8200
8339
  "browser.press": Empty$1,
8340
+ "browser.mouse": Empty$1,
8201
8341
  "browser.screenshot": object({
8202
8342
  path: string(),
8203
8343
  width: int().positive(),
@@ -8263,7 +8403,12 @@ const RunnerCommand = discriminatedUnion("name", [
8263
8403
  name: literal("provider.detect"),
8264
8404
  providerId: ProviderId.optional(),
8265
8405
  /** Answer only once the model lists are refreshed, and include them as `providers`. */
8266
- waitForModels: boolean().optional()
8406
+ waitForModels: boolean().optional(),
8407
+ /**
8408
+ * `false`: only detect (installed, signed in), leaving the model lists alone; for periodic
8409
+ * availability checks, which must not start provider CLIs to list models. Default true.
8410
+ */
8411
+ refreshModels: boolean().optional()
8267
8412
  }),
8268
8413
  object({
8269
8414
  name: literal("provider.oneShot"),
@@ -9418,6 +9563,71 @@ const FactorySetTypeRequest = object({
9418
9563
  type: WorkType,
9419
9564
  reason: string().trim().max(500).optional()
9420
9565
  });
9566
+ // ../../packages/contracts/src/factory-prs.ts
9567
+ /**
9568
+ * The factory's pull requests (§10.1, Merge): the loop owns every PR it opened until it merges
9569
+ * or closes, whatever its item's stage. It keeps them free of conflicts, merges them one at a
9570
+ * time (the merge queue) and rebuilds work whose PR keeps conflicting.
9571
+ */
9572
+ /**
9573
+ * Why a work item failed:
9574
+ * - `checks`: its own work fell short (merge checks after its revise rounds, a step it never
9575
+ * reported);
9576
+ * - `infrastructure`: something outside its code, such as the builder or reviewer session dying
9577
+ * or CI never starting while Actions can run. The loop puts it back by itself on the next
9578
+ * tick after the cause is gone, at most three times;
9579
+ * - `stuck`: it needs a person: it already used its rebuild (or its rebuild ended without a new
9580
+ * PR), CI can never run on the repository (Actions off, no active workflow), or it touches a
9581
+ * protected area (an `escalated` item, which carries this kind too).
9582
+ *
9583
+ * Null on items that never failed or were escalated, and on failures recorded before this
9584
+ * existed (the loop reads those from their reason).
9585
+ */
9586
+ const FactoryFailureKind = _enum([
9587
+ "checks",
9588
+ "infrastructure",
9589
+ "stuck"
9590
+ ]);
9591
+ /**
9592
+ * A factory PR's state, as the panel shows it:
9593
+ * - `checking`: the merge checks are running (the review, tests, evidence);
9594
+ * - `waiting_ci`: CI is running, or yet to start, on the head commit;
9595
+ * - `queued`: every check passed and it waits for its turn to merge;
9596
+ * - `updating`: at the head of the queue, being brought up to date with the default branch;
9597
+ * - `rebasing`: it has merge conflicts and an agent is rebasing it;
9598
+ * - `rebuilding`: it kept conflicting, so its work is being redone from the default branch;
9599
+ * the new PR replaces it;
9600
+ * - `superseded`: a newer PR for the same work replaced it (a rebuild's, or an integrator's);
9601
+ * the factory closes it with a link to the new one, retrying until GitHub accepts;
9602
+ * - `merged`: merged by the factory (or on GitHub) today;
9603
+ * - `waiting_for_you`: a person merges it (auto-merge off, an untrusted author, a protected
9604
+ * area, or checks that failed after the revise rounds); the factory still keeps it free of
9605
+ * conflicts;
9606
+ * - `stuck`: it needs a person before anything else can happen.
9607
+ */
9608
+ const FactoryPrState = _enum([
9609
+ "checking",
9610
+ "waiting_ci",
9611
+ "queued",
9612
+ "updating",
9613
+ "rebasing",
9614
+ "rebuilding",
9615
+ "superseded",
9616
+ "merged",
9617
+ "waiting_for_you",
9618
+ "stuck"
9619
+ ]);
9620
+ /** One pull request the factory owns, for the panel's merge queue. */
9621
+ const FactoryPrEntry = object({
9622
+ itemId: Id,
9623
+ title: string(),
9624
+ pr: GitHubPrRef,
9625
+ state: FactoryPrState,
9626
+ /** Place in the merge queue (1 merges next); null when it isn't queued. */
9627
+ queuePosition: int().positive().nullable(),
9628
+ /** The loop's last note about it (why it waits, what it is doing). */
9629
+ note: string().nullable()
9630
+ });
9421
9631
  // ../../packages/contracts/src/factory-api.ts
9422
9632
  /**
9423
9633
  * The factory loop of software-factory and dark-factory projects (§10.1): work items, merge
@@ -9570,6 +9780,14 @@ const FactoryItem = object({
9570
9780
  attempts: int().nonnegative(),
9571
9781
  /** Why it was rejected, failed or escalated. */
9572
9782
  reason: string().nullable(),
9783
+ /** Why it failed or was escalated: its own work, the infrastructure, or stuck until a person looks (see `FactoryFailureKind`). */
9784
+ failureKind: FactoryFailureKind.nullable().default(null),
9785
+ /**
9786
+ * The pull request a rebuild replaced: after three requests to rebase it still conflicted, so
9787
+ * the work was redone from the default branch and that PR is closed once the new one opens.
9788
+ * Set means the item's one rebuild is used.
9789
+ */
9790
+ rebuiltFrom: GitHubPrRef.nullable().default(null),
9573
9791
  /** Last thing the loop noted about it (waiting on a conflict, merge budget, ...). */
9574
9792
  note: string().nullable(),
9575
9793
  mergeSha: string().nullable(),
@@ -9605,6 +9823,19 @@ const LEGACY_SIZE_LIMITS = {
9605
9823
  maxChangedLines: 800,
9606
9824
  maxChangedFiles: 40
9607
9825
  };
9826
+ /**
9827
+ * What a review does when the provider chosen for it is unavailable (not installed, not signed
9828
+ * in, at its usage limit, or it just failed to run):
9829
+ * - `builder`: review on the builder's provider and model, in a fresh session;
9830
+ * - `any`: review on any available provider;
9831
+ * - `wait`: wait until the chosen provider is available again.
9832
+ * With no provider available at all, every choice waits.
9833
+ */
9834
+ const ReviewerFallback = _enum([
9835
+ "builder",
9836
+ "any",
9837
+ "wait"
9838
+ ]);
9608
9839
  /** Knobs of the loop beyond the required limits; all have safe defaults. */
9609
9840
  const FactoryTuning = object({
9610
9841
  /**
@@ -9636,8 +9867,22 @@ const FactoryTuning = object({
9636
9867
  maxIssuesPerRound: int().positive().default(3),
9637
9868
  /** Dark factory: the review areas the scout may use. */
9638
9869
  areas: array(DiscoveryArea).default(DiscoveryArea.options),
9639
- /** Provider for builders (`auto`: the project/role default). */
9870
+ /**
9871
+ * Provider for builders (`auto`: the project/role default). One that isn't available (not
9872
+ * installed, not signed in, at its usage limit) is skipped for another available provider.
9873
+ */
9640
9874
  builderProvider: union([literal("auto"), ProviderId]).default("auto"),
9875
+ /** Model for builders on `builderProvider`; `null` (the default): that provider's default. */
9876
+ builderModel: string().min(1).nullable().default(null),
9877
+ /**
9878
+ * Provider for the independent reviewer. `auto` (the default): a provider other than the
9879
+ * builder's when one is available, which gives the most independent review.
9880
+ */
9881
+ reviewerProvider: union([literal("auto"), ProviderId]).default("auto"),
9882
+ /** Model for reviewers on `reviewerProvider`; `null` (the default): that provider's default. */
9883
+ reviewerModel: string().min(1).nullable().default(null),
9884
+ /** What a review does when its chosen provider isn't available (see `ReviewerFallback`). */
9885
+ reviewerFallback: ReviewerFallback.default("builder"),
9641
9886
  /** Minutes to wait for main CI after a merge before calling it done. */
9642
9887
  watchTimeoutMin: int().positive().default(120),
9643
9888
  /**
@@ -9865,6 +10110,11 @@ object({
9865
10110
  backlog: array(FactoryWorkItem),
9866
10111
  inProgress: array(FactoryWorkItem),
9867
10112
  mergeChecks: array(FactoryMergeChecks),
10113
+ /**
10114
+ * The pull requests the factory owns: the merge queue first, in the order they merge, then
10115
+ * the rest (being checked, rebased, rebuilt, waiting for you) and today's merges.
10116
+ */
10117
+ pullRequests: array(FactoryPrEntry).default([]),
9868
10118
  /** Merged, reverted, failed, rejected and escalated items, newest first. */
9869
10119
  recent: array(FactoryWorkItem),
9870
10120
  /** Issues by untrusted authors, newest first; nothing runs on them until let in. */
@@ -10537,6 +10787,86 @@ const ConflictRecord = object({
10537
10787
  createdAt: Timestamp,
10538
10788
  resolvedAt: Timestamp.nullable()
10539
10789
  });
10790
+ // ../../packages/contracts/src/runners.ts
10791
+ /**
10792
+ * Runners the server drives (`docs/remote-runners.md` §8). The
10793
+ * home runner is the local one next to the server; later phases add one runner per sandboxed
10794
+ * session (Docker, Upstash Box). Each is a row of the `runners` table, projected from the
10795
+ * `runner.*` lifecycle events.
10796
+ */
10797
+ /** Record id of the home runner: the local runner next to the server. */
10798
+ const HOME_RUNNER_ID = "home";
10799
+ /**
10800
+ * Where a runner runs (its execution backend):
10801
+ * - `local`: a process on this machine with worktrees in `<home>/wt` (the home runner);
10802
+ * - `docker`: inside a container on this machine (or the Docker host the CLI points at);
10803
+ * - `upstash-box`: inside an Upstash Box in the cloud.
10804
+ */
10805
+ const RunnerBackendId = _enum([
10806
+ "local",
10807
+ "docker",
10808
+ "upstash-box"
10809
+ ]);
10810
+ /**
10811
+ * A runner's lifecycle as the server sees it:
10812
+ * - `provisioning`: its sandbox is being made;
10813
+ * - `starting`: the runner process is starting or the server is connecting to it;
10814
+ * - `connected`: handshake done; commands and events flow;
10815
+ * - `disconnected`: the connection dropped; the server is trying again;
10816
+ * - `paused`: the sandbox is paused (its disk is kept);
10817
+ * - `stopped`: the sandbox or process was stopped on purpose;
10818
+ * - `failed`: it could not be provisioned, started or connected (see `lastError`);
10819
+ * - `deleted`: the sandbox is gone. The record stays, so its sessions report which runner
10820
+ * they lost instead of falling back to another one.
10821
+ */
10822
+ const RunnerRecordState = _enum([
10823
+ "provisioning",
10824
+ "starting",
10825
+ "connected",
10826
+ "disconnected",
10827
+ "paused",
10828
+ "stopped",
10829
+ "failed",
10830
+ "deleted"
10831
+ ]);
10832
+ /** One runner the server knows about (a `runners` row). */
10833
+ const RunnerRecord = object({
10834
+ /** CodeDen's id for this runner; `HOME_RUNNER_ID` for the home runner. */
10835
+ id: Id,
10836
+ backend: RunnerBackendId,
10837
+ /** The home runner: provider detection, utility jobs, the orchestrator and PMs use it. */
10838
+ home: boolean(),
10839
+ /**
10840
+ * The runner's own id (its journal's, reported in `welcome`); null until it first connects.
10841
+ * `sessions.runnerId` holds this id.
10842
+ */
10843
+ runnerId: string().nullable(),
10844
+ /** The backend's handle on the sandbox (container id, box id); null for `local`. */
10845
+ sandboxRef: string().nullable(),
10846
+ /** The project and session a sandbox runner serves; null for the home runner. */
10847
+ projectId: Id.nullable(),
10848
+ sessionId: Id.nullable(),
10849
+ state: RunnerRecordState,
10850
+ /** CodeDen version the runner reported at its last handshake. */
10851
+ version: string().nullable(),
10852
+ /** Version of the sandbox image or snapshot it was made from; null for `local`. */
10853
+ imageVersion: string().nullable(),
10854
+ createdAt: Timestamp,
10855
+ /** When the server last connected to it or lost it. */
10856
+ lastSeenAt: Timestamp.nullable(),
10857
+ /** Why it last failed or disconnected, safe to show (never contains tokens). */
10858
+ lastError: string().nullable()
10859
+ });
10860
+ /** Event payload: the server registered a runner, or re-registered it with new details. */
10861
+ const RunnerRegisteredPayload = object({ runner: RunnerRecord });
10862
+ /** Event payload: a runner's sandbox is gone; its record stays with state `deleted`. */
10863
+ const RunnerDeletedPayload = object({ id: Id });
10864
+ /**
10865
+ * The optional runner record id carried by `runner.connected`, `runner.disconnected` and
10866
+ * `runner.draining`. Events stored before several runners existed have none; they belong to
10867
+ * the home runner.
10868
+ */
10869
+ const RunnerRecordRef = { id: Id.optional() };
10540
10870
  // ../../packages/contracts/src/updates.ts
10541
10871
  /**
10542
10872
  * `settings.updates.mode` (§16): `off` never asks the registry; `notify` checks and offers a
@@ -11139,16 +11469,21 @@ discriminatedUnion("type", [
11139
11469
  })),
11140
11470
  globalEvent("artifact.created", object({ artifact: Artifact })),
11141
11471
  globalEvent("settings.updated", object({ settings: Settings })),
11472
+ globalEvent("runner.registered", RunnerRegisteredPayload),
11473
+ globalEvent("runner.deleted", RunnerDeletedPayload),
11142
11474
  globalEvent("runner.connected", object({
11475
+ ...RunnerRecordRef,
11143
11476
  runnerId: string(),
11144
11477
  version: string(),
11145
11478
  protocolVersion: int()
11146
11479
  })),
11147
11480
  globalEvent("runner.disconnected", object({
11481
+ ...RunnerRecordRef,
11148
11482
  runnerId: string(),
11149
11483
  reason: string()
11150
11484
  })),
11151
11485
  globalEvent("runner.draining", object({
11486
+ ...RunnerRecordRef,
11152
11487
  runnerId: string(),
11153
11488
  reason: string()
11154
11489
  })),
@@ -11249,7 +11584,10 @@ object({
11249
11584
  scheduled: array(ScheduledRun).default([]),
11250
11585
  /** The orchestrator and PM sessions (§8.1), also present in `sessions`. */
11251
11586
  roleSessions: RoleSessionsRef.optional(),
11252
- runner: RunnerConnectionStatus
11587
+ /** The home runner's connection, the one the shell shows (§4.2). */
11588
+ runner: RunnerConnectionStatus,
11589
+ /** Every runner the server drives, the home runner first, with its live state. */
11590
+ runners: array(RunnerRecord).default([])
11253
11591
  });
11254
11592
  object({
11255
11593
  seq: int().nonnegative(),
@@ -11296,7 +11634,8 @@ const ServerToClientMessage = discriminatedUnion("type", [
11296
11634
  }),
11297
11635
  object({
11298
11636
  type: literal("runner"),
11299
- runner: RunnerConnectionStatus
11637
+ runner: RunnerConnectionStatus,
11638
+ runners: array(RunnerRecord).optional()
11300
11639
  }),
11301
11640
  object({
11302
11641
  type: literal("update"),
@@ -11432,7 +11771,13 @@ const StartSessionRequest = object({
11432
11771
  /** First message; the session starts idle when omitted. */
11433
11772
  input: UserInput.optional(),
11434
11773
  /** The caller's decision when a previous attempt returned `conflict`. */
11435
- conflict: ConflictDecision.optional()
11774
+ conflict: ConflictDecision.optional(),
11775
+ /**
11776
+ * The open persisted conflict this request is a new version of (the New session draft sent
11777
+ * again while its card is up). The server closes that conflict whatever this start returns;
11778
+ * a conflict that is closed already or belongs to another project is left alone.
11779
+ */
11780
+ replacesConflict: Id.optional()
11436
11781
  });
11437
11782
  /**
11438
11783
  * `POST /api/sessions` response: `StartWorkResult` (`started` / `conflict`) plus the outcomes
@@ -12730,8 +13075,12 @@ const ListConflictsQuery = object({
12730
13075
  status: InboxItemStatus.optional(),
12731
13076
  projectId: Id.optional()
12732
13077
  });
12733
- /** `POST /api/conflicts/:id/resolve`: the decision (wait, skip, join or force with a reason). */
12734
- const ResolveConflictRequest = ConflictDecision;
13078
+ /**
13079
+ * `POST /api/conflicts/:id/resolve`: the decision (wait, skip, join or force with a reason).
13080
+ * `start` replaces the request saved with the conflict: the New session draft as it is when the
13081
+ * card is answered, so edits made after the first send are what starts. Same project only.
13082
+ */
13083
+ const ResolveConflictRequest = ConflictDecision.and(object({ start: StartSessionRequest.optional() }));
12735
13084
  object({
12736
13085
  conflict: ConflictRecord,
12737
13086
  result: StartSessionResponse
@@ -13031,6 +13380,66 @@ const ServerLock = object({
13031
13380
  version: string(),
13032
13381
  startedAt: Timestamp
13033
13382
  });
13383
+ /** A boolean from a query string (`true`/`false`) or from code. */
13384
+ const QueryBoolean = union([boolean(), _enum(["true", "false"]).transform((v) => v === "true")]);
13385
+ /** `GET /api/search/transcripts` query. */
13386
+ const TranscriptSearchQuery = object({
13387
+ /**
13388
+ * What to look for. Whitespace separates terms; every term must appear (in any order),
13389
+ * ignoring case and accents. Control characters are ignored.
13390
+ */
13391
+ q: string().trim().min(1).max(200),
13392
+ /** Only sessions of this project. */
13393
+ projectId: Id.optional(),
13394
+ /** Only sessions with this role (§8.1). */
13395
+ role: Role.optional(),
13396
+ /** Whether matches in archived sessions are included (they are by default). */
13397
+ includeArchived: QueryBoolean.default(true),
13398
+ /**
13399
+ * Continue after the previous page: its `nextCursor`. Omit for the newest matches. Opaque to
13400
+ * clients.
13401
+ */
13402
+ cursor: string().regex(/^\d{1,16}$/).optional(),
13403
+ /** Most hits to return. */
13404
+ limit: number().int().min(1).max(100).default(20)
13405
+ });
13406
+ /** A piece of a snippet: `match` marks text that matched the query (render it highlighted). */
13407
+ const SnippetPart = object({
13408
+ text: string(),
13409
+ match: boolean()
13410
+ });
13411
+ /** One transcript item that matched. Session details come from the app snapshot. */
13412
+ const TranscriptSearchHit = object({
13413
+ sessionId: Id,
13414
+ /** The thread holding the item: the session's root thread or a subagent's. */
13415
+ threadId: Id,
13416
+ itemId: Id,
13417
+ /**
13418
+ * The root-thread item to scroll to: the item itself, or for an item in a subagent's thread
13419
+ * the subagent card in the root thread that started it. Such a hit also opens `threadId` at
13420
+ * `itemId`.
13421
+ */
13422
+ anchorItemId: Id,
13423
+ /** Item kind, e.g. `user_message`, `assistant_message`, `tool_call`. */
13424
+ kind: string(),
13425
+ /** For tool calls, what kind of work it was (`command`, `file_edit`, ...). */
13426
+ toolKind: ToolKind.optional(),
13427
+ /** Text around the first match, in order; never HTML. */
13428
+ snippet: array(SnippetPart),
13429
+ /** When the item was created. */
13430
+ ts: Timestamp
13431
+ });
13432
+ object({
13433
+ /** The query as searched (trimmed, without control characters). */
13434
+ query: string(),
13435
+ hits: array(TranscriptSearchHit),
13436
+ /**
13437
+ * Pass as `cursor` to get the next page; null when every match has been returned. A page can
13438
+ * hold fewer than `limit` hits and still have a next one: each request looks at a bounded
13439
+ * number of candidates so a search never holds up the server.
13440
+ */
13441
+ nextCursor: string().nullable()
13442
+ });
13034
13443
  // ../../packages/contracts/src/session-files.ts
13035
13444
  /**
13036
13445
  * Read-only browsing of a session's working directory for the files panel (§12.3).
@@ -13262,16 +13671,43 @@ object({
13262
13671
  /** How each provider in the range is billed, for the "API-equivalent" label. */
13263
13672
  billing: record(ProviderId, BillingMode)
13264
13673
  });
13674
+ /** One turn's usage for the turn footer. */
13675
+ const TurnUsage = object({
13676
+ ...TokenCounts.shape,
13677
+ turnId: Id,
13678
+ costUsd: number$1().nonnegative(),
13679
+ costSource: CostSource
13680
+ });
13681
+ /** One model's share of a subagent run's cost. */
13682
+ const SubagentModelCost = object({
13683
+ ...TokenCounts.shape,
13684
+ /** The model the tokens were priced as (the session's model when the provider named none). */
13685
+ model: string(),
13686
+ /** The price table's name for the model, when it has one. */
13687
+ label: string().optional(),
13688
+ costUsd: number$1().nonnegative(),
13689
+ costSource: CostSource
13690
+ });
13691
+ /**
13692
+ * What a finished subagent run cost, priced from `SubagentStats.usage` when read (§7.3). Display
13693
+ * only: the run's tokens are already in its session's turns, so this is never added to totals.
13694
+ * `reported` when every model's cost came from the provider, `unpriced` when no model could be
13695
+ * priced, else `estimated`.
13696
+ */
13697
+ const SubagentCost = object({
13698
+ /** The `subagent` item. */
13699
+ itemId: Id,
13700
+ costUsd: number$1().nonnegative(),
13701
+ costSource: CostSource,
13702
+ models: array(SubagentModelCost)
13703
+ });
13265
13704
  object({
13266
13705
  sessionId: Id,
13267
13706
  totals: UsageTotals,
13268
13707
  billing: BillingMode,
13269
- turns: array(object({
13270
- ...TokenCounts.shape,
13271
- turnId: Id,
13272
- costUsd: number$1().nonnegative(),
13273
- costSource: CostSource
13274
- }))
13708
+ turns: array(TurnUsage),
13709
+ /** The cost of each finished subagent that reported tokens per model, for its card. */
13710
+ subagents: array(SubagentCost).default([])
13275
13711
  });
13276
13712
  object({
13277
13713
  windows: array(object({
@@ -13325,7 +13761,7 @@ object({
13325
13761
  * rest of the bundle, so the package version is the single source of truth at runtime;
13326
13762
  * everywhere else (workspace, tests) it is `SOURCE_VERSION`.
13327
13763
  */
13328
- const CODEDEN_VERSION = packageVersion() ?? "0.6.3";
13764
+ const CODEDEN_VERSION = packageVersion() ?? "0.7.0";
13329
13765
  function packageVersion() {
13330
13766
  const value = globalThis.__CODEDEN_PACKAGE_VERSION__;
13331
13767
  return typeof value === "string" && value.length > 0 ? value : void 0;
@@ -13476,6 +13912,6 @@ async function listDescendants(rootPid) {
13476
13912
  }
13477
13913
  return out;
13478
13914
  }
13479
- export { StarterSetRequest as $, InboxItemKind as $n, ZodError as $r, FactoryAllowLargeChangeRequest as $t, BrowserHostClientMessage as A, EditQueuedMessageRequest as An, ReasoningEffort as Ar, LOCAL_STT_SAMPLE_RATE as At, AUTOMATION_IMPORT_LIMITS as B, BROWSER_RELAY_SECRET_HEADER as Bn, int as Br, NOTICE_BATCH_CODE as Bt, RemoteAccessFile as C, AutomationGuards as Cn, McpServerDiffRequest as Cr, UpdateProjectRequest as Ct, SignInRequest as D, Session as Dn, providersWith as Dr, READ_ALOUD_FULL_MAX_CHARS as Dt, SetNetworkPasswordResponse as E, TriagePolicy as En, agentConfigFeatures as Er, agentEventToNewEvent as Et, BrowserNavigateRequest as F, SpeechSummaryRequest as Fn, any as Fr, UpdateInstallRequest as Ft, AutomationFileFrontmatter as G, ConflictDecision as Gn, object as Gr, GithubIssue as Gt, DuplicateAutomationRequest as H, RuntimeResponse as Hn, literal as Hr, CreateGithubIssueRequest as Ht, BrowserNewTabRequest as I, TerminalClientMessage as In, array as Ir, UpdateStatus as It, CreateAutomationRequest as J, Project as Jn, record as Jr, GithubPr as Jt, AutomationGuardsPatch as K, StartedBy as Kn, optional as Kr, GithubLabelRequest as Kt, BrowserOpenRequest as L, TerminalQuery as Ln, boolean as Lr, compareVersions as Lt, BrowserClientMessage as M, GitPushRequest as Mn, datetime as Mr, SttQuery as Mt, BrowserDevServerRequest as N, RestoreFilesRequest as Nn, _enum as Nr, TtsRequest as Nt, passwordProblem as O, SessionStatus as On, AutonomyLevel as Or, Settings as Ot, BrowserHistoryRequest as P, SessionResult as Pn, _null as Pr, AppPointer as Pt, SetAutomationEnabledRequest as Q, InboxItem as Qn, url as Qr, parseGithubPrId as Qt, BrowserViewportRequest as R, RunnerCommandResults as Rn, custom as Rr, isNewerVersion as Rt, PASSWORD_RULE_TEXT as S, AutomationAction as Sn, AgentConfigWriteRequest as Sr, UiClientMessage as St, SetNetworkPasswordRequest as T, AutomationTrigger as Tn, McpServerUpsertRequest as Tr, AGENT_EVENT_PREFIX as Tt, ExportAutomationsQuery as U, SessionOptions as Un, looseObject as Ur, GithubAuthorAssociation as Ut, AutomationImportSource as V, ProviderCapabilities as Vn, intersection as Vr, NoticeBatchData as Vt, ImportAutomationsRequest as W, ProjectConfigFile as Wn, number$1 as Wr, GithubCommentRequest as Wt, ListAutomationsQuery as X, DEFAULT_VISION_PATH as Xn, union as Xr, TriageIssueRequest as Xt, ListAutomationRunsQuery as Y, sortProjects as Yn, string as Yr, MergePrRequest as Yt, RunAutomationRequest as Z, FactoryLimits as Zn, unknown as Zr, githubPrId as Zt, ListNoticesQuery as _, FactorySetTypeRequest as _n, AgentConfigDeleteQuery as _r, SessionStartMeta as _t, childEnv as a, REVIEW_SUMMARY_MAX as an, winningCommands as ar, CreateProjectRequest as at, UpdateSessionRequest as b, Artifact as bn, AgentConfigLocator as br, SteerRequest as bt, UsageSettings as c, SetAutonomyModeRequest as cn, messageFrom as cr, ForkSessionRequest as ct, RunnerLock as d, FactoryAdmitRequest as dn, MCP_TEST_STDERR_LIMIT as dr, LoginToolId as dt, toJSONSchema as ei, FactoryDecisionRequest as en, AgentEvent as er, TriageDecisionRequest as et, RunnerToServerMessage as f, FactoryAnalysisReport as fn, McpServerTestRequest as fr, ReorderProjectsRequest as ft, ListConflictsQuery as g, FactoryReproductionReport as gn, ShelvedHook as gr, SendMessageRequest as gt, ArchiveSessionRequest as h, FactoryPlanRoundRequest as hn, HookHandler as hr, SecretKey as ht, listDescendants as i, PutVisionRequest as in, oneLineDescription as ir, UpdateAutomationRequest as it, summarizeActivity as j, GitCommitRequest as jn, number as jr, LocalSttModelParams as jt, ImageTestRequest as k, DiffScope as kn, ProviderId as kr, speechExcerpt as kt, SessionFileQuery as l, isFactoryMode as ln, MCP_TEST_DEFAULT_TIMEOUT_MS as lr, ListInboxQuery as lt, ServerToRunnerMessage as m, FactoryFinding as mn, HookChangeRequest as mr, RespondRequest as mt, killTree as n, prettifyError as ni, KillSwitchRequest as nn, mergeItemDeltas as nr, UpcomingRunsQuery as nt, CODEDEN_VERSION as o, ReviewVerdictSubmission as on, itemDeltaText as or, FileReadQuery as ot, ServerLock as p, FactoryFileIssueRequest as pn, SkillSwitchRequest as pr, ResolveInboxRequest as pt, AutomationProjectRequest as q, WorkKey as qn, preprocess as qr, GithubListQuery as qt, killTreeAndOrphans as r, NEVER as ri, LEGACY_SIZE_LIMITS as rn, ProjectCommandsQuery as rr, UpdateAutomationProjectSettingsRequest as rt, UsageQuery as s, SCOUT_UNAVAILABLE as sn, UserInput as sr, FileWriteRequest as st, isAlive as t, safeParse$1 as ti, FactoryTuning as tn, SessionUpdatedEvent as tr, TriageReport as tt, RunnerEventMessage as u, truncateReviewSummary as un, MCP_TEST_ERROR_LIMIT as ur, ListSessionsQuery as ut, ResolveConflictRequest as v, ScoutState as vn, AgentConfigDiffRequest as vr, SetSecretRequest as vt, SetNetworkAccessRequest as w, AutomationRun as wn, McpServerTarget as wr, HealthResponse as wt, NetworkStatus as x, Automation as xn, AgentConfigProvider as xr, ThreadItemsQuery as xt, RoleMessageRequest as y, pipelineStep as yn, AgentConfigListQuery as yr, StartSessionRequest as yt, BrowserWsQuery as z, SETUP_TAIL_LIMIT as zn, discriminatedUnion as zr, ConflictRecord as zt };
13915
+ export { SetAutomationEnabledRequest as $, ProjectConfigFile as $n, number$1 as $r, githubPrId as $t, ImageTestRequest as A, Session as An, AgentConfigProvider as Ar, speechExcerpt as At, BrowserWsQuery as B, TerminalQuery as Bn, number as Br, HOME_RUNNER_ID as Bt, PASSWORD_RULE_TEXT as C, Artifact as Cn, HookChangeRequest as Cr, UiClientMessage as Ct, SetNetworkPasswordResponse as D, AutomationRun as Dn, AgentConfigDiffRequest as Dr, agentEventToNewEvent as Dt, SetNetworkPasswordRequest as E, AutomationGuards as En, AgentConfigDeleteQuery as Er, AGENT_EVENT_PREFIX as Et, BrowserHistoryRequest as F, GitPushRequest as Fn, agentConfigFeatures as Fr, AppPointer as Ft, ImportAutomationsRequest as G, BrowserMouseAction as Gn, array as Gr, GithubAuthorAssociation as Gt, AutomationImportSource as H, SETUP_TAIL_LIMIT as Hn, _enum as Hr, NOTICE_BATCH_CODE as Ht, BrowserNavigateRequest as I, RestoreFilesRequest as In, providersWith as Ir, UpdateInstallRequest as It, AutomationProjectRequest as J, checkBrowserMouse as Jn, discriminatedUnion as Jr, GithubLabelRequest as Jt, AutomationFileFrontmatter as K, MAX_AGENT_SCROLL as Kn, boolean as Kr, GithubCommentRequest as Kt, BrowserNewTabRequest as L, SessionResult as Ln, AutonomyLevel as Lr, UpdateStatus as Lt, summarizeActivity as M, DiffScope as Mn, McpServerDiffRequest as Mr, LocalSttModelParams as Mt, BrowserClientMessage as N, EditQueuedMessageRequest as Nn, McpServerTarget as Nr, SttQuery as Nt, SignInRequest as O, AutomationTrigger as On, AgentConfigListQuery as Or, READ_ALOUD_FULL_MAX_CHARS as Ot, BrowserDevServerRequest as P, GitCommitRequest as Pn, McpServerUpsertRequest as Pr, TtsRequest as Pt, RunAutomationRequest as Q, SessionOptions as Qn, looseObject as Qr, TriageIssueRequest as Qt, BrowserOpenRequest as R, SpeechSummaryRequest as Rn, ProviderId as Rr, compareVersions as Rt, NetworkStatus as S, pipelineStep as Sn, SkillSwitchRequest as Sr, ThreadItemsQuery as St, SetNetworkAccessRequest as T, AutomationAction as Tn, ShelvedHook as Tr, HealthResponse as Tt, DuplicateAutomationRequest as U, BROWSER_RELAY_SECRET_HEADER as Un, _null as Ur, NoticeBatchData as Ut, AUTOMATION_IMPORT_LIMITS as V, RunnerCommandResults as Vn, datetime as Vr, ConflictRecord as Vt, ExportAutomationsQuery as W, BrowserModifierKey as Wn, any as Wr, CreateGithubIssueRequest as Wt, ListAutomationRunsQuery as X, ProviderCapabilities as Xn, intersection as Xr, GithubPr as Xt, CreateAutomationRequest as Y, CODEDEN_CREDENTIAL_FILES as Yn, int as Yr, GithubListQuery as Yt, ListAutomationsQuery as Z, RuntimeResponse as Zn, literal as Zr, MergePrRequest as Zt, ListConflictsQuery as _, FactoryPlanRoundRequest as _n, messageFrom as _r, SendMessageRequest as _t, childEnv as a, union as ai, LEGACY_SIZE_LIMITS as an, DEFAULT_VISION_PATH as ar, UpdateAutomationRequest as at, RoleMessageRequest as b, ScoutState as bn, MCP_TEST_STDERR_LIMIT as br, StartSessionRequest as bt, UsageSettings as c, ZodError as ci, ReviewVerdictSubmission as cn, InboxItemKind as cr, FileWriteRequest as ct, RunnerEventMessage as d, prettifyError as di, isFactoryMode as dn, mergeItemDeltas as dr, ListSessionsQuery as dt, object as ei, parseGithubPrId as en, ConflictDecision as er, StarterSetRequest as et, RunnerLock as f, NEVER as fi, truncateReviewSummary as fn, ProjectCommandsQuery as fr, LoginToolId as ft, ArchiveSessionRequest as g, FactoryFinding as gn, UserInput as gr, SecretKey as gt, ServerToRunnerMessage as h, FactoryFileIssueRequest as hn, itemDeltaText as hr, RespondRequest as ht, listDescendants as i, string as ii, KillSwitchRequest as in, sortProjects as ir, UpdateAutomationProjectSettingsRequest as it, BrowserHostClientMessage as j, SessionStatus as jn, AgentConfigWriteRequest as jr, LOCAL_STT_SAMPLE_RATE as jt, passwordProblem as k, TriagePolicy as kn, AgentConfigLocator as kr, Settings as kt, SessionFileQuery as l, toJSONSchema as li, SCOUT_UNAVAILABLE as ln, AgentEvent as lr, ForkSessionRequest as lt, ServerLock as m, FactoryAnalysisReport as mn, winningCommands as mr, ResolveInboxRequest as mt, killTree as n, preprocess as ni, FactoryDecisionRequest as nn, WorkKey as nr, TriageReport as nt, CODEDEN_VERSION as o, unknown as oi, PutVisionRequest as on, FactoryLimits as or, CreateProjectRequest as ot, RunnerToServerMessage as p, FactoryAdmitRequest as pn, oneLineDescription as pr, ReorderProjectsRequest as pt, AutomationGuardsPatch as q, MAX_FOCUS_TYPE_CHARS as qn, custom as qr, GithubIssue as qt, killTreeAndOrphans as r, record as ri, FactoryTuning as rn, Project as rr, UpcomingRunsQuery as rt, UsageQuery as s, url as si, REVIEW_SUMMARY_MAX as sn, InboxItem as sr, FileReadQuery as st, isAlive as t, optional as ti, FactoryAllowLargeChangeRequest as tn, StartedBy as tr, TriageDecisionRequest as tt, TranscriptSearchQuery as u, safeParse$1 as ui, SetAutonomyModeRequest as un, SessionUpdatedEvent as ur, ListInboxQuery as ut, ListNoticesQuery as v, FactoryReproductionReport as vn, MCP_TEST_DEFAULT_TIMEOUT_MS as vr, SessionStartMeta as vt, RemoteAccessFile as w, Automation as wn, HookHandler as wr, UpdateProjectRequest as wt, UpdateSessionRequest as x, checksPassed as xn, McpServerTestRequest as xr, SteerRequest as xt, ResolveConflictRequest as y, FactorySetTypeRequest as yn, MCP_TEST_ERROR_LIMIT as yr, SetSecretRequest as yt, BrowserViewportRequest as z, TerminalClientMessage as zn, ReasoningEffort as zr, isNewerVersion as zt };
13480
13916
 
13481
- //# sourceMappingURL=tree-31WAOm5k.js.map
13917
+ //# sourceMappingURL=tree-Bjv-rXir.js.map