zidane 7.0.14 → 7.0.15

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 (111) hide show
  1. package/dist/{acp-CZpX91YE.js → acp-Bw2b_kka.js} +3 -3
  2. package/dist/{acp-CZpX91YE.js.map → acp-Bw2b_kka.js.map} +1 -1
  3. package/dist/acp-cli.js +4 -4
  4. package/dist/acp.d.ts +1 -1
  5. package/dist/acp.js +1 -1
  6. package/dist/{agent-B1jsFaDq.js → agent-B_uQo4f1.js} +649 -48
  7. package/dist/agent-B_uQo4f1.js.map +1 -0
  8. package/dist/agent.d.ts +1 -1
  9. package/dist/agent.js +1 -1
  10. package/dist/{anthropic-Da39cE-d.js → anthropic-QbHqqTkV.js} +2 -2
  11. package/dist/{anthropic-Da39cE-d.js.map → anthropic-QbHqqTkV.js.map} +1 -1
  12. package/dist/{approvals-S100xf1d.js → approvals-B9aIQJRQ.js} +287 -45
  13. package/dist/approvals-B9aIQJRQ.js.map +1 -0
  14. package/dist/artifacts-CV2hUKnL.js +112 -0
  15. package/dist/artifacts-CV2hUKnL.js.map +1 -0
  16. package/dist/{auth-DfEWnkC7.js → auth-plw6npda.js} +19 -7
  17. package/dist/auth-plw6npda.js.map +1 -0
  18. package/dist/chat/pure.d.ts +3 -3
  19. package/dist/chat/pure.js +1 -1
  20. package/dist/chat.d.ts +6 -6
  21. package/dist/chat.js +5 -5
  22. package/dist/contexts/daytona.d.ts +1 -1
  23. package/dist/contexts/e2b.d.ts +1 -1
  24. package/dist/daemon-cli.js +1 -1
  25. package/dist/eval.d.ts +1 -1
  26. package/dist/eval.js +1 -1
  27. package/dist/extensions.d.ts +2 -2
  28. package/dist/extensions.js +2 -2
  29. package/dist/headless.d.ts +1 -1
  30. package/dist/headless.js +2 -2
  31. package/dist/{index-DFGECPfm.d.ts → index-Dc_zYpEu.d.ts} +351 -2
  32. package/dist/index-Dc_zYpEu.d.ts.map +1 -0
  33. package/dist/{index-DP7xYXr9.d.ts → index-Df2CH6bn.d.ts} +92 -7
  34. package/dist/index-Df2CH6bn.d.ts.map +1 -0
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.js +7 -6
  37. package/dist/{ipc-BLLscoIl.js → ipc-T_pPnHkp.js} +2 -2
  38. package/dist/{ipc-BLLscoIl.js.map → ipc-T_pPnHkp.js.map} +1 -1
  39. package/dist/ipc.d.ts +54 -6
  40. package/dist/ipc.d.ts.map +1 -1
  41. package/dist/ipc.js +3 -3
  42. package/dist/mcp.d.ts +1 -1
  43. package/dist/{oauth-C4GvY_p1.js → oauth-EIBUuSDK.js} +2 -2
  44. package/dist/{oauth-C4GvY_p1.js.map → oauth-EIBUuSDK.js.map} +1 -1
  45. package/dist/output/stream-json.d.ts +1 -1
  46. package/dist/output/terminal.d.ts +1 -1
  47. package/dist/plugins.d.ts +1 -1
  48. package/dist/presets.d.ts +2 -2
  49. package/dist/presets.js +2 -2
  50. package/dist/providers/anthropic.d.ts +1 -1
  51. package/dist/providers/anthropic.js +1 -1
  52. package/dist/providers/arcee.d.ts +1 -1
  53. package/dist/providers/baseten.d.ts +1 -1
  54. package/dist/providers/cerebras.d.ts +1 -1
  55. package/dist/providers/local.d.ts +1 -1
  56. package/dist/providers/openai-compat.d.ts +1 -1
  57. package/dist/providers/openai.d.ts +1 -1
  58. package/dist/providers/openai.js +1 -1
  59. package/dist/providers/openrouter.d.ts +1 -1
  60. package/dist/providers/xai.d.ts +1 -1
  61. package/dist/providers/xai.js +2 -2
  62. package/dist/{providers-BYgyPb15.js → providers-CoK1rZ1p.js} +2 -2
  63. package/dist/{providers-BYgyPb15.js.map → providers-CoK1rZ1p.js.map} +1 -1
  64. package/dist/providers.d.ts +1 -1
  65. package/dist/providers.js +3 -3
  66. package/dist/restate.d.ts +1 -1
  67. package/dist/restate.js +1 -1
  68. package/dist/{server-C8gULJ0d.js → server-DXM8ZbGi.js} +64 -6
  69. package/dist/server-DXM8ZbGi.js.map +1 -0
  70. package/dist/session/sqlite.d.ts +1 -1
  71. package/dist/session/sqlite.d.ts.map +1 -1
  72. package/dist/session/sqlite.js +117 -1
  73. package/dist/session/sqlite.js.map +1 -1
  74. package/dist/{session-K3icbPH9.js → session-DPZnncaQ.js} +60 -1
  75. package/dist/session-DPZnncaQ.js.map +1 -0
  76. package/dist/session.d.ts +2 -2
  77. package/dist/session.js +3 -2
  78. package/dist/skills.d.ts +1 -1
  79. package/dist/{tool-formatters-C-s_-u0v.d.ts → tool-formatters-BgdOYAy9.d.ts} +2 -2
  80. package/dist/{tool-formatters-C-s_-u0v.d.ts.map → tool-formatters-BgdOYAy9.d.ts.map} +1 -1
  81. package/dist/tools/fetch-url.d.ts +1 -1
  82. package/dist/tools/web-search.d.ts +1 -1
  83. package/dist/tools.d.ts +2 -2
  84. package/dist/tools.js +2 -2
  85. package/dist/{transcript-anchors-D1ToF-EW.d.ts → transcript-anchors-CtnwuQJM.d.ts} +3 -3
  86. package/dist/transcript-anchors-CtnwuQJM.d.ts.map +1 -0
  87. package/dist/tui.d.ts +3 -3
  88. package/dist/tui.d.ts.map +1 -1
  89. package/dist/tui.js +576 -102
  90. package/dist/tui.js.map +1 -1
  91. package/dist/{turn-operations-CZLsNgw-.js → turn-operations-DkJ1R0p8.js} +4 -3
  92. package/dist/turn-operations-DkJ1R0p8.js.map +1 -0
  93. package/dist/{turn-operations-Bp5-BAki.d.ts → turn-operations-khAvr7KJ.d.ts} +5 -3
  94. package/dist/turn-operations-khAvr7KJ.d.ts.map +1 -0
  95. package/dist/types.d.ts +1 -1
  96. package/dist/{xai-DILdFGzN.js → xai-CazjStOK.js} +3 -3
  97. package/dist/{xai-DILdFGzN.js.map → xai-CazjStOK.js.map} +1 -1
  98. package/docs/EXTENSIONS.md +58 -0
  99. package/docs/IPC.md +9 -0
  100. package/docs/TUI.md +2 -0
  101. package/package.json +1 -1
  102. package/dist/agent-B1jsFaDq.js.map +0 -1
  103. package/dist/approvals-S100xf1d.js.map +0 -1
  104. package/dist/auth-DfEWnkC7.js.map +0 -1
  105. package/dist/index-DFGECPfm.d.ts.map +0 -1
  106. package/dist/index-DP7xYXr9.d.ts.map +0 -1
  107. package/dist/server-C8gULJ0d.js.map +0 -1
  108. package/dist/session-K3icbPH9.js.map +0 -1
  109. package/dist/transcript-anchors-D1ToF-EW.d.ts.map +0 -1
  110. package/dist/turn-operations-Bp5-BAki.d.ts.map +0 -1
  111. package/dist/turn-operations-CZLsNgw-.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { n as __require } from "./rolldown-runtime-BhDjJH2R.js";
2
2
  import { n as THINKING_LEVELS, u as toolResultToText } from "./types-CWgENVLY.js";
