kaijibot 2026.7.18-2 → 2026.7.18

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 (26) hide show
  1. package/CHANGELOG.md +0 -39
  2. package/dist/.buildstamp +1 -1
  3. package/dist/build-info.json +3 -3
  4. package/dist/bundled/session-memory/handler.js +3 -14
  5. package/dist/cli-startup-metadata.json +1 -1
  6. package/dist/control-ui/assets/{agents-Bz0dvWDM.js → agents-CQFCBbpb.js} +2 -2
  7. package/dist/control-ui/assets/{anthropic-DxvlKdKL.js → anthropic-DIhts9kx.js} +2 -2
  8. package/dist/control-ui/assets/{azure-openai-responses-DquyLqG4.js → azure-openai-responses-C8CmzcT7.js} +2 -2
  9. package/dist/control-ui/assets/{cron-BpgKjDc9.js → cron-CtU_EfFK.js} +2 -2
  10. package/dist/control-ui/assets/{dialogues-CImsVt84.js → dialogues-CUTiZ8zz.js} +2 -2
  11. package/dist/control-ui/assets/{history-B4feNm8p.js → history-BYYkqRAo.js} +2 -2
  12. package/dist/control-ui/assets/{index-Ktp1D-Lt.css → index-BHEJLbGm.css} +1 -1
  13. package/dist/control-ui/assets/{index-BZqdY-T7.js → index-BUjIN7_u.js} +5 -5
  14. package/dist/control-ui/assets/{mistral-DSycvo7P.js → mistral-Ctt8nhRu.js} +2 -2
  15. package/dist/control-ui/assets/{openai-codex-responses-BPzbKC9r.js → openai-codex-responses-DOLBCCgM.js} +2 -2
  16. package/dist/control-ui/assets/{openai-completions-B95462TV.js → openai-completions-BdCm4e6G.js} +2 -2
  17. package/dist/control-ui/assets/{openai-responses-DZhAsNFq.js → openai-responses-DxtM5FT-.js} +2 -2
  18. package/dist/control-ui/assets/{openai-responses-shared-UQnBXHlZ.js → openai-responses-shared-DxYQ-3t6.js} +2 -2
  19. package/dist/control-ui/index.html +2 -2
  20. package/dist/extensions/diffs/.kaijibot-runtime-deps-stamp.json +1 -1
  21. package/dist/extensions/feishu/.kaijibot-runtime-deps-stamp.json +1 -1
  22. package/dist/extensions/kindle-portal/.kaijibot-runtime-deps-stamp.json +1 -1
  23. package/dist/extensions/memory-core/index.js +1 -1
  24. package/dist/extensions/webhooks/.kaijibot-runtime-deps-stamp.json +1 -1
  25. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  26. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -13,39 +13,8 @@ Repo: https://github.com/Kaiji-Z/kaijibot · Backup: https://gitee.com/kaiji1126
13
13
 
14
14
  ## 2026.7.x — Cognitive identity system & live model discovery
15
15
 
16
- ### ⚠️ Breaking (2026.7.18-1)
17
-
18
- - **Memory Flush default flipped from ON to OFF.** The session-memory hook now reads the
19
- full transcript at `compaction:after` (was capped at 500 messages), giving it complete
20
- pre-compaction context and making the parallel Memory Flush pipeline largely redundant.
21
- To re-enable agent-curated pre-compaction memory extraction, set
22
- `agents.defaults.compaction.memoryFlush.enabled: true` in `~/.kaijibot/kaijiBot.json`
23
- or toggle it on in **Settings → Quick Settings → 压缩前记忆冲刷**.
24
- Most users do not need to re-enable it — the hook covers the same ground.
25
-
26
16
  ### Highlights
27
17
 
28
- - **Memory system: unified on session-memory hook as the canonical writer.** Two parallel
29
- fixes shipped together: (1) hook at `compaction:after` now reads the full session file
30
- (verified: compaction only appends a summary entry, never removes messages, so pre-compaction
31
- content is preserved in the file); previously it was capped at 500 messages and missed early
32
- pre-compaction content in long multi-compaction sessions. (2) Memory Flush now defaults to
33
- OFF to eliminate overlap with the hook.
34
- - **Memory artifacts dated by conversation start, not pipeline trigger time.** Both the
35
- session-memory hook (dialogue archive, daily file, dialogue frontmatter, topic frontmatter)
36
- and the consolidation pipeline (MEMORY.md inline sections, daily file append, wiki route)
37
- now derive their date stamps from the first user/assistant message timestamp in the source
38
- transcript, with fallback to wall-clock time. Fixes the bug where a 22:00→02:00 conversation
39
- that was `/new`'d at 09:00 next morning got filed under the wrong day.
40
- - **Dialogues archive browser (new Control UI tab).** New "聊天记录" tab reads
41
- `memory/dialogues/*.md` per-agent workspace, with Agent → Date → Dialogue hierarchy in the
42
- sidebar and markdown-rendered detail pane. Two new gateway RPCs: `dialogues.list` and
43
- `dialogues.get`. Distinct from the existing "Sessions" tab (renamed from "History"), which
44
- continues to manage active sessions from `sessions.json`.
45
- - **Quick settings card redesigned** with hierarchical cognitive toggles (master +
46
- 洞察推送 / 技能进化 / 纠错记忆 / 画像建模), and surfaced three previously hidden
47
- token-consuming features: 记忆整合 (consolidation), 会话记忆归档 (session-memory hook),
48
- and 压缩前记忆冲刷 (memory flush, now default-off).
49
18
  - **Cognitive identity system** (`src/cognitive/identity.ts`): unified, channel-agnostic
50
19
  `resolveCognitiveUserId()`. Control UI, TUI, and mobile clients map to a single `operator`
51
20
  identity; group sessions are correctly excluded from per-user profiles. The old `ou_`-prefix
@@ -68,14 +37,6 @@ Repo: https://github.com/Kaiji-Z/kaijibot · Backup: https://gitee.com/kaiji1126
68
37
  so non-message reset paths still capture summaries and corrections.
69
38
  - Memory: chunk dialogue files at turn boundaries and default to Porter stemming for better
70
39
  full-text search recall.
71
- - Memory: `appendToMemoryFile` dep now accepts a `localDateStr` string to avoid UTC/local
72
- off-by-one when routing consolidated summaries to the correct daily file. Previously the
73
- route layer computed local date but the dep impl used `toISOString()` (UTC), causing the
74
- section header and target file to disagree at certain timezones.
75
- - Cognitive: new `cognitive.correction.enabled` config key (default `true`) gates the
76
- correction pipeline in three locations: `get-reply-run.ts` (CorrectionStore load),
77
- `session-memory` hook (post-session extraction), and `kaijibot-tools.ts`
78
- (`record_correction` agent tool registration). Surfaces as the "纠错记忆" sub-toggle.
79
40
  - Branding: replaced inherited OpenClaw lobster icons with the KaijiBot K logo; filter evolution
80
41
  signals out of chat history.
81
42
 
package/dist/.buildstamp CHANGED
@@ -1 +1 @@
1
- {"builtAt":1784361018988,"head":"bbd33c53788c5646646f516f521de421874dc722"}
1
+ {"builtAt":1784310527982,"head":"3ee50b8f98062780fe267ae3d6dea8e65b7504b2"}
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.7.18-2",
3
- "commit": "bbd33c53788c5646646f516f521de421874dc722",
4
- "builtAt": "2026-07-18T07:51:03.462Z"
2
+ "version": "2026.7.18",
3
+ "commit": "3ee50b8f98062780fe267ae3d6dea8e65b7504b2",
4
+ "builtAt": "2026-07-17T17:49:34.484Z"
5
5
  }
