sliccy 6.250.1 → 6.250.3
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/README.md +1 -6
- package/dist/node-server/_shared/bridge-protocol.d.ts +1 -1
- package/dist/node-server/_shared/bridge-protocol.js +1 -1
- package/dist/node-server/_shared/extension-message.d.ts +2 -2
- package/dist/node-server/_shared/extension-message.js +2 -2
- package/dist/node-server/_shared/fetch-proxy-protocol.d.ts +5 -3
- package/dist/node-server/_shared/fetch-proxy-protocol.d.ts.map +1 -1
- package/dist/node-server/_shared/fetch-proxy-protocol.js +5 -3
- package/dist/node-server/_shared/fetch-proxy-protocol.js.map +1 -1
- package/dist/node-server/_shared/secrets-pipeline.d.ts +1 -1
- package/dist/node-server/_shared/secrets-pipeline.js +1 -1
- package/dist/node-server/_shared/sign-and-forward.d.ts +2 -2
- package/dist/node-server/_shared/sign-and-forward.js +2 -2
- package/dist/node-server/bridge-security.d.ts +1 -1
- package/dist/node-server/chrome-launch.d.ts +1 -2
- package/dist/node-server/chrome-launch.js +1 -19
- package/dist/node-server/index.js +1 -8
- package/dist/node-server/qa-setup.js +1 -9
- package/dist/node-server/release-package-main.js +0 -1
- package/dist/node-server/release-package.d.ts +0 -11
- package/dist/node-server/release-package.js +2 -142
- package/dist/ui/.vite/manifest.json +207 -207
- package/dist/ui/assets/{account-store-TdYUOIjJ.js → account-store-BSY823Th.js} +1 -1
- package/dist/ui/assets/{account-store-DD7aGZvf.js → account-store-vDeTbJF5.js} +1 -1
- package/dist/ui/assets/{adobe-DumzA8x5.js → adobe-B6Hh9EFz.js} +1 -1
- package/dist/ui/assets/{adobe-CLcJYzWu.js → adobe-BWkc2vK5.js} +1 -1
- package/dist/ui/assets/{agent-panels-CvpXcE7R.js → agent-panels-DcQMUGpc.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-DPOfYSQP.js → almost-bash-shell-headless-DfwEsTUd.js} +12 -12
- package/dist/ui/assets/{apply-layout-DlETDigj.js → apply-layout-DrG4QDY5.js} +1 -1
- package/dist/ui/assets/{azure-openai-BQ6-o2LP.js → azure-openai-DE57hf2k.js} +1 -1
- package/dist/ui/assets/{azure-openai-O2doZfw5.js → azure-openai-H4eQGFzT.js} +1 -1
- package/dist/ui/assets/{cdp-Bf0_c3_M.js → cdp-cJDXWfDq.js} +1 -1
- package/dist/ui/assets/{cerebras-CgXhPBzs.js → cerebras-DQdfae7K.js} +1 -1
- package/dist/ui/assets/{cerebras-DHBdkibP.js → cerebras-WQTn3mBJ.js} +1 -1
- package/dist/ui/assets/{composer-speech-Bki9MZn4.js → composer-speech-DG-ztNGk.js} +1 -1
- package/dist/ui/assets/{connect-surface-CmM_P3sq.js → connect-surface-WaV9dTAE.js} +1 -1
- package/dist/ui/assets/{directed-approval-DRvPpy6S.js → directed-approval-USkVLdt2.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-DwI78U3K.js → emscripten-vfs-hook-D0HK7VqG.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-VzEx9Uxb.js → frozen-archive-writer-BgGTj_42.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-vK12Y5G2.js → frozen-archive-writer-C1HeAlwI.js} +1 -1
- package/dist/ui/assets/{frozen-session-delete-Kz48fVP2.js → frozen-session-delete-BHDpJ46G.js} +1 -1
- package/dist/ui/assets/{frozen-session-identity-CiC29iff.js → frozen-session-identity-D9ueSxQx.js} +1 -1
- package/dist/ui/assets/{frozen-session-identity-CRN-tUZc.js → frozen-session-identity-DU4UPMK-.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-D-T2ymXP.js → gelatiere-unit-DyDvDiYv.js} +1 -1
- package/dist/ui/assets/{github-BdxrdL1N.js → github-0Vz3uXq2.js} +1 -1
- package/dist/ui/assets/{github-B6WV-Bq8.js → github-CxW8imY8.js} +1 -1
- package/dist/ui/assets/{github-copilot-56Piblm2.js → github-copilot-BYCvrhW4.js} +1 -1
- package/dist/ui/assets/{github-copilot-UXWfeNKP.js → github-copilot-DBMgt0Y3.js} +1 -1
- package/dist/ui/assets/{hear-C-HnWc_A.js → hear-DTIrfZQk.js} +1 -1
- package/dist/ui/assets/icons-CjpHZN3f.js +1 -0
- package/dist/ui/assets/{js-realm-worker-BZS-Xmt_.js → js-realm-worker-B34eLQ-J.js} +2 -2
- package/dist/ui/assets/{jsh-executor-BLam64qj.js → jsh-executor-p3QLj2y9.js} +3 -3
- package/dist/ui/assets/{kernel-worker-lENmG4bP.js → kernel-worker-DGqNXKSd.js} +8 -8
- package/dist/ui/assets/{lick-ws-bridge-vfKhSzZL.js → lick-ws-bridge-BXDmfY3J.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CjHZpUr-.js → lick-ws-bridge-DBqSU7XD.js} +1 -1
- package/dist/ui/assets/{live-session-curation-4f-Pxr3k.js → live-session-curation-BgrrqRCI.js} +1 -1
- package/dist/ui/assets/{live-session-curation-litknMlS.js → live-session-curation-DQe98p-I.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-Cfp5d-uH.js → live-session-snapshot-CjTjl8cQ.js} +1 -1
- package/dist/ui/assets/{local-llm-3O2-E7pW.js → local-llm-BfFbz0FV.js} +1 -1
- package/dist/ui/assets/{local-llm-CJ9yRTmi.js → local-llm-DO2wCaIh.js} +1 -1
- package/dist/ui/assets/{main-DRiMMy9V.js → main-Kvl5p9vS.js} +3 -3
- package/dist/ui/assets/{main-cherry-D_NVlApd.js → main-cherry-CbpxWxMr.js} +1 -1
- package/dist/ui/assets/{mcp-command-DxefWjIn.js → mcp-command-CzpkFAp-.js} +10 -10
- package/dist/ui/assets/{memory-curation-seam-DaX-gUbM.js → memory-curation-seam-IiLvYC-q.js} +1 -1
- package/dist/ui/assets/{memory-health-C0cVxkIo.js → memory-health-CgQDsCP2.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-BN_0Dduw.js → memory-write-execute-DlZPGZdy.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-BBEIfAKT.js → merge-folded-cost-into-frozen-BJCTkDvm.js} +1 -1
- package/dist/ui/assets/{new-session-CniXjNwy.js → new-session-DbvrqvyK.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-D5c2ywMe.js → oauth-bootstrap-Dk1QI712.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-BFWdgZBQ.js → onboarding-orchestrator--qdNyaKy.js} +1 -1
- package/dist/ui/assets/{openai-codex-BHWoMzBB.js → openai-codex-5nsA_jUT.js} +1 -1
- package/dist/ui/assets/{openai-codex-DiIoN2jW.js → openai-codex-DI2r6awT.js} +1 -1
- package/dist/ui/assets/{openrouter-qEI_Gf86.js → openrouter-BYR4AL2a.js} +1 -1
- package/dist/ui/assets/{openrouter-BbCIESyC.js → openrouter-XlmECx-y.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CLSGIX6-.js → openrouter-free-Bs7rdZ_k.js} +1 -1
- package/dist/ui/assets/{openrouter-free-B6eg2iGs.js → openrouter-free-CrzFxH8c.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CxrW_5ke.js → openrouter-oauth-B7OeoZHX.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DBvIP1Fv.js → openrouter-oauth-D1kcZu5a.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-D0Bv9W3W.js → panel-rpc-handlers-vx_MsZ8U.js} +2 -2
- package/dist/ui/assets/{panelize-shell-CNda_L3t.js → panelize-shell-pHIevFYb.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-CeHWWNS2.js → pi-edit-execution-BUFV8VXN.js} +1 -1
- package/dist/ui/assets/{provider-5Fpof6O2.js → provider-DbglLiOG.js} +1 -1
- package/dist/ui/assets/{provider-C1kVKtik.js → provider-m35l_dE3.js} +1 -1
- package/dist/ui/assets/{provider-settings-hqphZqyh.js → provider-settings-FryhOIjB.js} +1 -1
- package/dist/ui/assets/provider-store-access-D9Oq7sQR.js +1 -0
- package/dist/ui/assets/provider-store-access-n5kcOuxn.js +1 -0
- package/dist/ui/assets/{providers-CCldG1kk.js → providers-Db6K2Zyb.js} +2 -2
- package/dist/ui/assets/{providers-DCgc8qSc.js → providers-XezAX3J-.js} +1 -1
- package/dist/ui/assets/{quick-llm-RkjBCU7w.js → quick-llm-B1PGuCq3.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-DN19dDZX.js → realm-inprocess-BltUEnm6.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-BV8bXXE6.js → realm-unhandled-rejections-DxGRfnIg.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-DipkHq_u.js → realm-unhandled-rejections-JeJDKcP9.js} +1 -1
- package/dist/ui/assets/{recovery-screen-QV7Axkni.js → recovery-screen-CZwZAhHI.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-CSN_VNBt.js → remote-terminal-view-oXkTsBLu.js} +2 -2
- package/dist/ui/assets/{restore-BPFttXsi.js → restore-BvlCJIsk.js} +1 -1
- package/dist/ui/assets/{run-7ZIRaW5X.js → run-BJzkRYf6.js} +1 -1
- package/dist/ui/assets/{run-EnUM2hvy.js → run-DSk_7iwX.js} +2 -2
- package/dist/ui/assets/{run-DIB5i28B.js → run-DqgBHvM1.js} +1 -1
- package/dist/ui/assets/{run-HxMLgzrB.js → run-kPALt6Hm.js} +2 -2
- package/dist/ui/assets/{serve-command-DlLzXpXY.js → serve-command-sVozeEt7.js} +2 -2
- package/dist/ui/assets/{serve-runtime-D1JIu1_Y.js → serve-runtime-4jddeSPE.js} +1 -1
- package/dist/ui/assets/{session-command-memory-BbrtQmEU.js → session-command-memory-Ou9u4Nee.js} +2 -2
- package/dist/ui/assets/{session-jsonl-C6rqPjV7.js → session-jsonl-2DiesR4q.js} +1 -1
- package/dist/ui/assets/{session-jsonl-DJMgeCCB.js → session-jsonl-Djb-5UYE.js} +1 -1
- package/dist/ui/assets/{session-search-index-Qb4i8f2M.js → session-search-index-D2Rz-Wef.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DBLZzCqg.js → setup-feature-flags-remote-DDw2i0rJ.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-Bsp5KCBk.js → setup-model-catalog-Bq5NicwF.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-DJt2jkfH.js → silent-renew-backoff-ChuRWS3b.js} +1 -1
- package/dist/ui/assets/slicc-version-wmX_2UjF.js +1 -0
- package/dist/ui/assets/{soundscape-C0mUi54_.js → soundscape-DQHFEB4V.js} +1 -1
- package/dist/ui/assets/{speak-Dm1RBTPa.js → speak-2DRJmFx5.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DjPpY6C6.js → sprinkle-manager-BlzdHs-s.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-BlU7CZk3.js → sprinkle-renderer-BOJKmlCd.js} +1 -1
- package/dist/ui/assets/{sudo-wARPrmoF.js → sudo-CtMTKJRX.js} +1 -1
- package/dist/ui/assets/{supervisor-G0Ieqy2i.js → supervisor-D2xgb1bV.js} +1 -1
- package/dist/ui/assets/{sync-dialog-BCn-I_sA.js → sync-dialog-CUVB503f.js} +1 -1
- package/dist/ui/assets/{transformers-env-DY3cJQh3.js → transformers-env-C49LeR3k.js} +1 -1
- package/dist/ui/assets/{tray-leader-CtXVFNPk.js → tray-leader-s0n-Kpuz.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-B_plpNYb.js → tray-leave-runtime-B80-wOhQ.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-uF-JzzJT.js → tray-sidecar-Dt1lvqkH.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DWZMQPQe.js → upgrade-detection-DoyeNE4-.js} +1 -1
- package/dist/ui/assets/{voice-reply-DmKkGmWk.js → voice-reply-BBnPDgiG.js} +1 -1
- package/dist/ui/assets/{wc-attach-2Qq95_sV.js → wc-attach-DE_d9bVs.js} +2 -2
- package/dist/ui/assets/{wc-browser-DZToDM8D.js → wc-browser-DBcRPj1k.js} +1 -1
- package/dist/ui/assets/{wc-computers-DRbvoN5u.js → wc-computers-BsqQYv2b.js} +1 -1
- package/dist/ui/assets/{wc-detached-OteGRS_q.js → wc-detached-BCzt9vyk.js} +1 -1
- package/dist/ui/assets/{wc-extension-DOA8tW4I.js → wc-extension-DVTc-Ojf.js} +2 -2
- package/dist/ui/assets/{wc-follower-f3tRLprw.js → wc-follower-Xk_Ox483.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-C4qieZgw.js → wc-follower-oauth-CSVBNASl.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-CxAS-vUs.js → wc-gelatiere-B6x8kqKu.js} +1 -1
- package/dist/ui/assets/{wc-live-juyTzBAf.js → wc-live-D99yciOs.js} +5 -5
- package/dist/ui/assets/{wc-nav-Dia3R3wA.js → wc-nav-BScTM8lw.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-HO8JXaCy.js → wc-onboarding-CKu_3o53.js} +2 -2
- package/dist/ui/assets/{wc-permissions-6SC2TR-K.js → wc-permissions-ondIR9-W.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-wB46HeZ3.js → wc-placeholder-D8T1lb0k.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-BktjK2oU.js → wc-secret-request-KFYqCpjM.js} +1 -1
- package/dist/ui/assets/{wc-settings-CW5rGLNc.js → wc-settings-DSIIhXqc.js} +3 -3
- package/dist/ui/assets/{wc-shell-CGOUh9yx.js → wc-shell-DQaHTvX5.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-q381l1tk.js → wc-shortcut-config-DpnRbgv2.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-DpGYjjDu.js → wc-sprinkles-P-zui6mD.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-CBhlODFx.js → wc-transcript-export-Bq-MJ_Ed.js} +2 -2
- package/dist/ui/assets/{wc-tray-AW0o3NgW.js → wc-tray-BIteAih8.js} +4 -4
- package/dist/ui/assets/welcome-detection-y_L-9PfB.js +1 -0
- package/dist/ui/assets/{whisper-session-CNSgv_Zz.js → whisper-session-C1J00wiq.js} +2 -2
- package/dist/ui/assets/{xai-grok-C1jrKp_g.js → xai-grok-pxbhLyjg.js} +1 -1
- package/dist/ui/assets/{xai-grok-Csr4WxyO.js → xai-grok-tHcwZ5N8.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/lucide-icons.js +327 -320
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +5 -9
- package/dist/ui/assets/icons-e-HJxbau.js +0 -1
- package/dist/ui/assets/provider-store-access-B5MO0o6w.js +0 -1
- package/dist/ui/assets/provider-store-access-hjB-sIz9.js +0 -1
- package/dist/ui/assets/slicc-version-C-MaHO30.js +0 -1
- package/dist/ui/assets/welcome-detection-qLDqzwSq.js +0 -1
package/README.md
CHANGED
|
@@ -142,12 +142,7 @@ npm run dev
|
|
|
142
142
|
|
|
143
143
|
The extension is a **thin CDP bridge** — no bundled UI, no offscreen agent engine. The full SLICC webapp loads from the hosted leader tab (`https://www.sliccy.ai/?slicc=leader`); the extension just pins that tab, proxies `chrome.debugger` to it, and — when you click the toolbar icon — opens an on-demand Chrome side panel that iframes the hosted `?cherry=1` follower for inline use.
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
npm install
|
|
147
|
-
npm run build -w @slicc/chrome-extension
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Load `dist/extension/` as an unpacked extension in `chrome://extensions`. The service worker pins the hosted leader tab on install; clicking the toolbar icon focuses it (or recreates it if the user closed it). Each page you visit gets the launcher overlay, which iframes the same hosted webapp as an auto-follow follower.
|
|
145
|
+
Install it from the [Chrome Web Store](https://chromewebstore.google.com/detail/slicc/akjjllgokmbgpbdbmafpiefnhidlmbgf). The extension's source, build, and release live in [ai-ecoverse/slicc-extension](https://github.com/ai-ecoverse/slicc-extension); this repo keeps only the webapp side of the protocol it speaks. The service worker pins the hosted leader tab on install; clicking the toolbar icon focuses it (or recreates it if the user closed it). Each page you visit gets the launcher overlay, which iframes the same hosted webapp as an auto-follow follower.
|
|
151
146
|
|
|
152
147
|
### 5. Run a second browser
|
|
153
148
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Consumers: `packages/node-server/src/bridge-security.ts` (server gate),
|
|
10
10
|
* `packages/webapp/src/ui/boot/bridge-launch-params.ts` (leader boot),
|
|
11
|
-
*
|
|
11
|
+
* ai-ecoverse/slicc-extension `six/extension/bridge-sw.ts` (SW port allowlist),
|
|
12
12
|
* `packages/webapp/src/ui/llm-proxy-sw.ts` (header pass-through).
|
|
13
13
|
* Swift mirror: `packages/swift-server/Sources/Server/BridgeSecurity.swift`
|
|
14
14
|
* — update it when these values change.
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Consumers: `packages/node-server/src/bridge-security.ts` (server gate),
|
|
10
10
|
* `packages/webapp/src/ui/boot/bridge-launch-params.ts` (leader boot),
|
|
11
|
-
*
|
|
11
|
+
* ai-ecoverse/slicc-extension `six/extension/bridge-sw.ts` (SW port allowlist),
|
|
12
12
|
* `packages/webapp/src/ui/llm-proxy-sw.ts` (header pass-through).
|
|
13
13
|
* Swift mirror: `packages/swift-server/Sources/Server/BridgeSecurity.swift`
|
|
14
14
|
* — update it when these values change.
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The full `ExtensionMessage` union lives in webapp `kernel/messages.ts`
|
|
6
6
|
* (kernel-internal, 11+ webapp callers). This guard is the runtime check
|
|
7
|
-
*
|
|
8
|
-
* `packages/webapp/src` (#3047).
|
|
7
|
+
* webapp and the extension (ai-ecoverse/slicc-extension) share, so extension
|
|
8
|
+
* code never value-imports `packages/webapp/src` (#3047).
|
|
9
9
|
*/
|
|
10
10
|
export declare function isExtensionMessage(msg: unknown): msg is {
|
|
11
11
|
source: string;
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The full `ExtensionMessage` union lives in webapp `kernel/messages.ts`
|
|
6
6
|
* (kernel-internal, 11+ webapp callers). This guard is the runtime check
|
|
7
|
-
*
|
|
8
|
-
* `packages/webapp/src` (#3047).
|
|
7
|
+
* webapp and the extension (ai-ecoverse/slicc-extension) share, so extension
|
|
8
|
+
* code never value-imports `packages/webapp/src` (#3047).
|
|
9
9
|
*/
|
|
10
10
|
export function isExtensionMessage(msg) {
|
|
11
11
|
return (typeof msg === 'object' &&
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Port-streamed fetch-proxy wire protocol shared by the extension backend and
|
|
3
|
-
* browser clients. Platform-agnostic on purpose so `@slicc/webapp` and
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* browser clients. Platform-agnostic on purpose so `@slicc/webapp` and the
|
|
4
|
+
* extension (ai-ecoverse/slicc-extension, which carries a copy of shared-ts)
|
|
5
|
+
* both import it *downward* from here rather than the webapp reaching *up*
|
|
6
|
+
* into the extension for a duplicate copy. A wire change here must also land
|
|
7
|
+
* in slicc-extension.
|
|
6
8
|
*/
|
|
7
9
|
/**
|
|
8
10
|
* Request the page/SW side sends to the fetch-proxy backend. One `request` per
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-proxy-protocol.d.ts","sourceRoot":"","sources":["../src/fetch-proxy-protocol.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fetch-proxy-protocol.d.ts","sourceRoot":"","sources":["../src/fetch-proxy-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,GACD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Port-streamed fetch-proxy wire protocol shared by the extension backend and
|
|
3
|
-
* browser clients. Platform-agnostic on purpose so `@slicc/webapp` and
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* browser clients. Platform-agnostic on purpose so `@slicc/webapp` and the
|
|
4
|
+
* extension (ai-ecoverse/slicc-extension, which carries a copy of shared-ts)
|
|
5
|
+
* both import it *downward* from here rather than the webapp reaching *up*
|
|
6
|
+
* into the extension for a duplicate copy. A wire change here must also land
|
|
7
|
+
* in slicc-extension.
|
|
6
8
|
*/
|
|
7
9
|
export {};
|
|
8
10
|
//# sourceMappingURL=fetch-proxy-protocol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-proxy-protocol.js","sourceRoot":"","sources":["../src/fetch-proxy-protocol.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fetch-proxy-protocol.js","sourceRoot":"","sources":["../src/fetch-proxy-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -72,7 +72,7 @@ export interface SecretsPipelineOpts {
|
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Stateful unmask/scrub pipeline shared between node-server's /api/fetch-proxy
|
|
75
|
-
* and the
|
|
75
|
+
* and the extension SW's fetch-proxy.fetch Port handler (ai-ecoverse/slicc-extension).
|
|
76
76
|
*
|
|
77
77
|
* Public surface has four method families:
|
|
78
78
|
*
|
|
@@ -47,7 +47,7 @@ function replaceAllBytes(haystack, needle, replacement) {
|
|
|
47
47
|
export const HMAC_SIGN_HEADER = 'x-slicc-hmac-sign';
|
|
48
48
|
/**
|
|
49
49
|
* Stateful unmask/scrub pipeline shared between node-server's /api/fetch-proxy
|
|
50
|
-
* and the
|
|
50
|
+
* and the extension SW's fetch-proxy.fetch Port handler (ai-ecoverse/slicc-extension).
|
|
51
51
|
*
|
|
52
52
|
* Public surface has four method families:
|
|
53
53
|
*
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* to upstream, and returns a JSON-cloneable reply.
|
|
11
11
|
*
|
|
12
12
|
* `executeS3SignAndForward` / `executeDaSignAndForward` are consumed by:
|
|
13
|
-
* -
|
|
14
|
-
* reads from `chrome.storage.local`)
|
|
13
|
+
* - ai-ecoverse/slicc-extension `six/extension/service-worker.ts`
|
|
14
|
+
* (extension path, reads from `chrome.storage.local`)
|
|
15
15
|
* - `packages/node-server/src/secrets/sign-and-forward.ts` (CLI path,
|
|
16
16
|
* wraps these in Express handlers via a SecretStore adapter)
|
|
17
17
|
* - tests in `packages/shared-ts/tests/sign-and-forward.test.ts`
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* to upstream, and returns a JSON-cloneable reply.
|
|
11
11
|
*
|
|
12
12
|
* `executeS3SignAndForward` / `executeDaSignAndForward` are consumed by:
|
|
13
|
-
* -
|
|
14
|
-
* reads from `chrome.storage.local`)
|
|
13
|
+
* - ai-ecoverse/slicc-extension `six/extension/service-worker.ts`
|
|
14
|
+
* (extension path, reads from `chrome.storage.local`)
|
|
15
15
|
* - `packages/node-server/src/secrets/sign-and-forward.ts` (CLI path,
|
|
16
16
|
* wraps these in Express handlers via a SecretStore adapter)
|
|
17
17
|
* - tests in `packages/shared-ts/tests/sign-and-forward.test.ts`
|
|
@@ -113,7 +113,7 @@ export interface BridgeUpgradeGateResult {
|
|
|
113
113
|
/**
|
|
114
114
|
* Reason exposed in logs for rejection. Intentionally coarse — does not
|
|
115
115
|
* tell the caller WHICH check failed, mirroring `validateBridgePin` in
|
|
116
|
-
* the
|
|
116
|
+
* the extension's bridge SW (ai-ecoverse/slicc-extension).
|
|
117
117
|
*/
|
|
118
118
|
reason?: 'origin-not-allowed' | 'subprotocol-missing-or-mismatched';
|
|
119
119
|
}
|
|
@@ -8,13 +8,12 @@ import { request as httpRequest } from 'http';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const DEFAULT_CDP_LAUNCH_TIMEOUT_MS = 15000;
|
|
10
10
|
export declare function getDefaultCdpLaunchTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
11
|
-
export declare const CLI_PROFILE_NAMES: readonly ['leader', 'follower'
|
|
11
|
+
export declare const CLI_PROFILE_NAMES: readonly ['leader', 'follower'];
|
|
12
12
|
export type CliProfileName = (typeof CLI_PROFILE_NAMES)[number];
|
|
13
13
|
export interface ChromeLaunchProfile {
|
|
14
14
|
id: CliProfileName | null;
|
|
15
15
|
displayName: string;
|
|
16
16
|
userDataDir: string;
|
|
17
|
-
extensionPath: string | null;
|
|
18
17
|
}
|
|
19
18
|
interface FindChromeExecutableOptions {
|
|
20
19
|
env?: NodeJS.ProcessEnv;
|
|
@@ -19,7 +19,7 @@ export function getDefaultCdpLaunchTimeoutMs(env = process.env) {
|
|
|
19
19
|
return DEFAULT_CDP_LAUNCH_TIMEOUT_MS;
|
|
20
20
|
return parsed;
|
|
21
21
|
}
|
|
22
|
-
export const CLI_PROFILE_NAMES = ['leader', 'follower'
|
|
22
|
+
export const CLI_PROFILE_NAMES = ['leader', 'follower'];
|
|
23
23
|
const DEFAULT_USER_DATA_DIR_NAME = 'browser-coding-agent-chrome';
|
|
24
24
|
const QA_PROFILE_ROOT_SEGMENTS = ['.qa', 'chrome'];
|
|
25
25
|
function argbToSignedInt(argbHex) {
|
|
@@ -32,7 +32,6 @@ const CLI_PROFILE_DEFINITIONS = {
|
|
|
32
32
|
avatarIcon: 'chrome://theme/IDR_PROFILE_AVATAR_0',
|
|
33
33
|
profileColorSeed: argbToSignedInt(0xff4285f4),
|
|
34
34
|
profileHighlightColor: argbToSignedInt(0xff4285f4),
|
|
35
|
-
loadsExtension: false,
|
|
36
35
|
},
|
|
37
36
|
follower: {
|
|
38
37
|
displayName: 'SLICC QA Follower',
|
|
@@ -40,15 +39,6 @@ const CLI_PROFILE_DEFINITIONS = {
|
|
|
40
39
|
avatarIcon: 'chrome://theme/IDR_PROFILE_AVATAR_7',
|
|
41
40
|
profileColorSeed: argbToSignedInt(0xff34a853),
|
|
42
41
|
profileHighlightColor: argbToSignedInt(0xff34a853),
|
|
43
|
-
loadsExtension: false,
|
|
44
|
-
},
|
|
45
|
-
extension: {
|
|
46
|
-
displayName: 'SLICC QA Extension',
|
|
47
|
-
avatarIndex: 19,
|
|
48
|
-
avatarIcon: 'chrome://theme/IDR_PROFILE_AVATAR_19',
|
|
49
|
-
profileColorSeed: argbToSignedInt(0xffa142f4),
|
|
50
|
-
profileHighlightColor: argbToSignedInt(0xffa142f4),
|
|
51
|
-
loadsExtension: true,
|
|
52
42
|
},
|
|
53
43
|
};
|
|
54
44
|
function isJsonObject(value) {
|
|
@@ -154,7 +144,6 @@ export function resolveChromeLaunchProfile(options) {
|
|
|
154
144
|
id: null,
|
|
155
145
|
displayName: 'Chrome',
|
|
156
146
|
userDataDir: resolveDefaultChromeUserDataDir(options.tmpDir ?? undefined, options.servePort),
|
|
157
|
-
extensionPath: null,
|
|
158
147
|
};
|
|
159
148
|
}
|
|
160
149
|
if (!isCliProfileName(profile)) {
|
|
@@ -165,9 +154,6 @@ export function resolveChromeLaunchProfile(options) {
|
|
|
165
154
|
id: profile,
|
|
166
155
|
displayName: definition.displayName,
|
|
167
156
|
userDataDir: join(resolveQaProfilesRoot(options.projectRoot), profile),
|
|
168
|
-
extensionPath: definition.loadsExtension
|
|
169
|
-
? join(options.projectRoot, 'dist', 'extension')
|
|
170
|
-
: null,
|
|
171
157
|
};
|
|
172
158
|
}
|
|
173
159
|
/**
|
|
@@ -259,10 +245,6 @@ export function buildChromeLaunchArgs(options) {
|
|
|
259
245
|
// profile would lose every saved cookie.
|
|
260
246
|
args.push('--use-mock-keychain', '--password-store=basic');
|
|
261
247
|
}
|
|
262
|
-
if (options.profile.extensionPath) {
|
|
263
|
-
args.push(`--disable-extensions-except=${options.profile.extensionPath}`);
|
|
264
|
-
args.push(`--load-extension=${options.profile.extensionPath}`);
|
|
265
|
-
}
|
|
266
248
|
if (options.hosted) {
|
|
267
249
|
// One --disable-features switch: Chromium keeps a single value, so the
|
|
268
250
|
// hosted addition replaces the base flag rather than stacking a second.
|
|
@@ -4,7 +4,7 @@ import { createSubstrate } from './_cloud_core/src/index.js';
|
|
|
4
4
|
import { parseTrayJoinUrl, SLICC_HOSTED_ORIGIN } from './_shared/index.js';
|
|
5
5
|
import { spawn } from 'child_process';
|
|
6
6
|
import express from 'express';
|
|
7
|
-
import {
|
|
7
|
+
import { readFileSync } from 'fs';
|
|
8
8
|
import { createServer as createNetServer } from 'net';
|
|
9
9
|
import { homedir } from 'os';
|
|
10
10
|
import { basename, dirname, join, resolve } from 'path';
|
|
@@ -462,16 +462,9 @@ async function launchChromeTarget(state) {
|
|
|
462
462
|
const profileDirName = basename(chromeProfile.userDataDir);
|
|
463
463
|
await migrateLegacyDefaultChromeProfile(chromeProfile.userDataDir, legacyChromeCandidates(profileDirName));
|
|
464
464
|
}
|
|
465
|
-
if (chromeProfile.extensionPath && !existsSync(chromeProfile.extensionPath)) {
|
|
466
|
-
console.error(`Extension profile requires ${chromeProfile.extensionPath}. Run \`npm run build -w @slicc/chrome-extension\` first.`);
|
|
467
|
-
process.exit(1);
|
|
468
|
-
}
|
|
469
465
|
if (chromeProfile.id) {
|
|
470
466
|
console.log(`Using QA Chrome profile: ${chromeProfile.id}`);
|
|
471
467
|
console.log(`Profile directory: ${chromeProfile.userDataDir}`);
|
|
472
|
-
if (chromeProfile.extensionPath) {
|
|
473
|
-
console.log(`Auto-loading unpacked extension from ${chromeProfile.extensionPath}`);
|
|
474
|
-
}
|
|
475
468
|
}
|
|
476
469
|
const chromeArgs = buildChromeLaunchArgs({
|
|
477
470
|
cdpPort: state.requestedCdpPort,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { existsSync } from 'fs';
|
|
2
1
|
import { resolve } from 'path';
|
|
3
2
|
import { fileURLToPath } from 'url';
|
|
4
3
|
import { CLI_PROFILE_NAMES, ensureQaProfileScaffold, findChromeExecutable, resolveQaProfilesRoot, } from './chrome-launch.js';
|
|
@@ -10,20 +9,13 @@ async function main() {
|
|
|
10
9
|
console.error('Could not find Chrome or Chrome for Testing. Set CHROME_PATH and retry.');
|
|
11
10
|
process.exit(1);
|
|
12
11
|
}
|
|
13
|
-
const extensionPath = resolve(projectRoot, 'dist', 'extension');
|
|
14
|
-
if (!existsSync(extensionPath)) {
|
|
15
|
-
console.error('dist/extension was not found. Run `npm run build:extension` first.');
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
12
|
const profiles = await ensureQaProfileScaffold(projectRoot);
|
|
19
13
|
console.log('SLICC QA profiles are ready.');
|
|
20
14
|
console.log(`Chrome executable: ${chromePath}`);
|
|
21
15
|
console.log(`QA profile root: ${resolveQaProfilesRoot(projectRoot)}`);
|
|
22
|
-
console.log(`Extension build: ${extensionPath}`);
|
|
23
16
|
console.log('Profiles:');
|
|
24
17
|
for (const profile of profiles) {
|
|
25
|
-
|
|
26
|
-
console.log(`- ${profile.id}: ${profile.userDataDir}${extensionLabel}`);
|
|
18
|
+
console.log(`- ${profile.id}: ${profile.userDataDir}`);
|
|
27
19
|
}
|
|
28
20
|
console.log('Next commands:');
|
|
29
21
|
for (const profileName of CLI_PROFILE_NAMES) {
|
|
@@ -6,7 +6,6 @@ const projectRoot = resolve(dirname, '..', '..');
|
|
|
6
6
|
const releaseDir = resolve(projectRoot, 'artifacts', 'release');
|
|
7
7
|
try {
|
|
8
8
|
const manifest = packageReleaseArtifacts({ projectRoot, releaseDir });
|
|
9
|
-
console.log(`Created extension archive: ${manifest.extensionArchive}`);
|
|
10
9
|
console.log(`Created npm package tarball: ${manifest.npmPackageTarball}`);
|
|
11
10
|
console.log(`Created release manifest: ${toProjectRelative(projectRoot, resolve(releaseDir, 'release-artifacts.json'))}`);
|
|
12
11
|
}
|
|
@@ -2,20 +2,10 @@ export interface PackageMetadata {
|
|
|
2
2
|
name: string;
|
|
3
3
|
version: string;
|
|
4
4
|
}
|
|
5
|
-
export interface ZipEntry {
|
|
6
|
-
path: string;
|
|
7
|
-
data: Buffer;
|
|
8
|
-
mode: number;
|
|
9
|
-
}
|
|
10
5
|
export interface ReleaseManifest {
|
|
11
6
|
version: string;
|
|
12
|
-
extensionArchive: string;
|
|
13
7
|
npmPackageTarball: string;
|
|
14
8
|
}
|
|
15
|
-
export declare function comparePaths(left: string, right: string): number;
|
|
16
|
-
export declare function sanitizeArtifactName(value: string): string;
|
|
17
|
-
export declare function collectZipEntries(rootDir: string): ZipEntry[];
|
|
18
|
-
export declare function createDeterministicZip(entries: readonly ZipEntry[]): Buffer;
|
|
19
9
|
export declare function requirePath(path: string, description: string): void;
|
|
20
10
|
export declare function toProjectRelative(projectRoot: string, path: string): string;
|
|
21
11
|
export declare function resolveNpmCommand(options?: {
|
|
@@ -27,7 +17,6 @@ export declare function resolveNpmCommand(options?: {
|
|
|
27
17
|
argsPrefix: string[];
|
|
28
18
|
};
|
|
29
19
|
export declare function parseNpmPackFilename(output: string): string;
|
|
30
|
-
export declare function createExtensionArchive(metadata: PackageMetadata, projectRoot: string, releaseDir: string): string;
|
|
31
20
|
interface NpmPackResult {
|
|
32
21
|
status: number | null;
|
|
33
22
|
stdout: string;
|
|
@@ -1,136 +1,6 @@
|
|
|
1
1
|
import { spawnSync } from 'child_process';
|
|
2
|
-
import { existsSync, mkdirSync,
|
|
3
|
-
import {
|
|
4
|
-
import { deflateRawSync } from 'zlib';
|
|
5
|
-
const FIXED_ZIP_DATE = new Date(Date.UTC(1980, 0, 1, 0, 0, 0));
|
|
6
|
-
const ZIP_VERSION = 20;
|
|
7
|
-
const ZIP_UTF8_FLAG = 0x0800;
|
|
8
|
-
const ZIP_METHOD_DEFLATE = 8;
|
|
9
|
-
const ZIP_FILE_MODE = 0o100644;
|
|
10
|
-
const CRC32_TABLE = buildCrc32Table();
|
|
11
|
-
export function comparePaths(left, right) {
|
|
12
|
-
if (left < right)
|
|
13
|
-
return -1;
|
|
14
|
-
if (left > right)
|
|
15
|
-
return 1;
|
|
16
|
-
return 0;
|
|
17
|
-
}
|
|
18
|
-
export function sanitizeArtifactName(value) {
|
|
19
|
-
return value
|
|
20
|
-
.trim()
|
|
21
|
-
.toLowerCase()
|
|
22
|
-
.replace(/^@/, '')
|
|
23
|
-
.replace(/[\\/]+/g, '-')
|
|
24
|
-
.replace(/[^a-z0-9._-]+/g, '-')
|
|
25
|
-
.replace(/-+/g, '-')
|
|
26
|
-
.replace(/^-|-$/g, '');
|
|
27
|
-
}
|
|
28
|
-
export function collectZipEntries(rootDir) {
|
|
29
|
-
const entries = [];
|
|
30
|
-
const walk = (currentDir) => {
|
|
31
|
-
for (const name of readdirSync(currentDir).sort(comparePaths)) {
|
|
32
|
-
const fullPath = join(currentDir, name);
|
|
33
|
-
const stats = statSync(fullPath);
|
|
34
|
-
if (stats.isDirectory()) {
|
|
35
|
-
walk(fullPath);
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if (!stats.isFile())
|
|
39
|
-
continue;
|
|
40
|
-
entries.push({
|
|
41
|
-
path: relative(rootDir, fullPath).split('\\').join('/'),
|
|
42
|
-
data: readFileSync(fullPath),
|
|
43
|
-
mode: ZIP_FILE_MODE,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
walk(rootDir);
|
|
48
|
-
return entries;
|
|
49
|
-
}
|
|
50
|
-
export function createDeterministicZip(entries) {
|
|
51
|
-
const sortedEntries = [...entries].sort((left, right) => comparePaths(left.path, right.path));
|
|
52
|
-
const { dosDate, dosTime } = encodeDosDateTime(FIXED_ZIP_DATE);
|
|
53
|
-
const localSections = [];
|
|
54
|
-
const centralSections = [];
|
|
55
|
-
let offset = 0;
|
|
56
|
-
for (const entry of sortedEntries) {
|
|
57
|
-
const fileName = Buffer.from(entry.path, 'utf8');
|
|
58
|
-
const compressed = deflateRawSync(entry.data, { level: 9 });
|
|
59
|
-
const crc = crc32(entry.data);
|
|
60
|
-
const localHeader = Buffer.alloc(30);
|
|
61
|
-
localHeader.writeUInt32LE(0x04034b50, 0);
|
|
62
|
-
localHeader.writeUInt16LE(ZIP_VERSION, 4);
|
|
63
|
-
localHeader.writeUInt16LE(ZIP_UTF8_FLAG, 6);
|
|
64
|
-
localHeader.writeUInt16LE(ZIP_METHOD_DEFLATE, 8);
|
|
65
|
-
localHeader.writeUInt16LE(dosTime, 10);
|
|
66
|
-
localHeader.writeUInt16LE(dosDate, 12);
|
|
67
|
-
localHeader.writeUInt32LE(crc, 14);
|
|
68
|
-
localHeader.writeUInt32LE(compressed.length, 18);
|
|
69
|
-
localHeader.writeUInt32LE(entry.data.length, 22);
|
|
70
|
-
localHeader.writeUInt16LE(fileName.length, 26);
|
|
71
|
-
localHeader.writeUInt16LE(0, 28);
|
|
72
|
-
const localSection = Buffer.concat([localHeader, fileName, compressed]);
|
|
73
|
-
localSections.push(localSection);
|
|
74
|
-
const centralHeader = Buffer.alloc(46);
|
|
75
|
-
centralHeader.writeUInt32LE(0x02014b50, 0);
|
|
76
|
-
centralHeader.writeUInt16LE((3 << 8) | ZIP_VERSION, 4);
|
|
77
|
-
centralHeader.writeUInt16LE(ZIP_VERSION, 6);
|
|
78
|
-
centralHeader.writeUInt16LE(ZIP_UTF8_FLAG, 8);
|
|
79
|
-
centralHeader.writeUInt16LE(ZIP_METHOD_DEFLATE, 10);
|
|
80
|
-
centralHeader.writeUInt16LE(dosTime, 12);
|
|
81
|
-
centralHeader.writeUInt16LE(dosDate, 14);
|
|
82
|
-
centralHeader.writeUInt32LE(crc, 16);
|
|
83
|
-
centralHeader.writeUInt32LE(compressed.length, 20);
|
|
84
|
-
centralHeader.writeUInt32LE(entry.data.length, 24);
|
|
85
|
-
centralHeader.writeUInt16LE(fileName.length, 28);
|
|
86
|
-
centralHeader.writeUInt16LE(0, 30);
|
|
87
|
-
centralHeader.writeUInt16LE(0, 32);
|
|
88
|
-
centralHeader.writeUInt16LE(0, 34);
|
|
89
|
-
centralHeader.writeUInt16LE(0, 36);
|
|
90
|
-
centralHeader.writeUInt32LE((entry.mode << 16) >>> 0, 38);
|
|
91
|
-
centralHeader.writeUInt32LE(offset, 42);
|
|
92
|
-
const centralSection = Buffer.concat([centralHeader, fileName]);
|
|
93
|
-
centralSections.push(centralSection);
|
|
94
|
-
offset += localSection.length;
|
|
95
|
-
}
|
|
96
|
-
const centralDirectory = Buffer.concat(centralSections);
|
|
97
|
-
const endRecord = Buffer.alloc(22);
|
|
98
|
-
endRecord.writeUInt32LE(0x06054b50, 0);
|
|
99
|
-
endRecord.writeUInt16LE(0, 4);
|
|
100
|
-
endRecord.writeUInt16LE(0, 6);
|
|
101
|
-
endRecord.writeUInt16LE(sortedEntries.length, 8);
|
|
102
|
-
endRecord.writeUInt16LE(sortedEntries.length, 10);
|
|
103
|
-
endRecord.writeUInt32LE(centralDirectory.length, 12);
|
|
104
|
-
endRecord.writeUInt32LE(offset, 16);
|
|
105
|
-
endRecord.writeUInt16LE(0, 20);
|
|
106
|
-
return Buffer.concat([...localSections, centralDirectory, endRecord]);
|
|
107
|
-
}
|
|
108
|
-
function buildCrc32Table() {
|
|
109
|
-
const table = new Uint32Array(256);
|
|
110
|
-
for (let index = 0; index < 256; index += 1) {
|
|
111
|
-
let value = index;
|
|
112
|
-
for (let bit = 0; bit < 8; bit += 1) {
|
|
113
|
-
value = (value & 1) === 1 ? (value >>> 1) ^ 0xedb88320 : value >>> 1;
|
|
114
|
-
}
|
|
115
|
-
table[index] = value >>> 0;
|
|
116
|
-
}
|
|
117
|
-
return table;
|
|
118
|
-
}
|
|
119
|
-
function crc32(buffer) {
|
|
120
|
-
let crc = 0xffffffff;
|
|
121
|
-
for (const value of buffer) {
|
|
122
|
-
crc = CRC32_TABLE[(crc ^ value) & 0xff] ^ (crc >>> 8);
|
|
123
|
-
}
|
|
124
|
-
return (crc ^ 0xffffffff) >>> 0;
|
|
125
|
-
}
|
|
126
|
-
function encodeDosDateTime(value) {
|
|
127
|
-
const year = Math.max(value.getUTCFullYear(), 1980);
|
|
128
|
-
const dosDate = ((year - 1980) << 9) | ((value.getUTCMonth() + 1) << 5) | value.getUTCDate();
|
|
129
|
-
const dosTime = (value.getUTCHours() << 11) |
|
|
130
|
-
(value.getUTCMinutes() << 5) |
|
|
131
|
-
Math.floor(value.getUTCSeconds() / 2);
|
|
132
|
-
return { dosDate, dosTime };
|
|
133
|
-
}
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
|
|
3
|
+
import { relative, resolve } from 'path';
|
|
134
4
|
function readJsonFile(path) {
|
|
135
5
|
return JSON.parse(readFileSync(path, 'utf8'));
|
|
136
6
|
}
|
|
@@ -160,14 +30,6 @@ export function parseNpmPackFilename(output) {
|
|
|
160
30
|
}
|
|
161
31
|
return filename;
|
|
162
32
|
}
|
|
163
|
-
export function createExtensionArchive(metadata, projectRoot, releaseDir) {
|
|
164
|
-
const extensionDir = resolve(projectRoot, 'dist', 'extension');
|
|
165
|
-
requirePath(extensionDir, 'Extension build output');
|
|
166
|
-
const zipPath = resolve(releaseDir, `${sanitizeArtifactName(metadata.name)}-extension-v${metadata.version}.zip`);
|
|
167
|
-
const zipBuffer = createDeterministicZip(collectZipEntries(extensionDir));
|
|
168
|
-
writeFileSync(zipPath, zipBuffer);
|
|
169
|
-
return zipPath;
|
|
170
|
-
}
|
|
171
33
|
export function createNpmPackageTarball(options) {
|
|
172
34
|
requirePath(resolve(options.projectRoot, 'dist', 'node-server'), 'CLI build output');
|
|
173
35
|
requirePath(resolve(options.projectRoot, 'dist', 'ui'), 'UI build output');
|
|
@@ -203,7 +65,6 @@ export function packageReleaseArtifacts(options) {
|
|
|
203
65
|
const packageJson = readJsonFile(resolve(options.projectRoot, 'package.json'));
|
|
204
66
|
rmSync(releaseDir, { recursive: true, force: true });
|
|
205
67
|
mkdirSync(releaseDir, { recursive: true });
|
|
206
|
-
const extensionArchive = createExtensionArchive(packageJson, options.projectRoot, releaseDir);
|
|
207
68
|
const npmPackageTarball = createNpmPackageTarball({
|
|
208
69
|
projectRoot: options.projectRoot,
|
|
209
70
|
releaseDir,
|
|
@@ -211,7 +72,6 @@ export function packageReleaseArtifacts(options) {
|
|
|
211
72
|
});
|
|
212
73
|
const manifest = {
|
|
213
74
|
version: packageJson.version,
|
|
214
|
-
extensionArchive: toProjectRelative(options.projectRoot, extensionArchive),
|
|
215
75
|
npmPackageTarball: toProjectRelative(options.projectRoot, npmPackageTarball),
|
|
216
76
|
};
|
|
217
77
|
writeReleaseManifest(manifest, releaseDir);
|