3
- import { A as selectFilesFromSession, Ct as waitTask, D as resolveTasksDir, Et as isSpawnTool, Fn as effectiveContextWindow, Ft as readFile$1, G as summaryToTurn, Gt as edit, Lt as multiEdit, M as compactConversation, Nt as shell, O as buildPostCompactAttachments, Pn as OUTPUT_RESERVE_TOKENS, T as resolvePersistDir, Tt as createSpawnTool, Ut as grep, Vt as listFiles, Wt as glob, Y as EMPTY_EXTENSION_REGISTRY, _t as composePresets, an as readKeybindingsRaw, b as migrateSessionArtifactDirs, f as applyCompactSummaryCutoff, ft as filterRegistryPlugins, jt as shellKill, lt as composeExtensionPreset, nn as mergeKeybindings, on as resolveExtensionKeybindings, st as buildExtensionPreset, t as createAgent, vt as definePreset, w as resolveMcpWarningsDir, xt as writeFile$1, yn as createDebugLog } from "./agent-B1jsFaDq.js";
3
+ import { A as selectFilesFromSession, Cn as createDebugLog, D as resolveTasksDir, Dt as isSpawnTool, Et as createSpawnTool, G as summaryToTurn, Gt as glob, Ht as listFiles, It as readFile$1, Jn as OUTPUT_RESERVE_TOKENS, Jt as artifacts_default, Kt as edit, M as compactConversation, Mt as shellKill, O as buildPostCompactAttachments, Pt as shell, Rn as artifactKindLabel, Rt as multiEdit, St as writeFile$1, T as resolvePersistDir, Wn as renderArtifactRow, Wt as grep, Y as EMPTY_EXTENSION_REGISTRY, Yn as effectiveContextWindow, b as migrateSessionArtifactDirs, f as applyCompactSummaryCutoff, ft as filterRegistryPlugins, ln as readKeybindingsRaw, lt as composeExtensionPreset, on as mergeKeybindings, st as buildExtensionPreset, t as createAgent, un as resolveExtensionKeybindings, vt as composePresets, w as resolveMcpWarningsDir, wt as waitTask, yt as definePreset } from "./agent-B_uQo4f1.js";
4
4
  import { F as parseCommandInvocation, M as commandBlocksToContent, P as executeCommand, c as SKILL_EDIT_METADATA_KEY, g as readSkillEditMarker, j as commandBlockToEvent, l as ZIDANE_EXTENSION_SKILL_NAME, m as extensionDirForCwd, s as EXTENSION_EDIT_METADATA_KEY, u as ZIDANE_SKILL_EDIT_SKILL_NAME, v as withZidaneExtensionSkill, w as generateStructuredData, y as withZidaneSkillEditSkill } from "./src-DzzhE2YO.js";
5
- import { a as formatDuration, c as previewLine, i as fmtTokens, l as shortId, s as formatTaskSummary } from "./format-BF745pLL.js";
5
+ import { a as formatDuration, c as previewLine, i as fmtTokens, l as shortId, s as formatTaskSummary, t as ageString } from "./format-BF745pLL.js";
6
6
  import { r as createProcessContext } from "./contexts-BSFQVclW.js";
7
7
  import { u as errorMessage$1 } from "./errors-DKiMrOKq.js";
8
8
  import { L as projectUserPaths, R as findGitRoot$1, x as discoverSkills } from "./skills-PJyiSRCp.js";
