sliccy 5.16.0 → 5.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/node-server/electron-controller.d.ts +0 -1
  2. package/dist/node-server/electron-controller.js +4 -10
  3. package/dist/node-server/electron-main.js +5 -13
  4. package/dist/node-server/electron-runtime.d.ts +0 -4
  5. package/dist/node-server/electron-runtime.js +4 -21
  6. package/dist/node-server/index.js +28 -178
  7. package/dist/node-server/runtime-flags.d.ts +0 -1
  8. package/dist/node-server/runtime-flags.js +184 -170
  9. package/dist/ui/assets/{account-store-BVzBgQ-v.js → account-store-BlJxZ8bA.js} +2 -2
  10. package/dist/ui/assets/{account-store-CVlnJB81.js → account-store-CXTiaOBF.js} +2 -2
  11. package/dist/ui/assets/{adobe-SkYkxgg4.js → adobe-4-CD_R9o.js} +1 -1
  12. package/dist/ui/assets/{adobe-BFJRWiBP.js → adobe-E2DIgnz1.js} +1 -1
  13. package/dist/ui/assets/{adobe-oauth-state-BlTiu0EW.js → adobe-oauth-state-B9YxNQJp.js} +1 -1
  14. package/dist/ui/assets/{agent-message-to-chat-IZJU7XsF.js → agent-message-to-chat-DZEPoDrl.js} +1 -1
  15. package/dist/ui/assets/{apps-CGs6f4_D.js → apps-Fb83z-vc.js} +1 -1
  16. package/dist/ui/assets/{azure-openai-BPKSSyhH.js → azure-openai-D7rHwq_y.js} +1 -1
  17. package/dist/ui/assets/{azure-openai-CGgQnr10.js → azure-openai-Dsscn7WN.js} +1 -1
  18. package/dist/ui/assets/{composer-speech-HQRRG5ym.js → composer-speech-DJ-Mw0M5.js} +1 -1
  19. package/dist/ui/assets/{connect-surface-CK4b42-9.js → connect-surface-C-4d0ls3.js} +1 -1
  20. package/dist/ui/assets/dip-BINZ1ICD.js +1 -0
  21. package/dist/ui/assets/{dist-x2GYqOXm.js → dist-CseAKSVh.js} +1 -1
  22. package/dist/ui/assets/{dist-DtpnSVfI.js → dist-V73PvJP5.js} +1 -1
  23. package/dist/ui/assets/{ensure-speech-assets-Dn8D8dRb.js → ensure-speech-assets-CpXHTB8K.js} +1 -1
  24. package/dist/ui/assets/esp8266-CiVYkcWu.js +1 -0
  25. package/dist/ui/assets/{esptool-operations-D9gFmxN7.js → esptool-operations-BrkzeaKN.js} +2 -2
  26. package/dist/ui/assets/{fs-BdfVEExy.js → fs-DR-xqM-9.js} +1 -1
  27. package/dist/ui/assets/{fs-Bd593l61.js → fs-e_JED6o9.js} +2 -2
  28. package/dist/ui/assets/{github-B8weBp2j.js → github-D1teU7MS.js} +1 -1
  29. package/dist/ui/assets/{github-8kxwir4q.js → github-Db5GCKq4.js} +2 -2
  30. package/dist/ui/assets/{github-copilot-CPYs96aw.js → github-copilot-BhDan7GW.js} +1 -1
  31. package/dist/ui/assets/{github-copilot-DdE_r53L.js → github-copilot-DC5kS9aJ.js} +1 -1
  32. package/dist/ui/assets/{hear-Dk1gIguU.js → hear-CISOdKc7.js} +1 -1
  33. package/dist/ui/assets/{hear-J30GxNJC.js → hear-ST2A8Ojf.js} +1 -1
  34. package/dist/ui/assets/{kernel-worker-CHH5Mx3j.js → kernel-worker-DElXqFYz.js} +18 -18
  35. package/dist/ui/assets/{kokoro-engine-DXi-4Lk1.js → kokoro-engine-pjPKeKE-.js} +1 -1
  36. package/dist/ui/assets/{lick-ws-bridge-Di_eIPel.js → lick-ws-bridge-CgLt3-md.js} +1 -1
  37. package/dist/ui/assets/{lick-ws-bridge-BErTRf2C.js → lick-ws-bridge-uMf3lFqX.js} +1 -1
  38. package/dist/ui/assets/{local-llm-Bhn3zPzV.js → local-llm-CYNOX_zH.js} +1 -1
  39. package/dist/ui/assets/{main-CBEoDTj_.js → main-99mCaNK1.js} +4 -4
  40. package/dist/ui/assets/{mime-types-CIg5nqjf.js → mime-types-ugOWOUZ9.js} +1 -1
  41. package/dist/ui/assets/{mount-D0PTVzqd.js → mount-CIoB0cu-.js} +2 -2
  42. package/dist/ui/assets/{mount-C4pLRV8G.js → mount-DDFp4uJK.js} +1 -1
  43. package/dist/ui/assets/{new-session-D3cDkirv.js → new-session-yO9a-skO.js} +2 -2
  44. package/dist/ui/assets/{oauth-bootstrap-CW0Iq4DJ.js → oauth-bootstrap-BjE1yxq_.js} +2 -2
  45. package/dist/ui/assets/{openai-codex-BhKQGaPl.js → openai-codex-CxQ8e4UF.js} +1 -1
  46. package/dist/ui/assets/{openai-codex-jRbHGzPJ.js → openai-codex-D9qpuznd.js} +1 -1
  47. package/dist/ui/assets/{page-follower-tray-B7V5Hdk3.js → page-follower-tray-DWGutKN6.js} +1 -1
  48. package/dist/ui/assets/{panel-rpc-handlers-HGirMMc_.js → panel-rpc-handlers-Bh3kNYD4.js} +2 -2
  49. package/dist/ui/assets/{provider-fwp5doUF.js → provider-BHsa0Rrz.js} +1 -1
  50. package/dist/ui/assets/{provider-T0IaN12Z.js → provider-BWRxgi1b.js} +2 -2
  51. package/dist/ui/assets/provider-store-access-Ct7bph7W.js +1 -0
  52. package/dist/ui/assets/provider-store-access-Dxm0WwoL.js +1 -0
  53. package/dist/ui/assets/{providers-BJpLjsbl.js → providers-D3nv5fF8.js} +1 -1
  54. package/dist/ui/assets/{quick-llm-DmM8V850.js → quick-llm-nkhmm4Rf.js} +1 -1
  55. package/dist/ui/assets/session-freezer-BoHtcQZ7.js +1 -0
  56. package/dist/ui/assets/{shared-Cddyus7m.js → shared-mxZcIrza.js} +1 -1
  57. package/dist/ui/assets/speak-DoCdEEhw.js +3 -0
  58. package/dist/ui/assets/speak-zyz6ag-g.js +1 -0
  59. package/dist/ui/assets/{sprinkle-bridge-Cd-pvRLY.js → sprinkle-bridge-BB1Ge79t.js} +1 -1
  60. package/dist/ui/assets/{sprinkle-manager-Cu6u-z69.js → sprinkle-manager-BqIyFmnb.js} +1 -1
  61. package/dist/ui/assets/{store-BaMl32ka.js → store-CYnFF7yg.js} +1 -1
  62. package/dist/ui/assets/{sudo-DBuMJPLn.js → sudo-Bs4eVV8G.js} +1 -1
  63. package/dist/ui/assets/{transformers-env-CEn9s_Z3.js → transformers-env-B2qCXqw-.js} +1 -1
  64. package/dist/ui/assets/{transformers-env-BNvU2_5X.js → transformers-env-t6_cAHU1.js} +1 -1
  65. package/dist/ui/assets/{tray-leader-BufiJcof.js → tray-leader-BjtMXiMR.js} +1 -1
  66. package/dist/ui/assets/{tray-leave-runtime-CPPXBBg9.js → tray-leave-runtime-BoCD9arc.js} +1 -1
  67. package/dist/ui/assets/{upgrade-detection-D19M3hIS.js → upgrade-detection-CLuyCKRm.js} +1 -1
  68. package/dist/ui/assets/voice-reply-BLN1aJMo.js +1 -0
  69. package/dist/ui/assets/{wc-attach-jjQplnwa.js → wc-attach-BoWNytPR.js} +2 -2
  70. package/dist/ui/assets/{wc-detached-Dz2uBF5T.js → wc-detached-Cyqt2rB-.js} +1 -1
  71. package/dist/ui/assets/{wc-extension-BmxoVHlX.js → wc-extension-TU20M11H.js} +2 -2
  72. package/dist/ui/assets/{wc-follower-Cr4dFgMb.js → wc-follower-J9dIOTtr.js} +2 -2
  73. package/dist/ui/assets/wc-live-C00evhz8.js +253 -0
  74. package/dist/ui/assets/{wc-nav-CXbbv1oy.js → wc-nav-CDGop7zp.js} +2 -2
  75. package/dist/ui/assets/{wc-onboarding-n0z_itcq.js → wc-onboarding-BJdN1JOs.js} +2 -2
  76. package/dist/ui/assets/{wc-placeholder-D5zdaLbn.js → wc-placeholder-CX_bmbWN.js} +3 -3
  77. package/dist/ui/assets/{wc-settings-qtsuiHg1.js → wc-settings-pnqs-c98.js} +2 -2
  78. package/dist/ui/assets/{wc-shell-B2jkbIzt.js → wc-shell-DoOezClu.js} +963 -786
  79. package/dist/ui/assets/{wc-sprinkles-BAKT9WrK.js → wc-sprinkles-B3Di9lOW.js} +2 -2
  80. package/dist/ui/assets/{wc-tray-cnJoLvS2.js → wc-tray-D-6xnB2i.js} +2 -2
  81. package/dist/ui/assets/{whisper-engine-BSOAcb8a.js → whisper-engine-C_zUz3xO.js} +1 -1
  82. package/dist/ui/assets/{whisper-session-CW3OA9V7.js → whisper-session-7nSKj94g.js} +2 -2
  83. package/dist/ui/assets/{xai-grok---YndVHa.js → xai-grok-C3lfFdpm.js} +1 -1
  84. package/dist/ui/assets/{xai-grok-Da_y6R6g.js → xai-grok-Di62sFOW.js} +1 -1
  85. package/dist/ui/electron-overlay-entry.js +299 -6180
  86. package/dist/ui/index.html +2 -2
  87. package/dist/ui/packages/webapp/index.html +2 -2
  88. package/package.json +8 -6
  89. package/dist/node-server/ui-serving.d.ts +0 -18
  90. package/dist/node-server/ui-serving.js +0 -91
  91. package/dist/ui/assets/dip-NVUHjmhc.js +0 -1
  92. package/dist/ui/assets/esp8266-DL6QxCn7.js +0 -1
  93. package/dist/ui/assets/provider-store-access-BVRQIXtM.js +0 -1
  94. package/dist/ui/assets/provider-store-access-DTw81yRr.js +0 -1
  95. package/dist/ui/assets/session-freezer-D6XPq9Ct.js +0 -1
  96. package/dist/ui/assets/speak-BLaMFnqh.js +0 -3
  97. package/dist/ui/assets/speak-BM_ACI3J.js +0 -1
  98. package/dist/ui/assets/voice-reply--p0t9Lgo.js +0 -1
  99. package/dist/ui/assets/wc-live-DbLgOajX.js +0 -253
  100. package/dist/ui/electron-overlay-entry.css +0 -37
@@ -4,178 +4,192 @@ function looksLikeUrl(value) {
4
4
  return /^[a-z][a-z0-9+.-]*:\/\//i.test(value.trim());
5
5
  }
6
6
  const VALID_LOG_LEVELS = new Set(['debug', 'info', 'warn', 'error']);