@@ -43,13 +43,6 @@ function localDateTimeStr(date = /* @__PURE__ */ new Date()) {
43
43
  * LLM failure so that no session is lost.
44
44
  */
45
45
  const log$1 = createSubsystemLogger("hooks/session-memory/summary");
46
- /**
47
- * Hard cap on transcript chars sent to the LLM. ~30K tokens at ~3 chars/token
48
- * for mixed CJK/English — fits comfortably in 32K+ context models with room
49
- * for the 4K output budget. Truncation keeps the MOST RECENT chars, which
50
- * capture the compaction entry (summary of older content) + nearby messages.
51
- */
52
- const SUMMARY_TRANSCRIPT_CHAR_BUDGET = 1e5;
53
46
  const SUMMARY_SYSTEM_PROMPT = `You are a structured conversation summarizer. The assistant being summarized is a proactive cognitive AI — it intentionally sends unsolicited messages to the user about their interests, cross-domain connections, behavioral patterns, and knowledge suggestions. These proactive messages are a core feature, NOT errors or hallucinations.
54
47
 
55
48
  Analyze the conversation and produce a JSON object with exactly these fields:
@@ -176,11 +169,8 @@ async function generateStructuredSummary(params) {
176
169
  const { transcript, cfg, existingTopics } = params;
177
170
  if (!transcript.trim()) return createFallbackSummary(transcript);
178
171
  try {
179
- const transcriptSlice = transcript.length > SUMMARY_TRANSCRIPT_CHAR_BUDGET ? transcript.slice(-SUMMARY_TRANSCRIPT_CHAR_BUDGET) : transcript;
180
- log$1.debug("Generating structured summary", {
181
- transcriptLength: transcript.length,
182
- slicedLength: transcriptSlice.length
183
- });
172
+ const transcriptSlice = transcript;
173
+ log$1.debug("Generating structured summary", { transcriptLength: transcript.length });
184
174
  const generateText = await createBackgroundGenerateText(cfg, {
185
175
  maxTokens: 4e3,
186
176
  timeout: 6e4
@@ -360,11 +350,10 @@ const saveSessionToMemory = async (event) => {
360
350
  } : void 0;
361
351
  const hookConfig = resolveHookConfig(cfg, "session-memory");
362
352
  const messageCount = typeof hookConfig?.messages === "number" && hookConfig.messages > 0 ? Math.min(hookConfig.messages, MESSAGE_CAP) : MESSAGE_CAP;
363
- const effectiveMessageCount = isCompaction ? Number.MAX_SAFE_INTEGER : messageCount;
364
353
  let sessionContent = null;
365
354
  let summary;
366
355
  if (sessionFile) {
367
- sessionContent = await getRecentSessionContentWithResetFallback(sessionFile, effectiveMessageCount);
356
+ sessionContent = await getRecentSessionContentWithResetFallback(sessionFile, messageCount);
368
357
  log.debug("Session content loaded", {
369
358
  length: sessionContent?.length ?? 0,
370
359
  messageCount
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "channelCatalogSignature": "a99b78ac99491ac5c8d64c4a6973088cc21688cb",
16
16
  "rootHelpBundleSignature": "93cf97cf2a23c3eb95a2912fb09cdf297eb6ae4b",
17
- "rootHelpText": "\n👾 KaijiBot 2026.7.18-2 (bbd33c5) — The highest form of cognition is knowing your own ignorance.\n\nUsage: kaijibot [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env KAIJIBOT_CONTAINER)\n --dev Dev profile: isolate state under ~/.kaijibot-dev, default\n gateway port 19001, and shift derived ports\n (browser/canvas)\n -h, --help Display help for command\n --log-level <level> Global log level override for file + console\n (silent|fatal|error|warn|info|debug|trace)\n --no-color Disable ANSI colors\n --profile <name> Use a named profile (isolates\n KAIJIBOT_STATE_DIR/KAIJIBOT_CONFIG_PATH under\n ~/.kaijibot-<name>)\n -V, --version output the version number\n\nCommands:\n Hint: commands suffixed with * have subcommands. Run <command> --help for details.\n acp * Agent Control Protocol tools\n agent Run one agent turn via the Gateway\n agents * Manage isolated agents (workspaces, auth, routing)\n android-install Set up KaijiBot on Android/Termux (auto-installs\n packages, boot script, battery settings)\n approvals * Manage exec approvals (gateway or node host)\n backup * Create and verify local backup archives for KaijiBot\n state\n capability * Run provider-backed inference commands (fallback alias:\n infer)\n channels * Manage connected chat channels (Telegram, Discord, etc.)\n clawbot * Legacy clawbot command aliases\n completion Generate shell completion script\n config * Non-interactive config helpers\n (get/set/unset/file/validate). Default: starts guided\n setup.\n configure Interactive configuration for credentials, channels,\n gateway, and agent defaults\n cron * Manage cron jobs via the Gateway scheduler\n daemon * Gateway service (legacy alias)\n dashboard Open the Control UI with your current token\n devices * Device pairing + token management\n directory * Lookup contact and group IDs (self, peers, groups) for\n supported chat channels\n dns * DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n docs Search the live KaijiBot docs\n doctor Health checks + quick fixes for the gateway and channels\n gateway * Run, inspect, and query the WebSocket Gateway\n health Fetch health from the running gateway\n help Display help for command\n hooks * Manage internal agent hooks\n infer * Run provider-backed inference commands\n logs Tail gateway file logs via RPC\n mcp * Manage KaijiBot MCP config and channel bridge\n memory Search, inspect, and reindex memory files\n message * Send, read, and manage messages\n migrate Migrate data from OpenClaw or legacy installations to\n KaijiBot\n models * Discover, scan, and configure models\n node * Run and manage the headless node host service\n nodes * Manage gateway-owned node pairing and node commands\n onboard Interactive onboarding for the gateway, workspace, and\n skills\n pairing * Secure DM pairing (approve inbound requests)\n plugins * Manage KaijiBot plugins and extensions\n qa * Run QA scenarios and launch the private QA debugger UI\n qr Generate mobile pairing QR/setup code\n reset Reset local config/state (keeps the CLI installed)\n sandbox * Manage sandbox containers for agent isolation\n secrets * Secrets runtime reload controls\n security * Security tools and local config audits\n sessions * List stored conversation sessions\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n soul * Manage soul presets (MBTI-based personality profiles)\n status Show channel health and recent session recipients\n system * System events, heartbeat, and presence\n tasks * Inspect durable background task state\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update KaijiBot and inspect update channel status\n webhooks * Webhook helpers and integrations\n\nExamples:\n kaijibot models --help\n Show detailed help for the models command.\n kaijibot channels login --verbose\n Link personal WhatsApp Web and show QR + connection logs.\n kaijibot message send --target +15555550123 --message \"Hi\" --json\n Send via your web session and print JSON result.\n kaijibot gateway --port 18789\n Run the WebSocket Gateway locally.\n kaijibot --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n kaijibot gateway --force\n Kill anything bound to the default gateway port, then start it.\n kaijibot gateway ...\n Gateway control via WebSocket.\n kaijibot agent --to +15555550123 --message \"Run summary\" --deliver\n Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.\n kaijibot message send --channel feishu --target ou_xxx --message \"Hi\"\n Send via your Telegram bot.\n\nDocs: https://gitee.com/kaiji1126/kaijibot/blob/main/docs/cli.md\n\n"
17
+ "rootHelpText": "\n👾 KaijiBot 2026.7.18 (3ee50b8) — Learning isn't filling a bucket it's lighting a fire.\n\nUsage: kaijibot [options] [command]\n\nOptions:\n --container <name> Run the CLI inside a running Podman/Docker container\n named <name> (default: env KAIJIBOT_CONTAINER)\n --dev Dev profile: isolate state under ~/.kaijibot-dev, default\n gateway port 19001, and shift derived ports\n (browser/canvas)\n -h, --help Display help for command\n --log-level <level> Global log level override for file + console\n (silent|fatal|error|warn|info|debug|trace)\n --no-color Disable ANSI colors\n --profile <name> Use a named profile (isolates\n KAIJIBOT_STATE_DIR/KAIJIBOT_CONFIG_PATH under\n ~/.kaijibot-<name>)\n -V, --version output the version number\n\nCommands:\n Hint: commands suffixed with * have subcommands. Run <command> --help for details.\n acp * Agent Control Protocol tools\n agent Run one agent turn via the Gateway\n agents * Manage isolated agents (workspaces, auth, routing)\n android-install Set up KaijiBot on Android/Termux (auto-installs\n packages, boot script, battery settings)\n approvals * Manage exec approvals (gateway or node host)\n backup * Create and verify local backup archives for KaijiBot\n state\n capability * Run provider-backed inference commands (fallback alias:\n infer)\n channels * Manage connected chat channels (Telegram, Discord, etc.)\n clawbot * Legacy clawbot command aliases\n completion Generate shell completion script\n config * Non-interactive config helpers\n (get/set/unset/file/validate). Default: starts guided\n setup.\n configure Interactive configuration for credentials, channels,\n gateway, and agent defaults\n cron * Manage cron jobs via the Gateway scheduler\n daemon * Gateway service (legacy alias)\n dashboard Open the Control UI with your current token\n devices * Device pairing + token management\n directory * Lookup contact and group IDs (self, peers, groups) for\n supported chat channels\n dns * DNS helpers for wide-area discovery (Tailscale + CoreDNS)\n docs Search the live KaijiBot docs\n doctor Health checks + quick fixes for the gateway and channels\n gateway * Run, inspect, and query the WebSocket Gateway\n health Fetch health from the running gateway\n help Display help for command\n hooks * Manage internal agent hooks\n infer * Run provider-backed inference commands\n logs Tail gateway file logs via RPC\n mcp * Manage KaijiBot MCP config and channel bridge\n memory Search, inspect, and reindex memory files\n message * Send, read, and manage messages\n migrate Migrate data from OpenClaw or legacy installations to\n KaijiBot\n models * Discover, scan, and configure models\n node * Run and manage the headless node host service\n nodes * Manage gateway-owned node pairing and node commands\n onboard Interactive onboarding for the gateway, workspace, and\n skills\n pairing * Secure DM pairing (approve inbound requests)\n plugins * Manage KaijiBot plugins and extensions\n qa * Run QA scenarios and launch the private QA debugger UI\n qr Generate mobile pairing QR/setup code\n reset Reset local config/state (keeps the CLI installed)\n sandbox * Manage sandbox containers for agent isolation\n secrets * Secrets runtime reload controls\n security * Security tools and local config audits\n sessions * List stored conversation sessions\n setup Initialize local config and agent workspace\n skills * List and inspect available skills\n soul * Manage soul presets (MBTI-based personality profiles)\n status Show channel health and recent session recipients\n system * System events, heartbeat, and presence\n tasks * Inspect durable background task state\n tui Open a terminal UI connected to the Gateway\n uninstall Uninstall the gateway service + local data (CLI remains)\n update * Update KaijiBot and inspect update channel status\n webhooks * Webhook helpers and integrations\n\nExamples:\n kaijibot models --help\n Show detailed help for the models command.\n kaijibot channels login --verbose\n Link personal WhatsApp Web and show QR + connection logs.\n kaijibot message send --target +15555550123 --message \"Hi\" --json\n Send via your web session and print JSON result.\n kaijibot gateway --port 18789\n Run the WebSocket Gateway locally.\n kaijibot --dev gateway\n Run a dev Gateway (isolated state/config) on ws://127.0.0.1:19001.\n kaijibot gateway --force\n Kill anything bound to the default gateway port, then start it.\n kaijibot gateway ...\n Gateway control via WebSocket.\n kaijibot agent --to +15555550123 --message \"Run summary\" --deliver\n Talk directly to the agent using the Gateway; optionally send the WhatsApp reply.\n kaijibot message send --channel feishu --target ou_xxx --message \"Hi\"\n Send via your Telegram bot.\n\nDocs: https://gitee.com/kaiji1126/kaijibot/blob/main/docs/cli.md\n\n"
18
18
  }
@@ -1,4 +1,4 @@
1
- import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.js";import{t as r}from"./preload-helper-Chd9yIcd.js";import"./format-2UQRq9Jl.js";import{n as i,r as a,t as o}from"./marked.esm-DaJk4ANX.js";import{A as s,C as c,D as l,E as u,M as d,O as f,S as p,T as m,_ as h,b as g,c as _,d as v,f as y,g as b,h as x,l as S,m as C,p as w,s as T,u as E,v as D,w as O,x as k,y as A}from"./index-BZqdY-T7.js";import{i as j,n as M,r as N,t as P}from"./presenter-ClgvIXow.js";import"./skills-shared-OnxBJxwe.js";var F=``,I=0;function L(r){let{agent:i,configForm:a,agentFilesList:o,configLoading:s,configSaving:u,configDirty:d,onConfigReload:f,onConfigSave:m,onModelChange:h,onModelFallbacksChange:g,onSelectPanel:v}=r,y=A(a,i.id),b=i.model,x=(o&&o.agentId===i.id?o.workspace:null)||y.entry?.workspace||y.defaults?.workspace||i.workspace||`default`,S=y.entry?.model?p(y.entry?.model):y.defaults?.model?p(y.defaults?.model):p(b),w=p(y.defaults?.model??b),T=c(y.entry?.model),O=c(y.defaults?.model)||(w===`-`?null:D(w))||(a?null:c(b)),j=T??O??null,M=k(y.entry?.model)??k(y.defaults?.model)??(a?null:k(b))??[],N=Array.isArray(y.entry?.skills)?y.entry?.skills:null,P=N?.length??null,L=!!(r.defaultId&&i.id===r.defaultId),R=!a||s||u,z=new Set(r.configuredProviders??[]),B=r.modelCatalog.filter(e=>!e.provider||z.has(e.provider)),V=C(B),H=l(V.keys());if(!F&&j){let e=j.indexOf(`/`);F=e>0?j.slice(0,e):j}!F&&H.length>0&&(F=H[0]);let U=V.get(F)??[],W=e=>{let t=M.filter((t,n)=>n!==e);g(i.id,t)};return e`
1
+ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.js";import{t as r}from"./preload-helper-Chd9yIcd.js";import"./format-2UQRq9Jl.js";import{n as i,r as a,t as o}from"./marked.esm-DaJk4ANX.js";import{A as s,C as c,D as l,E as u,M as d,O as f,S as p,T as m,_ as h,b as g,c as _,d as v,f as y,g as b,h as x,l as S,m as C,p as w,s as T,u as E,v as D,w as O,x as k,y as A}from"./index-BUjIN7_u.js";import{i as j,n as M,r as N,t as P}from"./presenter-ClgvIXow.js";import"./skills-shared-OnxBJxwe.js";var F=``,I=0;function L(r){let{agent:i,configForm:a,agentFilesList:o,configLoading:s,configSaving:u,configDirty:d,onConfigReload:f,onConfigSave:m,onModelChange:h,onModelFallbacksChange:g,onSelectPanel:v}=r,y=A(a,i.id),b=i.model,x=(o&&o.agentId===i.id?o.workspace:null)||y.entry?.workspace||y.defaults?.workspace||i.workspace||`default`,S=y.entry?.model?p(y.entry?.model):y.defaults?.model?p(y.defaults?.model):p(b),w=p(y.defaults?.model??b),T=c(y.entry?.model),O=c(y.defaults?.model)||(w===`-`?null:D(w))||(a?null:c(b)),j=T??O??null,M=k(y.entry?.model)??k(y.defaults?.model)??(a?null:k(b))??[],N=Array.isArray(y.entry?.skills)?y.entry?.skills:null,P=N?.length??null,L=!!(r.defaultId&&i.id===r.defaultId),R=!a||s||u,z=new Set(r.configuredProviders??[]),B=r.modelCatalog.filter(e=>!e.provider||z.has(e.provider)),V=C(B),H=l(V.keys());if(!F&&j){let e=j.indexOf(`/`);F=e>0?j.slice(0,e):j}!F&&H.length>0&&(F=H[0]);let U=V.get(F)??[],W=e=>{let t=M.filter((t,n)=>n!==e);g(i.id,t)};return e`
2
2
  <section class="card">
3
3
  <div class="card-title">Overview</div>
4
4
  <div class="card-sub">Workspace paths and identity metadata.</div>
@@ -764,4 +764,4 @@ ${e}
764
764
  <span class="agent-card__metric-label">${n}</span>${r}
765
765
  </span>
766
766
  `}export{ve as renderAgents};
767
- //# sourceMappingURL=agents-Bz0dvWDM.js.map
767
+ //# sourceMappingURL=agents-CQFCBbpb.js.map
@@ -1,4 +1,4 @@
1
- import{n as e,t}from"./event-stream-BzGVPQTQ.js";import{n,t as r}from"./index-BZqdY-T7.js";import{t as i}from"./headers-Coc7mZKj.js";import{t as a}from"./sanitize-unicode-BhgnLGRh.js";import{i as o,n as s,t as c}from"./github-copilot-headers-D09gnQpa.js";import{n as l,r as u,t as d}from"./transform-messages-XozG3iE6.js";function f(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function p(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}var m=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return m=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^n()&15>>e/4).toString(16))};function h(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var g=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},_=class extends Error{},v=class e extends _{constructor(t,n,r,i,a){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.requestID=i?.get(`request-id`),this.error=n,this.type=a??null}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new ee({message:r,cause:g(n)});let a=n,o=a?.error?.type;return t===400?new ne(t,a,r,i,o):t===401?new re(t,a,r,i,o):t===403?new ie(t,a,r,i,o):t===404?new ae(t,a,r,i,o):t===409?new oe(t,a,r,i,o):t===422?new se(t,a,r,i,o):t===429?new ce(t,a,r,i,o):t>=500?new le(t,a,r,i,o):new e(t,a,r,i,o)}},y=class extends v{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},ee=class extends v{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},te=class extends ee{constructor({message:e}={}){super({message:e??`Request timed out.`})}},ne=class extends v{},re=class extends v{},ie=class extends v{},ae=class extends v{},oe=class extends v{},se=class extends v{},ce=class extends v{},le=class extends v{},ue=/^[a-z][a-z0-9+.-]*:/i,de=e=>ue.test(e),fe=e=>(fe=Array.isArray,fe(e)),pe=fe;function me(e){return typeof e==`object`?e??{}:{}}function he(e){if(!e)return!0;for(let t in e)return!1;return!0}function ge(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var _e=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new _(`${e} must be an integer`);if(t<0)throw new _(`${e} must be a positive integer`);return t},ve=e=>{try{return JSON.parse(e)}catch{return}},ye=e=>new Promise(t=>setTimeout(t,e)),b=`0.81.0`,be=()=>typeof window<`u`&&window.document!==void 0&&typeof navigator<`u`;function xe(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}var Se=()=>{let e=xe();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":Te(Deno.build.os),"X-Stainless-Arch":we(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":Te(globalThis.process.platform??`unknown`),"X-Stainless-Arch":we(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=Ce();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function Ce(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}var we=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,Te=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`),Ee,De=()=>Ee??=Se();function Oe(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function ke(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function Ae(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return ke({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}function je(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){let e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function Me(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}var Ne=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)});function Pe(e){return Object.entries(e).filter(([e,t])=>t!==void 0).map(([e,t])=>{if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)return`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;if(t===null)return`${encodeURIComponent(e)}=`;throw new _(`Cannot stringify type ${typeof t}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join(`&`)}function Fe(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var Ie;function Le(e){let t;return(Ie??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Re;function ze(e){let t;return(Re??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var x,S,C=class{constructor(){x.set(this,void 0),S.set(this,void 0),f(this,x,new Uint8Array,`f`),f(this,S,null,`f`)}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==`string`?Le(e):e;f(this,x,Fe([p(this,x,`f`),t]),`f`);let n=[],r;for(;(r=Be(p(this,x,`f`),p(this,S,`f`)))!=null;){if(r.carriage&&p(this,S,`f`)==null){f(this,S,r.index,`f`);continue}if(p(this,S,`f`)!=null&&(r.index!==p(this,S,`f`)+1||r.carriage)){n.push(ze(p(this,x,`f`).subarray(0,p(this,S,`f`)-1))),f(this,x,p(this,x,`f`).subarray(p(this,S,`f`)),`f`),f(this,S,null,`f`);continue}let e=p(this,S,`f`)===null?r.preceding:r.preceding-1,t=ze(p(this,x,`f`).subarray(0,e));n.push(t),f(this,x,p(this,x,`f`).subarray(r.index),`f`),f(this,S,null,`f`)}return n}flush(){return p(this,x,`f`).length?this.decode(`
1
+ import{n as e,t}from"./event-stream-BzGVPQTQ.js";import{n,t as r}from"./index-BUjIN7_u.js";import{t as i}from"./headers-Coc7mZKj.js";import{t as a}from"./sanitize-unicode-BhgnLGRh.js";import{i as o,n as s,t as c}from"./github-copilot-headers-D09gnQpa.js";import{n as l,r as u,t as d}from"./transform-messages-XozG3iE6.js";function f(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function p(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}var m=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return m=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^n()&15>>e/4).toString(16))};function h(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var g=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},_=class extends Error{},v=class e extends _{constructor(t,n,r,i,a){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.requestID=i?.get(`request-id`),this.error=n,this.type=a??null}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new ee({message:r,cause:g(n)});let a=n,o=a?.error?.type;return t===400?new ne(t,a,r,i,o):t===401?new re(t,a,r,i,o):t===403?new ie(t,a,r,i,o):t===404?new ae(t,a,r,i,o):t===409?new oe(t,a,r,i,o):t===422?new se(t,a,r,i,o):t===429?new ce(t,a,r,i,o):t>=500?new le(t,a,r,i,o):new e(t,a,r,i,o)}},y=class extends v{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},ee=class extends v{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},te=class extends ee{constructor({message:e}={}){super({message:e??`Request timed out.`})}},ne=class extends v{},re=class extends v{},ie=class extends v{},ae=class extends v{},oe=class extends v{},se=class extends v{},ce=class extends v{},le=class extends v{},ue=/^[a-z][a-z0-9+.-]*:/i,de=e=>ue.test(e),fe=e=>(fe=Array.isArray,fe(e)),pe=fe;function me(e){return typeof e==`object`?e??{}:{}}function he(e){if(!e)return!0;for(let t in e)return!1;return!0}function ge(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var _e=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new _(`${e} must be an integer`);if(t<0)throw new _(`${e} must be a positive integer`);return t},ve=e=>{try{return JSON.parse(e)}catch{return}},ye=e=>new Promise(t=>setTimeout(t,e)),b=`0.81.0`,be=()=>typeof window<`u`&&window.document!==void 0&&typeof navigator<`u`;function xe(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}var Se=()=>{let e=xe();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":Te(Deno.build.os),"X-Stainless-Arch":we(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":Te(globalThis.process.platform??`unknown`),"X-Stainless-Arch":we(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=Ce();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":b,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function Ce(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}var we=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,Te=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`),Ee,De=()=>Ee??=Se();function Oe(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function ke(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function Ae(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return ke({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}function je(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){let e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function Me(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}var Ne=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)});function Pe(e){return Object.entries(e).filter(([e,t])=>t!==void 0).map(([e,t])=>{if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)return`${encodeURIComponent(e)}=${encodeURIComponent(t)}`;if(t===null)return`${encodeURIComponent(e)}=`;throw new _(`Cannot stringify type ${typeof t}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join(`&`)}function Fe(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var Ie;function Le(e){let t;return(Ie??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Re;function ze(e){let t;return(Re??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var x,S,C=class{constructor(){x.set(this,void 0),S.set(this,void 0),f(this,x,new Uint8Array,`f`),f(this,S,null,`f`)}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==`string`?Le(e):e;f(this,x,Fe([p(this,x,`f`),t]),`f`);let n=[],r;for(;(r=Be(p(this,x,`f`),p(this,S,`f`)))!=null;){if(r.carriage&&p(this,S,`f`)==null){f(this,S,r.index,`f`);continue}if(p(this,S,`f`)!=null&&(r.index!==p(this,S,`f`)+1||r.carriage)){n.push(ze(p(this,x,`f`).subarray(0,p(this,S,`f`)-1))),f(this,x,p(this,x,`f`).subarray(p(this,S,`f`)),`f`),f(this,S,null,`f`);continue}let e=p(this,S,`f`)===null?r.preceding:r.preceding-1,t=ze(p(this,x,`f`).subarray(0,e));n.push(t),f(this,x,p(this,x,`f`).subarray(r.index),`f`),f(this,S,null,`f`)}return n}flush(){return p(this,x,`f`).length?this.decode(`
2
2
  `):[]}};x=new WeakMap,S=new WeakMap,C.NEWLINE_CHARS=new Set([`
3
3
  `,`\r`]),C.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function Be(e,t){for(let n=t??0;n<e.length;n++){if(e[n]===10)return{preceding:n,index:n+1,carriage:!1};if(e[n]===13)return{preceding:n,index:n+1,carriage:!0}}return null}function Ve(e){for(let t=0;t<e.length-1;t++){if(e[t]===10&&e[t+1]===10||e[t]===13&&e[t+1]===13)return t+2;if(e[t]===13&&e[t+1]===10&&t+3<e.length&&e[t+2]===13&&e[t+3]===10)return t+4}return-1}var He={off:0,error:200,warn:300,info:400,debug:500},Ue=(e,t,n)=>{if(e){if(ge(He,e))return e;w(n).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(He))}`)}};function We(){}function Ge(e,t,n){return!t||He[e]>He[n]?We:t[e].bind(t)}var Ke={error:We,warn:We,info:We,debug:We},qe=new WeakMap;function w(e){let t=e.logger,n=e.logLevel??`off`;if(!t)return Ke;let r=qe.get(t);if(r&&r[0]===n)return r[1];let i={error:Ge(`error`,t,n),warn:Ge(`warn`,t,n),info:Ge(`info`,t,n),debug:Ge(`debug`,t,n)};return qe.set(t,[n,i]),i}var T=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([e,t])=>[e,e.toLowerCase()===`x-api-key`||e.toLowerCase()===`authorization`||e.toLowerCase()===`cookie`||e.toLowerCase()===`set-cookie`?`***`:t])),`retryOfRequestLogID`in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e),Je,Ye=class e{constructor(e,t,n){this.iterator=e,Je.set(this,void 0),this.controller=t,f(this,Je,n,`f`)}static fromSSEResponse(t,n,r){let i=!1,a=r?w(r):console;async function*o(){if(i)throw new _("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");i=!0;let e=!1;try{for await(let e of Xe(t,n)){if(e.event===`completion`)try{yield JSON.parse(e.data)}catch(t){throw a.error(`Could not parse message into JSON:`,e.data),a.error(`From chunk:`,e.raw),t}if(e.event===`message_start`||e.event===`message_delta`||e.event===`message_stop`||e.event===`content_block_start`||e.event===`content_block_delta`||e.event===`content_block_stop`)try{yield JSON.parse(e.data)}catch(t){throw a.error(`Could not parse message into JSON:`,e.data),a.error(`From chunk:`,e.raw),t}if(e.event!==`ping`&&e.event===`error`){let n=ve(e.data)??e.data,r=n?.error?.type;throw new v(void 0,n,void 0,t.headers,r)}}e=!0}catch(e){if(h(e))return;throw e}finally{e||n.abort()}}return new e(o,n,r)}static fromReadableStream(t,n,r){let i=!1;async function*a(){let e=new C,n=je(t);for await(let t of n)for(let n of e.decode(t))yield n;for(let t of e.flush())yield t}async function*o(){if(i)throw new _("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");i=!0;let e=!1;try{for await(let t of a())e||t&&(yield JSON.parse(t));e=!0}catch(e){if(h(e))return;throw e}finally{e||n.abort()}}return new e(o,n,r)}[(Je=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let t=[],n=[],r=this.iterator(),i=e=>({next:()=>{if(e.length===0){let e=r.next();t.push(e),n.push(e)}return e.shift()}});return[new e(()=>i(t),this.controller,p(this,Je,`f`)),new e(()=>i(n),this.controller,p(this,Je,`f`))]}toReadableStream(){let e=this,t;return ke({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{let{value:n,done:r}=await t.next();if(r)return e.close();let i=Le(JSON.stringify(n)+`
4
4
  `);e.enqueue(i)}catch(t){e.error(t)}},async cancel(){await t.return?.()}})}};async function*Xe(e,t){if(!e.body)throw t.abort(),globalThis.navigator!==void 0&&globalThis.navigator.product===`ReactNative`?new _(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`):new _(`Attempted to iterate over a response with no body`);let n=new Qe,r=new C,i=je(e.body);for await(let e of Ze(i))for(let t of r.decode(e)){let e=n.decode(t);e&&(yield e)}for(let e of r.flush()){let t=n.decode(e);t&&(yield t)}}async function*Ze(e){let t=new Uint8Array;for await(let n of e){if(n==null)continue;let e=n instanceof ArrayBuffer?new Uint8Array(n):typeof n==`string`?Le(n):n,r=new Uint8Array(t.length+e.length);r.set(t),r.set(e,t.length),t=r;let i;for(;(i=Ve(t))!==-1;)yield t.slice(0,i),t=t.slice(i)}t.length>0&&(yield t)}var Qe=class{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith(`\r`)&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;let e={event:this.event,data:this.data.join(`
@@ -37,4 +37,4 @@ new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
37
37
  `),raw:[...e.raw]};return e.event=null,e.data=[],e.raw=[],t}function Tr(e,t){if(e===``)return wr(t);if(t.raw.push(e),e.startsWith(`:`))return null;let n=e.indexOf(`:`),r=n===-1?e:e.slice(0,n),i=n===-1?``:e.slice(n+1);return i.startsWith(` `)&&(i=i.slice(1)),r===`event`?t.event=i:r===`data`&&t.data.push(i),null}function Er(e){let t=e.indexOf(`\r`),n=e.indexOf(`
38
38
  `);return t===-1?n:n===-1?t:Math.min(t,n)}function Dr(e){let t=Er(e);if(t===-1)return null;let n=t+1;return e[t]===`\r`&&e[n]===`
39
39
  `&&(n+=1),{line:e.slice(0,t),rest:e.slice(n)}}async function*Or(e,t){let n=e.getReader(),r=new TextDecoder,i={event:null,data:[],raw:[]},a=``;try{for(;;){if(t?.aborted)throw Error(`Request was aborted`);let{value:e,done:o}=await n.read();if(o)break;a+=r.decode(e,{stream:!0});let s=Dr(a);for(;s;){a=s.rest;let e=Tr(s.line,i);e&&(yield e),s=Dr(a)}}a+=r.decode();let e=Dr(a);for(;e;){a=e.rest;let t=Tr(e.line,i);t&&(yield t),e=Dr(a)}if(a.length>0){let e=Tr(a,i);e&&(yield e)}let o=wr(i);o&&(yield o)}finally{n.releaseLock()}}async function*kr(e,t){if(!e.body)throw Error(`Attempted to iterate over an Anthropic response with no body`);let n=!1,i=!1;for await(let a of Or(e.body,t)){if(a.event===`error`)throw Error(a.data);if(Cr.has(a.event??``))try{let e=r(a.data);e.type===`message_start`?n=!0:e.type===`message_stop`&&(i=!0),yield e}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Could not parse Anthropic SSE event ${a.event}: ${t}; data=${a.data}; raw=${a.raw.join(`\\n`)}`)}}if(n&&!i)throw Error(`Anthropic stream ended before message_stop`)}var Ar=(r,a,o)=>{let l=new t;return(async()=>{let t={role:`assistant`,content:[],api:r.api,provider:r.provider,model:r.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let u,d;if(o?.client)u=o.client,d=!1;else{let e=o?.apiKey;if(!e)throw Error(`No API key for provider: ${r.provider}`);let t;if(r.provider===`github-copilot`){let e=s(a.messages);t=c({messages:a.messages,hasImages:e})}let n=(o?.cacheRetention??fr())===`none`?void 0:o?.sessionId,i=Pr(r,e,o?.interleavedThinking??!0,Rr(r,a),o?.headers,t,n);u=i.client,d=i.isOAuthToken}let f=Fr(r,a,d,o),p=await o?.onPayload?.(f,r);p!==void 0&&(f=p);let m={...o?.signal?{signal:o.signal}:{},...o?.timeoutMs===void 0?{}:{timeout:o.timeoutMs},maxRetries:o?.maxRetries??0},h=await u.messages.create({...f,stream:!0},m).asResponse();await o?.onResponse?.({status:h.status,headers:i(h.headers)},r),l.push({type:`start`,partial:t});let g=t.content;for await(let i of kr(h,o?.signal))if(i.type===`message_start`)t.responseId=i.message.id,t.usage.input=i.message.usage.input_tokens||0,t.usage.output=i.message.usage.output_tokens||0,t.usage.cacheRead=i.message.usage.cache_read_input_tokens||0,t.usage.cacheWrite=i.message.usage.cache_creation_input_tokens||0,t.usage.cacheWrite1h=i.message.usage.cache_creation?.ephemeral_1h_input_tokens||0,t.usage.totalTokens=t.usage.input+t.usage.output+t.usage.cacheRead+t.usage.cacheWrite,e(r,t.usage);else if(i.type===`content_block_start`){if(i.content_block.type===`text`){let e={type:`text`,text:``,index:i.index};t.content.push(e),l.push({type:`text_start`,contentIndex:t.content.length-1,partial:t})}else if(i.content_block.type===`thinking`){let e={type:`thinking`,thinking:``,thinkingSignature:``,index:i.index};t.content.push(e),l.push({type:`thinking_start`,contentIndex:t.content.length-1,partial:t})}else if(i.content_block.type===`redacted_thinking`){let e={type:`thinking`,thinking:`[Reasoning redacted]`,thinkingSignature:i.content_block.data,redacted:!0,index:i.index};t.content.push(e),l.push({type:`thinking_start`,contentIndex:t.content.length-1,partial:t})}else if(i.content_block.type===`tool_use`){let e={type:`toolCall`,id:i.content_block.id,name:d?_r(i.content_block.name,a.tools):i.content_block.name,arguments:i.content_block.input??{},partialJson:``,index:i.index};t.content.push(e),l.push({type:`toolcall_start`,contentIndex:t.content.length-1,partial:t})}}else if(i.type===`content_block_delta`){if(i.delta.type===`text_delta`){let e=g.findIndex(e=>e.index===i.index),n=g[e];n&&n.type===`text`&&(n.text+=i.delta.text,l.push({type:`text_delta`,contentIndex:e,delta:i.delta.text,partial:t}))}else if(i.delta.type===`thinking_delta`){let e=g.findIndex(e=>e.index===i.index),n=g[e];n&&n.type===`thinking`&&(n.thinking+=i.delta.thinking,l.push({type:`thinking_delta`,contentIndex:e,delta:i.delta.thinking,partial:t}))}else if(i.delta.type===`input_json_delta`){let e=g.findIndex(e=>e.index===i.index),r=g[e];r&&r.type===`toolCall`&&(r.partialJson+=i.delta.partial_json,r.arguments=n(r.partialJson),l.push({type:`toolcall_delta`,contentIndex:e,delta:i.delta.partial_json,partial:t}))}else if(i.delta.type===`signature_delta`){let e=g[g.findIndex(e=>e.index===i.index)];e&&e.type===`thinking`&&(e.thinkingSignature=e.thinkingSignature||``,e.thinkingSignature+=i.delta.signature)}}else if(i.type===`content_block_stop`){let e=g.findIndex(e=>e.index===i.index),r=g[e];r&&(delete r.index,r.type===`text`?l.push({type:`text_end`,contentIndex:e,content:r.text,partial:t}):r.type===`thinking`?l.push({type:`thinking_end`,contentIndex:e,content:r.thinking,partial:t}):r.type===`toolCall`&&(r.arguments=n(r.partialJson),delete r.partialJson,l.push({type:`toolcall_end`,contentIndex:e,toolCall:r,partial:t})))}else if(i.type===`message_delta`){if(i.delta.stop_reason){let e=Br(i.delta.stop_reason,i.delta.stop_details);t.stopReason=e.stopReason,e.errorMessage&&(t.errorMessage=e.errorMessage)}i.usage.input_tokens!=null&&(t.usage.input=i.usage.input_tokens),i.usage.output_tokens!=null&&(t.usage.output=i.usage.output_tokens),i.usage.cache_read_input_tokens!=null&&(t.usage.cacheRead=i.usage.cache_read_input_tokens),i.usage.cache_creation_input_tokens!=null&&(t.usage.cacheWrite=i.usage.cache_creation_input_tokens),t.usage.totalTokens=t.usage.input+t.usage.output+t.usage.cacheRead+t.usage.cacheWrite,e(r,t.usage)}if(o?.signal?.aborted)throw Error(`Request was aborted`);if(t.stopReason===`aborted`||t.stopReason===`error`)throw Error(t.errorMessage||`An unknown error occurred`);l.push({type:`done`,reason:t.stopReason,message:t}),l.end()}catch(e){for(let e of t.content)delete e.index,delete e.partialJson;t.stopReason=o?.signal?.aborted?`aborted`:`error`,t.errorMessage=e instanceof Error?e.message:JSON.stringify(e),l.push({type:`error`,reason:t.stopReason,error:t}),l.end()}})(),l};function jr(e,t){let n=t?e.thinkingLevelMap?.[t]:void 0;if(typeof n==`string`)return n;switch(t){case`minimal`:case`low`:return`low`;case`medium`:return`medium`;case`high`:return`high`;default:return`high`}}var Mr=(e,t,n)=>{let r=n?.apiKey;if(!r)throw Error(`No API key for provider: ${e.provider}`);let i=u(e,n,r);if(!n?.reasoning)return Ar(e,t,{...i,thinkingEnabled:!1});if(e.compat?.forceAdaptiveThinking===!0){let r=jr(e,n.reasoning);return Ar(e,t,{...i,thinkingEnabled:!0,effort:r})}let a=l(i.maxTokens,e.maxTokens,n.reasoning,n.thinkingBudgets);return Ar(e,t,{...i,maxTokens:a.maxTokens,thinkingEnabled:!0,thinkingBudgetTokens:a.thinkingBudget})};function Nr(e){return e.includes(`sk-ant-oat`)}function Pr(e,t,n,r,i,a,s){let c=n&&e.compat?.forceAdaptiveThinking!==!0,l=[];if(r&&l.push(yr),c&&l.push(br),e.provider===`cloudflare-ai-gateway`)return{client:new $({apiKey:null,authToken:null,baseURL:o(e),dangerouslyAllowBrowser:!0,defaultHeaders:Sr({accept:`application/json`,"anthropic-dangerous-direct-browser-access":`true`,"cf-aig-authorization":`Bearer ${t}`,"x-api-key":null,Authorization:null,...l.length>0?{"anthropic-beta":l.join(`,`)}:{}},e.headers,i)}),isOAuthToken:!1};if(e.provider===`github-copilot`)return{client:new $({apiKey:null,authToken:t,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:Sr({accept:`application/json`,"anthropic-dangerous-direct-browser-access":`true`,...l.length>0?{"anthropic-beta":l.join(`,`)}:{}},e.headers,a,i)}),isOAuthToken:!1};if(Nr(t))return{client:new $({apiKey:null,authToken:t,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:Sr({accept:`application/json`,"anthropic-dangerous-direct-browser-access":`true`,"anthropic-beta":[`claude-code-20250219`,`oauth-2025-04-20`,...l].join(`,`),"user-agent":`claude-cli/${mr}`,"x-app":`cli`},e.headers,i)}),isOAuthToken:!0};let u=s&&xr(e).sendSessionAffinityHeaders?{"x-session-affinity":s}:{};return{client:new $({apiKey:t,authToken:null,baseURL:e.baseUrl,dangerouslyAllowBrowser:!0,defaultHeaders:Sr({accept:`application/json`,"anthropic-dangerous-direct-browser-access":`true`,...l.length>0?{"anthropic-beta":l.join(`,`)}:{}},u,e.headers,i)}),isOAuthToken:!1}}function Fr(e,t,n,r){let{cacheControl:i}=pr(e,r?.cacheRetention),o=xr(e),s={model:e.id,messages:Lr(t.messages,e,n,i,o.allowEmptySignature),max_tokens:r?.maxTokens??e.maxTokens,stream:!0};if(n?(s.system=[{type:`text`,text:`You are Claude Code, Anthropic's official CLI for Claude.`,...i?{cache_control:i}:{}}],t.systemPrompt&&s.system.push({type:`text`,text:a(t.systemPrompt),...i?{cache_control:i}:{}})):t.systemPrompt&&(s.system=[{type:`text`,text:a(t.systemPrompt),...i?{cache_control:i}:{}}]),r?.temperature!==void 0&&!r?.thinkingEnabled&&o.supportsTemperature&&(s.temperature=r.temperature),t.tools&&t.tools.length>0&&(s.tools=zr(t.tools,n,o.supportsEagerToolInputStreaming,o.supportsCacheControlOnTools?i:void 0)),e.reasoning)if(r?.thinkingEnabled){let t=r.thinkingDisplay??`summarized`;e.compat?.forceAdaptiveThinking===!0?(s.thinking={type:`adaptive`,display:t},r.effort&&(s.output_config=(r.effort,{effort:r.effort}))):s.thinking={type:`enabled`,budget_tokens:r.thinkingBudgetTokens||1024,display:t}}else r?.thinkingEnabled===!1&&e.thinkingLevelMap?.off!==null&&(s.thinking={type:`disabled`});if(r?.metadata){let e=r.metadata.user_id;typeof e==`string`&&(s.metadata={user_id:e})}return r?.toolChoice&&(typeof r.toolChoice==`string`?s.tool_choice={type:r.toolChoice}:s.tool_choice=r.toolChoice),s}function Ir(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`).slice(0,64)}function Lr(e,t,n,r,i=!1){let o=[],s=d(e,t,Ir);for(let e=0;e<s.length;e++){let t=s[e];if(t.role===`user`)if(typeof t.content==`string`)t.content.trim().length>0&&o.push({role:`user`,content:a(t.content)});else{let e=t.content.map(e=>e.type===`text`?{type:`text`,text:a(e.text)}:{type:`image`,source:{type:`base64`,media_type:e.mimeType,data:e.data}}).filter(e=>e.type===`text`?e.text.trim().length>0:!0);if(e.length===0)continue;o.push({role:`user`,content:e})}else if(t.role===`assistant`){let e=[];for(let r of t.content)if(r.type===`text`){if(r.text.trim().length===0)continue;e.push({type:`text`,text:a(r.text)})}else if(r.type===`thinking`){if(r.redacted){e.push({type:`redacted_thinking`,data:r.thinkingSignature});continue}if(r.thinking.trim().length===0)continue;!r.thinkingSignature||r.thinkingSignature.trim().length===0?e.push(i?{type:`thinking`,thinking:a(r.thinking),signature:``}:{type:`text`,text:a(r.thinking)}):e.push({type:`thinking`,thinking:a(r.thinking),signature:r.thinkingSignature})}else r.type===`toolCall`&&e.push({type:`tool_use`,id:r.id,name:n?gr(r.name):r.name,input:r.arguments??{}});if(e.length===0)continue;o.push({role:`assistant`,content:e})}else if(t.role===`toolResult`){let n=[];n.push({type:`tool_result`,tool_use_id:t.toolCallId,content:vr(t.content),is_error:t.isError});let r=e+1;for(;r<s.length&&s[r].role===`toolResult`;){let e=s[r];n.push({type:`tool_result`,tool_use_id:e.toolCallId,content:vr(e.content),is_error:e.isError}),r++}e=r-1,o.push({role:`user`,content:n})}}if(r&&o.length>0){let e=o[o.length-1];if(e.role===`user`)if(Array.isArray(e.content)){let t=e.content[e.content.length-1];t&&(t.type===`text`||t.type===`image`||t.type===`tool_result`)&&(t.cache_control=r)}else typeof e.content==`string`&&(e.content=[{type:`text`,text:e.content,cache_control:r}])}return o}function Rr(e,t){return!!t.tools?.length&&!xr(e).supportsEagerToolInputStreaming}function zr(e,t,n,r){return e?e.map((i,a)=>{let o=i.parameters;return{name:t?gr(i.name):i.name,description:i.description,...n?{eager_input_streaming:!0}:{},input_schema:{type:`object`,properties:o.properties??{},required:o.required??[]},...r&&a===e.length-1?{cache_control:r}:{}}}):[]}function Br(e,t){switch(e){case`end_turn`:return{stopReason:`stop`};case`max_tokens`:return{stopReason:`length`};case`tool_use`:return{stopReason:`toolUse`};case`refusal`:return{stopReason:`error`,errorMessage:t?.explanation||`The model refused to complete the request`};case`pause_turn`:return{stopReason:`stop`};case`stop_sequence`:return{stopReason:`stop`};case`sensitive`:return{stopReason:`error`};default:throw Error(`Unhandled stop reason: ${e}`)}}export{Ar as streamAnthropic,Mr as streamSimpleAnthropic};
40
- //# sourceMappingURL=anthropic-DxvlKdKL.js.map
40
+ //# sourceMappingURL=anthropic-DIhts9kx.js.map
@@ -1,2 +1,2 @@
1
- import{r as e,t}from"./event-stream-BzGVPQTQ.js";import{t as n}from"./headers-Coc7mZKj.js";import{r}from"./transform-messages-XozG3iE6.js";import{t as i}from"./openai-BR_xAflc.js";import{t as a}from"./openai-prompt-cache-DJavKeDa.js";import{n as o,r as s,t as c}from"./openai-responses-shared-UQnBXHlZ.js";var l=`v1`,u=new Set([`openai`,`openai-codex`,`opencode`,`azure-openai-responses`]);function d(e){let t=new Map;if(!e)return t;for(let n of e.split(`,`)){let e=n.trim();if(!e)continue;let[r,i]=e.split(`=`,2);!r||!i||t.set(r.trim(),i.trim())}return t}function f(e,t){return t?.azureDeploymentName?t.azureDeploymentName:d({}.AZURE_OPENAI_DEPLOYMENT_NAME_MAP).get(e.id)||e.id}function p(e){if(e instanceof Error){let t=e.status,n=typeof t==`number`?t:void 0;return n===void 0?e.message:`Azure OpenAI API error (${n}): ${e.message}`}try{return JSON.stringify(e)}catch{return String(e)}}var m=(e,r,i)=>{let a=new t;return(async()=>{let t=f(e,i),o={role:`assistant`,content:[],api:`azure-openai-responses`,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let c=i?.apiKey;if(!c)throw Error(`No API key for provider: ${e.provider}`);let l=y(e,c,i),u=b(e,r,i,t),d=await i?.onPayload?.(u,e);d!==void 0&&(u=d);let f={...i?.signal?{signal:i.signal}:{},...i?.timeoutMs===void 0?{}:{timeout:i.timeoutMs},maxRetries:i?.maxRetries??0},{data:p,response:m}=await l.responses.create(u,f).withResponse();if(await i?.onResponse?.({status:m.status,headers:n(m.headers)},e),a.push({type:`start`,partial:o}),await s(p,o,a,e),i?.signal?.aborted)throw Error(`Request was aborted`);if(o.stopReason===`aborted`||o.stopReason===`error`)throw Error(`An unknown error occurred`);a.push({type:`done`,reason:o.stopReason,message:o}),a.end()}catch(e){for(let e of o.content)delete e.index,delete e.partialJson;o.stopReason=i?.signal?.aborted?`aborted`:`error`,o.errorMessage=p(e),a.push({type:`error`,reason:o.stopReason,error:o}),a.end()}})(),a},h=(t,n,i)=>{let a=i?.apiKey;if(!a)throw Error(`No API key for provider: ${t.provider}`);let o=r(t,i,a),s=i?.reasoning?e(t,i.reasoning):void 0,c=s===`off`?void 0:s;return m(t,n,{...o,reasoningEffort:c})};function g(e){let t=e.trim().replace(/\/+$/,``),n;try{n=new URL(t)}catch{throw Error(`Invalid Azure OpenAI base URL: ${e}`)}let r=n.hostname.endsWith(`.openai.azure.com`)||n.hostname.endsWith(`.cognitiveservices.azure.com`),i=n.pathname.replace(/\/+$/,``);return r&&(i===``||i===`/`||i===`/openai`)&&(n.pathname=`/openai/v1`,n.search=``),n.toString().replace(/\/+$/,``)}function _(e){return`https://${e}.openai.azure.com/openai/v1`}function v(e,t){let n=t?.azureApiVersion||{}.AZURE_OPENAI_API_VERSION||l,r=t?.azureBaseUrl?.trim()||{}.AZURE_OPENAI_BASE_URL?.trim()||void 0,i=t?.azureResourceName||{}.AZURE_OPENAI_RESOURCE_NAME,a=r;if(!a&&i&&(a=_(i)),!a&&e.baseUrl&&(a=e.baseUrl),!a)throw Error(`Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.`);return{baseUrl:g(a),apiVersion:n}}function y(e,t,n){let r={...e.headers};n?.headers&&Object.assign(r,n.headers);let{baseUrl:a,apiVersion:o}=v(e,n);return new i({apiKey:t,apiVersion:o,dangerouslyAllowBrowser:!0,defaultHeaders:r,baseURL:a})}function b(e,t,n,r){let i={model:r,input:c(e,t,u),stream:!0,prompt_cache_key:a(n?.sessionId),store:!1};return n?.maxTokens&&(i.max_output_tokens=n?.maxTokens),n?.temperature!==void 0&&(i.temperature=n?.temperature),t.tools&&t.tools.length>0&&(i.tools=o(t.tools)),e.reasoning&&(n?.reasoningEffort||n?.reasoningSummary?(i.reasoning={effort:n?.reasoningEffort?e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:`medium`,summary:n?.reasoningSummary||`auto`},i.include=[`reasoning.encrypted_content`]):e.thinkingLevelMap?.off!==null&&(i.reasoning={effort:e.thinkingLevelMap?.off??`none`})),i}export{m as streamAzureOpenAIResponses,h as streamSimpleAzureOpenAIResponses};
2
- //# sourceMappingURL=azure-openai-responses-DquyLqG4.js.map
1
+ import{r as e,t}from"./event-stream-BzGVPQTQ.js";import{t as n}from"./headers-Coc7mZKj.js";import{r}from"./transform-messages-XozG3iE6.js";import{t as i}from"./openai-BR_xAflc.js";import{t as a}from"./openai-prompt-cache-DJavKeDa.js";import{n as o,r as s,t as c}from"./openai-responses-shared-DxYQ-3t6.js";var l=`v1`,u=new Set([`openai`,`openai-codex`,`opencode`,`azure-openai-responses`]);function d(e){let t=new Map;if(!e)return t;for(let n of e.split(`,`)){let e=n.trim();if(!e)continue;let[r,i]=e.split(`=`,2);!r||!i||t.set(r.trim(),i.trim())}return t}function f(e,t){return t?.azureDeploymentName?t.azureDeploymentName:d({}.AZURE_OPENAI_DEPLOYMENT_NAME_MAP).get(e.id)||e.id}function p(e){if(e instanceof Error){let t=e.status,n=typeof t==`number`?t:void 0;return n===void 0?e.message:`Azure OpenAI API error (${n}): ${e.message}`}try{return JSON.stringify(e)}catch{return String(e)}}var m=(e,r,i)=>{let a=new t;return(async()=>{let t=f(e,i),o={role:`assistant`,content:[],api:`azure-openai-responses`,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`stop`,timestamp:Date.now()};try{let c=i?.apiKey;if(!c)throw Error(`No API key for provider: ${e.provider}`);let l=y(e,c,i),u=b(e,r,i,t),d=await i?.onPayload?.(u,e);d!==void 0&&(u=d);let f={...i?.signal?{signal:i.signal}:{},...i?.timeoutMs===void 0?{}:{timeout:i.timeoutMs},maxRetries:i?.maxRetries??0},{data:p,response:m}=await l.responses.create(u,f).withResponse();if(await i?.onResponse?.({status:m.status,headers:n(m.headers)},e),a.push({type:`start`,partial:o}),await s(p,o,a,e),i?.signal?.aborted)throw Error(`Request was aborted`);if(o.stopReason===`aborted`||o.stopReason===`error`)throw Error(`An unknown error occurred`);a.push({type:`done`,reason:o.stopReason,message:o}),a.end()}catch(e){for(let e of o.content)delete e.index,delete e.partialJson;o.stopReason=i?.signal?.aborted?`aborted`:`error`,o.errorMessage=p(e),a.push({type:`error`,reason:o.stopReason,error:o}),a.end()}})(),a},h=(t,n,i)=>{let a=i?.apiKey;if(!a)throw Error(`No API key for provider: ${t.provider}`);let o=r(t,i,a),s=i?.reasoning?e(t,i.reasoning):void 0,c=s===`off`?void 0:s;return m(t,n,{...o,reasoningEffort:c})};function g(e){let t=e.trim().replace(/\/+$/,``),n;try{n=new URL(t)}catch{throw Error(`Invalid Azure OpenAI base URL: ${e}`)}let r=n.hostname.endsWith(`.openai.azure.com`)||n.hostname.endsWith(`.cognitiveservices.azure.com`),i=n.pathname.replace(/\/+$/,``);return r&&(i===``||i===`/`||i===`/openai`)&&(n.pathname=`/openai/v1`,n.search=``),n.toString().replace(/\/+$/,``)}function _(e){return`https://${e}.openai.azure.com/openai/v1`}function v(e,t){let n=t?.azureApiVersion||{}.AZURE_OPENAI_API_VERSION||l,r=t?.azureBaseUrl?.trim()||{}.AZURE_OPENAI_BASE_URL?.trim()||void 0,i=t?.azureResourceName||{}.AZURE_OPENAI_RESOURCE_NAME,a=r;if(!a&&i&&(a=_(i)),!a&&e.baseUrl&&(a=e.baseUrl),!a)throw Error(`Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.`);return{baseUrl:g(a),apiVersion:n}}function y(e,t,n){let r={...e.headers};n?.headers&&Object.assign(r,n.headers);let{baseUrl:a,apiVersion:o}=v(e,n);return new i({apiKey:t,apiVersion:o,dangerouslyAllowBrowser:!0,defaultHeaders:r,baseURL:a})}function b(e,t,n,r){let i={model:r,input:c(e,t,u),stream:!0,prompt_cache_key:a(n?.sessionId),store:!1};return n?.maxTokens&&(i.max_output_tokens=n?.maxTokens),n?.temperature!==void 0&&(i.temperature=n?.temperature),t.tools&&t.tools.length>0&&(i.tools=o(t.tools)),e.reasoning&&(n?.reasoningEffort||n?.reasoningSummary?(i.reasoning={effort:n?.reasoningEffort?e.thinkingLevelMap?.[n.reasoningEffort]??n.reasoningEffort:`medium`,summary:n?.reasoningSummary||`auto`},i.include=[`reasoning.encrypted_content`]):e.thinkingLevelMap?.off!==null&&(i.reasoning={effort:e.thinkingLevelMap?.off??`none`})),i}export{m as streamAzureOpenAIResponses,h as streamSimpleAzureOpenAIResponses};
2
+ //# sourceMappingURL=azure-openai-responses-C8CmzcT7.js.map
@@ -1,4 +1,4 @@
1
- import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.js";import{o as r}from"./format-2UQRq9Jl.js";import{j as i}from"./index-BZqdY-T7.js";import{i as a,n as o}from"./presenter-ClgvIXow.js";var s=e=>e??t;function c(e){let t=[`last`,...e.channels.filter(Boolean)],n=e.form.deliveryChannel?.trim();n&&!t.includes(n)&&t.push(n);let r=new Set;return t.filter(e=>r.has(e)?!1:(r.add(e),!0))}function l(e,t){if(t===`last`)return`last`;let n=e.channelMeta?.find(e=>e.id===t);return n?.label?n.label:e.channelLabels?.[t]??t}function u(n,r){let i=Array.from(new Set(r.map(e=>e.trim()).filter(Boolean)));return i.length===0?t:e`<datalist id=${n}>
1
+ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.js";import{o as r}from"./format-2UQRq9Jl.js";import{j as i}from"./index-BUjIN7_u.js";import{i as a,n as o}from"./presenter-ClgvIXow.js";var s=e=>e??t;function c(e){let t=[`last`,...e.channels.filter(Boolean)],n=e.form.deliveryChannel?.trim();n&&!t.includes(n)&&t.push(n);let r=new Set;return t.filter(e=>r.has(e)?!1:(r.add(e),!0))}function l(e,t){if(t===`last`)return`last`;let n=e.channelMeta?.find(e=>e.id===t);return n?.label?n.label:e.channelLabels?.[t]??t}function u(n,r){let i=Array.from(new Set(r.map(e=>e.trim()).filter(Boolean)));return i.length===0?t:e`<datalist id=${n}>
2
2
  ${i.map(t=>e`<option value=${t}></option> `)}
3
3
  </datalist>`}function d(e){return`cron-error-${e}`}function f(e){return e===`name`?`cron-name`:e===`scheduleAt`?`cron-schedule-at`:e===`everyAmount`?`cron-every-amount`:e===`cronExpr`?`cron-cron-expr`:e===`staggerAmount`?`cron-stagger-amount`:e===`payloadText`?`cron-payload-text`:e===`payloadModel`?`cron-payload-model`:e===`payloadThinking`?`cron-payload-thinking`:e===`timeoutSeconds`?`cron-timeout-seconds`:e===`failureAlertAfter`?`cron-failure-alert-after`:e===`failureAlertCooldownSeconds`?`cron-failure-alert-cooldown-seconds`:`cron-delivery-to`}function p(e,t,r){return e===`payloadText`?t.payloadKind===`systemEvent`?n(`cron.form.mainTimelineMessage`):n(`cron.form.assistantTaskPrompt`):e===`deliveryTo`?n(r===`webhook`?`cron.form.webhookUrl`:`cron.form.to`):{name:n(`cron.form.fieldName`),scheduleAt:n(`cron.form.runAt`),everyAmount:n(`cron.form.every`),cronExpr:n(`cron.form.expression`),staggerAmount:n(`cron.form.staggerWindow`),payloadText:n(`cron.form.assistantTaskPrompt`),payloadModel:n(`cron.form.model`),payloadThinking:n(`cron.form.thinking`),timeoutSeconds:n(`cron.form.timeoutSeconds`),deliveryTo:n(`cron.form.to`),failureAlertAfter:`Failure alert after`,failureAlertCooldownSeconds:`Failure alert cooldown`}[e]}function m(e,t,n){let r=[`name`,`scheduleAt`,`everyAmount`,`cronExpr`,`staggerAmount`,`payloadText`,`payloadModel`,`payloadThinking`,`timeoutSeconds`,`deliveryTo`,`failureAlertAfter`,`failureAlertCooldownSeconds`],i=[];for(let a of r){let r=e[a];r&&i.push({key:a,label:p(a,t,n),message:r,inputId:f(a)})}return i}function h(e){let t=document.getElementById(e);t instanceof HTMLElement&&(t.scrollIntoView?.({block:`center`,behavior:`smooth`}),t.focus())}function g(r,i=!1){return e`<span>
4
4
  ${r}
@@ -741,4 +741,4 @@ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.
741
741
  <div class="cron-help cron-span-2">${n(`cron.form.jitterHelp`)}</div>
742
742
  </div>
743
743
  `}function S(r,i){return r?e`<div id=${s(i)} class="cron-help cron-error">${n(r)}</div>`:t}function C(e){return typeof e!=`number`||!Number.isFinite(e)?n(`common.na`):r(e)}export{_ as renderCron};
744
- //# sourceMappingURL=cron-BpgKjDc9.js.map
744
+ //# sourceMappingURL=cron-CtU_EfFK.js.map
@@ -1,4 +1,4 @@
1
- import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./marked.esm-DaJk4ANX.js";import{k as r}from"./index-BZqdY-T7.js";import{groupDialoguesByDate as i}from"./dialogues-DNaEWPii.js";import{i as a,r as o}from"./cognitive-shared-24G6II9B.js";function s(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function c(e){return!!(e.selectedAgentId&&e.selectedFilename)}function l(t){let{list:n,loading:r,error:i,selectedAgentId:a,selectedFilename:o}=t;if(r&&!n)return e`
1
+ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./marked.esm-DaJk4ANX.js";import{k as r}from"./index-BUjIN7_u.js";import{groupDialoguesByDate as i}from"./dialogues-DNaEWPii.js";import{i as a,r as o}from"./cognitive-shared-24G6II9B.js";function s(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function c(e){return!!(e.selectedAgentId&&e.selectedFilename)}function l(t){let{list:n,loading:r,error:i,selectedAgentId:a,selectedFilename:o}=t;if(r&&!n)return e`
2
2
  <div style="display:flex;flex-direction:column;gap:8px;overflow-y:auto;">
3
3
  <h3 style="font-size:16px;font-weight:600;margin:0;">聊天记录</h3>
4
4
  <div class="muted" style="text-align:center;padding:32px 16px;">加载中…</div>
@@ -77,4 +77,4 @@ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./marked.esm-DaJ
77
77
  </div>
78
78
  </div>
79
79
  `:o(`对话为空`,`该文件没有内容。`):o(`选择一个对话`,`从左侧选择 agent 和日期下的对话以查看完整内容。`)}function p(e){let t=c(e),n=e.selectedFilename?`${e.selectedAgentId??``} · ${e.selectedFilename}`:void 0;return a(l(e),f(e),t,e.onClearSelection,n)}export{p as renderDialogues};
80
- //# sourceMappingURL=dialogues-CImsVt84.js.map
80
+ //# sourceMappingURL=dialogues-CUTiZ8zz.js.map
@@ -1,4 +1,4 @@
1
- import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.js";import{o as r}from"./format-2UQRq9Jl.js";import{A as i}from"./index-BZqdY-T7.js";function a(e){switch(e){case`user`:return`User`;case`assistant`:return`Assistant`;case`tool`:return`Tool`;case`system`:return`System`;default:return e}}function o(e){switch(e){case`user`:return`pill accent`;case`assistant`:return`pill`;case`tool`:return`pill muted`;case`system`:return`pill dim`;default:return`pill`}}function s(e){if(typeof e==`string`)return e;if(Array.isArray(e))return e.filter(e=>typeof e==`object`&&!!e).map(e=>e.type===`text`&&typeof e.text==`string`?e.text:``).filter(Boolean).join(`
1
+ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.js";import{o as r}from"./format-2UQRq9Jl.js";import{A as i}from"./index-BUjIN7_u.js";function a(e){switch(e){case`user`:return`User`;case`assistant`:return`Assistant`;case`tool`:return`Tool`;case`system`:return`System`;default:return e}}function o(e){switch(e){case`user`:return`pill accent`;case`assistant`:return`pill`;case`tool`:return`pill muted`;case`system`:return`pill dim`;default:return`pill`}}function s(e){if(typeof e==`string`)return e;if(Array.isArray(e))return e.filter(e=>typeof e==`object`&&!!e).map(e=>e.type===`text`&&typeof e.text==`string`?e.text:``).filter(Boolean).join(`
2
2
  `);if(e==null)return``;try{return typeof e==`object`?JSON.stringify(e):String(e)}catch{return``}}function c(e){return e==null||!Number.isFinite(e)?``:r(e)}function l(e){if(!e)return``;let t=e.split(`:`);if(t.length>=2){let e=t[1];if(t.length>=3){let n=t[2];return n===`main`?`${e} / main`:n.startsWith(`ou_`)?`${e} / ${n.slice(0,12)}…`:n===`cron`?`${e} / 定时任务`:`${e} / ${n.slice(0,20)}`}return e}return e.slice(0,30)}function u(n,r,a,o){let s=n.label||n.displayName||``,u=c(n.updatedAt),d=l(n.key);return e`
3
3
  <div
4
4
  class="card ${r?`selected`:``}"
@@ -86,4 +86,4 @@ import{i as e,n as t}from"./lit-Cl9PTnWs.js";import{r as n}from"./i18n-BRubg6Da.
86
86
  </div>
87
87
  </section>
88
88
  `}function p(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>{let t=e.key.toLowerCase(),r=(e.label??e.displayName??``).toLowerCase();return t.includes(n)||r.includes(n)})}export{f as renderHistory};
89
- //# sourceMappingURL=history-B4feNm8p.js.map
89
+ //# sourceMappingURL=history-BYYkqRAo.js.map