@@ -11,14 +11,14 @@ import { n as defaultPluginDataRoot, p as resolveStorageDirs, r as loadAgentPlug
11
11
  import { r as createLogger, t as consoleSink } from "./logger--C1VQjwJ.js";
12
12
  import { h as McpOAuthProvider, l as normalizeMcpServers, n as connectMcpServers, s as nonOwningMcpView } from "./mcp-BIWa57eY.js";
13
13
  import { appendDynamicSection, joinSystemPrompt, splitSystemPrompt } from "./prompt.js";
14
- import { o as loadSession, t as createSession } from "./session-K3icbPH9.js";
14
+ import { o as loadSession, t as createSession } from "./session-DPZnncaQ.js";
15
15
  import { n as flattenTurns, r as formatTokenUsage } from "./stats-DAKBEKjc.js";
16
16
  import { i as installCacheBreakLogger } from "./cache-telemetry-ehVdWsg2.js";
17
17
  import { i as findActiveTriggers, n as collectReferences, o as mergeSuggestions, t as applyInsert } from "./completion-core-BRo86R_L.js";
18
18
  import { r as fetchUrl } from "./fetch-url-ma-5_p0p.js";
19
19
  import { webSearch } from "./tools/web-search.js";
20
- import { $t as hasRunReceipt, A as chunkMarkdownForRender, Dt as MAIN_PLAYBOOK_FRAGMENT, Ft as orchestratedBy, It as parseSessionEventXml, K as filterChainFallbacks, Lt as renderProjectsBriefing, Mt as WORKER_REPORT_FRAGMENT, Nt as artifactsFromTurns, Ot as MAIN_SESSION_TITLE, Pt as isMainSession, Q as restoreChainFallbacks, Rt as renderSessionEventXml, Sn as chatReferenceTokensFromText, V as buildRunModel, Vt as sessionEventLabel, Xt as formatRunReceiptLine, _n as resolveApprovalForPayload, bt as promptTurnRefs, en as runReceiptFromRun, gn as parseEditOutcomesFromResult, hn as mergeApprovalAndBodyOutcomes, jt as SESSION_ROLE_KEY, kt as ORCHESTRATED_BY_KEY, ln as previewEditPayload, m as ownerOf, pn as buildEditOutcomesAnnotation, sn as extractEditPayload, u as capTranscriptEvents, vn as rewriteMultiEditHeader, yn as stripEditOutcomesAnnotation } from "./turn-operations-CZLsNgw-.js";
21
- import { T as restoreModelOptions, b as modelSupportsReasoning, d as BUILTIN_PROVIDERS, f as anthropicDescriptor, g as getContextWindow, h as enabledModelOptions, i as readCredentials, m as credKeyOf, n as applyApiKeyEnv, r as credentialsPath, t as detectAuth, x as modelsForDescriptor } from "./auth-DfEWnkC7.js";
20
+ import { $t as hasRunReceipt, A as chunkMarkdownForRender, Dt as MAIN_PLAYBOOK_FRAGMENT, Ft as orchestratedBy, It as parseSessionEventXml, K as filterChainFallbacks, Lt as renderProjectsBriefing, Mt as WORKER_REPORT_FRAGMENT, Nt as artifactsFromTurns, Ot as MAIN_SESSION_TITLE, Pt as isMainSession, Q as restoreChainFallbacks, Rt as renderSessionEventXml, Sn as chatReferenceTokensFromText, V as buildRunModel, Vt as sessionEventLabel, Xt as formatRunReceiptLine, _n as resolveApprovalForPayload, bt as promptTurnRefs, en as runReceiptFromRun, gn as parseEditOutcomesFromResult, hn as mergeApprovalAndBodyOutcomes, jt as SESSION_ROLE_KEY, kt as ORCHESTRATED_BY_KEY, ln as previewEditPayload, m as ownerOf, pn as buildEditOutcomesAnnotation, sn as extractEditPayload, u as capTranscriptEvents, vn as rewriteMultiEditHeader, yn as stripEditOutcomesAnnotation } from "./turn-operations-DkJ1R0p8.js";
21
+ import { T as restoreModelOptions, b as modelSupportsReasoning, d as BUILTIN_PROVIDERS, f as anthropicDescriptor, g as getContextWindow, h as enabledModelOptions, i as readCredentials, m as credKeyOf, n as applyApiKeyEnv, r as credentialsPath, t as detectAuth, x as modelsForDescriptor } from "./auth-plw6npda.js";
22
22
  import { basename, delimiter, dirname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
23
23
  import { Buffer } from "node:buffer";
24
24
  import { chmodSync, closeSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, mkdtempSync, openSync, readFileSync, readSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -26,6 +26,7 @@ import { readFile, readdir, stat, writeFile } from "node:fs/promises";
26
26
  import { spawn } from "node:child_process";
27
27
  import { homedir, tmpdir } from "node:os";
28
28
  import { createHash, randomUUID } from "node:crypto";
29
+ import { Fzf } from "fzf";
29
30
  import { createGunzip } from "node:zlib";
30
31
  import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
31
32
  import { jsx } from "react/jsx-runtime";
@@ -102,6 +103,7 @@ function metaFromRow(row) {
102
103
  runCount: row.runCount,
103
104
  ...isMainSession(row.metadata) ? { isMain: true } : {},
104
105
  ...row.projectRoot ? { projectRoot: row.projectRoot } : {},
106
+ ...typeof row.artifactCount === "number" ? { artifactCount: row.artifactCount } : {},
105
107
  updatedAt: row.updatedAt
106
108
  };
107
109
  }
@@ -1838,7 +1840,7 @@ function createTodoReadTool(opts) {
1838
1840
  * error messages stay symmetric and one fix lands in both places.
1839
1841
  */
1840
1842
  function requireSessionAndRun(ctx, toolName) {
1841
- if (!ctx.session) throw new Error(`${toolName}: no session on tool context — todos require a session via createSession().`);
1843
+ if (!ctx.session) throw new Error(`${toolName}: no session on tool context. Todos require a session via createSession().`);
1842
1844
  if (!ctx.runId) throw new Error(`${toolName}: no runId on tool context.`);
1843
1845
  return {
1844
1846
  session: ctx.session,
@@ -2728,6 +2730,70 @@ function readIfPresent$1(path, source) {
2728
2730
  };
2729
2731
  }
2730
2732
  //#endregion
2733
+ //#region src/chat/artifacts-view.ts
2734
+ /** Display order for the built-in kinds; anything else follows alphabetically. */
2735
+ const KIND_ORDER = [
2736
+ "pull_request",
2737
+ "branch",
2738
+ "commit",
2739
+ "file"
2740
+ ];
2741
+ /**
2742
+ * Group by kind (built-ins first in a fixed order, then extension kinds
2743
+ * alphabetically); rows inside a group keep the store's newest-first order.
2744
+ */
2745
+ function groupArtifacts(artifacts, registry) {
2746
+ const byKind = /* @__PURE__ */ new Map();
2747
+ for (const artifact of artifacts) {
2748
+ const list = byKind.get(artifact.kind) ?? [];
2749
+ list.push({
2750
+ artifact,
2751
+ row: renderArtifactRow(artifact, registry)
2752
+ });
2753
+ byKind.set(artifact.kind, list);
2754
+ }
2755
+ return [...byKind.keys()].sort((a, b) => {
2756
+ const ai = KIND_ORDER.indexOf(a);
2757
+ const bi = KIND_ORDER.indexOf(b);
2758
+ if (ai !== -1 || bi !== -1) return (ai === -1 ? KIND_ORDER.length : ai) - (bi === -1 ? KIND_ORDER.length : bi);
2759
+ return a.localeCompare(b);
2760
+ }).map((kind) => ({
2761
+ kind,
2762
+ label: artifactKindLabel(kind, registry),
2763
+ rows: byKind.get(kind)
2764
+ }));
2765
+ }
2766
+ /** `3 PRs · 2 files` style summary; empty string for none. */
2767
+ function summarizeArtifactCounts(artifacts, registry) {
2768
+ return groupArtifacts(artifacts, registry).map((g) => `${g.rows.length} ${pluralizeKind(g.label, g.rows.length)}`).join(" · ");
2769
+ }
2770
+ function pluralizeKind(label, count) {
2771
+ const lower = label.toLowerCase();
2772
+ if (count === 1) return lower;
2773
+ return /(?:s|x|ch|sh)$/.test(lower) ? `${lower}es` : `${lower}s`;
2774
+ }
2775
+ /**
2776
+ * Markdown for a `/artifacts` transcript note. `title` is the scope line
2777
+ * (`this session`, `project /repo`); rows link when they have an `href`.
2778
+ */
2779
+ function formatArtifactsMarkdown(artifacts, opts) {
2780
+ const where = opts.scope === "project" ? `project ${opts.projectRoot ?? "(none)"}` : "this session";
2781
+ if (artifacts.length === 0) return `### Artifacts · ${where}\n\n_No artifacts yet. Pull requests, branches, commits and created files appear here as the agent produces them._`;
2782
+ return `### Artifacts · ${where}\n\n${groupArtifacts(artifacts, opts.registry).map((group) => {
2783
+ const lines = group.rows.map(({ artifact, row }) => {
2784
+ const parts = [row.href ? `[${row.title}](${row.href})` : `**${row.title}**`];
2785
+ if (row.status) parts.push(`\`${row.status}\``);
2786
+ if (row.subtitle && row.subtitle !== row.title) parts.push(row.subtitle);
2787
+ if (opts.scope === "project") {
2788
+ const title = opts.sessionTitle?.(artifact.sessionId);
2789
+ parts.push(`_${title ?? artifact.sessionId.slice(0, 8)}_`);
2790
+ }
2791
+ return `- ${parts.join(" · ")}`;
2792
+ });
2793
+ return `**${group.label}${group.rows.length === 1 ? "" : "s"}**\n${lines.join("\n")}`;
2794
+ }).join("\n\n")}`;
2795
+ }
2796
+ //#endregion
2731
2797
  //#region src/chat/auto-compact.ts
2732
2798
  /**
2733
2799
  * Build the per-run `behavior.autoCompact` a chat host passes to `agent.run`.
@@ -3001,7 +3067,7 @@ function detectPackageManager(opts = {}) {
3001
3067
  "install",
3002
3068
  target
3003
3069
  ],
3004
- note: "Volta-managed install detected — refreshing via `volta install`."
3070
+ note: "Volta-managed install detected, refreshing via `volta install`."
3005
3071
  };
3006
3072
  if (inPath(homeSeg(".bun"))) return {
3007
3073
  id: "bun",
@@ -3079,7 +3145,7 @@ function detectPackageManager(opts = {}) {
3079
3145
  "install",
3080
3146
  target
3081
3147
  ],
3082
- note: "$VOLTA_HOME set — using `volta install`. If the install isn't Volta-managed, pass `--package-manager npm`."
3148
+ note: "$VOLTA_HOME set, using `volta install`. If the install is not Volta-managed, pass `--package-manager npm`."
3083
3149
  };
3084
3150
  if (env.BUN_INSTALL) return {
3085
3151
  id: "bun",
@@ -4493,10 +4559,10 @@ function sanitizeJsonWhitespace(text) {
4493
4559
  function enhanceJsonError(err, text) {
4494
4560
  const orig = err instanceof Error ? err : new Error(String(err));
4495
4561
  const hints = [];
4496
- if (text.includes("\xA0")) hints.push("the file contains non-breaking spaces (U+00A0), likely a copy-paste artifact — replace them with regular spaces");
4562
+ if (text.includes("\xA0")) hints.push("the file contains non-breaking spaces (U+00A0), likely from copy-paste. Replace them with regular spaces");
4497
4563
  if (text.charCodeAt(0) === 65279) hints.push("the file starts with a BOM (U+FEFF), which strict JSON.parse rejects");
4498
4564
  if (hints.length === 0) return orig;
4499
- return /* @__PURE__ */ new Error(`${orig.message} — ${hints.join("; ")}`);
4565
+ return /* @__PURE__ */ new Error(`${orig.message}. ${hints.join("; ")}`);
4500
4566
  }
4501
4567
  /**
4502
4568
  * Strip `enabled: false` entries before normalization — same intent as the
@@ -4589,7 +4655,7 @@ function discoverProjectMcps(opts = {}) {
4589
4655
  if (droppedStdio.length > 0) errors.push({
4590
4656
  path,
4591
4657
  source,
4592
- message: `${droppedStdio.length} stdio server${droppedStdio.length === 1 ? "" : "s"} (${droppedStdio.join(", ")}) skipped — running stdio commands from Ruler files needs “Import configurations from other agents” enabled.`,
4658
+ message: `${droppedStdio.length} stdio server${droppedStdio.length === 1 ? "" : "s"} (${droppedStdio.join(", ")}) skipped. Running stdio commands from Ruler files needs “Import configurations from other agents” enabled.`,
4593
4659
  informational: true
4594
4660
  });
4595
4661
  }
@@ -5290,7 +5356,7 @@ function importClaudeMcps(opts = {}) {
5290
5356
  if (action === "updated") {
5291
5357
  result.failed.push({
5292
5358
  name: server.name,
5293
- error: `overwrote an existing entry in ${target} — restore it from version control if unintended`
5359
+ error: `overwrote an existing entry in ${target}. Restore it from version control if unintended`
5294
5360
  });
5295
5361
  continue;
5296
5362
  }
@@ -5385,7 +5451,7 @@ function importClaudeSkills(opts = {}) {
5385
5451
  return result;
5386
5452
  }
5387
5453
  async function importFromClaudeCode(store, opts = {}) {
5388
- const summary = { notes: ["CLAUDE.md is already read natively — nothing to import.", "Claude permissions/hooks/plugins have no zidane equivalent — not imported."] };
5454
+ const summary = { notes: ["CLAUDE.md is read natively, nothing to import.", "Claude permissions/hooks/plugins have no zidane equivalent, not imported."] };
5389
5455
  if (opts.sessions !== false) summary.sessions = await importClaudeSessions(store, opts);
5390
5456
  if (opts.mcps !== false) summary.mcps = importClaudeMcps(opts);
5391
5457
  if (opts.skills !== false) summary.skills = importClaudeSkills(opts);
@@ -5531,6 +5597,115 @@ function useCompletion(input, providers, options = {}) {
5531
5597
  ]);
5532
5598
  }
5533
5599
  //#endregion
5600
+ //#region src/chat/completion-artifacts.ts
5601
+ const ARTIFACTS_COMPLETION_PROVIDER_ID = "artifacts";
5602
+ const DEFAULT_RESULT_LIMIT = 30;
5603
+ /** Kind → short query aliases so `#pr` and `#branch` hit without typing the label. */
5604
+ const KIND_ALIASES = {
5605
+ pull_request: [
5606
+ "pr",
5607
+ "pull",
5608
+ "mr"
5609
+ ],
5610
+ branch: ["branch", "br"],
5611
+ commit: ["commit", "sha"],
5612
+ file: ["file", "path"]
5613
+ };
5614
+ function locatorFor(entry) {
5615
+ return entry.row.href ?? entry.artifact.uri;
5616
+ }
5617
+ function haystack(entry) {
5618
+ const aliases = KIND_ALIASES[entry.artifact.kind] ?? [entry.artifact.kind];
5619
+ return [
5620
+ entry.row.title,
5621
+ entry.row.subtitle ?? "",
5622
+ entry.artifact.label,
5623
+ entry.kindLabel,
5624
+ ...aliases
5625
+ ].join(" ");
5626
+ }
5627
+ function descriptionFor(entry) {
5628
+ const bits = [entry.kindLabel];
5629
+ if (entry.row.status) bits.push(entry.row.status);
5630
+ bits.push(ageString(entry.artifact.updatedAt));
5631
+ const loc = locatorFor(entry);
5632
+ if (loc !== entry.row.title) bits.push(loc);
5633
+ return bits.join(" · ");
5634
+ }
5635
+ function scoreArtifacts(catalog, query, limit = DEFAULT_RESULT_LIMIT) {
5636
+ const q = query.trim().toLowerCase();
5637
+ const fuzzy = q.length > 0 ? new Set(new Fzf(catalog, {
5638
+ selector: haystack,
5639
+ casing: "case-insensitive"
5640
+ }).find(q).map((r) => r.item)) : null;
5641
+ const scored = [];
5642
+ for (const entry of catalog) {
5643
+ if (q.length === 0) {
5644
+ scored.push({
5645
+ entry,
5646
+ rank: 5
5647
+ });
5648
+ continue;
5649
+ }
5650
+ const title = entry.row.title.toLowerCase();
5651
+ const aliases = (KIND_ALIASES[entry.artifact.kind] ?? [entry.artifact.kind]).map((a) => a.toLowerCase());
5652
+ const kindLabel = entry.kindLabel.toLowerCase();
5653
+ if (aliases.some((a) => a === q || a.startsWith(q)) || kindLabel.startsWith(q)) {
5654
+ scored.push({
5655
+ entry,
5656
+ rank: 0
5657
+ });
5658
+ continue;
5659
+ }
5660
+ if (title.startsWith(q)) {
5661
+ scored.push({
5662
+ entry,
5663
+ rank: 1
5664
+ });
5665
+ continue;
5666
+ }
5667
+ if (title.includes(q) || locatorFor(entry).toLowerCase().includes(q)) {
5668
+ scored.push({
5669
+ entry,
5670
+ rank: 2
5671
+ });
5672
+ continue;
5673
+ }
5674
+ if (fuzzy?.has(entry)) scored.push({
5675
+ entry,
5676
+ rank: 4
5677
+ });
5678
+ }
5679
+ scored.sort((a, b) => a.rank - b.rank || b.entry.artifact.updatedAt - a.entry.artifact.updatedAt);
5680
+ return scored.slice(0, limit).map(({ entry }) => {
5681
+ const locator = locatorFor(entry);
5682
+ return {
5683
+ id: `artifact:${entry.artifact.id}`,
5684
+ label: entry.row.title,
5685
+ description: descriptionFor(entry),
5686
+ insertText: `${locator} `,
5687
+ data: {
5688
+ entry,
5689
+ locator
5690
+ }
5691
+ };
5692
+ });
5693
+ }
5694
+ function createArtifactsCompletionProvider(opts) {
5695
+ const limit = opts.limit ?? DEFAULT_RESULT_LIMIT;
5696
+ return {
5697
+ id: ARTIFACTS_COMPLETION_PROVIDER_ID,
5698
+ trigger: "#",
5699
+ label: "Artifacts",
5700
+ suggest(query) {
5701
+ const current = opts.getCatalog();
5702
+ if (current.length > 0 || !opts.ensureCatalog) return scoreArtifacts(current, query, limit);
5703
+ return opts.ensureCatalog().then((loaded) => scoreArtifacts(loaded, query, limit));
5704
+ },
5705
+ parseReferences: () => []
5706
+ };
5707
+ }
5708
+ //#endregion
5534
5709
  //#region src/chat/user-config.ts
