sliccy 5.36.0 → 5.37.1
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.
- package/dist/node-server/_cloud_core/src/operations/resume.d.ts.map +1 -1
- package/dist/node-server/_cloud_core/src/operations/resume.js +33 -14
- package/dist/node-server/_cloud_core/tests/resume.test.js +107 -0
- package/dist/node-server/_shared/agent-wire-types.d.ts +196 -0
- package/dist/node-server/_shared/agent-wire-types.d.ts.map +1 -0
- package/dist/node-server/_shared/agent-wire-types.js +14 -0
- package/dist/node-server/_shared/agent-wire-types.js.map +1 -0
- package/dist/node-server/_shared/index.d.ts +2 -0
- package/dist/node-server/_shared/index.d.ts.map +1 -1
- package/dist/node-server/_shared/index.js +2 -0
- package/dist/node-server/_shared/index.js.map +1 -1
- package/dist/node-server/_shared/tray-sync-protocol.d.ts +436 -0
- package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -0
- package/dist/node-server/_shared/tray-sync-protocol.js +74 -0
- package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -0
- package/dist/ui/assets/{account-store-6TH6jqat.js → account-store-84ToLGyA.js} +3 -3
- package/dist/ui/assets/{account-store-Cc6ad0X5.js → account-store-CzTOyyDS.js} +2 -2
- package/dist/ui/assets/{adobe-ineAfY3Y.js → adobe-Cb1eWTol.js} +1 -1
- package/dist/ui/assets/{adobe-iIufBzn5.js → adobe-Dr0xNnwG.js} +2 -2
- package/dist/ui/assets/{adobe-oauth-state-DiSnFEyL.js → adobe-oauth-state-4qYBVaiH.js} +1 -1
- package/dist/ui/assets/{adobe-oauth-state-UzjsHThT.js → adobe-oauth-state-W9ocUWXq.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-7RPOEhNR.js → agent-message-to-chat-DoaIreHU.js} +1 -1
- package/dist/ui/assets/{apps-BZpkOuwC.js → apps-kZIJcC35.js} +1 -1
- package/dist/ui/assets/{azure-openai-DbjTEd2r.js → azure-openai-CJQEl3EC.js} +1 -1
- package/dist/ui/assets/{azure-openai-CTqM3yBH.js → azure-openai-CT56KC-u.js} +1 -1
- package/dist/ui/assets/{cdp-IDGN5yWS.js → cdp-FrTDh4u0.js} +1 -1
- package/dist/ui/assets/{cerebras-CRVckVkH.js → cerebras-58IPHHdX.js} +1 -1
- package/dist/ui/assets/{cerebras-CdXzQgYB.js → cerebras-DWlJsqm2.js} +1 -1
- package/dist/ui/assets/{composer-speech-BVrOfKlO.js → composer-speech-CpZRlNH5.js} +1 -1
- package/dist/ui/assets/{connect-surface-7VPhrK_2.js → connect-surface-CwxE0ZBv.js} +1 -1
- package/dist/ui/assets/dip-CMfdn5I0.js +1 -0
- package/dist/ui/assets/{dist-D0pG5gU2.js → dist-BrS3Ly4b.js} +1 -1
- package/dist/ui/assets/{dist-BOvvFn3H.js → dist-Brsc1rcu.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-BWWvalF_.js → ensure-speech-assets-BPRBOh9s.js} +1 -1
- package/dist/ui/assets/esp8266-BvriLbbW.js +1 -0
- package/dist/ui/assets/{esptool-operations-CtB0Psmq.js → esptool-operations-uwy2FBs4.js} +2 -2
- package/dist/ui/assets/{fs-BG-aeXit.js → fs-BQ4DESjz.js} +2 -2
- package/dist/ui/assets/{fs-DePtqgxn.js → fs-jYtFKXZC.js} +1 -1
- package/dist/ui/assets/{github-33mRKVOk.js → github-DYv7u_bm.js} +1 -1
- package/dist/ui/assets/{github-RQb-yS5Q.js → github-DeBtH0fM.js} +2 -2
- package/dist/ui/assets/{github-copilot-BkWroka2.js → github-copilot-CTq5fO58.js} +1 -1
- package/dist/ui/assets/{github-copilot-CKDo3q1t.js → github-copilot-DN_V-Wy3.js} +1 -1
- package/dist/ui/assets/{hear-Bbu58KzM.js → hear-C5Fs233C.js} +1 -1
- package/dist/ui/assets/{hear-YP69TAqr.js → hear-fb2DonIO.js} +1 -1
- package/dist/ui/assets/{kernel-worker-BNOFdUsx.js → kernel-worker-CdUjMYtN.js} +1024 -1024
- package/dist/ui/assets/{kokoro-engine-th5PHlHd.js → kokoro-engine-DTKd-aqU.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CM8Z_HXu.js → lick-ws-bridge-B2TY9LJt.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-yO5hiJDm.js → lick-ws-bridge-oFTSW25J.js} +1 -1
- package/dist/ui/assets/{local-llm-fE5F7P-K.js → local-llm-B3iUmoMx.js} +1 -1
- package/dist/ui/assets/{main-Bhwe5vUn.js → main-CcZLvPq4.js} +4 -4
- package/dist/ui/assets/{main-cherry-DdlW49Q5.js → main-cherry-C4cWQqKP.js} +1 -1
- package/dist/ui/assets/mount-C91MGXw1.js +1 -0
- package/dist/ui/assets/{mount-bridge-client-VA_GLWNL.js → mount-bridge-client-mzFXy2FO.js} +1 -1
- package/dist/ui/assets/{mount-BR3ETV7F.js → mount-pWDRsVq4.js} +2 -2
- package/dist/ui/assets/{new-session-D-EX5YBm.js → new-session-BEbQkWjX.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-bt-j_P6d.js → oauth-bootstrap-BCbItWyy.js} +2 -2
- package/dist/ui/assets/{oauth-service-DdejFjWa.js → oauth-service-8K-X1_wU.js} +1 -1
- package/dist/ui/assets/{oauth-service-DALcoLdp.js → oauth-service-_jFyYPI1.js} +1 -1
- package/dist/ui/assets/{openai-codex-DtkkdXLu.js → openai-codex-DOOYOzjY.js} +1 -1
- package/dist/ui/assets/{openai-codex-BRrglvDw.js → openai-codex-WyFoiRoM.js} +1 -1
- package/dist/ui/assets/page-follower-tray-CxwXH4d7.js +5 -0
- package/dist/ui/assets/{panel-rpc-handlers-CAIkxkYX.js → panel-rpc-handlers-CMDWueoI.js} +2 -2
- package/dist/ui/assets/{port-bridge-client-HYsuFrMw.js → port-bridge-client-4I4keX4E.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-CbHZI-MK.js → port-bridge-client-Dl2l4qs-.js} +1 -1
- package/dist/ui/assets/{provider-csfz74Dg.js → provider-D-FY2qlI.js} +2 -2
- package/dist/ui/assets/{provider-CTdAzBVo.js → provider-DHFC_3q_.js} +1 -1
- package/dist/ui/assets/provider-store-access-2VxQVlkC.js +1 -0
- package/dist/ui/assets/provider-store-access-BySsoOY0.js +1 -0
- package/dist/ui/assets/{providers-BDtkPPUs.js → providers-6_N-7WTc.js} +2 -2
- package/dist/ui/assets/{providers-DHRqRPYi.js → providers-dcxyE22K.js} +1 -1
- package/dist/ui/assets/{proxied-fetch-CaWoNw-n.js → proxied-fetch-9Y1yFIti.js} +1 -1
- package/dist/ui/assets/proxied-fetch-C0UCD_nd.js +1 -0
- package/dist/ui/assets/{quick-llm-DasLK4HT.js → quick-llm-CEuUHIEX.js} +1 -1
- package/dist/ui/assets/remote-cdp-transport-m_T16Bkr.js +1 -0
- package/dist/ui/assets/{secret-env-zIJToV_E.js → secret-env-BK4_mrXD.js} +1 -1
- package/dist/ui/assets/{secret-topology-k6-rjoyS.js → secret-topology-wZsuRrlb.js} +1 -1
- package/dist/ui/assets/{secrets-bridge-client-2HszvKw8.js → secrets-bridge-client-Cr8LDWEK.js} +1 -1
- package/dist/ui/assets/session-freezer-CkwGjEUg.js +1 -0
- package/dist/ui/assets/{speak-SFLBDxI4.js → speak-DG-t8G-C.js} +1 -1
- package/dist/ui/assets/{speak-pcUqeXbI.js → speak-DZrW1xnA.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DD23Yfjl.js → sprinkle-manager-DMfmn3bh.js} +1 -1
- package/dist/ui/assets/{src-YN73WJ67.js → src-CAHYy5iz.js} +1 -1
- package/dist/ui/assets/{store-BkYs9KEN.js → store-BVziKf55.js} +1 -1
- package/dist/ui/assets/{sudo-3BhmGQ7k.js → sudo-DrQXoeFf.js} +1 -1
- package/dist/ui/assets/{transformers-env-BQUsr-h9.js → transformers-env-BJuly8Ix.js} +1 -1
- package/dist/ui/assets/{transformers-env-BOML_AeH.js → transformers-env-De2XyQX8.js} +1 -1
- package/dist/ui/assets/{tray-leader-48LRwguM.js → tray-leader-Deqitvj3.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-DDrxu1Tm.js → tray-leave-runtime-DKtz16Mr.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DRTuUXVn.js → upgrade-detection-YbDyYhBe.js} +1 -1
- package/dist/ui/assets/{voice-reply-xhPxI32E.js → voice-reply-CB0a8ZZI.js} +1 -1
- package/dist/ui/assets/{wc-attach-CidfHtTQ.js → wc-attach-Bf7bv0M_.js} +3 -3
- package/dist/ui/assets/{wc-extension-DKURMALg.js → wc-extension-D5uYgyCD.js} +2 -2
- package/dist/ui/assets/{wc-float-label-DXWATTwk.js → wc-float-label-Ca6eHC5P.js} +1 -1
- package/dist/ui/assets/{wc-follower-tYEHNmDm.js → wc-follower-fWrb6PDS.js} +3 -3
- package/dist/ui/assets/{wc-live-D_9zJ9oF.js → wc-live-CjcyDoNS.js} +5 -5
- package/dist/ui/assets/{wc-nav-B4nyxcdi.js → wc-nav-D8spEOcG.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-ClpPiMyR.js → wc-onboarding-D_shYls2.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-Be3ZaBQD.js → wc-placeholder-B5LeYurd.js} +3 -3
- package/dist/ui/assets/{wc-settings-L6i7tfnW.js → wc-settings-gQNHBfwA.js} +3 -3
- package/dist/ui/assets/{wc-shell-pFeRy48A.js → wc-shell-MOTODaWA.js} +3 -3
- package/dist/ui/assets/{wc-sprinkles-BNphGfh0.js → wc-sprinkles-Cg36mJvK.js} +2 -2
- package/dist/ui/assets/wc-tray-DQjTYwzX.js +2 -0
- package/dist/ui/assets/{whisper-engine-uvoq2aGS.js → whisper-engine-CKBpstNg.js} +1 -1
- package/dist/ui/assets/{whisper-session-B3WkTRmf.js → whisper-session-B__paJv7.js} +2 -2
- package/dist/ui/assets/{xai-grok--LyJalVP.js → xai-grok-pkI6WwzK.js} +1 -1
- package/dist/ui/assets/{xai-grok-BMPhqBMR.js → xai-grok-uPc39CB4.js} +1 -1
- package/dist/ui/index.html +8 -8
- package/dist/ui/llm-proxy-sw.js +1 -1
- package/dist/ui/packages/webapp/index.html +8 -8
- package/package.json +1 -1
- package/dist/ui/assets/dip-B1hvByTh.js +0 -1
- package/dist/ui/assets/esp8266-CekNwxR0.js +0 -1
- package/dist/ui/assets/mount-DdQnpwet.js +0 -1
- package/dist/ui/assets/page-follower-tray-DuXdxpGE.js +0 -5
- package/dist/ui/assets/provider-store-access-Cq7mYrEf.js +0 -1
- package/dist/ui/assets/provider-store-access-DZeob1tk.js +0 -1
- package/dist/ui/assets/proxied-fetch-BG3drLHR.js +0 -1
- package/dist/ui/assets/remote-cdp-transport-ZG2v9Vg-.js +0 -1
- package/dist/ui/assets/session-freezer-D21SbihG.js +0 -1
- package/dist/ui/assets/wc-tray-B_nQ58gB.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../../src/operations/resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;4FAEwF;IACxF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;kEAC8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAsCD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,eAAe,GACrB;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CA2BxE;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../../src/operations/resume.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;4FAEwF;IACxF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;kEAC8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAsCD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,eAAe,GACrB;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CA2BxE;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,YAAY,CAAC,CA+FvB"}
|
|
@@ -94,20 +94,8 @@ export async function resumeCone(deps, opts) {
|
|
|
94
94
|
let resumeIndex;
|
|
95
95
|
// New: coneConfigDelta takes precedence — read existing files, merge, write both.
|
|
96
96
|
if (opts.coneConfigDelta) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
existingConeConfig = await handle.readFile('/slicc/cone-config.json');
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
existingConeConfig = null;
|
|
103
|
-
}
|
|
104
|
-
let existingSecretsEnv = '';
|
|
105
|
-
try {
|
|
106
|
-
existingSecretsEnv = await handle.readFile('/slicc/secrets.env');
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
existingSecretsEnv = '';
|
|
110
|
-
}
|
|
97
|
+
const existingConeConfig = await readIfPresent(handle, '/slicc/cone-config.json');
|
|
98
|
+
const existingSecretsEnv = (await readIfPresent(handle, '/slicc/secrets.env')) ?? '';
|
|
111
99
|
const applied = applyConeConfigDelta(existingConeConfig, existingSecretsEnv, opts.coneConfigDelta);
|
|
112
100
|
await handle.writeFile('/slicc/secrets.env', applied.secretsEnv);
|
|
113
101
|
await handle.writeFile('/slicc/cone-config.json', applied.coneConfigJson);
|
|
@@ -158,6 +146,37 @@ export async function resumeCone(deps, opts) {
|
|
|
158
146
|
}
|
|
159
147
|
const RESUME_MAX_RETRIES = 5;
|
|
160
148
|
const RESUME_RETRY_DELAY_MS = 1000;
|
|
149
|
+
/**
|
|
150
|
+
* Read a file if it exists; return null when the substrate reports "not found".
|
|
151
|
+
* Any OTHER error (transient e2b request timeout / 5xx, socket reset, permission
|
|
152
|
+
* glitch, filesystem-not-yet-ready) is rewrapped as a CloudError and re-thrown
|
|
153
|
+
* so the caller aborts before running destructive downstream writes. The
|
|
154
|
+
* unqualified catch this replaces silently overwrote the user's persisted
|
|
155
|
+
* cone-config.json + secrets.env with a delta-applied-to-empty base whenever
|
|
156
|
+
* readFile hit a transient fault (issue #1357).
|
|
157
|
+
*/
|
|
158
|
+
async function readIfPresent(handle, path) {
|
|
159
|
+
try {
|
|
160
|
+
return await handle.readFile(path);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
if (isNotFound(err))
|
|
164
|
+
return null;
|
|
165
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
166
|
+
throw new CloudError('INTERNAL', `Failed to read ${path}: ${msg}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function isNotFound(err) {
|
|
170
|
+
if (typeof err !== 'object' || err === null)
|
|
171
|
+
return false;
|
|
172
|
+
const e = err;
|
|
173
|
+
if (e.code === 'ENOENT')
|
|
174
|
+
return true;
|
|
175
|
+
if (e.name === 'NotFoundError')
|
|
176
|
+
return true;
|
|
177
|
+
const msg = typeof e.message === 'string' ? e.message : '';
|
|
178
|
+
return /ENOENT|not found/i.test(msg);
|
|
179
|
+
}
|
|
161
180
|
async function kickLeaderUntilReady(handle) {
|
|
162
181
|
for (let i = 0; i < RESUME_MAX_RETRIES; i++) {
|
|
163
182
|
const result = await handle.run(KICK_CMD);
|
|
@@ -200,4 +200,111 @@ describe('resumeCone', () => {
|
|
|
200
200
|
pollIntervalMs: 50,
|
|
201
201
|
})).rejects.toMatchObject({ name: 'CloudError', code: 'LEADER_NOT_READY' });
|
|
202
202
|
});
|
|
203
|
+
it('applies coneConfigDelta over existing files when both are present', async () => {
|
|
204
|
+
const registry = new MemRegistry();
|
|
205
|
+
await registry.append({
|
|
206
|
+
sandboxId: 'sbx-1',
|
|
207
|
+
substrate: 'e2b',
|
|
208
|
+
createdAt: '',
|
|
209
|
+
joinUrl: 'https://w/join',
|
|
210
|
+
lastSeen: '',
|
|
211
|
+
state: 'paused',
|
|
212
|
+
});
|
|
213
|
+
const existingConfig = JSON.stringify({
|
|
214
|
+
model: 'adobe:claude-opus-4-6',
|
|
215
|
+
accounts: [{ providerId: 'adobe', kind: 'oauth', accessToken: 'old' }],
|
|
216
|
+
});
|
|
217
|
+
const existingSecrets = 'ADOBE_IMS_TOKEN=old\nADOBE_IMS_TOKEN_DOMAINS=adobe-llm-proxy\n' +
|
|
218
|
+
'GITHUB_TOKEN=user-pat\nGITHUB_TOKEN_DOMAINS=github.com\n';
|
|
219
|
+
const writes = [];
|
|
220
|
+
const base = makeResumeTestHandle({ writes });
|
|
221
|
+
const handle = {
|
|
222
|
+
...base,
|
|
223
|
+
readFile: async (path) => {
|
|
224
|
+
if (path === '/slicc/cone-config.json')
|
|
225
|
+
return existingConfig;
|
|
226
|
+
if (path === '/slicc/secrets.env')
|
|
227
|
+
return existingSecrets;
|
|
228
|
+
return base.readFile(path);
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
const substrate = makeFakeSubstrate({ handle });
|
|
232
|
+
await resumeCone({ substrate, registry }, {
|
|
233
|
+
query: 'sbx-1',
|
|
234
|
+
localSliccVersion: 'test',
|
|
235
|
+
coneConfigDelta: {
|
|
236
|
+
upsert: {
|
|
237
|
+
secrets: [{ name: 'OPENAI_API_KEY', value: 'sk-new', domains: ['api.openai.com'] }],
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
const secretsWrite = writes.find((w) => w.path === '/slicc/secrets.env');
|
|
242
|
+
expect(secretsWrite).toBeDefined();
|
|
243
|
+
expect(String(secretsWrite?.contents)).toContain('GITHUB_TOKEN=user-pat');
|
|
244
|
+
expect(String(secretsWrite?.contents)).toContain('OPENAI_API_KEY=sk-new');
|
|
245
|
+
expect(String(secretsWrite?.contents)).toContain('ADOBE_IMS_TOKEN=old');
|
|
246
|
+
});
|
|
247
|
+
it('treats a missing cone-config.json / secrets.env as empty (ENOENT is a real absent-file case)', async () => {
|
|
248
|
+
const registry = new MemRegistry();
|
|
249
|
+
await registry.append({
|
|
250
|
+
sandboxId: 'sbx-1',
|
|
251
|
+
substrate: 'e2b',
|
|
252
|
+
createdAt: '',
|
|
253
|
+
joinUrl: 'https://w/join',
|
|
254
|
+
lastSeen: '',
|
|
255
|
+
state: 'paused',
|
|
256
|
+
});
|
|
257
|
+
const writes = [];
|
|
258
|
+
// Default makeResumeTestHandle throws ENOENT for anything other than
|
|
259
|
+
// /tmp/slicc-join.json — mirrors a pre-feature cone with no persisted config.
|
|
260
|
+
const substrate = makeFakeSubstrate({ handle: makeResumeTestHandle({ writes }) });
|
|
261
|
+
await resumeCone({ substrate, registry }, {
|
|
262
|
+
query: 'sbx-1',
|
|
263
|
+
localSliccVersion: 'test',
|
|
264
|
+
coneConfigDelta: {
|
|
265
|
+
upsert: { secrets: [{ name: 'OPENAI_API_KEY', value: 'sk', domains: ['x'] }] },
|
|
266
|
+
},
|
|
267
|
+
});
|
|
268
|
+
// Wrote a fresh pair (delta-applied-to-empty-base is the legitimate outcome here).
|
|
269
|
+
expect(writes.some((w) => w.path === '/slicc/secrets.env')).toBe(true);
|
|
270
|
+
expect(writes.some((w) => w.path === '/slicc/cone-config.json')).toBe(true);
|
|
271
|
+
});
|
|
272
|
+
it('aborts before writing when readFile hits a transient sandbox fault (does not wipe existing config)', async () => {
|
|
273
|
+
const registry = new MemRegistry();
|
|
274
|
+
await registry.append({
|
|
275
|
+
sandboxId: 'sbx-1',
|
|
276
|
+
substrate: 'e2b',
|
|
277
|
+
createdAt: '',
|
|
278
|
+
joinUrl: 'https://w/join',
|
|
279
|
+
lastSeen: '',
|
|
280
|
+
state: 'paused',
|
|
281
|
+
});
|
|
282
|
+
const writes = [];
|
|
283
|
+
const base = makeResumeTestHandle({ writes });
|
|
284
|
+
const handle = {
|
|
285
|
+
...base,
|
|
286
|
+
readFile: async (path) => {
|
|
287
|
+
if (path === '/slicc/cone-config.json') {
|
|
288
|
+
// Simulate an e2b transient error (5xx / socket reset / FS not ready).
|
|
289
|
+
throw new Error('sandbox request failed: 503 Service Unavailable');
|
|
290
|
+
}
|
|
291
|
+
return base.readFile(path);
|
|
292
|
+
},
|
|
293
|
+
};
|
|
294
|
+
const substrate = makeFakeSubstrate({ handle });
|
|
295
|
+
await expect(resumeCone({ substrate, registry }, {
|
|
296
|
+
query: 'sbx-1',
|
|
297
|
+
localSliccVersion: 'test',
|
|
298
|
+
coneConfigDelta: {
|
|
299
|
+
upsert: { secrets: [{ name: 'OPENAI_API_KEY', value: 'sk', domains: ['x'] }] },
|
|
300
|
+
},
|
|
301
|
+
})).rejects.toMatchObject({
|
|
302
|
+
name: 'CloudError',
|
|
303
|
+
code: 'INTERNAL',
|
|
304
|
+
message: expect.stringContaining('/slicc/cone-config.json'),
|
|
305
|
+
});
|
|
306
|
+
// Critically: no writeFile ran, so the on-disk config was NOT overwritten
|
|
307
|
+
// with a delta-applied-to-empty-base (issue #1357).
|
|
308
|
+
expect(writes).toEqual([]);
|
|
309
|
+
});
|
|
203
310
|
});
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent/chat wire payload types embedded in the tray sync protocol
|
|
3
|
+
* (`tray-sync-protocol.ts`) — the leader↔follower data-channel format
|
|
4
|
+
* partially mirrored by the iOS follower
|
|
5
|
+
* (`packages/ios-app/SliccFollower/Models/SyncProtocol.swift`).
|
|
6
|
+
*
|
|
7
|
+
* Types only — platform-agnostic by construction (no DOM, no Node, no
|
|
8
|
+
* imports). The behavior that produces/consumes these shapes stays in
|
|
9
|
+
* `@slicc/webapp` (`core/attachments.ts`, `core/agent-types.ts`,
|
|
10
|
+
* `scoops/chat-types.ts`, `scoops/lick-manager.ts`), which re-exports them
|
|
11
|
+
* so webapp-internal importers keep their layer-local import sites.
|
|
12
|
+
*/
|
|
13
|
+
export type MessageAttachmentKind = 'image' | 'text' | 'file';
|
|
14
|
+
export interface MessageAttachment {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
mimeType: string;
|
|
18
|
+
size: number;
|
|
19
|
+
kind: MessageAttachmentKind;
|
|
20
|
+
/** Base64 payload for LLM-supported image attachments. */
|
|
21
|
+
data?: string;
|
|
22
|
+
/** UTF-8 content for text-like file attachments. */
|
|
23
|
+
text?: string;
|
|
24
|
+
/**
|
|
25
|
+
* VFS path (e.g. `/tmp/attachment-…`) when the file was persisted to the
|
|
26
|
+
* virtual filesystem because it was too large to inline. The agent can
|
|
27
|
+
* `read_file`/`bash cat` this path to access the full content.
|
|
28
|
+
*/
|
|
29
|
+
path?: string;
|
|
30
|
+
/** Human-readable reason when the payload could not be included. */
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export type AgentEvent = {
|
|
34
|
+
type: 'message_start';
|
|
35
|
+
messageId: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'content_delta';
|
|
38
|
+
messageId: string;
|
|
39
|
+
text: string;
|
|
40
|
+
} | {
|
|
41
|
+
type: 'content_done';
|
|
42
|
+
messageId: string;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'tool_use_start';
|
|
45
|
+
messageId: string;
|
|
46
|
+
toolName: string;
|
|
47
|
+
toolInput: unknown;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'tool_result';
|
|
50
|
+
messageId: string;
|
|
51
|
+
toolName: string;
|
|
52
|
+
result: string;
|
|
53
|
+
isError?: boolean;
|
|
54
|
+
} | {
|
|
55
|
+
type: 'tool_ui';
|
|
56
|
+
messageId: string;
|
|
57
|
+
toolName: string;
|
|
58
|
+
requestId: string;
|
|
59
|
+
html: string;
|
|
60
|
+
} | {
|
|
61
|
+
type: 'tool_ui_done';
|
|
62
|
+
messageId: string;
|
|
63
|
+
requestId: string;
|
|
64
|
+
} | {
|
|
65
|
+
type: 'turn_end';
|
|
66
|
+
messageId: string;
|
|
67
|
+
} | {
|
|
68
|
+
type: 'error';
|
|
69
|
+
error: string;
|
|
70
|
+
} | {
|
|
71
|
+
type: 'screenshot';
|
|
72
|
+
base64: string;
|
|
73
|
+
url?: string;
|
|
74
|
+
} | {
|
|
75
|
+
type: 'terminal_output';
|
|
76
|
+
text: string;
|
|
77
|
+
};
|
|
78
|
+
export type MessageRole = 'user' | 'assistant';
|
|
79
|
+
/**
|
|
80
|
+
* Result state of an actionable lick card (currently scoop sudo-requests):
|
|
81
|
+
* `pending` (awaiting a decision — the default), `confirmed` (allowed), or
|
|
82
|
+
* `dismissed` (denied). Drives the `<slicc-lick-card>` `state` attribute.
|
|
83
|
+
*/
|
|
84
|
+
export type LickState = 'pending' | 'confirmed' | 'dismissed';
|
|
85
|
+
export interface ChatMessage {
|
|
86
|
+
id: string;
|
|
87
|
+
role: MessageRole;
|
|
88
|
+
content: string;
|
|
89
|
+
timestamp: number;
|
|
90
|
+
attachments?: MessageAttachment[];
|
|
91
|
+
toolCalls?: ToolCall[];
|
|
92
|
+
isStreaming?: boolean;
|
|
93
|
+
/** Source of the message: 'cone' for main agent, scoop name for sub-agents, 'lick' for async events */
|
|
94
|
+
source?: 'cone' | 'lick' | string;
|
|
95
|
+
/** For licks: the channel type (webhook, cron, etc.) */
|
|
96
|
+
channel?: string;
|
|
97
|
+
/** Render-time collation: how many consecutive same-channel licks this row stands for. */
|
|
98
|
+
lickCount?: number;
|
|
99
|
+
/** Render-time collation: the individual lick bodies folded into this row. */
|
|
100
|
+
lickParts?: string[];
|
|
101
|
+
/**
|
|
102
|
+
* For actionable licks (sudo-request): the orchestrator-minted lick id used
|
|
103
|
+
* to locate this card when its decision settles, so the state can flip live.
|
|
104
|
+
*/
|
|
105
|
+
lickId?: string;
|
|
106
|
+
/** Result state for an actionable lick: pending / confirmed / dismissed. */
|
|
107
|
+
lickState?: LickState;
|
|
108
|
+
/** True when the message is queued (submitted while the agent is still processing). */
|
|
109
|
+
queued?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Cone-error marker — set by the chat controller's `error` AgentEvent
|
|
112
|
+
* handler. The view renders this assistant message as a `slicc-error-card`
|
|
113
|
+
* with a retry affordance instead of a plain assistant bubble.
|
|
114
|
+
*/
|
|
115
|
+
error?: boolean;
|
|
116
|
+
}
|
|
117
|
+
export interface ToolCall {
|
|
118
|
+
id: string;
|
|
119
|
+
name: string;
|
|
120
|
+
input: unknown;
|
|
121
|
+
result?: string;
|
|
122
|
+
isError?: boolean;
|
|
123
|
+
/** Transient screenshot data URL — not persisted to session store. */
|
|
124
|
+
_screenshotDataUrl?: string;
|
|
125
|
+
/** Transient tool-UI request id used by `handleToolUI` to thread the
|
|
126
|
+
* approval/result roundtrip back to the offscreen agent. Not
|
|
127
|
+
* persisted. */
|
|
128
|
+
_toolUIRequestId?: string;
|
|
129
|
+
}
|
|
130
|
+
export interface LickEvent {
|
|
131
|
+
type: 'webhook' | 'cron' | 'sprinkle' | 'fswatch' | 'session-reload' | 'navigate' | 'upgrade' | 'cherry' | 'workflow' | 'sudo-request' | 'preview';
|
|
132
|
+
webhookId?: string;
|
|
133
|
+
webhookName?: string;
|
|
134
|
+
cronId?: string;
|
|
135
|
+
cronName?: string;
|
|
136
|
+
sprinkleName?: string;
|
|
137
|
+
/** For fswatch events */
|
|
138
|
+
fswatchId?: string;
|
|
139
|
+
fswatchName?: string;
|
|
140
|
+
changes?: Array<{
|
|
141
|
+
type: string;
|
|
142
|
+
path: string;
|
|
143
|
+
}>;
|
|
144
|
+
/** For navigate events: the URL whose response advertised a SLICC handoff `Link` rel. */
|
|
145
|
+
navigateUrl?: string;
|
|
146
|
+
/** For upgrade events: the previously-seen and current bundled SLICC versions. */
|
|
147
|
+
upgradeFromVersion?: string;
|
|
148
|
+
upgradeToVersion?: string;
|
|
149
|
+
/** For cherry events: the host-page event name, owning follower runtime, and host origin. */
|
|
150
|
+
cherryName?: string;
|
|
151
|
+
cherryRuntimeId?: string;
|
|
152
|
+
cherryOrigin?: string;
|
|
153
|
+
/** For preview events: the bridge connection metadata. */
|
|
154
|
+
previewConnId?: string;
|
|
155
|
+
previewOrigin?: string;
|
|
156
|
+
previewToken?: string;
|
|
157
|
+
previewUserAgent?: string;
|
|
158
|
+
previewConnectedAt?: string;
|
|
159
|
+
previewLifecycle?: 'connected' | 'disconnected';
|
|
160
|
+
/**
|
|
161
|
+
* Stable identifier for an actionable lick — one that the cone resolves via
|
|
162
|
+
* the generic `lick_confirm` / `lick_dismiss` tools. Set by the
|
|
163
|
+
* orchestrator's actionable-lick registry (see `ConeRequestRegistry`) and
|
|
164
|
+
* carried through to the UI chip + formatter. For `sudo-request` events the
|
|
165
|
+
* remaining `sudo*` fields mirror `SudoRequest` so the cone (or the user
|
|
166
|
+
* reading the chip) can see what is being escalated. The actionable
|
|
167
|
+
* agent-facing message is still delivered by
|
|
168
|
+
* `Orchestrator.deliverSudoRequestToCone` — this lick is a UI-chip
|
|
169
|
+
* notification only (see `defaultLickEventHandler` for the non-routing
|
|
170
|
+
* branch).
|
|
171
|
+
*/
|
|
172
|
+
lickId?: string;
|
|
173
|
+
sudoKind?: string;
|
|
174
|
+
sudoDetail?: string;
|
|
175
|
+
sudoScoopName?: string;
|
|
176
|
+
sudoSuggestedPattern?: string;
|
|
177
|
+
targetScoop?: string;
|
|
178
|
+
/**
|
|
179
|
+
* Set ONLY by the leader when it re-emits a lick forwarded from a
|
|
180
|
+
* follower. `originFollowerId` is the follower's bootstrapId (reserved
|
|
181
|
+
* for future per-follower response routing); `originLabel` is a
|
|
182
|
+
* human-readable source ("extension follower", "iOS follower", …)
|
|
183
|
+
* to be surfaced to the agent by `formatLickEventForCone`.
|
|
184
|
+
*/
|
|
185
|
+
originFollowerId?: string;
|
|
186
|
+
originLabel?: string;
|
|
187
|
+
/** Workflow completion (SP2): set by WorkflowRunManager on cone-origin runs. */
|
|
188
|
+
workflowRunId?: string;
|
|
189
|
+
workflowName?: string;
|
|
190
|
+
resultPath?: string;
|
|
191
|
+
preview?: string;
|
|
192
|
+
timestamp: string;
|
|
193
|
+
headers?: Record<string, string>;
|
|
194
|
+
body: unknown;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=agent-wire-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-wire-types.d.ts","sourceRoot":"","sources":["../src/agent-wire-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent/chat wire payload types embedded in the tray sync protocol
|
|
3
|
+
* (`tray-sync-protocol.ts`) — the leader↔follower data-channel format
|
|
4
|
+
* partially mirrored by the iOS follower
|
|
5
|
+
* (`packages/ios-app/SliccFollower/Models/SyncProtocol.swift`).
|
|
6
|
+
*
|
|
7
|
+
* Types only — platform-agnostic by construction (no DOM, no Node, no
|
|
8
|
+
* imports). The behavior that produces/consumes these shapes stays in
|
|
9
|
+
* `@slicc/webapp` (`core/attachments.ts`, `core/agent-types.ts`,
|
|
10
|
+
* `scoops/chat-types.ts`, `scoops/lick-manager.ts`), which re-exports them
|
|
11
|
+
* so webapp-internal importers keep their layer-local import sites.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=agent-wire-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-wire-types.js","sourceRoot":"","sources":["../src/agent-wire-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export * from './agent-wire-types.js';
|
|
1
2
|
export * from './base64.js';
|
|
2
3
|
export * from './bridge-protocol.js';
|
|
3
4
|
export * from './cdp-frame-unmask.js';
|
|
@@ -10,4 +11,5 @@ export * from './session-secret-store.js';
|
|
|
10
11
|
export * from './sign-and-forward.js';
|
|
11
12
|
export * from './sigv4.js';
|
|
12
13
|
export * from './tray-signaling.js';
|
|
14
|
+
export * from './tray-sync-protocol.js';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Re-exports added in Task 1.2 (secret-masking) and Task 1.3 (secrets-pipeline).
|
|
2
|
+
export * from './agent-wire-types.js';
|
|
2
3
|
export * from './base64.js';
|
|
3
4
|
export * from './bridge-protocol.js';
|
|
4
5
|
export * from './cdp-frame-unmask.js';
|
|
@@ -11,4 +12,5 @@ export * from './session-secret-store.js';
|
|
|
11
12
|
export * from './sign-and-forward.js';
|
|
12
13
|
export * from './sigv4.js';
|
|
13
14
|
export * from './tray-signaling.js';
|
|
15
|
+
export * from './tray-sync-protocol.js';
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
|