7
+ function createDefaultFlags() {
8
+ return {
9
+ serveOnly: false,
10
+ cdpPort: DEFAULT_CLI_CDP_PORT,
11
+ explicitCdpPort: false,
12
+ electron: false,
13
+ electronApp: null,
14
+ kill: false,
15
+ lead: false,
16
+ leadWorkerBaseUrl: null,
17
+ profile: null,
18
+ join: false,
19
+ joinUrl: null,
20
+ logLevel: 'info',
21
+ logDir: null,
22
+ prompt: null,
23
+ envFile: null,
24
+ version: false,
25
+ hosted: false,
26
+ };
27
+ }
28
+ /** Next argv entry, but only when it exists and is not itself a `--` flag. */
29
+ function nextValueArg(argv, index) {
30
+ const nextArg = argv[index + 1];
31
+ return nextArg && !nextArg.startsWith('--') ? nextArg : null;
32
+ }
33
+ /** Bare boolean flags that consume no following token. Returns whether handled. */
34
+ function applySimpleFlag(flags, arg) {
35
+ if (arg === 'version' || arg === '--version' || arg === '-v') {
36
+ flags.version = true;
37
+ return true;
38
+ }
39
+ if (arg === '--serve-only') {
40
+ flags.serveOnly = true;
41
+ return true;
42
+ }
43
+ if (arg === '--hosted') {
44
+ flags.hosted = true;
45
+ return true;
46
+ }
47
+ if (arg === '--kill') {
48
+ flags.kill = true;
49
+ return true;
50
+ }
51
+ return false;
52
+ }
53
+ /** `--flag=value` style flags that consume no following token. Returns whether handled. */
54
+ function applyEqualsFlag(flags, arg) {
55
+ if (arg.startsWith('--cdp-port=')) {
56
+ const value = Number.parseInt(arg.slice('--cdp-port='.length), 10);
57
+ if (Number.isFinite(value) && value > 0) {
58
+ flags.cdpPort = value;
59
+ flags.explicitCdpPort = true;
60
+ }
61
+ return true;
62
+ }
63
+ if (arg.startsWith('--log-level=')) {
64
+ const value = arg.slice('--log-level='.length);
65
+ if (VALID_LOG_LEVELS.has(value)) {
66
+ flags.logLevel = value;
67
+ }
68
+ return true;
69
+ }
70
+ if (arg.startsWith('--log-dir=')) {
71
+ flags.logDir = arg.slice('--log-dir='.length) || null;
72
+ return true;
73
+ }
74
+ if (arg.startsWith('--prompt=')) {
75
+ flags.prompt = arg.slice('--prompt='.length) || null;
76
+ return true;
77
+ }
78
+ if (arg.startsWith('--env-file=')) {
79
+ flags.envFile = arg.slice('--env-file='.length) || null;
80
+ return true;
81
+ }
82
+ if (arg.startsWith('--profile=')) {
83
+ flags.profile = arg.slice('--profile='.length).trim() || null;
84
+ return true;
85
+ }
86
+ if (arg.startsWith('--lead=')) {
87
+ flags.lead = true;
88
+ flags.leadWorkerBaseUrl = arg.slice('--lead='.length).trim() || null;
89
+ return true;
90
+ }
91
+ if (arg.startsWith('--join=')) {
92
+ flags.join = true;
93
+ flags.joinUrl = arg.slice('--join='.length).trim() || null;
94
+ return true;
95
+ }
96
+ if (arg.startsWith('--electron-app=')) {
97
+ flags.electron = true;
98
+ flags.electronApp = arg.slice('--electron-app='.length).trim() || null;
99
+ return true;
100
+ }
101
+ return false;
102
+ }
103
+ /** `--prompt`/`--env-file`/`--profile` followed by a value token. Returns tokens consumed. */
104
+ function applyPlainValueFlag(flags, argv, index, arg) {
105
+ const next = nextValueArg(argv, index);
106
+ if (next === null) {
107
+ return 0;
108
+ }
109
+ if (arg === '--prompt') {
110
+ flags.prompt = next;
111
+ }
112
+ else if (arg === '--env-file') {
113
+ flags.envFile = next;
114
+ }
115
+ else {
116
+ flags.profile = next.trim() || null;
117
+ }
118
+ return 1;
119
+ }
120
+ /** `--lead`/`--join` followed by a URL-looking value token. Returns tokens consumed. */
121
+ function applyUrlFlag(flags, argv, index, arg) {
122
+ const isLead = arg === '--lead';
123
+ if (isLead) {
124
+ flags.lead = true;
125
+ }
126
+ else {
127
+ flags.join = true;
128
+ }
129
+ const next = nextValueArg(argv, index);
130
+ if (next === null || !looksLikeUrl(next)) {
131
+ return 0;
132
+ }
133
+ const value = next.trim() || null;
134
+ if (isLead) {
135
+ flags.leadWorkerBaseUrl = value;
136
+ }
137
+ else {
138
+ flags.joinUrl = value;
139
+ }
140
+ return 1;
141
+ }
142
+ /** `--electron`/`--electron-app` followed by an app-path value token. Returns tokens consumed. */
143
+ function applyElectronFlag(flags, argv, index, arg) {
144
+ flags.electron = true;
145
+ const next = nextValueArg(argv, index);
146
+ if (next === null) {
147
+ return 0;
148
+ }
149
+ if (arg === '--electron' && flags.electronApp) {
150
+ return 0;
151
+ }
152
+ flags.electronApp = next.trim() || null;
153
+ return 1;
154
+ }
155
+ /** Bare positional arg captured as the electron app path when applicable. */
156
+ function applyPositional(flags, arg) {
157
+ if (flags.electron && !arg.startsWith('--') && !flags.electronApp) {
158
+ flags.electronApp = arg.trim() || null;
159
+ }
160
+ }
161
+ /** Value-consuming flags plus the positional fallback. Returns extra tokens consumed. */
162
+ function applyValueFlag(flags, argv, index, arg) {
163
+ if (arg === '--prompt' || arg === '--env-file' || arg === '--profile') {
164
+ return applyPlainValueFlag(flags, argv, index, arg);
165
+ }
166
+ if (arg === '--lead' || arg === '--join') {
167
+ return applyUrlFlag(flags, argv, index, arg);
168
+ }
169
+ if (arg === '--electron' || arg === '--electron-app') {
170
+ return applyElectronFlag(flags, argv, index, arg);
171
+ }
172
+ applyPositional(flags, arg);
173
+ return 0;
174
+ }
175
+ /** Dispatch a single token. Returns the number of additional argv entries consumed. */
176
+ function applyToken(flags, argv, index) {
177
+ const arg = argv[index];
178
+ if (applySimpleFlag(flags, arg)) {
179
+ return 0;
180
+ }
181
+ if (applyEqualsFlag(flags, arg)) {
182
+ return 0;
183
+ }
184
+ return applyValueFlag(flags, argv, index, arg);
185
+ }
7
186
  export function parseCliRuntimeFlags(argv) {
8
- let dev = false;
9
- let serveOnly = false;
10
- let cdpPort = DEFAULT_CLI_CDP_PORT;
11
- let explicitCdpPort = false;
12
- let electron = false;
13
- let electronApp = null;
14
- let kill = false;
15
- let lead = false;
16
- let leadWorkerBaseUrl = null;
17
- let profile = null;
18
- let join = false;
19
- let joinUrl = null;
20
- let logLevel = 'info';
21
- let logDir = null;
22
- let prompt = null;
23
- let envFile = null;
24
- let version = false;
25
- let hosted = false;
187
+ const flags = createDefaultFlags();
26
188
  for (let index = 0; index < argv.length; index += 1) {
27
- const arg = argv[index];
28
- if (arg === 'version' || arg === '--version' || arg === '-v') {
29
- version = true;
30
- continue;
31
- }
32
- if (arg === '--dev') {
33
- dev = true;
34
- continue;
35
- }
36
- if (arg === '--serve-only') {
37
- serveOnly = true;
38
- continue;
39
- }
40
- if (arg === '--hosted') {
41
- hosted = true;
42
- continue;
43
- }
44
- if (arg.startsWith('--cdp-port=')) {
45
- const value = Number.parseInt(arg.slice('--cdp-port='.length), 10);
46
- if (Number.isFinite(value) && value > 0) {
47
- cdpPort = value;
48
- explicitCdpPort = true;
49
- }
50
- continue;
51
- }
52
- if (arg.startsWith('--log-level=')) {
53
- const value = arg.slice('--log-level='.length);
54
- if (VALID_LOG_LEVELS.has(value)) {
55
- logLevel = value;
56
- }
57
- continue;
58
- }
59
- if (arg.startsWith('--log-dir=')) {
60
- logDir = arg.slice('--log-dir='.length) || null;
61
- continue;
62
- }
63
- if (arg.startsWith('--prompt=')) {
64
- prompt = arg.slice('--prompt='.length) || null;
65
- continue;
66
- }
67
- if (arg === '--prompt') {
68
- const nextArg = argv[index + 1];
69
- if (nextArg && !nextArg.startsWith('--')) {
70
- prompt = nextArg;
71
- index += 1;
72
- }
73
- continue;
74
- }
75
- if (arg.startsWith('--env-file=')) {
76
- envFile = arg.slice('--env-file='.length) || null;
77
- continue;
78
- }
79
- if (arg === '--env-file') {
80
- const nextArg = argv[index + 1];
81
- if (nextArg && !nextArg.startsWith('--')) {
82
- envFile = nextArg;
83
- index += 1;
84
- }
85
- continue;
86
- }
87
- if (arg === '--electron') {
88
- electron = true;
89
- const nextArg = argv[index + 1];
90
- if (nextArg && !nextArg.startsWith('--') && !electronApp) {
91
- electronApp = nextArg.trim() || null;
92
- index += 1;
93
- }
94
- continue;
95
- }
96
- if (arg === '--kill') {
97
- kill = true;
98
- continue;
99
- }
100
- if (arg === '--profile') {
101
- const nextArg = argv[index + 1];
102
- if (nextArg && !nextArg.startsWith('--')) {
103
- profile = nextArg.trim() || null;
104
- index += 1;
105
- }
106
- continue;
107
- }
108
- if (arg.startsWith('--profile=')) {
109
- profile = arg.slice('--profile='.length).trim() || null;
110
- continue;
111
- }
112
- if (arg === '--lead') {
113
- lead = true;
114
- const nextArg = argv[index + 1];
115
- if (nextArg && !nextArg.startsWith('--') && looksLikeUrl(nextArg)) {
116
- leadWorkerBaseUrl = nextArg.trim() || null;
117
- index += 1;
118
- }
119
- continue;
120
- }
121
- if (arg.startsWith('--lead=')) {
122
- lead = true;
123
- leadWorkerBaseUrl = arg.slice('--lead='.length).trim() || null;
124
- continue;
125
- }
126
- if (arg === '--join') {
127
- join = true;
128
- const nextArg = argv[index + 1];
129
- if (nextArg && !nextArg.startsWith('--') && looksLikeUrl(nextArg)) {
130
- joinUrl = nextArg.trim() || null;
131
- index += 1;
132
- }
133
- continue;
134
- }
135
- if (arg.startsWith('--join=')) {
136
- join = true;
137
- joinUrl = arg.slice('--join='.length).trim() || null;
138
- continue;
139
- }
140
- if (arg === '--electron-app') {
141
- electron = true;
142
- const nextArg = argv[index + 1];
143
- if (nextArg && !nextArg.startsWith('--')) {
144
- electronApp = nextArg.trim() || null;
145
- index += 1;
146
- }
147
- continue;
148
- }
149
- if (arg.startsWith('--electron-app=')) {
150
- electron = true;
151
- electronApp = arg.slice('--electron-app='.length).trim() || null;
152
- continue;
153
- }
154
- if (electron && !arg.startsWith('--') && !electronApp) {
155
- electronApp = arg.trim() || null;
156
- }
189
+ index += applyToken(flags, argv, index);
157
190
  }
158
- if (electron && !explicitCdpPort) {
159
- cdpPort = DEFAULT_ELECTRON_ATTACH_CDP_PORT;
191
+ if (flags.electron && !flags.explicitCdpPort) {
192
+ flags.cdpPort = DEFAULT_ELECTRON_ATTACH_CDP_PORT;
160
193
  }
161
- return {
162
- dev,
163
- serveOnly,
164
- cdpPort,
165
- explicitCdpPort,
166
- electron,
167
- electronApp,
168
- kill,
169
- lead,
170
- leadWorkerBaseUrl,
171
- profile,
172
- join,
173
- joinUrl,
174
- logLevel,
175
- logDir,
176
- prompt,
177
- envFile,
178
- version,
179
- hosted,
180
- };
194
+ return flags;
181
195
  }
@@ -1,4 +1,4 @@
1
- import{n as e,t}from"./chunk-aKtaBQYM.js";import{t as n}from"./logger-LESFN7Hj.js";import{h as r,m as i,o as a,r as o,t as s}from"./proxied-fetch-I4cndszg.js";import{i as c,r as l}from"./tool-ui-t6ocn6AG.js";import{n as u,r as d}from"./panel-rpc-D0J5pskz.js";import{n as f,o as p,t as m}from"./providers-BJpLjsbl.js";import{c as h,d as g,r as _,t as v,u as y}from"./bedrock-camp-C1lmRgcD.js";import{d as b,l as x,u as S}from"./transform-messages-BjP6vDPY.js";async function ee(e,t,n,r,i,a){let o=[...e],s={...t,messages:[...t.messages,...e]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let t of e)await r({type:`message_start`,message:t}),await r({type:`message_end`,message:t});return await ne(s,o,n,i,r,a),o}async function te(e,t,n,r,i){if(e.messages.length===0)throw Error(`Cannot continue: no messages in context`);if(e.messages[e.messages.length-1].role===`assistant`)throw Error(`Cannot continue from message role: assistant`);let a=[],o={...e};return await n({type:`agent_start`}),await n({type:`turn_start`}),await ne(o,a,t,r,n,i),a}async function ne(e,t,n,r,i,a){let o=e,s=n,c=!0,l=await s.getSteeringMessages?.()||[];for(;;){let e=!0;for(;e||l.length>0;){if(c?c=!1:await i({type:`turn_start`}),l.length>0){for(let e of l)await i({type:`message_start`,message:e}),await i({type:`message_end`,message:e}),o.messages.push(e),t.push(e);l=[]}let n=await re(o,s,r,i,a);if(t.push(n),n.stopReason===`error`||n.stopReason===`aborted`){await i({type:`turn_end`,message:n,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let u=n.content.filter(e=>e.type===`toolCall`),d=[];if(e=!1,u.length>0){let a=await ie(o,n,s,r,i);d.push(...a.messages),e=!a.terminate;for(let e of d)o.messages.push(e),t.push(e)}await i({type:`turn_end`,message:n,toolResults:d});let f={message:n,toolResults:d,context:o,newMessages:t},p=await s.prepareNextTurn?.(f);if(p&&(o=p.context??o,s={...s,model:p.model??s.model,reasoning:p.thinkingLevel===void 0?s.reasoning:p.thinkingLevel===`off`?void 0:p.thinkingLevel}),await s.shouldStopAfterTurn?.({message:n,toolResults:d,context:o,newMessages:t})){await i({type:`agent_end`,messages:t});return}l=await s.getSteeringMessages?.()||[]}let n=await s.getFollowUpMessages?.()||[];if(n.length>0){l=n;continue}break}await i({type:`agent_end`,messages:t})}async function re(e,t,n,r,i){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,n));let o=await t.convertToLlm(a),s={systemPrompt:e.systemPrompt,messages:o,tools:e.tools},c=i||g,l=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,u=await c(t.model,s,{...t,apiKey:l,signal:n}),d=null,f=!1;for await(let t of u)switch(t.type){case`start`:d=t.partial,e.messages.push(d),f=!0,await r({type:`message_start`,message:{...d}});break;case`text_start`:case`text_delta`:case`text_end`:case`thinking_start`:case`thinking_delta`:case`thinking_end`:case`toolcall_start`:case`toolcall_delta`:case`toolcall_end`:d&&(d=t.partial,e.messages[e.messages.length-1]=d,await r({type:`message_update`,assistantMessageEvent:t,message:{...d}}));break;case`done`:case`error`:{let t=await u.result();return f?e.messages[e.messages.length-1]=t:e.messages.push(t),f||await r({type:`message_start`,message:{...t}}),await r({type:`message_end`,message:t}),t}}let p=await u.result();return f?e.messages[e.messages.length-1]=p:(e.messages.push(p),await r({type:`message_start`,message:{...p}})),await r({type:`message_end`,message:p}),p}async function ie(e,t,n,r,i){let a=t.content.filter(e=>e.type===`toolCall`),o=a.some(t=>e.tools?.find(e=>e.name===t.name)?.executionMode===`sequential`);return n.toolExecution===`sequential`||o?ae(e,t,a,n,r,i):oe(e,t,a,n,r,i)}async function ae(e,t,n,r,i,a){let o=[],s=[];for(let c of n){await a({type:`tool_execution_start`,toolCallId:c.id,toolName:c.name,args:c.arguments});let n=await ce(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await ue(e,t,n,await le(n,i,a),r,i),await de(l,a);let u=fe(l);if(await pe(u,a),o.push(l),s.push(u),i?.aborted)break}return{messages:s,terminate:C(o)}}async function oe(e,t,n,r,i,a){let o=[];for(let s of n){await a({type:`tool_execution_start`,toolCallId:s.id,toolName:s.name,args:s.arguments});let n=await ce(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};if(await de(e,a),o.push(e),i?.aborted)break;continue}if(o.push(async()=>{let o=await ue(e,t,n,await le(n,i,a),r,i);return await de(o,a),o}),i?.aborted)break}let s=await Promise.all(o.map(e=>typeof e==`function`?e():Promise.resolve(e))),c=[];for(let e of s){let t=fe(e);await pe(t,a),c.push(t)}return{messages:c,terminate:C(s)}}function C(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function se(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function ce(e,t,n,r,i){let a=e.tools?.find(e=>e.name===n.name);if(!a)return{kind:`immediate`,result:w(`Tool ${n.name} not found`),isError:!0};try{let o=h(a,se(a,n));if(r.beforeToolCall){let a=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:o,context:e},i);if(i?.aborted)return{kind:`immediate`,result:w(`Operation aborted`),isError:!0};if(a?.block)return{kind:`immediate`,result:w(a.reason||`Tool execution was blocked`),isError:!0}}return i?.aborted?{kind:`immediate`,result:w(`Operation aborted`),isError:!0}:{kind:`prepared`,toolCall:n,tool:a,args:o}}catch(e){return{kind:`immediate`,result:w(e instanceof Error?e.message:String(e)),isError:!0}}}async function le(e,t,n){let r=[];try{let i=await e.tool.execute(e.toolCall.id,e.args,t,t=>{r.push(Promise.resolve(n({type:`tool_execution_update`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,args:e.toolCall.arguments,partialResult:t})))});return await Promise.all(r),{result:i,isError:!1}}catch(e){return await Promise.all(r),{result:w(e instanceof Error?e.message:String(e)),isError:!0}}}async function ue(e,t,n,r,i,a){let o=r.result,s=r.isError;if(i.afterToolCall)try{let r=await i.afterToolCall({assistantMessage:t,toolCall:n.toolCall,args:n.args,result:o,isError:s,context:e},a);r&&(o={content:r.content??o.content,details:r.details??o.details,terminate:r.terminate??o.terminate},s=r.isError??s)}catch(e){o=w(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function w(e){return{content:[{type:`text`,text:e}],details:{}}}async function de(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function fe(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content,details:e.result.details,isError:e.isError,timestamp:Date.now()}}async function pe(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function me(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const he={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ge={id:`unknown`,name:`unknown`,api:`unknown`,provider:`unknown`,baseUrl:``,reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function _e(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??ge,thinkingLevel:e?.thinkingLevel??`off`,get tools(){return t},set tools(e){t=e.slice()},get messages(){return n},set messages(e){n=e.slice()},isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0}}var ve=class{messages=[];mode;constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}drain(){if(this.mode===`all`){let e=this.messages.slice();return this.messages=[],e}let e=this.messages[0];return e?(this.messages=this.messages.slice(1),[e]):[]}clear(){this.messages=[]}},ye=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFn;getApiKey;onPayload;onResponse;beforeToolCall;afterToolCall;prepareNextTurn;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e={}){this._state=_e(e.initialState),this.convertToLlm=e.convertToLlm??me,this.transformContext=e.transformContext,this.streamFn=e.streamFn??g,this.getApiKey=e.getApiKey,this.onPayload=e.onPayload,this.onResponse=e.onResponse,this.beforeToolCall=e.beforeToolCall,this.afterToolCall=e.afterToolCall,this.prepareNextTurn=e.prepareNextTurn,this.steeringQueue=new ve(e.steeringMode??`one-at-a-time`),this.followUpQueue=new ve(e.followUpMode??`one-at-a-time`),this.sessionId=e.sessionId,this.thinkingBudgets=e.thinkingBudgets,this.transport=e.transport??`auto`,this.maxRetryDelayMs=e.maxRetryDelayMs,this.toolExecution=e.toolExecution??`parallel`}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}get state(){return this._state}set steeringMode(e){this.steeringQueue.mode=e}get steeringMode(){return this.steeringQueue.mode}set followUpMode(e){this.followUpQueue.mode=e}get followUpMode(){return this.followUpQueue.mode}steer(e){this.steeringQueue.enqueue(e)}followUp(e){this.followUpQueue.enqueue(e)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(){this.activeRun?.abortController.abort()}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(e,t){if(this.activeRun)throw Error(`Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.`);let n=this.normalizePromptInput(e,t);await this.runPromptMessages(n)}async continue(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before continuing.`);let e=this._state.messages[this._state.messages.length-1];if(!e)throw Error(`No messages to continue from`);if(e.role===`assistant`){let e=this.steeringQueue.drain();if(e.length>0){await this.runPromptMessages(e,{skipInitialSteeringPoll:!0});return}let t=this.followUpQueue.drain();if(t.length>0){await this.runPromptMessages(t);return}throw Error(`Cannot continue from message role: assistant`)}await this.runContinuation()}normalizePromptInput(e,t){if(Array.isArray(e))return e;if(typeof e!=`string`)return[e];let n=[{type:`text`,text:e}];return t&&t.length>0&&n.push(...t),[{role:`user`,content:n,timestamp:Date.now()}]}async runPromptMessages(e,t={}){await this.runWithLifecycle(async n=>{await ee(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFn)})}async runContinuation(){await this.runWithLifecycle(async e=>{await te(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFn)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,prepareNextTurn:this.prepareNextTurn?async()=>await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>t?(t=!1,[]):this.steeringQueue.drain(),getFollowUpMessages:async()=>this.followUpQueue.drain()}}async runWithLifecycle(e){if(this.activeRun)throw Error(`Agent is already processing.`);let t=new AbortController,n=()=>{},r=new Promise(e=>{n=e});this.activeRun={promise:r,resolve:n,abortController:t},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0;try{await e(t.signal)}catch(e){await this.handleRunFailure(e,t.signal.aborted)}finally{this.finishRun()}}async handleRunFailure(e,t){let n={role:`assistant`,content:[{type:`text`,text:``}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:he,stopReason:t?`aborted`:`error`,errorMessage:e instanceof Error?e.message:String(e),timestamp:Date.now()};await this.processEvents({type:`message_start`,message:n}),await this.processEvents({type:`message_end`,message:n}),await this.processEvents({type:`turn_end`,message:n,toolResults:[]}),await this.processEvents({type:`agent_end`,messages:[n]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(e){switch(e.type){case`message_start`:this._state.streamingMessage=e.message;break;case`message_update`:this._state.streamingMessage=e.message;break;case`message_end`:this._state.streamingMessage=void 0,this._state.messages.push(e.message);break;case`tool_execution_start`:{let t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case`tool_execution_end`:{let t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case`turn_end`:e.message.role===`assistant`&&e.message.errorMessage&&(this._state.errorMessage=e.message.errorMessage);break;case`agent_end`:this._state.streamingMessage=void 0;break}let t=this.activeRun?.abortController.signal;if(!t)throw Error(`Agent listener invoked outside active run`);for(let n of this.listeners)await n(e,t)}};const be=Symbol.for(`yaml.alias`),xe=Symbol.for(`yaml.document`),T=Symbol.for(`yaml.map`),Se=Symbol.for(`yaml.pair`),Ce=Symbol.for(`yaml.scalar`),we=Symbol.for(`yaml.seq`),E=Symbol.for(`yaml.node.type`),D=e=>!!e&&typeof e==`object`&&e[E]===be,Te=e=>!!e&&typeof e==`object`&&e[E]===xe,Ee=e=>!!e&&typeof e==`object`&&e[E]===T,O=e=>!!e&&typeof e==`object`&&e[E]===Se,k=e=>!!e&&typeof e==`object`&&e[E]===Ce,De=e=>!!e&&typeof e==`object`&&e[E]===we;function A(e){if(e&&typeof e==`object`)switch(e[E]){case T:case we:return!0}return!1}function j(e){if(e&&typeof e==`object`)switch(e[E]){case be:case T:case Ce:case we:return!0}return!1}const Oe=e=>(k(e)||A(e))&&!!e.anchor,M=Symbol(`break visit`),ke=Symbol(`skip children`),N=Symbol(`remove node`);function Ae(e,t){let n=Ne(t);Te(e)?P(null,e.contents,n,Object.freeze([e]))===N&&(e.contents=null):P(null,e,n,Object.freeze([]))}Ae.BREAK=M,Ae.SKIP=ke,Ae.REMOVE=N;function P(e,t,n,r){let i=Pe(e,t,n,r);if(j(i)||O(i))return Fe(e,r,i),P(e,i,n,r);if(typeof i!=`symbol`){if(A(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=P(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===M)return M;else i===N&&(t.items.splice(e,1),--e)}}else if(O(t)){r=Object.freeze(r.concat(t));let e=P(`key`,t.key,n,r);if(e===M)return M;e===N&&(t.key=null);let i=P(`value`,t.value,n,r);if(i===M)return M;i===N&&(t.value=null)}}return i}async function je(e,t){let n=Ne(t);Te(e)?await Me(null,e.contents,n,Object.freeze([e]))===N&&(e.contents=null):await Me(null,e,n,Object.freeze([]))}je.BREAK=M,je.SKIP=ke,je.REMOVE=N;async function Me(e,t,n,r){let i=await Pe(e,t,n,r);if(j(i)||O(i))return Fe(e,r,i),Me(e,i,n,r);if(typeof i!=`symbol`){if(A(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await Me(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===M)return M;else i===N&&(t.items.splice(e,1),--e)}}else if(O(t)){r=Object.freeze(r.concat(t));let e=await Me(`key`,t.key,n,r);if(e===M)return M;e===N&&(t.key=null);let i=await Me(`value`,t.value,n,r);if(i===M)return M;i===N&&(t.value=null)}}return i}function Ne(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function Pe(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(Ee(t))return n.Map?.(e,t,r);if(De(t))return n.Seq?.(e,t,r);if(O(t))return n.Pair?.(e,t,r);if(k(t))return n.Scalar?.(e,t,r);if(D(t))return n.Alias?.(e,t,r)}function Fe(e,t,n){let r=t[t.length-1];if(A(r))r.items[e]=n;else if(O(r))e===`key`?r.key=n:r.value=n;else if(Te(r))r.contents=n;else{let e=D(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}const Ie={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},Le=e=>e.replace(/[!,[\]{}]/g,e=>Ie[e]);var Re=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Le(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],n=Object.entries(this.tags),r;if(e&&n.length>0&&j(e.contents)){let t={};Ae(e.contents,(e,n)=>{j(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(let[i,a]of n)i===`!!`&&a===`tag:yaml.org,2002:`||(!e||r.some(e=>e.startsWith(a)))&&t.push(`%TAG ${i} ${a}`);return t.join(`
1
+ import{n as e,t}from"./chunk-aKtaBQYM.js";import{t as n}from"./logger-LESFN7Hj.js";import{h as r,m as i,o as a,r as o,t as s}from"./proxied-fetch-I4cndszg.js";import{i as c,r as l}from"./tool-ui-t6ocn6AG.js";import{n as u,r as d}from"./panel-rpc-D0J5pskz.js";import{n as f,o as p,t as m}from"./providers-D3nv5fF8.js";import{c as h,d as g,r as _,t as v,u as y}from"./bedrock-camp-C1lmRgcD.js";import{d as b,l as x,u as S}from"./transform-messages-BjP6vDPY.js";async function ee(e,t,n,r,i,a){let o=[...e],s={...t,messages:[...t.messages,...e]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let t of e)await r({type:`message_start`,message:t}),await r({type:`message_end`,message:t});return await ne(s,o,n,i,r,a),o}async function te(e,t,n,r,i){if(e.messages.length===0)throw Error(`Cannot continue: no messages in context`);if(e.messages[e.messages.length-1].role===`assistant`)throw Error(`Cannot continue from message role: assistant`);let a=[],o={...e};return await n({type:`agent_start`}),await n({type:`turn_start`}),await ne(o,a,t,r,n,i),a}async function ne(e,t,n,r,i,a){let o=e,s=n,c=!0,l=await s.getSteeringMessages?.()||[];for(;;){let e=!0;for(;e||l.length>0;){if(c?c=!1:await i({type:`turn_start`}),l.length>0){for(let e of l)await i({type:`message_start`,message:e}),await i({type:`message_end`,message:e}),o.messages.push(e),t.push(e);l=[]}let n=await re(o,s,r,i,a);if(t.push(n),n.stopReason===`error`||n.stopReason===`aborted`){await i({type:`turn_end`,message:n,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let u=n.content.filter(e=>e.type===`toolCall`),d=[];if(e=!1,u.length>0){let a=await ie(o,n,s,r,i);d.push(...a.messages),e=!a.terminate;for(let e of d)o.messages.push(e),t.push(e)}await i({type:`turn_end`,message:n,toolResults:d});let f={message:n,toolResults:d,context:o,newMessages:t},p=await s.prepareNextTurn?.(f);if(p&&(o=p.context??o,s={...s,model:p.model??s.model,reasoning:p.thinkingLevel===void 0?s.reasoning:p.thinkingLevel===`off`?void 0:p.thinkingLevel}),await s.shouldStopAfterTurn?.({message:n,toolResults:d,context:o,newMessages:t})){await i({type:`agent_end`,messages:t});return}l=await s.getSteeringMessages?.()||[]}let n=await s.getFollowUpMessages?.()||[];if(n.length>0){l=n;continue}break}await i({type:`agent_end`,messages:t})}async function re(e,t,n,r,i){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,n));let o=await t.convertToLlm(a),s={systemPrompt:e.systemPrompt,messages:o,tools:e.tools},c=i||g,l=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,u=await c(t.model,s,{...t,apiKey:l,signal:n}),d=null,f=!1;for await(let t of u)switch(t.type){case`start`:d=t.partial,e.messages.push(d),f=!0,await r({type:`message_start`,message:{...d}});break;case`text_start`:case`text_delta`:case`text_end`:case`thinking_start`:case`thinking_delta`:case`thinking_end`:case`toolcall_start`:case`toolcall_delta`:case`toolcall_end`:d&&(d=t.partial,e.messages[e.messages.length-1]=d,await r({type:`message_update`,assistantMessageEvent:t,message:{...d}}));break;case`done`:case`error`:{let t=await u.result();return f?e.messages[e.messages.length-1]=t:e.messages.push(t),f||await r({type:`message_start`,message:{...t}}),await r({type:`message_end`,message:t}),t}}let p=await u.result();return f?e.messages[e.messages.length-1]=p:(e.messages.push(p),await r({type:`message_start`,message:{...p}})),await r({type:`message_end`,message:p}),p}async function ie(e,t,n,r,i){let a=t.content.filter(e=>e.type===`toolCall`),o=a.some(t=>e.tools?.find(e=>e.name===t.name)?.executionMode===`sequential`);return n.toolExecution===`sequential`||o?ae(e,t,a,n,r,i):oe(e,t,a,n,r,i)}async function ae(e,t,n,r,i,a){let o=[],s=[];for(let c of n){await a({type:`tool_execution_start`,toolCallId:c.id,toolName:c.name,args:c.arguments});let n=await ce(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await ue(e,t,n,await le(n,i,a),r,i),await de(l,a);let u=fe(l);if(await pe(u,a),o.push(l),s.push(u),i?.aborted)break}return{messages:s,terminate:C(o)}}async function oe(e,t,n,r,i,a){let o=[];for(let s of n){await a({type:`tool_execution_start`,toolCallId:s.id,toolName:s.name,args:s.arguments});let n=await ce(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};if(await de(e,a),o.push(e),i?.aborted)break;continue}if(o.push(async()=>{let o=await ue(e,t,n,await le(n,i,a),r,i);return await de(o,a),o}),i?.aborted)break}let s=await Promise.all(o.map(e=>typeof e==`function`?e():Promise.resolve(e))),c=[];for(let e of s){let t=fe(e);await pe(t,a),c.push(t)}return{messages:c,terminate:C(s)}}function C(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function se(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function ce(e,t,n,r,i){let a=e.tools?.find(e=>e.name===n.name);if(!a)return{kind:`immediate`,result:w(`Tool ${n.name} not found`),isError:!0};try{let o=h(a,se(a,n));if(r.beforeToolCall){let a=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:o,context:e},i);if(i?.aborted)return{kind:`immediate`,result:w(`Operation aborted`),isError:!0};if(a?.block)return{kind:`immediate`,result:w(a.reason||`Tool execution was blocked`),isError:!0}}return i?.aborted?{kind:`immediate`,result:w(`Operation aborted`),isError:!0}:{kind:`prepared`,toolCall:n,tool:a,args:o}}catch(e){return{kind:`immediate`,result:w(e instanceof Error?e.message:String(e)),isError:!0}}}async function le(e,t,n){let r=[];try{let i=await e.tool.execute(e.toolCall.id,e.args,t,t=>{r.push(Promise.resolve(n({type:`tool_execution_update`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,args:e.toolCall.arguments,partialResult:t})))});return await Promise.all(r),{result:i,isError:!1}}catch(e){return await Promise.all(r),{result:w(e instanceof Error?e.message:String(e)),isError:!0}}}async function ue(e,t,n,r,i,a){let o=r.result,s=r.isError;if(i.afterToolCall)try{let r=await i.afterToolCall({assistantMessage:t,toolCall:n.toolCall,args:n.args,result:o,isError:s,context:e},a);r&&(o={content:r.content??o.content,details:r.details??o.details,terminate:r.terminate??o.terminate},s=r.isError??s)}catch(e){o=w(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function w(e){return{content:[{type:`text`,text:e}],details:{}}}async function de(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function fe(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content,details:e.result.details,isError:e.isError,timestamp:Date.now()}}async function pe(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function me(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const he={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ge={id:`unknown`,name:`unknown`,api:`unknown`,provider:`unknown`,baseUrl:``,reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function _e(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??ge,thinkingLevel:e?.thinkingLevel??`off`,get tools(){return t},set tools(e){t=e.slice()},get messages(){return n},set messages(e){n=e.slice()},isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0}}var ve=class{messages=[];mode;constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}drain(){if(this.mode===`all`){let e=this.messages.slice();return this.messages=[],e}let e=this.messages[0];return e?(this.messages=this.messages.slice(1),[e]):[]}clear(){this.messages=[]}},ye=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFn;getApiKey;onPayload;onResponse;beforeToolCall;afterToolCall;prepareNextTurn;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e={}){this._state=_e(e.initialState),this.convertToLlm=e.convertToLlm??me,this.transformContext=e.transformContext,this.streamFn=e.streamFn??g,this.getApiKey=e.getApiKey,this.onPayload=e.onPayload,this.onResponse=e.onResponse,this.beforeToolCall=e.beforeToolCall,this.afterToolCall=e.afterToolCall,this.prepareNextTurn=e.prepareNextTurn,this.steeringQueue=new ve(e.steeringMode??`one-at-a-time`),this.followUpQueue=new ve(e.followUpMode??`one-at-a-time`),this.sessionId=e.sessionId,this.thinkingBudgets=e.thinkingBudgets,this.transport=e.transport??`auto`,this.maxRetryDelayMs=e.maxRetryDelayMs,this.toolExecution=e.toolExecution??`parallel`}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}get state(){return this._state}set steeringMode(e){this.steeringQueue.mode=e}get steeringMode(){return this.steeringQueue.mode}set followUpMode(e){this.followUpQueue.mode=e}get followUpMode(){return this.followUpQueue.mode}steer(e){this.steeringQueue.enqueue(e)}followUp(e){this.followUpQueue.enqueue(e)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(){this.activeRun?.abortController.abort()}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(e,t){if(this.activeRun)throw Error(`Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.`);let n=this.normalizePromptInput(e,t);await this.runPromptMessages(n)}async continue(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before continuing.`);let e=this._state.messages[this._state.messages.length-1];if(!e)throw Error(`No messages to continue from`);if(e.role===`assistant`){let e=this.steeringQueue.drain();if(e.length>0){await this.runPromptMessages(e,{skipInitialSteeringPoll:!0});return}let t=this.followUpQueue.drain();if(t.length>0){await this.runPromptMessages(t);return}throw Error(`Cannot continue from message role: assistant`)}await this.runContinuation()}normalizePromptInput(e,t){if(Array.isArray(e))return e;if(typeof e!=`string`)return[e];let n=[{type:`text`,text:e}];return t&&t.length>0&&n.push(...t),[{role:`user`,content:n,timestamp:Date.now()}]}async runPromptMessages(e,t={}){await this.runWithLifecycle(async n=>{await ee(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFn)})}async runContinuation(){await this.runWithLifecycle(async e=>{await te(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFn)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,prepareNextTurn:this.prepareNextTurn?async()=>await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>t?(t=!1,[]):this.steeringQueue.drain(),getFollowUpMessages:async()=>this.followUpQueue.drain()}}async runWithLifecycle(e){if(this.activeRun)throw Error(`Agent is already processing.`);let t=new AbortController,n=()=>{},r=new Promise(e=>{n=e});this.activeRun={promise:r,resolve:n,abortController:t},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0;try{await e(t.signal)}catch(e){await this.handleRunFailure(e,t.signal.aborted)}finally{this.finishRun()}}async handleRunFailure(e,t){let n={role:`assistant`,content:[{type:`text`,text:``}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:he,stopReason:t?`aborted`:`error`,errorMessage:e instanceof Error?e.message:String(e),timestamp:Date.now()};await this.processEvents({type:`message_start`,message:n}),await this.processEvents({type:`message_end`,message:n}),await this.processEvents({type:`turn_end`,message:n,toolResults:[]}),await this.processEvents({type:`agent_end`,messages:[n]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(e){switch(e.type){case`message_start`:this._state.streamingMessage=e.message;break;case`message_update`:this._state.streamingMessage=e.message;break;case`message_end`:this._state.streamingMessage=void 0,this._state.messages.push(e.message);break;case`tool_execution_start`:{let t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case`tool_execution_end`:{let t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case`turn_end`:e.message.role===`assistant`&&e.message.errorMessage&&(this._state.errorMessage=e.message.errorMessage);break;case`agent_end`:this._state.streamingMessage=void 0;break}let t=this.activeRun?.abortController.signal;if(!t)throw Error(`Agent listener invoked outside active run`);for(let n of this.listeners)await n(e,t)}};const be=Symbol.for(`yaml.alias`),xe=Symbol.for(`yaml.document`),T=Symbol.for(`yaml.map`),Se=Symbol.for(`yaml.pair`),Ce=Symbol.for(`yaml.scalar`),we=Symbol.for(`yaml.seq`),E=Symbol.for(`yaml.node.type`),D=e=>!!e&&typeof e==`object`&&e[E]===be,Te=e=>!!e&&typeof e==`object`&&e[E]===xe,Ee=e=>!!e&&typeof e==`object`&&e[E]===T,O=e=>!!e&&typeof e==`object`&&e[E]===Se,k=e=>!!e&&typeof e==`object`&&e[E]===Ce,De=e=>!!e&&typeof e==`object`&&e[E]===we;function A(e){if(e&&typeof e==`object`)switch(e[E]){case T:case we:return!0}return!1}function j(e){if(e&&typeof e==`object`)switch(e[E]){case be:case T:case Ce:case we:return!0}return!1}const Oe=e=>(k(e)||A(e))&&!!e.anchor,M=Symbol(`break visit`),ke=Symbol(`skip children`),N=Symbol(`remove node`);function Ae(e,t){let n=Ne(t);Te(e)?P(null,e.contents,n,Object.freeze([e]))===N&&(e.contents=null):P(null,e,n,Object.freeze([]))}Ae.BREAK=M,Ae.SKIP=ke,Ae.REMOVE=N;function P(e,t,n,r){let i=Pe(e,t,n,r);if(j(i)||O(i))return Fe(e,r,i),P(e,i,n,r);if(typeof i!=`symbol`){if(A(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=P(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===M)return M;else i===N&&(t.items.splice(e,1),--e)}}else if(O(t)){r=Object.freeze(r.concat(t));let e=P(`key`,t.key,n,r);if(e===M)return M;e===N&&(t.key=null);let i=P(`value`,t.value,n,r);if(i===M)return M;i===N&&(t.value=null)}}return i}async function je(e,t){let n=Ne(t);Te(e)?await Me(null,e.contents,n,Object.freeze([e]))===N&&(e.contents=null):await Me(null,e,n,Object.freeze([]))}je.BREAK=M,je.SKIP=ke,je.REMOVE=N;async function Me(e,t,n,r){let i=await Pe(e,t,n,r);if(j(i)||O(i))return Fe(e,r,i),Me(e,i,n,r);if(typeof i!=`symbol`){if(A(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await Me(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===M)return M;else i===N&&(t.items.splice(e,1),--e)}}else if(O(t)){r=Object.freeze(r.concat(t));let e=await Me(`key`,t.key,n,r);if(e===M)return M;e===N&&(t.key=null);let i=await Me(`value`,t.value,n,r);if(i===M)return M;i===N&&(t.value=null)}}return i}function Ne(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function Pe(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(Ee(t))return n.Map?.(e,t,r);if(De(t))return n.Seq?.(e,t,r);if(O(t))return n.Pair?.(e,t,r);if(k(t))return n.Scalar?.(e,t,r);if(D(t))return n.Alias?.(e,t,r)}function Fe(e,t,n){let r=t[t.length-1];if(A(r))r.items[e]=n;else if(O(r))e===`key`?r.key=n:r.value=n;else if(Te(r))r.contents=n;else{let e=D(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}const Ie={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},Le=e=>e.replace(/[!,[\]{}]/g,e=>Ie[e]);var Re=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+Le(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],n=Object.entries(this.tags),r;if(e&&n.length>0&&j(e.contents)){let t={};Ae(e.contents,(e,n)=>{j(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(let[i,a]of n)i===`!!`&&a===`tag:yaml.org,2002:`||(!e||r.some(e=>e.startsWith(a)))&&t.push(`%TAG ${i} ${a}`);return t.join(`
2
2
  `)}};Re.defaultYaml={explicit:!1,version:`1.2`},Re.defaultTags={"!!":`tag:yaml.org,2002:`};function ze(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function Be(e,t,n,r){if(r&&typeof r==`object`)if(Array.isArray(r))for(let t=0,n=r.length;t<n;++t){let n=r[t],i=Be(e,r,String(t),n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}else if(r instanceof Map)for(let t of Array.from(r.keys())){let n=r.get(t),i=Be(e,r,t,n);i===void 0?r.delete(t):i!==n&&r.set(t,i)}else if(r instanceof Set)for(let t of Array.from(r)){let n=Be(e,r,t,t);n===void 0?r.delete(t):n!==t&&(r.delete(t),r.add(n))}else for(let[t,n]of Object.entries(r)){let i=Be(e,r,t,n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function F(e,t,n){if(Array.isArray(e))return e.map((e,t)=>F(e,String(t),n));if(e&&typeof e.toJSON==`function`){if(!n||!Oe(e))return e.toJSON(t,n);let r={aliasCount:0,count:1,res:void 0};n.anchors.set(e,r),n.onCreate=e=>{r.res=e,delete n.onCreate};let i=e.toJSON(t,n);return n.onCreate&&n.onCreate(i),i}return typeof e==`bigint`&&!n?.keep?Number(e):e}var Ve=class{constructor(e){Object.defineProperty(this,E,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:r,reviver:i}={}){if(!Te(e))throw TypeError(`A document argument is required`);let a={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n==`number`?n:100},o=F(this,``,a);if(typeof r==`function`)for(let{count:e,res:t}of a.anchors.values())r(t,e);return typeof i==`function`?Be(i,{"":o},``,o):o}},He=class extends Ve{constructor(e){super(be),this.source=e,Object.defineProperty(this,"tag",{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){if(t?.maxAliasCount===0)throw ReferenceError(`Alias resolution is disabled`);let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],Ae(e,{Node:(e,t)=>{(D(t)||Oe(t))&&n.push(t)}}),t&&(t.aliasResolveCache=n));let r;for(let e of n){if(e===this)break;e.anchor===this.source&&(r=e)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:r,maxAliasCount:i}=t,a=this.resolve(r,t);if(!a){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let o=n.get(a);if(o||=(F(a,null,t),n.get(a)),o?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(i>=0&&(o.count+=1,o.aliasCount===0&&(o.aliasCount=Ue(r,a,n)),o.count*o.aliasCount>i))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return o.res}toString(e,t,n){let r=`*${this.source}`;if(e){if(ze(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${r} `}return r}};function Ue(e,t,n){if(D(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(A(t)){let r=0;for(let i of t.items){let t=Ue(e,i,n);t>r&&(r=t)}return r}else if(O(t)){let r=Ue(e,t.key,n),i=Ue(e,t.value,n);return Math.max(r,i)}return 1}const We=e=>!e||typeof e!=`function`&&typeof e!=`object`;var I=class extends Ve{constructor(e){super(Ce),this.value=e}toJSON(e,t){return t?.keep?this.value:F(this.value,e,t)}toString(){return String(this.value)}};I.BLOCK_FOLDED=`BLOCK_FOLDED`,I.BLOCK_LITERAL=`BLOCK_LITERAL`,I.PLAIN=`PLAIN`,I.QUOTE_DOUBLE=`QUOTE_DOUBLE`,I.QUOTE_SINGLE=`QUOTE_SINGLE`;function Ge(e,t,n){if(t){let e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}function Ke(e,t,n){if(Te(e)&&(e=e.contents),j(e))return e;if(O(e)){let t=n.schema[T].createNode?.(n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:r,onAnchor:i,onTagObj:a,schema:o,sourceObjects:s}=n,c;if(r&&e&&typeof e==`object`){if(c=s.get(e),c)return c.anchor??=i(e),new He(c.anchor);c={anchor:null,node:null},s.set(e,c)}t?.startsWith(`!!`)&&(t=`tag:yaml.org,2002:`+t.slice(2));let l=Ge(e,t,o.tags);if(!l){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new I(e);return c&&(c.node=t),t}l=e instanceof Map?o[T]:Symbol.iterator in Object(e)?o[we]:o[T]}a&&(a(l),delete n.onTagObj);let u=l?.createNode?l.createNode(n.schema,e,n):typeof l?.nodeClass?.from==`function`?l.nodeClass.from(n.schema,e,n):new I(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function qe(e,t,n){let r=n;for(let e=t.length-1;e>=0;--e){let n=t[e];if(typeof n==`number`&&Number.isInteger(n)&&n>=0){let e=[];e[n]=r,r=e}else r=new Map([[n,r]])}return Ke(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}const Je=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done;var Ye=class extends Ve{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>j(t)||O(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(Je(e))this.add(t);else{let[n,...r]=e,i=this.get(n,!0);if(A(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,qe(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}deleteIn(e){let[t,...n]=e;if(n.length===0)return this.delete(t);let r=this.get(t,!0);if(A(r))return r.deleteIn(n);throw Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){let[n,...r]=e,i=this.get(n,!0);return r.length===0?!t&&k(i)?i.value:i:A(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!O(t))return!1;let n=t.value;return n==null||e&&k(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){let[t,...n]=e;if(n.length===0)return this.has(t);let r=this.get(t,!0);return A(r)?r.hasIn(n):!1}setIn(e,t){let[n,...r]=e;if(r.length===0)this.set(n,t);else{let e=this.get(n,!0);if(A(e))e.setIn(r,t);else if(e===void 0&&this.schema)this.set(n,qe(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}};const Xe=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function Ze(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}const L=(e,t,n)=>e.endsWith(`
3
3
  `)?Ze(n,t):n.includes(`
4
4
  `)?`
@@ -96,4 +96,4 @@ DO NOT include:
96
96
  If nothing in the conversation is worth persisting, return exactly the single line:
97
97
  NONE
98
98
 
99
- Otherwise, output ONLY a markdown bullet list (one bullet per memory), no headers, no preamble, no follow-up. Each bullet is one line. Be specific. Prefer one fact per bullet over multi-clause sentences.`,2048,e.headers,s);if(n?.trim()&&n.trim()!==`NONE`)try{await e.onMemoryUpdates(n.trim()),U.info(`Memory extraction applied`,{bulletsLength:n.length})}catch(e){U.warn(`onMemoryUpdates callback threw`,{error:e instanceof Error?e.message:String(e)})}else U.info(`Memory extraction returned no durable memories`)}catch(e){U.warn(`Memory extraction call failed (compaction still applied)`,{error:e instanceof Error?e.message:String(e)})}return h(`idle`),[a,...m]}catch(e){U.warn(`LLM summarization failed, falling back to naive drop`,{error:e instanceof Error?e.message:String(e)})}else u||U.warn(`No API key available for LLM summarization, falling back to naive drop`);h(`idle`);let _={role:`user`,content:[{type:`text`,text:`[Earlier conversation messages were compacted to save context space]`}],timestamp:Date.now()};return U.info(`Naive compaction applied`,{originalMessages:o.length,compactedMessages:1+m.length}),[_,...m]}}function cn(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension-direct`:o()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}const ln=n(`secrets-bridge`),un=1e4;let dn=null,fn=1;const W=new Map;function pn(e){let t=e;if(typeof t?.id!=`number`)return;let n=W.get(t.id);n&&(W.delete(t.id),clearTimeout(n.timer),n.resolve(t.response))}function mn(){dn=null;for(let[,e]of W)clearTimeout(e.timer),e.reject(Error(`secrets.crud port disconnected`));W.clear(),ln.debug(`secrets.crud port disconnected; pending cleared, will reconnect`)}function hn(){if(dn)return dn;let e=o();if(!e)return ln.warn(`cannot open secrets.crud port: no extension delegate id`),null;if(typeof chrome>`u`||typeof chrome?.runtime?.connect!=`function`)return ln.warn(`cannot open secrets.crud port: chrome.runtime.connect unavailable`),null;let t=chrome.runtime.connect,n=t(e,{name:`secrets.crud`});return n.onMessage.addListener(pn),n.onDisconnect.addListener(mn),dn=n,n}function gn(e,t){return typeof chrome>`u`&&o()?vn(e,t):_n(e,t)}function _n(e,t){return new Promise((n,r)=>{let i=hn();if(!i){n(void 0);return}let a=fn++,o=setTimeout(()=>{W.delete(a)&&(ln.warn(`secrets.crud call timed out`,{type:e}),n(void 0))},un);W.set(a,{resolve:n,reject:r,timer:o});try{i.postMessage({id:a,type:e,...t})}catch(e){W.delete(a),clearTimeout(o),dn=null,r(e instanceof Error?e:Error(String(e)))}})}async function vn(e,t){let{getPanelRpcClient:n}=await import(`./panel-rpc-D0J5pskz.js`).then(e=>e.i),r=n();if(!r){ln.warn(`cannot bridge secrets call: panel-RPC client unavailable in worker realm`,{type:e});return}let{response:i}=await r.call(`secrets-bridge`,{type:e,payload:t},{timeoutMs:un});return i}const G=n(`secret-scrub`),yn=async e=>e;function bn(){let e=cn();return e===`extension-direct`?async e=>{if(!e)return e;try{let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.scrub-tool-result`,text:e},e=>t(e??{}))});return t.error?(G.debug(`SW scrub-tool-result returned error`,{error:t.error}),e):typeof t.text==`string`?t.text:e}catch(t){return G.debug(`SW scrub-tool-result failed`,{error:t instanceof Error?t.message:String(t)}),e}}:e===`extension-delegate`?async e=>{if(!e)return e;try{let t=await gn(`secrets.scrub-tool-result`,{text:e});return t?.error?(G.debug(`Bridge scrub-tool-result returned error`,{error:t.error}),e):typeof t?.text==`string`?t.text:e}catch(t){return G.debug(`Bridge scrub-tool-result failed`,{error:t instanceof Error?t.message:String(t)}),e}}:e===`connect`?yn:async e=>{if(!e)return e;try{let t=await fetch(a(`/api/secrets/scrub`),{method:`POST`,headers:s({"content-type":`application/json`}),body:JSON.stringify({text:e})});if(!t.ok)return G.debug(`Server scrub-tool-result returned non-ok`,{status:t.status}),e;let n=await t.json();return typeof n.text==`string`?n.text:e}catch(t){return G.debug(`Server scrub-tool-result failed`,{error:t instanceof Error?t.message:String(t)}),e}}}const K=`sessions`;function xn(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(K)||e.createObjectStore(K,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var Sn=class{dbPromise=null;getDB(){return this.dbPromise||=xn().then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(K,`readwrite`).objectStore(K).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(K,`readonly`).objectStore(K).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(K,`readwrite`).objectStore(K).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(K,`readonly`).objectStore(K).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(K,`readwrite`).objectStore(K).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}};const q=n(`image-processor`),Cn=3932160,wn=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function Tn(e){return wn.has(e)}function En(e,t){try{if(t===`image/png`){if(e.length<32)return null;let t=atob(e.slice(0,32)),n=t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19),r=t.charCodeAt(20)<<24|t.charCodeAt(21)<<16|t.charCodeAt(22)<<8|t.charCodeAt(23);return n>0&&r>0?{width:n,height:r}:null}if(t===`image/gif`){if(e.length<16)return null;let t=atob(e.slice(0,16)),n=t.charCodeAt(6)|t.charCodeAt(7)<<8,r=t.charCodeAt(8)|t.charCodeAt(9)<<8;return n>0&&r>0?{width:n,height:r}:null}if(t===`image/jpeg`){let t=Math.min(21846*4,e.length),n=atob(e.slice(0,t));for(let e=0;e<n.length-8;e++)if(n.charCodeAt(e)===255){let t=n.charCodeAt(e+1);if(t===192||t===194){let t=n.charCodeAt(e+5)<<8|n.charCodeAt(e+6),r=n.charCodeAt(e+7)<<8|n.charCodeAt(e+8);return r>0&&t>0?{width:r,height:t}:null}}}}catch{}return null}async function Dn(e){if(!Tn(e.mimeType))return q.warn(`Unsupported image format`,{mimeType:e.mimeType}),{type:`text`,text:`[Image removed: unsupported format "${e.mimeType}". Supported: JPEG, PNG, GIF, WebP]`};let t=e.data.length,n=En(e.data,e.mimeType);if(!(t>5242880||n!==null&&(n.width>8e3||n.height>8e3)||n!==null&&Math.max(n.width,n.height)>1568))return e;q.info(`Image needs processing`,{base64Size:t,dimensions:n?`${n.width}x${n.height}`:`unknown`,reason:t>5242880?`size`:`dimensions`});let r,i;try{let e=await import(`./kernel-worker-CHH5Mx3j.js`).then(e=>e.l);r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return q.error(`ImageMagick WASM module unavailable`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (ImageMagick WASM could not be loaded)]`}}let a;try{a=await r()}catch(e){return q.error(`ImageMagick WASM initialization failed`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (WASM init failed)]`}}try{let n=atob(e.data),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let o={data:null,mime:e.mimeType};if(await a.ImageMagick.read(r,async t=>{let n=t.width,r=t.height,a=Math.max(n,r);if(a>1568){let e=1568/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),q.info(`Resized image`,{from:`${n}x${r}`,to:`${i}x${o}`})}let s=i[e.mimeType]||`JPEG`;t.write(s,e=>{o.data=new Uint8Array(e)}),o.data&&o.data.length>Cn&&s!==`JPEG`?(q.info(`Still over 5MB, compressing to JPEG q80`),t.quality=80,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}),o.mime=`image/jpeg`):o.data&&o.data.length>Cn&&(q.info(`Still over 5MB as JPEG, reducing quality to 60`),t.quality=60,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}))}),!o.data)return q.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>Cn)return q.warn(`Image still over 5MB after resize+compress`,{size:o.data.length}),{type:`text`,text:`[Image removed: still ${Math.round(o.data.length/1024/1024*10)/10}MB after resize and compression, exceeds 5MB API limit]`};let s=``;for(let e=0;e<o.data.length;e++)s+=String.fromCharCode(o.data[e]);let c=btoa(s);return q.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return q.error(`Image data processing failed (corrupt or unreadable)`,{mimeType:e.mimeType,estimatedBytes:t,error:n instanceof Error?n.message:String(n)}),{type:`text`,text:`[Image removed: image data could not be processed (${n instanceof Error?n.message:`corrupt or unreadable`})]`}}}const On=n(`tool-adapter`),kn=/<img:(data:(image\/[^;]+);base64,([^>]+))>/g;function An(e){let t=[],n=0;for(let r of e.matchAll(kn)){let i=e.slice(n,r.index);i.trim()&&t.push({type:`text`,text:i.trimEnd()}),t.push({type:`image`,mimeType:r[2],data:r[3]}),n=r.index+r[0].length}let r=e.slice(n);return(r.trim()||t.length===0)&&t.push({type:`text`,text:r||e}),t}async function jn(e){let t=An(e),n=[];for(let e of t)e.type===`image`?n.push(await Dn(e)):n.push(e);return n}function Mn(e,t,n){return{name:e.name,label:e.name,description:e.description,parameters:e.inputSchema,async execute(r,i,a,o){let s;o&&(s=c({onUpdate:o,toolName:e.name,toolCallId:r}));let u=t?t.processManager.spawn({kind:`tool`,argv:[e.name,...Pn(i)],owner:t.owner,ppid:t.getParentPid?.()}):null,d=null;u&&t&&a&&(a.aborted?t.processManager.signal(u.pid,`SIGINT`):a.addEventListener(`abort`,()=>t.processManager.signal(u.pid,`SIGINT`),{once:!0})),u&&t&&(d=t.processManager.onSignal((e,n)=>{e.pid!==u.pid||n!==`SIGKILL`||t.processManager.exit(u.pid,null)}));let f=u?u.abort.signal:a;try{let r=await e.execute(i??{},f),a=r.content;if(n&&typeof a==`string`&&a.length>0)try{a=await n.scrubToolResult(a)}catch(t){On.warn(`Tool-result scrub failed, falling back to unscrubbed content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),a=r.content}let o;try{o=await jn(a)}catch(t){On.warn(`Image processing failed, falling back to raw content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),o=An(a)}return u&&t&&t.processManager.exit(u.pid,+!!r.isError),{content:o,details:{isError:r.isError}}}catch(e){throw u&&t&&t.processManager.exit(u.pid,u.abort.signal.aborted?null:1),e}finally{s&&l(s),d?.()}}}}function Nn(e,t,n){return e.map(e=>Mn(e,t,n))}function Pn(e){if(typeof e!=`object`||!e)return[];let t=e;for(let e of[`command`,`file_path`,`path`,`pattern`,`url`,`key`,`name`,`query`,`message`]){let n=t[e];if(typeof n==`string`&&n.length>0)return[n]}for(let e of Object.values(t))if(typeof e==`string`&&e.length>0)return[e];return[]}var Fn=e({ACCOUNTS_KEY:()=>J,addAccount:()=>tr,getAccounts:()=>$,getAllExtraOAuthDomains:()=>Qn,getApiKey:()=>gr,getApiKeyForProvider:()=>lr,getApiVersionForProvider:()=>fr,getAvailableProviders:()=>Wn,getBaseUrlForProvider:()=>ur,getDeploymentForProvider:()=>dr,getExtraOAuthDomains:()=>Yn,getOAuthAccountInfo:()=>Jn,getProviderConfig:()=>X,getProviderModels:()=>Z,getRawApiKeyForProvider:()=>cr,getSelectedModelId:()=>pr,getSelectedProvider:()=>hr,logoutOAuthAccount:()=>ir,maskOAuthTokenWithRetry:()=>ar,migrateLegacyAuthOnlySelection:()=>Un,persistOAuthMaskViaServiceWorker:()=>or,providerOffersLlmModels:()=>Gn,removeAccount:()=>rr,resolveCurrentModel:()=>xr,resolveModelById:()=>br,resolveModelByShorthand:()=>Sr,saveOAuthAccount:()=>sr,setExtraOAuthDomains:()=>Xn,setExtraOAuthDomainsAsync:()=>Zn});const In=x,Ln=S,J=`slicc_accounts`,Y=`selected-model`,Rn=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],zn=new Set([`github`]);function Bn(e){let t;try{t=b()}catch{return!1}return t.includes(e)&&!p(e)}let Vn=!1;function Hn(){if(!Vn){Vn=!0;for(let e of Rn)try{localStorage.removeItem(e)}catch{}Un()}}function Un(){try{let e=localStorage.getItem(Y);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(zn.has(n)||Bn(n))&&localStorage.removeItem(Y)}}}catch{}try{let e=localStorage.getItem(J);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Bn(e.providerId)));n.length!==t.length&&localStorage.setItem(J,JSON.stringify(n))}catch{}}function Wn(){let e=b().filter(p),t=f();return[...new Set([...e,...t])].filter(e=>!m(e)?.hidden)}function Gn(e){try{if(Z(e).length>0)return!0}catch{}try{if(S(e).length>0)return!0}catch{}let t=m(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function Kn(e,t){try{if(Z(e).some(e=>e.id===t))return!0}catch{}try{if(S(e).some(e=>e.id===t))return!0}catch{}let n=m(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function X(e){return m(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function qn(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function Z(e){try{if(e===`bedrock-camp`){let e=v(ur(`bedrock-camp`));return Ln(`amazon-bedrock`).filter(t=>_(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=X(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return Q.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of b())try{for(let t of Ln(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=vr(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&qn(o,s),qn(o,n),o})}if(t.isOAuth){let n=Ln(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&qn(i,a),i})}return Ln(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return Q.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Jn(e){let t=$().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}Object.assign({})[`/packages/webapp/providers.json`];const Q=n(`provider-settings`);function $(){Hn();let e=localStorage.getItem(J);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Yn(e){return i(localStorage)[e]??[]}function Xn(e,t){let n=i(localStorage),a=t.map(e=>e.trim()).filter(e=>e.length>0);a.length===0?delete n[e]:n[e]=a,r(localStorage,n)}async function Zn(e,t){if(d()){Xn(e,t);return}let n=u();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:i}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{r(localStorage,i)}catch(t){Q.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function Qn(){return i(localStorage)}function $n(e){localStorage.setItem(J,JSON.stringify(e))}async function er(e){if(d()){$n(e);return}let t=u();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(J,r)}catch(e){Q.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function tr(e,t,n,r,i){let a=$().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),$n(a)}async function nr(e){let t=cn();try{if(t===`extension-direct`){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&Q.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&Q.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else if(t===`extension-delegate`){let t=await gn(`secrets.delete`,{name:`oauth.${e}.token`});t?.error&&Q.error(`Bridge secrets.delete returned error`,{providerId:e,error:t.error})}else if(t!==`connect`){let t=await fetch(a(`/api/secrets/oauth/${e}`),{method:`DELETE`,headers:s()});!t.ok&&t.status!==404&&Q.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){Q.error(`OAuth replica removal failed`,{providerId:e,topology:t,error:n instanceof Error?n.message:String(n)})}}async function rr(e){let t=$().find(t=>t.providerId===e),n=X(e);t&&n?.isOAuth&&await ir(e),await nr(e),await er($().filter(t=>t.providerId!==e));let r=localStorage.getItem(Y)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(Y)}async function ir(e){let t=$().find(t=>t.providerId===e);if(!t)return;let n=X(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){Q.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(n.getOAuthLogoutUrl){let r=n.getOAuthLogoutUrl(t);if(r){let{openIdpLogoutUrl:t}=await import(`./oauth-service-D-lmxdpH.js`);await t(r).catch(t=>{Q.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await er($().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await nr(e)}}async function ar(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function or(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await ar(()=>t.sendMaskRequest(r),n);if(!i){Q.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function sr(e){let t=$().find(t=>t.providerId===e.providerId),n=$().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await er(n);let r=X(e.providerId)?.oauthTokenDomains??[],i=Yn(e.providerId),o=new Set,c=[];for(let e of[...r,...i]){let t=e.toLowerCase();o.has(t)||(o.add(t),c.push(e))}if(c.length===0)return;let l=cn();try{if(l===`extension-direct`)await or({providerId:e.providerId,accessToken:e.accessToken,domains:c},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&Q.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&Q.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:$,saveAccounts:er});else if(l===`extension-delegate`)await or({providerId:e.providerId,accessToken:e.accessToken,domains:c},{sendMaskRequest:t=>gn(`secrets.mask-oauth-token`,t).then(t=>(t?.error&&Q.warn(`Bridge mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t??{})).catch(t=>(Q.error(`Bridge mask-oauth-token transport failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)}),{})),getAccounts:$,saveAccounts:er});else if(l!==`connect`){let t=await fetch(a(`/api/secrets/oauth-update`),{method:`POST`,headers:s({"Content-Type":`application/json`}),body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:c})});if(t.ok){let n=await t.json();if(typeof n.maskedValue==`string`){let t=$(),r=t.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=n.maskedValue,await er(t))}else Q.warn(`OAuth replica POST ok but missing maskedValue`,{providerId:e.providerId})}else Q.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){Q.error(`OAuth replica sync failed`,{providerId:e.providerId,topology:l,error:t instanceof Error?t.message:String(t)})}}function cr(e){let t=$().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function lr(e){let t=$().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(X(e).optionalApiKey?`local`:null):null}function ur(e){return $().find(t=>t.providerId===e)?.baseUrl??null}function dr(e){return $().find(t=>t.providerId===e)?.deployment??null}function fr(e){return $().find(t=>t.providerId===e)?.apiVersion??null}function pr(){let e=localStorage.getItem(Y)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function mr(){return localStorage.getItem(Y)||``}function hr(){let e=mr(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=$(),r=pr();if(r){let e=n.find(e=>Gn(e.providerId)&&Kn(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>Gn(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function gr(){return lr(hr())}function _r(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function vr(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${_r(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function yr(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function br(e){if(!e)return xr();let t=hr(),n=ur(t),r=X(t);try{let i=In(yr(t,r),e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=Z(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(Q.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=Z(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:vr(t,e,n)}return xr()}}function xr(){let e=hr(),t=pr(),n=ur(e),r=Z(e),i=X(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=yr(e,i),a=In(t,o);if(!a?.id)throw Error(`Model ${o} not found in ${t} registry`);let s=a;return i.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){Q.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?vr(e,o,n):In(`anthropic`,`claude-sonnet-4-0`)}}function Sr(e){let t=e.toLowerCase();if(!t)return null;let n=null,r=-1;for(let e of $())for(let i of Z(e.providerId)){let e=i.id.toLowerCase(),a=(i.name??``).toLowerCase();if(!e.includes(t)&&!a.includes(t))continue;let o=i.contextWindow??0;(o>r||o===r&&Cr(i.id,n??``)>0)&&(r=o,n=i.id)}return n}function Cr(e,t){let n=e.match(/\d+/g)?.map(Number)??[],r=t.match(/\d+/g)?.map(Number)??[],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}export{Zn as A,ye as B,Gn as C,Sr as D,br as E,cn as F,sn as I,Qt as L,Sn as M,bn as N,sr as O,gn as P,Gt as R,or as S,xr as T,pr as _,Qn as a,ar as b,fr as c,dr as d,Yn as f,cr as g,Z as h,$ as i,Nn as j,Xn as k,Wn as l,X as m,Fn as n,gr as o,Jn as p,tr as r,lr as s,J as t,ur as u,hr as v,rr as w,Un as x,ir as y,Kt as z};
99
+ Otherwise, output ONLY a markdown bullet list (one bullet per memory), no headers, no preamble, no follow-up. Each bullet is one line. Be specific. Prefer one fact per bullet over multi-clause sentences.`,2048,e.headers,s);if(n?.trim()&&n.trim()!==`NONE`)try{await e.onMemoryUpdates(n.trim()),U.info(`Memory extraction applied`,{bulletsLength:n.length})}catch(e){U.warn(`onMemoryUpdates callback threw`,{error:e instanceof Error?e.message:String(e)})}else U.info(`Memory extraction returned no durable memories`)}catch(e){U.warn(`Memory extraction call failed (compaction still applied)`,{error:e instanceof Error?e.message:String(e)})}return h(`idle`),[a,...m]}catch(e){U.warn(`LLM summarization failed, falling back to naive drop`,{error:e instanceof Error?e.message:String(e)})}else u||U.warn(`No API key available for LLM summarization, falling back to naive drop`);h(`idle`);let _={role:`user`,content:[{type:`text`,text:`[Earlier conversation messages were compacted to save context space]`}],timestamp:Date.now()};return U.info(`Naive compaction applied`,{originalMessages:o.length,compactedMessages:1+m.length}),[_,...m]}}function cn(){return typeof chrome<`u`&&chrome?.runtime?.id?`extension-direct`:o()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}const ln=n(`secrets-bridge`),un=1e4;let dn=null,fn=1;const W=new Map;function pn(e){let t=e;if(typeof t?.id!=`number`)return;let n=W.get(t.id);n&&(W.delete(t.id),clearTimeout(n.timer),n.resolve(t.response))}function mn(){dn=null;for(let[,e]of W)clearTimeout(e.timer),e.reject(Error(`secrets.crud port disconnected`));W.clear(),ln.debug(`secrets.crud port disconnected; pending cleared, will reconnect`)}function hn(){if(dn)return dn;let e=o();if(!e)return ln.warn(`cannot open secrets.crud port: no extension delegate id`),null;if(typeof chrome>`u`||typeof chrome?.runtime?.connect!=`function`)return ln.warn(`cannot open secrets.crud port: chrome.runtime.connect unavailable`),null;let t=chrome.runtime.connect,n=t(e,{name:`secrets.crud`});return n.onMessage.addListener(pn),n.onDisconnect.addListener(mn),dn=n,n}function gn(e,t){return typeof chrome>`u`&&o()?vn(e,t):_n(e,t)}function _n(e,t){return new Promise((n,r)=>{let i=hn();if(!i){n(void 0);return}let a=fn++,o=setTimeout(()=>{W.delete(a)&&(ln.warn(`secrets.crud call timed out`,{type:e}),n(void 0))},un);W.set(a,{resolve:n,reject:r,timer:o});try{i.postMessage({id:a,type:e,...t})}catch(e){W.delete(a),clearTimeout(o),dn=null,r(e instanceof Error?e:Error(String(e)))}})}async function vn(e,t){let{getPanelRpcClient:n}=await import(`./panel-rpc-D0J5pskz.js`).then(e=>e.i),r=n();if(!r){ln.warn(`cannot bridge secrets call: panel-RPC client unavailable in worker realm`,{type:e});return}let{response:i}=await r.call(`secrets-bridge`,{type:e,payload:t},{timeoutMs:un});return i}const G=n(`secret-scrub`),yn=async e=>e;function bn(){let e=cn();return e===`extension-direct`?async e=>{if(!e)return e;try{let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.scrub-tool-result`,text:e},e=>t(e??{}))});return t.error?(G.debug(`SW scrub-tool-result returned error`,{error:t.error}),e):typeof t.text==`string`?t.text:e}catch(t){return G.debug(`SW scrub-tool-result failed`,{error:t instanceof Error?t.message:String(t)}),e}}:e===`extension-delegate`?async e=>{if(!e)return e;try{let t=await gn(`secrets.scrub-tool-result`,{text:e});return t?.error?(G.debug(`Bridge scrub-tool-result returned error`,{error:t.error}),e):typeof t?.text==`string`?t.text:e}catch(t){return G.debug(`Bridge scrub-tool-result failed`,{error:t instanceof Error?t.message:String(t)}),e}}:e===`connect`?yn:async e=>{if(!e)return e;try{let t=await fetch(a(`/api/secrets/scrub`),{method:`POST`,headers:s({"content-type":`application/json`}),body:JSON.stringify({text:e})});if(!t.ok)return G.debug(`Server scrub-tool-result returned non-ok`,{status:t.status}),e;let n=await t.json();return typeof n.text==`string`?n.text:e}catch(t){return G.debug(`Server scrub-tool-result failed`,{error:t instanceof Error?t.message:String(t)}),e}}}const K=`sessions`;function xn(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(K)||e.createObjectStore(K,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var Sn=class{dbPromise=null;getDB(){return this.dbPromise||=xn().then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(K,`readwrite`).objectStore(K).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(K,`readonly`).objectStore(K).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(K,`readwrite`).objectStore(K).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(K,`readonly`).objectStore(K).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(K,`readwrite`).objectStore(K).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}};const q=n(`image-processor`),Cn=3932160,wn=new Set([`image/jpeg`,`image/png`,`image/gif`,`image/webp`]);function Tn(e){return wn.has(e)}function En(e,t){try{if(t===`image/png`){if(e.length<32)return null;let t=atob(e.slice(0,32)),n=t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19),r=t.charCodeAt(20)<<24|t.charCodeAt(21)<<16|t.charCodeAt(22)<<8|t.charCodeAt(23);return n>0&&r>0?{width:n,height:r}:null}if(t===`image/gif`){if(e.length<16)return null;let t=atob(e.slice(0,16)),n=t.charCodeAt(6)|t.charCodeAt(7)<<8,r=t.charCodeAt(8)|t.charCodeAt(9)<<8;return n>0&&r>0?{width:n,height:r}:null}if(t===`image/jpeg`){let t=Math.min(21846*4,e.length),n=atob(e.slice(0,t));for(let e=0;e<n.length-8;e++)if(n.charCodeAt(e)===255){let t=n.charCodeAt(e+1);if(t===192||t===194){let t=n.charCodeAt(e+5)<<8|n.charCodeAt(e+6),r=n.charCodeAt(e+7)<<8|n.charCodeAt(e+8);return r>0&&t>0?{width:r,height:t}:null}}}}catch{}return null}async function Dn(e){if(!Tn(e.mimeType))return q.warn(`Unsupported image format`,{mimeType:e.mimeType}),{type:`text`,text:`[Image removed: unsupported format "${e.mimeType}". Supported: JPEG, PNG, GIF, WebP]`};let t=e.data.length,n=En(e.data,e.mimeType);if(!(t>5242880||n!==null&&(n.width>8e3||n.height>8e3)||n!==null&&Math.max(n.width,n.height)>1568))return e;q.info(`Image needs processing`,{base64Size:t,dimensions:n?`${n.width}x${n.height}`:`unknown`,reason:t>5242880?`size`:`dimensions`});let r,i;try{let e=await import(`./kernel-worker-DElXqFYz.js`).then(e=>e.l);r=e.getMagick,i=e.MIME_TO_MAGICK_FORMAT}catch(e){return q.error(`ImageMagick WASM module unavailable`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (ImageMagick WASM could not be loaded)]`}}let a;try{a=await r()}catch(e){return q.error(`ImageMagick WASM initialization failed`,{error:e instanceof Error?e.message:String(e)}),{type:`text`,text:`[Image removed: resize service unavailable (WASM init failed)]`}}try{let n=atob(e.data),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let o={data:null,mime:e.mimeType};if(await a.ImageMagick.read(r,async t=>{let n=t.width,r=t.height,a=Math.max(n,r);if(a>1568){let e=1568/a,i=Math.round(n*e),o=Math.round(r*e);t.resize(i,o),q.info(`Resized image`,{from:`${n}x${r}`,to:`${i}x${o}`})}let s=i[e.mimeType]||`JPEG`;t.write(s,e=>{o.data=new Uint8Array(e)}),o.data&&o.data.length>Cn&&s!==`JPEG`?(q.info(`Still over 5MB, compressing to JPEG q80`),t.quality=80,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}),o.mime=`image/jpeg`):o.data&&o.data.length>Cn&&(q.info(`Still over 5MB as JPEG, reducing quality to 60`),t.quality=60,t.write(`JPEG`,e=>{o.data=new Uint8Array(e)}))}),!o.data)return q.warn(`ImageMagick produced no output`),{type:`text`,text:`[Image removed: could not be processed (empty output from resize)]`};if(o.data.length>Cn)return q.warn(`Image still over 5MB after resize+compress`,{size:o.data.length}),{type:`text`,text:`[Image removed: still ${Math.round(o.data.length/1024/1024*10)/10}MB after resize and compression, exceeds 5MB API limit]`};let s=``;for(let e=0;e<o.data.length;e++)s+=String.fromCharCode(o.data[e]);let c=btoa(s);return q.info(`Image processed successfully`,{originalBase64:t,newBase64:c.length,mimeType:o.mime}),{type:`image`,data:c,mimeType:o.mime}}catch(n){return q.error(`Image data processing failed (corrupt or unreadable)`,{mimeType:e.mimeType,estimatedBytes:t,error:n instanceof Error?n.message:String(n)}),{type:`text`,text:`[Image removed: image data could not be processed (${n instanceof Error?n.message:`corrupt or unreadable`})]`}}}const On=n(`tool-adapter`),kn=/<img:(data:(image\/[^;]+);base64,([^>]+))>/g;function An(e){let t=[],n=0;for(let r of e.matchAll(kn)){let i=e.slice(n,r.index);i.trim()&&t.push({type:`text`,text:i.trimEnd()}),t.push({type:`image`,mimeType:r[2],data:r[3]}),n=r.index+r[0].length}let r=e.slice(n);return(r.trim()||t.length===0)&&t.push({type:`text`,text:r||e}),t}async function jn(e){let t=An(e),n=[];for(let e of t)e.type===`image`?n.push(await Dn(e)):n.push(e);return n}function Mn(e,t,n){return{name:e.name,label:e.name,description:e.description,parameters:e.inputSchema,async execute(r,i,a,o){let s;o&&(s=c({onUpdate:o,toolName:e.name,toolCallId:r}));let u=t?t.processManager.spawn({kind:`tool`,argv:[e.name,...Pn(i)],owner:t.owner,ppid:t.getParentPid?.()}):null,d=null;u&&t&&a&&(a.aborted?t.processManager.signal(u.pid,`SIGINT`):a.addEventListener(`abort`,()=>t.processManager.signal(u.pid,`SIGINT`),{once:!0})),u&&t&&(d=t.processManager.onSignal((e,n)=>{e.pid!==u.pid||n!==`SIGKILL`||t.processManager.exit(u.pid,null)}));let f=u?u.abort.signal:a;try{let r=await e.execute(i??{},f),a=r.content;if(n&&typeof a==`string`&&a.length>0)try{a=await n.scrubToolResult(a)}catch(t){On.warn(`Tool-result scrub failed, falling back to unscrubbed content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),a=r.content}let o;try{o=await jn(a)}catch(t){On.warn(`Image processing failed, falling back to raw content`,{tool:e.name,error:t instanceof Error?t.message:String(t)}),o=An(a)}return u&&t&&t.processManager.exit(u.pid,+!!r.isError),{content:o,details:{isError:r.isError}}}catch(e){throw u&&t&&t.processManager.exit(u.pid,u.abort.signal.aborted?null:1),e}finally{s&&l(s),d?.()}}}}function Nn(e,t,n){return e.map(e=>Mn(e,t,n))}function Pn(e){if(typeof e!=`object`||!e)return[];let t=e;for(let e of[`command`,`file_path`,`path`,`pattern`,`url`,`key`,`name`,`query`,`message`]){let n=t[e];if(typeof n==`string`&&n.length>0)return[n]}for(let e of Object.values(t))if(typeof e==`string`&&e.length>0)return[e];return[]}var Fn=e({ACCOUNTS_KEY:()=>J,addAccount:()=>tr,getAccounts:()=>$,getAllExtraOAuthDomains:()=>Qn,getApiKey:()=>gr,getApiKeyForProvider:()=>lr,getApiVersionForProvider:()=>fr,getAvailableProviders:()=>Wn,getBaseUrlForProvider:()=>ur,getDeploymentForProvider:()=>dr,getExtraOAuthDomains:()=>Yn,getOAuthAccountInfo:()=>Jn,getProviderConfig:()=>X,getProviderModels:()=>Z,getRawApiKeyForProvider:()=>cr,getSelectedModelId:()=>pr,getSelectedProvider:()=>hr,logoutOAuthAccount:()=>ir,maskOAuthTokenWithRetry:()=>ar,migrateLegacyAuthOnlySelection:()=>Un,persistOAuthMaskViaServiceWorker:()=>or,providerOffersLlmModels:()=>Gn,removeAccount:()=>rr,resolveCurrentModel:()=>xr,resolveModelById:()=>br,resolveModelByShorthand:()=>Sr,saveOAuthAccount:()=>sr,setExtraOAuthDomains:()=>Xn,setExtraOAuthDomainsAsync:()=>Zn});const In=x,Ln=S,J=`slicc_accounts`,Y=`selected-model`,Rn=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],zn=new Set([`github`]);function Bn(e){let t;try{t=b()}catch{return!1}return t.includes(e)&&!p(e)}let Vn=!1;function Hn(){if(!Vn){Vn=!0;for(let e of Rn)try{localStorage.removeItem(e)}catch{}Un()}}function Un(){try{let e=localStorage.getItem(Y);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(zn.has(n)||Bn(n))&&localStorage.removeItem(Y)}}}catch{}try{let e=localStorage.getItem(J);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Bn(e.providerId)));n.length!==t.length&&localStorage.setItem(J,JSON.stringify(n))}catch{}}function Wn(){let e=b().filter(p),t=f();return[...new Set([...e,...t])].filter(e=>!m(e)?.hidden)}function Gn(e){try{if(Z(e).length>0)return!0}catch{}try{if(S(e).length>0)return!0}catch{}let t=m(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function Kn(e,t){try{if(Z(e).some(e=>e.id===t))return!0}catch{}try{if(S(e).some(e=>e.id===t))return!0}catch{}let n=m(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function X(e){return m(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function qn(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function Z(e){try{if(e===`bedrock-camp`){let e=v(ur(`bedrock-camp`));return Ln(`amazon-bedrock`).filter(t=>_(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=X(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return Q.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of b())try{for(let t of Ln(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=vr(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&qn(o,s),qn(o,n),o})}if(t.isOAuth){let n=Ln(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&qn(i,a),i})}return Ln(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return Q.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Jn(e){let t=$().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}Object.assign({})[`/packages/webapp/providers.json`];const Q=n(`provider-settings`);function $(){Hn();let e=localStorage.getItem(J);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Yn(e){return i(localStorage)[e]??[]}function Xn(e,t){let n=i(localStorage),a=t.map(e=>e.trim()).filter(e=>e.length>0);a.length===0?delete n[e]:n[e]=a,r(localStorage,n)}async function Zn(e,t){if(d()){Xn(e,t);return}let n=u();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:i}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{r(localStorage,i)}catch(t){Q.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function Qn(){return i(localStorage)}function $n(e){localStorage.setItem(J,JSON.stringify(e))}async function er(e){if(d()){$n(e);return}let t=u();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(J,r)}catch(e){Q.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function tr(e,t,n,r,i){let a=$().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),$n(a)}async function nr(e){let t=cn();try{if(t===`extension-direct`){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&Q.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&Q.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else if(t===`extension-delegate`){let t=await gn(`secrets.delete`,{name:`oauth.${e}.token`});t?.error&&Q.error(`Bridge secrets.delete returned error`,{providerId:e,error:t.error})}else if(t!==`connect`){let t=await fetch(a(`/api/secrets/oauth/${e}`),{method:`DELETE`,headers:s()});!t.ok&&t.status!==404&&Q.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){Q.error(`OAuth replica removal failed`,{providerId:e,topology:t,error:n instanceof Error?n.message:String(n)})}}async function rr(e){let t=$().find(t=>t.providerId===e),n=X(e);t&&n?.isOAuth&&await ir(e),await nr(e),await er($().filter(t=>t.providerId!==e));let r=localStorage.getItem(Y)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(Y)}async function ir(e){let t=$().find(t=>t.providerId===e);if(!t)return;let n=X(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){Q.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(n.getOAuthLogoutUrl){let r=n.getOAuthLogoutUrl(t);if(r){let{openIdpLogoutUrl:t}=await import(`./oauth-service-D-lmxdpH.js`);await t(r).catch(t=>{Q.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await er($().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await nr(e)}}async function ar(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function or(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await ar(()=>t.sendMaskRequest(r),n);if(!i){Q.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function sr(e){let t=$().find(t=>t.providerId===e.providerId),n=$().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await er(n);let r=X(e.providerId)?.oauthTokenDomains??[],i=Yn(e.providerId),o=new Set,c=[];for(let e of[...r,...i]){let t=e.toLowerCase();o.has(t)||(o.add(t),c.push(e))}if(c.length===0)return;let l=cn();try{if(l===`extension-direct`)await or({providerId:e.providerId,accessToken:e.accessToken,domains:c},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&Q.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&Q.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:$,saveAccounts:er});else if(l===`extension-delegate`)await or({providerId:e.providerId,accessToken:e.accessToken,domains:c},{sendMaskRequest:t=>gn(`secrets.mask-oauth-token`,t).then(t=>(t?.error&&Q.warn(`Bridge mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t??{})).catch(t=>(Q.error(`Bridge mask-oauth-token transport failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)}),{})),getAccounts:$,saveAccounts:er});else if(l!==`connect`){let t=await fetch(a(`/api/secrets/oauth-update`),{method:`POST`,headers:s({"Content-Type":`application/json`}),body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:c})});if(t.ok){let n=await t.json();if(typeof n.maskedValue==`string`){let t=$(),r=t.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=n.maskedValue,await er(t))}else Q.warn(`OAuth replica POST ok but missing maskedValue`,{providerId:e.providerId})}else Q.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){Q.error(`OAuth replica sync failed`,{providerId:e.providerId,topology:l,error:t instanceof Error?t.message:String(t)})}}function cr(e){let t=$().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function lr(e){let t=$().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(X(e).optionalApiKey?`local`:null):null}function ur(e){return $().find(t=>t.providerId===e)?.baseUrl??null}function dr(e){return $().find(t=>t.providerId===e)?.deployment??null}function fr(e){return $().find(t=>t.providerId===e)?.apiVersion??null}function pr(){let e=localStorage.getItem(Y)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function mr(){return localStorage.getItem(Y)||``}function hr(){let e=mr(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=$(),r=pr();if(r){let e=n.find(e=>Gn(e.providerId)&&Kn(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>Gn(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function gr(){return lr(hr())}function _r(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function vr(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${_r(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function yr(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function br(e){if(!e)return xr();let t=hr(),n=ur(t),r=X(t);try{let i=In(yr(t,r),e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=Z(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(Q.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=Z(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:vr(t,e,n)}return xr()}}function xr(){let e=hr(),t=pr(),n=ur(e),r=Z(e),i=X(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=yr(e,i),a=In(t,o);if(!a?.id)throw Error(`Model ${o} not found in ${t} registry`);let s=a;return i.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){Q.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?vr(e,o,n):In(`anthropic`,`claude-sonnet-4-0`)}}function Sr(e){let t=e.toLowerCase();if(!t)return null;let n=null,r=-1;for(let e of $())for(let i of Z(e.providerId)){let e=i.id.toLowerCase(),a=(i.name??``).toLowerCase();if(!e.includes(t)&&!a.includes(t))continue;let o=i.contextWindow??0;(o>r||o===r&&Cr(i.id,n??``)>0)&&(r=o,n=i.id)}return n}function Cr(e,t){let n=e.match(/\d+/g)?.map(Number)??[],r=t.match(/\d+/g)?.map(Number)??[],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}export{Zn as A,ye as B,Gn as C,Sr as D,br as E,cn as F,sn as I,Qt as L,Sn as M,bn as N,sr as O,gn as P,Gt as R,or as S,xr as T,pr as _,Qn as a,ar as b,fr as c,dr as d,Yn as f,cr as g,Z as h,$ as i,Nn as j,Xn as k,Wn as l,X as m,Fn as n,gr as o,Jn as p,tr as r,lr as s,J as t,ur as u,hr as v,rr as w,Un as x,ir as y,Kt as z};