5535
5710
  /**
5536
5711
  * User-level config at `~/.{prefix}/config.json`. Holds global flags
@@ -7372,13 +7547,13 @@ const SETTINGS_TOGGLES = [
7372
7547
  key: "orchestration",
7373
7548
  requires: "useDaemon",
7374
7549
  label: "Main session (orchestration)",
7375
- description: "pin a \"Main\" session that can create sessions in specific directories, steer them, and read their results — and that receives their outcomes as events in its own history without polling. Workers are ordinary sessions with a parent pointer, so every window sees them. Jump back to the main from anywhere with the `openMainSession` chord. Requires the daemon runtime: the main is served by the shared host, and turning the daemon off turns this off"
7550
+ description: "pin a Main session that creates, steers and reads other sessions and receives their outcomes in its own history. Requires the daemon runtime"
7376
7551
  },
7377
7552
  {
7378
7553
  category: "agent",
7379
7554
  key: "useDaemon",
7380
7555
  label: "Use daemon runtime (experimental)",
7381
- description: "execute sessions in a shared daemon — runs survive window close, and every TUI/GUI window on the same session shares the live stream, prompt drafts, attachments, queue, search, and settings. `/` and `!` typed in a TUI still execute in that window (their output converges to the others). Takes effect on the next session activation"
7556
+ description: "run sessions in a shared daemon: runs survive window close and every TUI/GUI window shares the live stream, drafts, queue and settings. Takes effect on the next session activation"
7382
7557
  },
7383
7558
  {
7384
7559
  category: "agent",
@@ -8894,7 +9069,7 @@ function createBuiltinCommands(opts) {
8894
9069
  description: "List the available / commands",
8895
9070
  run: (ctx) => {
8896
9071
  const all = [...opts.getCommands()].sort((a, b) => a.name.localeCompare(b.name));
8897
- const body = all.length === 0 ? "_No commands are registered._" : all.map((c) => `- **/${c.name}** — ${c.description}`).join("\n");
9072
+ const body = all.length === 0 ? "_No commands are registered._" : all.map((c) => `- **/${c.name}**: ${c.description}`).join("\n");
8898
9073
  ctx.emit({ text: `### Commands\n\n${body}` });
8899
9074
  }
8900
9075
  }];
@@ -8909,7 +9084,26 @@ function createBuiltinCommands(opts) {
8909
9084
  detail: { label: "reloading extensions…" }
8910
9085
  });
8911
9086
  const { active, inactive } = await reload();
8912
- ctx.emit({ text: `Reloaded — **${active}** active${inactive > 0 ? `, ${inactive} inactive` : ""}. Agent-side contributions apply on the next run.` });
9087
+ ctx.emit({ text: `Reloaded: **${active}** active${inactive > 0 ? `, ${inactive} inactive` : ""}. Agent tools apply on the next run.` });
9088
+ }
9089
+ });
9090
+ }
9091
+ if (opts.artifacts) {
9092
+ const artifacts = opts.artifacts;
9093
+ commands.push({
9094
+ name: "artifacts",
9095
+ description: "List what this session produced (pull requests, branches, commits, files). `/artifacts project` covers every session in this project",
9096
+ completeArgs: (prefix) => ["project", "session"].filter((v) => v.startsWith(prefix.trim())).map((value) => ({ value })),
9097
+ run: async (ctx) => {
9098
+ const scope = ctx.argv[0]?.toLowerCase() === "project" ? "project" : "session";
9099
+ if (artifacts.open?.(scope)) return;
9100
+ const rows = await artifacts.list(scope);
9101
+ ctx.emit({ text: formatArtifactsMarkdown(rows, {
9102
+ scope,
9103
+ ...artifacts.projectRoot ? { projectRoot: artifacts.projectRoot() } : {},
9104
+ ...artifacts.registry ? { registry: artifacts.registry() } : {},
9105
+ ...artifacts.sessionTitle ? { sessionTitle: artifacts.sessionTitle } : {}
9106
+ }) });
8913
9107
  }
8914
9108
  });
8915
9109
  }
@@ -9063,7 +9257,15 @@ function sessionHostRuntime(run, env, deps) {
9063
9257
  handle
9064
9258
  };
9065
9259
  },
9066
- workspaceAvailable: () => true
9260
+ workspaceAvailable: () => true,
9261
+ artifacts: () => {
9262
+ const session = run.agent.session;
9263
+ return {
9264
+ store: env.store,
9265
+ ...session ? { sessionId: session.id } : {},
9266
+ ...session?.projectRoot ? { projectRoot: session.projectRoot } : {}
9267
+ };
9268
+ }
9067
9269
  };
9068
9270
  }
9069
9271
  function isThinkingLevel$2(value) {
@@ -9106,9 +9308,23 @@ function createCommandModule(deps) {
9106
9308
  * a window attached to the daemon and one running locally resolve the same
9107
9309
  * name to the same command.
9108
9310
  */
9109
- function mergedCommands(extensionCommands) {
9311
+ function mergedCommands(extensionCommands, scope) {
9110
9312
  const merged = [];
9111
- const builtins = createBuiltinCommands({ getCommands: () => merged });
9313
+ const builtins = createBuiltinCommands({
9314
+ getCommands: () => merged,
9315
+ artifacts: {
9316
+ list: async (mode) => {
9317
+ if (!env.store.listArtifacts || !scope) return [];
9318
+ if (mode === "project") {
9319
+ const root = scope.session.projectRoot;
9320
+ return root ? env.store.listArtifacts({ projectRoot: root }) : [];
9321
+ }
9322
+ return env.store.listArtifacts({ sessionId: scope.session.id });
9323
+ },
9324
+ projectRoot: () => scope?.session.projectRoot,
9325
+ registry: () => scope?.registry
9326
+ }
9327
+ });
9112
9328
  const seen = /* @__PURE__ */ new Set();
9113
9329
  for (const command of [...extensionCommands, ...builtins]) {
9114
9330
  const key = command.name.toLowerCase();
@@ -9200,12 +9416,15 @@ function createCommandModule(deps) {
9200
9416
  if (!prompt.startsWith("/")) return { ran: false };
9201
9417
  const run = await ensureAgent(opts.sessionId);
9202
9418
  const runtimeConfig = await env.runtimeConfig(run.cwd);
9203
- const commands = mergedCommands(runtimeConfig.extensions.commands);
9419
+ const commands = mergedCommands(runtimeConfig.extensions.commands, run.agent.session ? {
9420
+ session: run.agent.session,
9421
+ registry: runtimeConfig.extensions
9422
+ } : void 0);
9204
9423
  const invocation = parseCommandInvocation(prompt, commands);
9205
9424
  if (!invocation) return { ran: false };
9206
9425
  const command = commands.find((c) => c.name === invocation.name);
9207
9426
  if (!command) return { ran: false };
9208
- if (run.agent.isRunning) throw new Error(`/${invocation.name}: a run is already in progress — wait for it to finish.`);
9427
+ if (run.agent.isRunning) throw new Error(`/${invocation.name}: a run is in progress. Wait for it to finish.`);
9209
9428
  const session = run.agent.session;
9210
9429
  if (!session) throw new Error(`/${invocation.name}: session is not available`);
9211
9430
  const sessionId = opts.sessionId;
@@ -9811,20 +10030,24 @@ function createOrchestration(deps) {
9811
10030
  return main;
9812
10031
  }
9813
10032
  /**
10033
+ * Wake preference for the NEXT run of a session, written by the main's
10034
+ * `create` / `send` and CONSUMED when that run ends (see the `run:end`
10035
+ * branch). One assignment, one wake: left in place it would outlive the run
10036
+ * it described, so a session the human also drives would keep waking the
10037
+ * main for turns the main never asked for.
10038
+ *
10039
+ * In-memory on purpose: it describes the main's current assignment, which is
10040
+ * meaningless after a daemon restart (the run it referred to is gone), and
10041
+ * writing it into a live session's metadata would race the agent's saves.
10042
+ * Absent = the default rule: own workers wake, other sessions only report.
10043
+ */
10044
+ const wakePolicy = /* @__PURE__ */ new Map();
10045
+ /**
9814
10046
  * Where a session's events go. EVERY non-main session reports to the main —
9815
10047
  * the main is an observer of the whole store, not only of the sessions it
9816
10048
  * created — so a chat the human runs elsewhere still shows up in the main's
9817
10049
  * history. Returns `null` for the main itself and for unknown ids.
9818
10050
  */
9819
- /**
9820
- * Per-session wake preference, set by the main's last `create` / `send` and
9821
- * kept until the next one overrides it. In-memory on purpose: it describes
9822
- * the main's CURRENT assignment ("I am / am not waiting on this"), which is
9823
- * meaningless after a daemon restart (the run it referred to is gone), and
9824
- * writing it into a live session's metadata would race the agent's saves.
9825
- * Absent = the default rule: own workers wake, other sessions do not.
9826
- */
9827
- const wakePolicy = /* @__PURE__ */ new Map();
9828
10051
  async function reportsTo(sessionId) {
9829
10052
  const main = await mainId();
9830
10053
  if (!main || sessionId === main) return null;
@@ -10185,6 +10408,7 @@ function createOrchestration(deps) {
10185
10408
  }
10186
10409
  const target = await reportsTo(signal.sessionId);
10187
10410
  if (!target) return;
10411
+ wakePolicy.delete(signal.sessionId);
10188
10412
  const summary = await read(signal.sessionId);
10189
10413
  const now = Date.now();
10190
10414
  const data = deps.liveSession(signal.sessionId) ?? await deps.store.load(signal.sessionId);
@@ -10884,7 +11108,7 @@ function createChatHost(env) {
10884
11108
  if (!profile) throw new Error("No agent profiles are registered.");
10885
11109
  const pluginCatalog = await pluginsForCwd(cwd, runtimeConfig.prefix, runtimeConfig.pluginScanPaths ?? []);
10886
11110
  const liveExtensions = filterRegistryPlugins(runtimeConfig.extensions, settings.enabledPlugins, new Set(pluginCatalog.map((p) => p.name)));
10887
- const composedPreset = composeExtensionPreset(liveExtensions, profile.preset);
11111
+ const composedPreset = composeExtensionPreset(liveExtensions, composePresets(artifacts_default, profile.preset));
10888
11112
  const session = await loadSession(store, sessionId) ?? await createSession({
10889
11113
  id: sessionId,
10890
11114
  agentId: profile.id,
@@ -11280,6 +11504,20 @@ function createChatHost(env) {
11280
11504
  agent
11281
11505
  });
11282
11506
  });
11507
+ agent.hooks.hook("artifact:recorded", (ctx) => {
11508
+ broadcast({
11509
+ kind: "artifact:recorded",
11510
+ sessionId,
11511
+ artifact: ctx.artifact
11512
+ });
11513
+ });
11514
+ agent.hooks.hook("child:artifact:recorded", (ctx) => {
11515
+ broadcast({
11516
+ kind: "artifact:recorded",
11517
+ sessionId,
11518
+ artifact: ctx.artifact
11519
+ });
11520
+ });
11283
11521
  agent.hooks.hook("child:tool:after", (ctx) => {
11284
11522
  dropWork(ctx.callId);
11285
11523
  const event = {
@@ -11808,7 +12046,7 @@ function createChatHost(env) {
11808
12046
  sessionId,
11809
12047
  event: {
11810
12048
  kind: "info",
11811
- text: `⚠ model fallback: ${ctx.from.provider}/${ctx.from.model} failed (${reason}) — continuing on ${ctx.to.provider}/${ctx.to.model}`
12049
+ text: `model fallback: ${ctx.from.provider}/${ctx.from.model} failed (${reason}), continuing on ${ctx.to.provider}/${ctx.to.model}`
11812
12050
  }
11813
12051
  });
11814
12052
  });
@@ -11894,6 +12132,7 @@ function createChatHost(env) {
11894
12132
  if (!opts.wake) suppressedWake.delete(opts.sessionId);
11895
12133
  const commandResult = await commands.runSlashCommand(opts);
11896
12134
  if (commandResult.ran) return { runId: commandResult.runId ?? randomUUID() };
12135
+ if (opts.asCommand !== void 0) throw new Error(`unknown command: /${opts.asCommand}. This session's extensions do not provide it (different working directory, or the extension is not installed for it).`);
11897
12136
  if (!opts.wake) broadcast({
11898
12137
  kind: "event",
11899
12138
  sessionId: opts.sessionId,
@@ -12141,7 +12380,8 @@ function createChatHost(env) {
12141
12380
  sessionId,
12142
12381
  prompt: next.text,
12143
12382
  ...next.activatedSkills?.length ? { activatedSkills: next.activatedSkills } : {},
12144
- ...next.attachments?.length ? { attachments: next.attachments } : {}
12383
+ ...next.attachments?.length ? { attachments: next.attachments } : {},
12384
+ ...next.asCommand ? { asCommand: next.asCommand } : {}
12145
12385
  }, { ownMarkerExempt: false }).then(() => {
12146
12386
  const live = queues.get(sessionId);
12147
12387
  const index = live?.findIndex((item) => item.id === next.id) ?? -1;
@@ -12235,14 +12475,15 @@ function createChatHost(env) {
12235
12475
  getLiveSession(sessionId) {
12236
12476
  return active.get(sessionId)?.agent.session ?? null;
12237
12477
  },
12238
- async queueAdd(sessionId, text, activatedSkills, attachments) {
12478
+ async queueAdd(sessionId, text, activatedSkills, attachments, asCommand) {
12239
12479
  const enqueue = () => {
12240
12480
  const queue = queues.get(sessionId) ?? [];
12241
12481
  queue.push({
12242
12482
  id: randomUUID(),
12243
12483
  text,
12244
12484
  ...activatedSkills?.length ? { activatedSkills } : {},
12245
- ...attachments?.length ? { attachments } : {}
12485
+ ...attachments?.length ? { attachments } : {},
12486
+ ...asCommand ? { asCommand } : {}
12246
12487
  });
12247
12488
  queues.set(sessionId, queue);
12248
12489
  broadcastQueue(sessionId);
@@ -12254,7 +12495,8 @@ function createChatHost(env) {
12254
12495
  sessionId,
12255
12496
  prompt: text,
12256
12497
  ...activatedSkills?.length ? { activatedSkills } : {},
12257
- ...attachments?.length ? { attachments } : {}
12498
+ ...attachments?.length ? { attachments } : {},
12499
+ ...asCommand ? { asCommand } : {}
12258
12500
  });
12259
12501
  return { delivered: "sent" };
12260
12502
  } catch (err) {
@@ -13601,7 +13843,7 @@ function oauthUsesManualCodePaste(descriptor) {
13601
13843
  * Throws when the descriptor has no `oauthProvider` configured.
13602
13844
  */
13603
13845
  async function runOAuthLogin(descriptor, options) {
13604
- if (!descriptor.oauthProvider) throw new Error(`OAuth not supported for ${descriptor.label} (${descriptor.key}) — use an API key instead.`);
13846
+ if (!descriptor.oauthProvider) throw new Error(`OAuth not supported for ${descriptor.label} (${descriptor.key}). Use an API key instead.`);
13605
13847
  let deviceFlowActive = false;
13606
13848
  const callbacks = {
13607
13849
  onAuth: (info) => {
@@ -13616,7 +13858,7 @@ async function runOAuthLogin(descriptor, options) {
13616
13858
  return;
13617
13859
  }
13618
13860
  options.onUrl(info.verificationUri, `Enter code ${info.userCode} to authorize.`);
13619
- options.onProgress?.(`Device code: ${info.userCode} — open ${info.verificationUri}`);
13861
+ options.onProgress?.(`Device code: ${info.userCode}. Open ${info.verificationUri}`);
13620
13862
  tryOpenBrowser(info.verificationUri);
13621
13863
  },
13622
13864
  onPrompt: async (prompt) => {
@@ -13719,14 +13961,14 @@ function normalizeRedirectPaste(pasted, authUrl) {
13719
13961
  if (!callback) throw new Error("That doesn't look like a URL. Paste the full address your browser tried to reach (starting with http://127.0.0.1).");
13720
13962
  if (trimmed.startsWith("/")) {
13721
13963
  const merged = new URL(trimmed, callback);
13722
- if (!merged.searchParams.has("code") && !merged.searchParams.has("error")) throw new Error("That path has no \"code\" parameter — paste the full address from your browser's URL bar.");
13964
+ if (!merged.searchParams.has("code") && !merged.searchParams.has("error")) throw new Error("That path has no \"code\" parameter. Paste the full address from your browser's URL bar.");
13723
13965
  return merged.toString();
13724
13966
  }
13725
13967
  const target = new URL(callback.toString());
13726
13968
  const query = trimmed.startsWith("?") ? trimmed.slice(1) : trimmed;
13727
13969
  if (!/^[^=\s]+=*$/.test(query) && query.includes("=")) {
13728
13970
  const params = new URLSearchParams(query);
13729
- if (!params.has("code") && !params.has("error")) throw new Error("That fragment has no \"code\" parameter — paste the full address from your browser, or just the code itself.");
13971
+ if (!params.has("code") && !params.has("error")) throw new Error("That fragment has no \"code\" parameter. Paste the full address from your browser, or just the code.");
13730
13972
  for (const [key, value] of params) target.searchParams.set(key, value);
13731
13973
  return target.toString();
13732
13974
  }
@@ -13771,7 +14013,7 @@ async function fetchOAuthRedirect(pasted, options = {}) {
13771
14013
  try {
13772
14014
  response = await fetch(url.toString(), { signal: ac.signal });
13773
14015
  } catch (err) {
13774
- if (err.name === "AbortError") throw new Error("No response from the local callback server — was the login already cancelled?");
14016
+ if (err.name === "AbortError") throw new Error("No response from the local callback server. Was the login cancelled?");
13775
14017
  throw new Error(`Could not reach the local callback server: ${err.message}`);
13776
14018
  } finally {
13777
14019
  clearTimeout(timer);
@@ -15185,7 +15427,7 @@ function normalizePrefix(prefix) {
15185
15427
  function exportFilename(sessionId, format) {
15186
15428
  const ext = format === "json" ? "json" : "md";
15187
15429
  const cleaned = sessionId.trim();
15188
- if (!cleaned || cleaned.includes("/") || cleaned.includes("\\") || cleaned === "." || cleaned === "..") throw new RangeError(`Refusing to export session — invalid id "${sessionId}"`);
15430
+ if (!cleaned || cleaned.includes("/") || cleaned.includes("\\") || cleaned === "." || cleaned === "..") throw new RangeError(`Cannot export session: invalid id "${sessionId}"`);
15189
15431
  return `${cleaned}.${ext}`;
15190
15432
  }
15191
15433
  function aggregateUsage(runs) {
@@ -16225,6 +16467,6 @@ function createApprovalHub(options) {
16225
16467
  };
16226
16468
  }
16227
16469
  //#endregion
16228
- export { supportsOAuth as $, buildUpdateHint as $n, buildPlanSystem as $r, runCompaction as $t, useSafeModeQueue as A, createDiscoverySlot as An, applyTodosSnapshot as Ar, makeRequestInteraction as At, USAGE_CACHE_TTL_MS as B, hasClaudeCodeSetup as Bn, todoProgressLabel as Br, readFileSafe as Bt, resolveSessionExportTarget as C, GRUVBOX_LIGHT as Cn, singleAgentRegistry as Cr, InteractionsProvider as Ct, scopeCwd as D, CATPPUCCIN_MOCHA as Dn, TODOWRITE_TOOL as Dr, createInteractionTools as Dt, resolveSessionCwd as E, CATPPUCCIN_MACCHIATO as En, TODOS_METADATA_KEY as Er, createAutomaticInteractionResponse as Et, matchesSafelistEntry as F, useConfig as Fn, pickActiveRunId as Fr, STALE_RUN_MARKER_MS as Ft, usageChecksOptedOut as G, buildMcpServers as Gn, IDENTITY_PREFIX as Gr, modelChainMetadata as Gt, fetchAllProviderUsage as H, mcpsWritePath as Hn, ACTIONS_WITH_CARE_DOCTRINE as Hr, serializePreview as Ht, projectsFilePath as I, resolveConfig as In, pruneTodosByRun as Ir, createChatHost as It, fetchOAuthRedirect as J, discoverProjectMcps as Jn, PLAN_MODE_DOCTRINE as Jr, buildPluginContributions as Jt, usageSourceFor as K, dedupMcpServersByName as Kn, INTERACTION_GUIDANCE as Kr, sessionModelFallbacks as Kt, readProjects as L, resolveStoragePaths as Ln, sanitizeTodoItems as Lr, toTodosSnapshot as Lt, addToSafelist as M, useDiscovery as Mn, getArchivedTodosForRun as Mr, serializeInteractionResponse as Mt, getSafelist as N, useDiscoveryOptional as Nn, getTodosForRun as Nr, useInteractionsActions as Nt, SafeModeProvider as O, parseEditorCommand as On, TODO_STATUS_GLYPHS as Or, isInteractionTool as Ot, isOnSafelist as P, ConfigProvider as Pn, isTodoTool as Pr, useInteractionsQueue as Pt, runOAuthLogin as Q, bootTick as Qn, buildBuildSystem as Qr, EditOutcomeLedger as Qt, suggestSafelistEntries as R, useCompletion as Rn, selectActiveTodos as Rr, createInteractionHub as Rt, renderSession as S, usageByModel as Si, GRUVBOX_DARK as Sn, resolveAgentId as Sr, HOST_INTERACTION_ID_PREFIX as St, folderlessCwd as T, CATPPUCCIN_LATTE as Tn, TODOREAD_TOOL as Tr, buildResumedToolResultsTurn as Tt, fetchProviderUsage as U, removeMcpServer as Un, COMMUNICATION_DOCTRINE as Ur, createBuiltinCommands as Ut, clearProviderUsageCache as V, importFromClaudeCode as Vn, useActiveTodos as Vr, resolveCwdPath as Vt, providerUsageSupported as W, upsertMcpServer as Wn, DOING_TASKS_DOCTRINE as Wr, createMainSession as Wt, redirectUriFromAuthUrl as X, tryOpenBrowser as Xn, SUBAGENT_GUIDANCE as Xr, parsePluginScanPathEnv as Xt, normalizeRedirectPaste as Y, parseMcpsFile as Yn, PLAN_MODE_DOCTRINE_NO_PROMPTS as Yr, discoverProjectPlugins as Yt, oauthUsesManualCodePaste as Z, bootProfileEnabled as Zn, TOKEN_DISCIPLINE_DOCTRINE as Zr, attachMcpWarnLog as Zt, buildSpawnEndEvent as _, sumRunCosts as _i, BUILTIN_THEMES as _n, DEFAULT_AGENT_ID as _r, useMcpAuthState as _t, renderActiveTodoAnchor as a, createStateStore as ai, shortChord as an, compareSemver as ar, subscribeMcpToolsCache as at, defaultSkillScanPaths as b, toolResultText as bi, resolveTheme as bn, PLAN_AGENT as br, ASK_USER_TOOL as bt, useSelectStyle as c, getSessionMeta as ci, DEFAULT_SETTINGS as cn, parseSemver as cr, useMcpToolToggleSet as ct, useTheme as d, loadState as di, SETTINGS_INPUTS as dn, resolvePlatformPackage as dr, parentServerName as dt, envSection as ei, EMPTY_HINTS as en, useUpdateCheck as er, clearMcpToolsCache as et, discoverSystemMd as f, marginTopFor as fi, SETTINGS_TOGGLES as fn, chatAutoCompactBehavior as fr, createFileMcpCredentialStore as ft, useStreamBuffer as g, stripSpawnTokensLine as gi, useSettings as gn, BUILTIN_AGENTS as gr, useMcpAuthDispatch as gt, userSystemMdPath as h, serverToolResultSummary as hi, enforceSettingsInvariants as hn, BUILD_AGENT as hr, McpAuthProvider as ht, createActiveTodoAnchorHooks as i, compactSummaryEvent as ii, buildHints as in, checkTarballAvailable as ir, saveMcpToolsCache as it, IMPLICITLY_SAFE_TOOLS as j, DiscoveryProvider as jn, createTodoTools as jr, pendingInteractionsFromTurns as jt, useSafeModeActions as k, quoteForShell as kn, TODO_WRITE_COUNTS_METADATA_KEY as kr, isModelInteraction as kt, useSurfaces as l, lastContextSizeFromTurns as li, SETTINGS_CATEGORIES as ln, performInPlaceSelfUpdate as lr, buildVisibleMcpRows as lt, userScopeOverridesLoad as m, saveState as mi, clampFps as mn, renderAgentsMdBlock as mr, patchMcpCredential as mt, createMemoryApprovalsStore as n, createChatTurnsReadTool as ni, hintsLength as nn, findInstalledCompanion as nr, mcpToolsCachePath as nt, ThemeProvider as o, deriveSessionTitle as oi, listProjectFiles as on, detectLibc as or, buildToolToggle as ot, renderSystemMdSeed as p, noticeTurnContent as pi, SettingsProvider as pn, discoverAgentsMd as pr, mcpCredentialsPath as pt, formatPathForCwd as q, defaultMcpsConfigPaths as qn, INTERACTION_GUIDANCE_NO_PROMPTS as qr, runEndNotice as qt, computeTurnAnchors as r, DEFAULT_SESSION_TITLE as ri, truncateTrailing as rn, checkForUpdate as rr, refreshMcpToolsCatalog as rt, useColors as s, eventsFromTurns as si, useEnabledToggleSet as sn, detectPackageManager as sr, useMcpToolToggleMap as st, createApprovalHub as t, chatReferenceTokensForPrompt as ti, clipHintsToWidth as tn, runUpdateCommand as tr, loadMcpToolsCache as tt, useSyntaxStyles as u, listSessionMeta as ui, SETTINGS_CHOICES as un, performSelfUpdate as ur, indexOfServerRow as ut, buildSpawnStartEvent as v, titleFromTurns as vi, DEFAULT_THEME as vn, DEFAULT_BUDGET_EXCLUDE_TOOLS as vr, getMcpAuthStatus as vt, writeSessionExport as w, CATPPUCCIN_FRAPPE as wn, DEFAULT_MAX_TODO_ITEMS as wr, PRESENT_PLAN_TOOL as wt, discoverProjectSkills as x, updateToolEventOutcomes as xi, VAPORWAVE_THEME as xn, accentColor as xr, AUTOMATIC_INTERACTION_INSTRUCTION as xt, buildSkillsConfig as y, toolCallPreview as yi, resolveChipColor as yn, DEFAULT_PERSIST_EXCLUDE_TOOLS as yr, reduceMcpAuth as yt, writeProjects as z, countClaudeSessionFiles as zn, setTodosForRun as zr, extractEditPayloadForGate as zt };
16470
+ export { supportsOAuth as $, tryOpenBrowser as $n, INTERACTION_GUIDANCE_NO_PROMPTS as $r, runCompaction as $t, useSafeModeQueue as A, createDiscoverySlot as An, DEFAULT_MAX_TODO_ITEMS as Ar, makeRequestInteraction as At, USAGE_CACHE_TTL_MS as B, scoreArtifacts as Bn, isTodoTool as Br, readFileSafe as Bt, resolveSessionExportTarget as C, sumRunCosts as Ci, GRUVBOX_LIGHT as Cn, DEFAULT_AGENT_ID as Cr, InteractionsProvider as Ct, scopeCwd as D, updateToolEventOutcomes as Di, CATPPUCCIN_MOCHA as Dn, accentColor as Dr, createInteractionTools as Dt, resolveSessionCwd as E, toolResultText as Ei, CATPPUCCIN_MACCHIATO as En, PLAN_AGENT as Er, createAutomaticInteractionResponse as Et, matchesSafelistEntry as F, useConfig as Fn, TODO_WRITE_COUNTS_METADATA_KEY as Fr, STALE_RUN_MARKER_MS as Ft, usageChecksOptedOut as G, mcpsWritePath as Gn, setTodosForRun as Gr, modelChainMetadata as Gt, fetchAllProviderUsage as H, countClaudeSessionFiles as Hn, pruneTodosByRun as Hr, serializePreview as Ht, projectsFilePath as I, resolveConfig as In, applyTodosSnapshot as Ir, createChatHost as It, fetchOAuthRedirect as J, buildMcpServers as Jn, ACTIONS_WITH_CARE_DOCTRINE as Jr, buildPluginContributions as Jt, usageSourceFor as K, removeMcpServer as Kn, todoProgressLabel as Kr, sessionModelFallbacks as Kt, readProjects as L, resolveStoragePaths as Ln, createTodoTools as Lr, toTodosSnapshot as Lt, addToSafelist as M, useDiscovery as Mn, TODOS_METADATA_KEY as Mr, serializeInteractionResponse as Mt, getSafelist as N, useDiscoveryOptional as Nn, TODOWRITE_TOOL as Nr, useInteractionsActions as Nt, SafeModeProvider as O, usageByModel as Oi, parseEditorCommand as On, resolveAgentId as Or, isInteractionTool as Ot, isOnSafelist as P, ConfigProvider as Pn, TODO_STATUS_GLYPHS as Pr, useInteractionsQueue as Pt, runOAuthLogin as Q, parseMcpsFile as Qn, INTERACTION_GUIDANCE as Qr, EditOutcomeLedger as Qt, suggestSafelistEntries as R, ARTIFACTS_COMPLETION_PROVIDER_ID as Rn, getArchivedTodosForRun as Rr, createInteractionHub as Rt, renderSession as S, stripSpawnTokensLine as Si, GRUVBOX_DARK as Sn, BUILTIN_AGENTS as Sr, HOST_INTERACTION_ID_PREFIX as St, folderlessCwd as T, toolCallPreview as Ti, CATPPUCCIN_LATTE as Tn, DEFAULT_PERSIST_EXCLUDE_TOOLS as Tr, buildResumedToolResultsTurn as Tt, fetchProviderUsage as U, hasClaudeCodeSetup as Un, sanitizeTodoItems as Ur, createBuiltinCommands as Ut, clearProviderUsageCache as V, useCompletion as Vn, pickActiveRunId as Vr, resolveCwdPath as Vt, providerUsageSupported as W, importFromClaudeCode as Wn, selectActiveTodos as Wr, createMainSession as Wt, redirectUriFromAuthUrl as X, defaultMcpsConfigPaths as Xn, DOING_TASKS_DOCTRINE as Xr, parsePluginScanPathEnv as Xt, normalizeRedirectPaste as Y, dedupMcpServersByName as Yn, COMMUNICATION_DOCTRINE as Yr, discoverProjectPlugins as Yt, oauthUsesManualCodePaste as Z, discoverProjectMcps as Zn, IDENTITY_PREFIX as Zr, attachMcpWarnLog as Zt, buildSpawnEndEvent as _, loadState as _i, BUILTIN_THEMES as _n, groupArtifacts as _r, useMcpAuthState as _t, renderActiveTodoAnchor as a, buildPlanSystem as ai, shortChord as an, findInstalledCompanion as ar, subscribeMcpToolsCache as at, defaultSkillScanPaths as b, saveState as bi, resolveTheme as bn, renderAgentsMdBlock as br, ASK_USER_TOOL as bt, useSelectStyle as c, createChatTurnsReadTool as ci, DEFAULT_SETTINGS as cn, compareSemver as cr, useMcpToolToggleSet as ct, useTheme as d, createStateStore as di, SETTINGS_INPUTS as dn, parseSemver as dr, parentServerName as dt, PLAN_MODE_DOCTRINE as ei, EMPTY_HINTS as en, bootProfileEnabled as er, clearMcpToolsCache as et, discoverSystemMd as f, deriveSessionTitle as fi, SETTINGS_TOGGLES as fn, performInPlaceSelfUpdate as fr, createFileMcpCredentialStore as ft, useStreamBuffer as g, listSessionMeta as gi, useSettings as gn, formatArtifactsMarkdown as gr, useMcpAuthDispatch as gt, userSystemMdPath as h, lastContextSizeFromTurns as hi, enforceSettingsInvariants as hn, chatAutoCompactBehavior as hr, McpAuthProvider as ht, createActiveTodoAnchorHooks as i, buildBuildSystem as ii, buildHints as in, runUpdateCommand as ir, saveMcpToolsCache as it, IMPLICITLY_SAFE_TOOLS as j, DiscoveryProvider as jn, TODOREAD_TOOL as jr, pendingInteractionsFromTurns as jt, useSafeModeActions as k, quoteForShell as kn, singleAgentRegistry as kr, isModelInteraction as kt, useSurfaces as l, DEFAULT_SESSION_TITLE as li, SETTINGS_CATEGORIES as ln, detectLibc as lr, buildVisibleMcpRows as lt, userScopeOverridesLoad as m, getSessionMeta as mi, clampFps as mn, resolvePlatformPackage as mr, patchMcpCredential as mt, createMemoryApprovalsStore as n, SUBAGENT_GUIDANCE as ni, hintsLength as nn, buildUpdateHint as nr, mcpToolsCachePath as nt, ThemeProvider as o, envSection as oi, listProjectFiles as on, checkForUpdate as or, buildToolToggle as ot, renderSystemMdSeed as p, eventsFromTurns as pi, SettingsProvider as pn, performSelfUpdate as pr, mcpCredentialsPath as pt, formatPathForCwd as q, upsertMcpServer as qn, useActiveTodos as qr, runEndNotice as qt, computeTurnAnchors as r, TOKEN_DISCIPLINE_DOCTRINE as ri, truncateTrailing as rn, useUpdateCheck as rr, refreshMcpToolsCatalog as rt, useColors as s, chatReferenceTokensForPrompt as si, useEnabledToggleSet as sn, checkTarballAvailable as sr, useMcpToolToggleMap as st, createApprovalHub as t, PLAN_MODE_DOCTRINE_NO_PROMPTS as ti, clipHintsToWidth as tn, bootTick as tr, loadMcpToolsCache as tt, useSyntaxStyles as u, compactSummaryEvent as ui, SETTINGS_CHOICES as un, detectPackageManager as ur, indexOfServerRow as ut, buildSpawnStartEvent as v, marginTopFor as vi, DEFAULT_THEME as vn, summarizeArtifactCounts as vr, getMcpAuthStatus as vt, writeSessionExport as w, titleFromTurns as wi, CATPPUCCIN_FRAPPE as wn, DEFAULT_BUDGET_EXCLUDE_TOOLS as wr, PRESENT_PLAN_TOOL as wt, discoverProjectSkills as x, serverToolResultSummary as xi, VAPORWAVE_THEME as xn, BUILD_AGENT as xr, AUTOMATIC_INTERACTION_INSTRUCTION as xt, buildSkillsConfig as y, noticeTurnContent as yi, resolveChipColor as yn, discoverAgentsMd as yr, reduceMcpAuth as yt, writeProjects as z, createArtifactsCompletionProvider as zn, getTodosForRun as zr, extractEditPayloadForGate as zt };
16229
16471
 
16230
- //# sourceMappingURL=approvals-S100xf1d.js.map
16472
+ //# sourceMappingURL=approvals-B9aIQJRQ.js.map