sliccy 6.256.6 → 6.256.8

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 (150) hide show
  1. package/dist/node-server/_cloud_core/src/cone-config/cone-config-rules.d.mts +89 -0
  2. package/dist/node-server/_cloud_core/src/cone-config/cone-config-rules.d.mts.map +1 -0
  3. package/dist/node-server/_cloud_core/src/cone-config/cone-config-rules.mjs +170 -0
  4. package/dist/node-server/_cloud_core/src/cone-config/index.d.ts +2 -3
  5. package/dist/node-server/_cloud_core/src/cone-config/index.d.ts.map +1 -1
  6. package/dist/node-server/_cloud_core/src/cone-config/index.js +13 -79
  7. package/dist/node-server/_cloud_core/tests/cone-config/bundle-cases.test.d.ts +2 -0
  8. package/dist/node-server/_cloud_core/tests/cone-config/bundle-cases.test.d.ts.map +1 -0
  9. package/dist/node-server/_cloud_core/tests/cone-config/bundle-cases.test.js +57 -0
  10. package/dist/node-server/_cloud_core/tests/cone-config/cone-config.test.js +7 -5
  11. package/dist/node-server/_cloud_core/tests/fixtures/cone-config-cases.d.mts +37 -0
  12. package/dist/node-server/_cloud_core/tests/fixtures/cone-config-cases.d.mts.map +1 -0
  13. package/dist/node-server/_cloud_core/tests/fixtures/cone-config-cases.mjs +139 -0
  14. package/dist/node-server/_cloud_core/tests/resume-cone-config.test.js +17 -0
  15. package/dist/ui/.vite/manifest.json +180 -180
  16. package/dist/ui/assets/{account-store-S8kUyO-M.js → account-store-BD1MW0QM.js} +1 -1
  17. package/dist/ui/assets/{account-store-IflysHgF.js → account-store-F-Hva1nS.js} +1 -1
  18. package/dist/ui/assets/{adobe-BdldJFqE.js → adobe-CLl8UgcL.js} +1 -1
  19. package/dist/ui/assets/{adobe-Bf7bKpWp.js → adobe-CndWdX0c.js} +1 -1
  20. package/dist/ui/assets/{agent-panels-DZ1ROkXe.js → agent-panels-DH8GU_hC.js} +1 -1
  21. package/dist/ui/assets/{almost-bash-shell-headless-BU5ubVVd.js → almost-bash-shell-headless-DhugB1_j.js} +13 -13
  22. package/dist/ui/assets/{apply-layout--InPgyK5.js → apply-layout-D8ntAMP_.js} +1 -1
  23. package/dist/ui/assets/{azure-openai-DOvouxkL.js → azure-openai-D-1XQgyJ.js} +1 -1
  24. package/dist/ui/assets/{azure-openai-Bph-xWhG.js → azure-openai-LY9c836N.js} +1 -1
  25. package/dist/ui/assets/{cdp-7hxMc8Ap.js → cdp-BpNgBtOj.js} +1 -1
  26. package/dist/ui/assets/{cerebras-CCvHR4Kb.js → cerebras-BZFZs9Ht.js} +1 -1
  27. package/dist/ui/assets/{cerebras-CXk-28Vp.js → cerebras-C2TF1niJ.js} +1 -1
  28. package/dist/ui/assets/{composer-speech-DOkE9Yas.js → composer-speech-Dxe7pRbz.js} +1 -1
  29. package/dist/ui/assets/{connect-surface-BT8Zmvi3.js → connect-surface-j7CbcbrP.js} +1 -1
  30. package/dist/ui/assets/{directed-approval-BowS5HJu.js → directed-approval-1NtgYEGb.js} +1 -1
  31. package/dist/ui/assets/{emscripten-vfs-hook-cdK4BEA1.js → emscripten-vfs-hook-Orkw8aUI.js} +1 -1
  32. package/dist/ui/assets/{frozen-archive-writer-BroC2IFb.js → frozen-archive-writer-CXiseW3m.js} +1 -1
  33. package/dist/ui/assets/{frozen-session-delete-B1LBlhSr.js → frozen-session-delete-CLQSNT5q.js} +1 -1
  34. package/dist/ui/assets/{frozen-session-identity-0cl1s5vX.js → frozen-session-identity-Dla2v_H8.js} +1 -1
  35. package/dist/ui/assets/{gelatiere-unit-DlbL1vWF.js → gelatiere-unit-DS5kYHdl.js} +1 -1
  36. package/dist/ui/assets/{github-CK_WWKOG.js → github-CwFqHwM7.js} +1 -1
  37. package/dist/ui/assets/{github-DbO3u5CO.js → github-DkBtRTtj.js} +1 -1
  38. package/dist/ui/assets/{github-copilot-CqPSNSZT.js → github-copilot-BgtimT-5.js} +1 -1
  39. package/dist/ui/assets/{github-copilot-BlGbL_oW.js → github-copilot-DvlR4p1V.js} +1 -1
  40. package/dist/ui/assets/{hear-RAUlFLt2.js → hear-DgkNLpQK.js} +1 -1
  41. package/dist/ui/assets/isomorphic-git-NKOLn8fc.js +90 -0
  42. package/dist/ui/assets/isomorphic-git-j4Nlq2U8.js +69 -0
  43. package/dist/ui/assets/{js-realm-worker--h2ZVFDX.js → js-realm-worker-DvaOkd8I.js} +2 -2
  44. package/dist/ui/assets/{jsh-executor-Bss0vwC8.js → jsh-executor-ByYCAfVx.js} +3 -3
  45. package/dist/ui/assets/{kernel-worker-CskSmow-.js → kernel-worker-xyDnHfnE.js} +8 -8
  46. package/dist/ui/assets/{lick-ws-bridge-DL4Gd0X6.js → lick-ws-bridge-BztgRobQ.js} +1 -1
  47. package/dist/ui/assets/{lick-ws-bridge-1rR2wlS1.js → lick-ws-bridge-ViIkTZhn.js} +1 -1
  48. package/dist/ui/assets/{live-session-curation-CNJfUPD9.js → live-session-curation-CwlsC5Wo.js} +1 -1
  49. package/dist/ui/assets/{live-session-curation-DDWwZt0l.js → live-session-curation-vx6yGkHy.js} +1 -1
  50. package/dist/ui/assets/{live-session-snapshot-JEhfmyOd.js → live-session-snapshot-CjDUliT7.js} +1 -1
  51. package/dist/ui/assets/{local-llm-DjE0WS4W.js → local-llm-BDGbw8KW.js} +1 -1
  52. package/dist/ui/assets/{local-llm-CQlxyi_B.js → local-llm-Ck0NLGhL.js} +1 -1
  53. package/dist/ui/assets/{main-CqYCsHbd.js → main-YhmBlckm.js} +3 -3
  54. package/dist/ui/assets/{main-cherry-YR9834-k.js → main-cherry-B2tRa4cV.js} +1 -1
  55. package/dist/ui/assets/{mcp-command-DMn_j7KC.js → mcp-command-DCFbOqLb.js} +10 -10
  56. package/dist/ui/assets/{memory-curation-seam-Dczx398r.js → memory-curation-seam-bu5MdUMf.js} +1 -1
  57. package/dist/ui/assets/{memory-health-B3pJkEYs.js → memory-health-Cwv7orty.js} +1 -1
  58. package/dist/ui/assets/{memory-write-execute-B0M14uMq.js → memory-write-execute-DKunhcVV.js} +1 -1
  59. package/dist/ui/assets/{merge-folded-cost-into-frozen-dCWk1kvd.js → merge-folded-cost-into-frozen-DI9twAuG.js} +1 -1
  60. package/dist/ui/assets/{mv-Cc9qSXiY.js → mv-Vh0EGGaI.js} +1 -1
  61. package/dist/ui/assets/{new-session-RYQvHZoT.js → new-session-DdoKKj2v.js} +2 -2
  62. package/dist/ui/assets/{oauth-bootstrap-D7OM_yW9.js → oauth-bootstrap-D2zeCkqT.js} +2 -2
  63. package/dist/ui/assets/{onboarding-orchestrator-CHASlv3G.js → onboarding-orchestrator-DTY6LK4k.js} +1 -1
  64. package/dist/ui/assets/{openai-codex-CmfZFRVj.js → openai-codex-BtZ0emDz.js} +1 -1
  65. package/dist/ui/assets/{openai-codex-DO5cGM2q.js → openai-codex-C4ntaXUk.js} +1 -1
  66. package/dist/ui/assets/{openrouter-C52FFIQN.js → openrouter-D9MOwkyn.js} +1 -1
  67. package/dist/ui/assets/{openrouter-QsaghorL.js → openrouter-DbvLMk3L.js} +1 -1
  68. package/dist/ui/assets/{openrouter-free-CsNYK-uh.js → openrouter-free-BLccMR3p.js} +1 -1
  69. package/dist/ui/assets/{openrouter-free-D0kPtxk7.js → openrouter-free-CytTm0tL.js} +1 -1
  70. package/dist/ui/assets/{openrouter-oauth-DBLlXG9h.js → openrouter-oauth-DnEx9Rqh.js} +1 -1
  71. package/dist/ui/assets/{openrouter-oauth-CxAp_zKr.js → openrouter-oauth-G9EtfjRV.js} +1 -1
  72. package/dist/ui/assets/{panel-rpc-handlers-DMybh2Wq.js → panel-rpc-handlers-CnI0y8vs.js} +2 -2
  73. package/dist/ui/assets/{panelize-shell-DPNsQHGd.js → panelize-shell-DUBjt6H_.js} +1 -1
  74. package/dist/ui/assets/{pi-edit-execution-B2QowkLn.js → pi-edit-execution-CX4GKvdv.js} +1 -1
  75. package/dist/ui/assets/{provider-DQYA7Mfo.js → provider-DVbu5LnO.js} +1 -1
  76. package/dist/ui/assets/{provider-iKoyAsIs.js → provider-Dbkq5LeU.js} +1 -1
  77. package/dist/ui/assets/{provider-settings-B_NZDI-R.js → provider-settings-CQsfoQ1J.js} +1 -1
  78. package/dist/ui/assets/provider-store-access-CYY1izR6.js +1 -0
  79. package/dist/ui/assets/provider-store-access-DCHamof5.js +1 -0
  80. package/dist/ui/assets/{providers-BrfIAMLH.js → providers-DAe9H_v8.js} +2 -2
  81. package/dist/ui/assets/{providers-CiO1EAB9.js → providers-IlvLc68Q.js} +1 -1
  82. package/dist/ui/assets/{quick-llm-A2MHmDfA.js → quick-llm-CS859Yj_.js} +1 -1
  83. package/dist/ui/assets/{realm-inprocess-9LEendJ8.js → realm-inprocess-COL-iKh1.js} +2 -2
  84. package/dist/ui/assets/{realm-unhandled-rejections--8ILu6QT.js → realm-unhandled-rejections-B6xaTDVi.js} +1 -1
  85. package/dist/ui/assets/{realm-unhandled-rejections-CIn87Jf1.js → realm-unhandled-rejections-C7hmQxXs.js} +1 -1
  86. package/dist/ui/assets/{remote-terminal-view-BS9q1tN6.js → remote-terminal-view-BvUG4DYc.js} +2 -2
  87. package/dist/ui/assets/{restore-CehErvkE.js → restore-Bwl6K7p3.js} +1 -1
  88. package/dist/ui/assets/{run-DfDz97_a.js → run-B5g_uI07.js} +1 -1
  89. package/dist/ui/assets/{run-DPbjpUwz.js → run-BGGEfu-c.js} +1 -1
  90. package/dist/ui/assets/{run-DyNqund7.js → run-ibUaNBQQ.js} +2 -2
  91. package/dist/ui/assets/{run-5jlHWJxT.js → run-wjLp7772.js} +2 -2
  92. package/dist/ui/assets/{serve-command-kt2G15pj.js → serve-command-Dz9Stwu3.js} +2 -2
  93. package/dist/ui/assets/{serve-runtime-x2RbmLUG.js → serve-runtime-DifvoJEx.js} +1 -1
  94. package/dist/ui/assets/{session-command-memory-Cx7n-7Xg.js → session-command-memory-DL2jJXMG.js} +2 -2
  95. package/dist/ui/assets/{session-jsonl-DibsheI2.js → session-jsonl-C3C8hKnt.js} +1 -1
  96. package/dist/ui/assets/{session-search-index-DS5eYIR1.js → session-search-index-CwvVidcF.js} +1 -1
  97. package/dist/ui/assets/{setup-feature-flags-remote-D2tvxkEv.js → setup-feature-flags-remote-CXXeeHW_.js} +1 -1
  98. package/dist/ui/assets/{setup-model-catalog-Lgta8SIp.js → setup-model-catalog-CbbCvN8c.js} +1 -1
  99. package/dist/ui/assets/{silent-renew-backoff-4gD2ZN3D.js → silent-renew-backoff-Dt40GINt.js} +1 -1
  100. package/dist/ui/assets/slicc-version-B12B_nYb.js +1 -0
  101. package/dist/ui/assets/{soundscape-OcbTcjhh.js → soundscape-BnzHIiac.js} +1 -1
  102. package/dist/ui/assets/{speak-6R_kkDLV.js → speak-s6Ezas3_.js} +1 -1
  103. package/dist/ui/assets/{sprinkle-manager-Bh2OeBQ-.js → sprinkle-manager-B6_Tq3WN.js} +1 -1
  104. package/dist/ui/assets/{sprinkle-renderer-CZTwuJ5N.js → sprinkle-renderer-DyptAyk4.js} +1 -1
  105. package/dist/ui/assets/{sudo-BxdaMgMv.js → sudo-9bM5adw9.js} +1 -1
  106. package/dist/ui/assets/{supervisor-CiTDkTpI.js → supervisor-DWUb8N1P.js} +1 -1
  107. package/dist/ui/assets/{sync-dialog-Dbe7GUIE.js → sync-dialog-DB9gPfcg.js} +1 -1
  108. package/dist/ui/assets/{transformers-env-CRrUMWhB.js → transformers-env-D4iwHGI1.js} +1 -1
  109. package/dist/ui/assets/{tray-leader-B2CxGoCz.js → tray-leader-CbyHPI0I.js} +1 -1
  110. package/dist/ui/assets/{tray-leave-runtime-BSGr-1T-.js → tray-leave-runtime-CbvRdJPQ.js} +1 -1
  111. package/dist/ui/assets/{tray-sidecar-BtLe6z6W.js → tray-sidecar-B5huBZkI.js} +1 -1
  112. package/dist/ui/assets/{upgrade-detection-CGXNP0kM.js → upgrade-detection-6edCinYk.js} +1 -1
  113. package/dist/ui/assets/{upgrade-to-seven-CIJTeGs2.js → upgrade-to-seven-BHUcE9wq.js} +1 -1
  114. package/dist/ui/assets/{voice-reply-DHQY5xFF.js → voice-reply-c7d6CY7I.js} +1 -1
  115. package/dist/ui/assets/{wc-attach-DynBoQgi.js → wc-attach-lm3QnyXs.js} +2 -2
  116. package/dist/ui/assets/{wc-browser-5E_UVXe7.js → wc-browser-BILPcbgN.js} +1 -1
  117. package/dist/ui/assets/{wc-computers-UomDainA.js → wc-computers-iCzCAT2C.js} +1 -1
  118. package/dist/ui/assets/{wc-detached-uNHEE2VQ.js → wc-detached-DFwwR4RF.js} +1 -1
  119. package/dist/ui/assets/{wc-extension-j9LQbp7A.js → wc-extension-0IbGxHjs.js} +2 -2
  120. package/dist/ui/assets/{wc-follower-BOUyeM91.js → wc-follower-DkgntXOp.js} +3 -3
  121. package/dist/ui/assets/{wc-follower-oauth-CeNT4Lqf.js → wc-follower-oauth-C3BLIGbb.js} +1 -1
  122. package/dist/ui/assets/{wc-gelatiere-DFmOvtzw.js → wc-gelatiere-CXX1_rMS.js} +1 -1
  123. package/dist/ui/assets/{wc-live-BKQgEuos.js → wc-live-B-b1eo1g.js} +5 -5
  124. package/dist/ui/assets/{wc-nav-B6EEpQEt.js → wc-nav-CZXzwu-g.js} +2 -2
  125. package/dist/ui/assets/{wc-onboarding-CkS3Y78g.js → wc-onboarding-BWu-7vxU.js} +2 -2
  126. package/dist/ui/assets/{wc-permissions-B0r8NfjR.js → wc-permissions--gzVrLeD.js} +2 -2
  127. package/dist/ui/assets/{wc-placeholder-4DYvYxuC.js → wc-placeholder-B2d2q6zQ.js} +2 -2
  128. package/dist/ui/assets/{wc-profile-export-bmtXUUE5.js → wc-profile-export-rlkoo2cb.js} +3 -3
  129. package/dist/ui/assets/{wc-secret-request-DL6iF9hx.js → wc-secret-request-C0MKjBVT.js} +1 -1
  130. package/dist/ui/assets/{wc-settings-QUynREKy.js → wc-settings-Dc8Gmy2S.js} +3 -3
  131. package/dist/ui/assets/{wc-shell-U46t-s6w.js → wc-shell-BhkIyAXa.js} +4 -4
  132. package/dist/ui/assets/{wc-shortcut-config-BYIKzjZD.js → wc-shortcut-config-b1PO-pxP.js} +1 -1
  133. package/dist/ui/assets/{wc-sprinkles-Fmc2Lwf-.js → wc-sprinkles-D20m3z91.js} +2 -2
  134. package/dist/ui/assets/{wc-transcript-export-y7V84pv2.js → wc-transcript-export-mAAWaVHR.js} +2 -2
  135. package/dist/ui/assets/{wc-tray-BrWrwjJW.js → wc-tray-COZfixoH.js} +4 -4
  136. package/dist/ui/assets/welcome-detection-DMNkjk4H.js +1 -0
  137. package/dist/ui/assets/{whisper-session-D6nfenkE.js → whisper-session-SzPFfAP_.js} +2 -2
  138. package/dist/ui/assets/{xai-grok-BqdmyxRZ.js → xai-grok-B9OK_us-.js} +1 -1
  139. package/dist/ui/assets/{xai-grok-CvjZvEbm.js → xai-grok-BC6ijUtp.js} +1 -1
  140. package/dist/ui/index.html +3 -3
  141. package/dist/ui/packages/webapp/index.html +3 -3
  142. package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
  143. package/dist/ui/upgrade-to-seven.html +1 -1
  144. package/package.json +1 -1
  145. package/dist/ui/assets/isomorphic-git-BAyRq2-6.js +0 -69
  146. package/dist/ui/assets/isomorphic-git-Cmlj4OJW.js +0 -90
  147. package/dist/ui/assets/provider-store-access-Doz07rqs.js +0 -1
  148. package/dist/ui/assets/provider-store-access-YJa1L8Dr.js +0 -1
  149. package/dist/ui/assets/slicc-version--nn6GMSS.js +0 -1
  150. package/dist/ui/assets/welcome-detection-BZUvwWW9.js +0 -1
@@ -0,0 +1,139 @@
1
+ // Shared accept/reject table for the cone-config bundle rules (#4129). Run
2
+ // against cloud-core's validators (tests/cone-config/bundle-cases.test.ts) and
3
+ // github-workflow's buildConeConfigFiles (scripts/cone-config-rules.test.mjs),
4
+ // so the two floats can never disagree on what a valid bundle is again.
5
+ //
6
+ // `changed` names the copy whose verdict this case flipped in #4129; a case
7
+ // without it pins behaviour both copies already shared.
8
+ const ok = { name: 'TOKEN', value: 'v', domains: ['api.example.com'] };
9
+ /**
10
+ * @typedef {{
11
+ * id: string;
12
+ * secret: unknown;
13
+ * reject?: string;
14
+ * domains?: string[];
15
+ * changed?: Array<'cloud-core' | 'github-workflow'>;
16
+ * }} SecretCase
17
+ */
18
+ /** @type {SecretCase[]} */
19
+ export const SECRET_CASES = [
20
+ { id: 'plain identifier', secret: ok, domains: ['api.example.com'] },
21
+ {
22
+ id: 'dotted mount secret name',
23
+ secret: { ...ok, name: 's3.r2.access_key_id', domains: ['*.r2.cloudflarestorage.com'] },
24
+ domains: ['*.r2.cloudflarestorage.com'],
25
+ changed: ['cloud-core'],
26
+ },
27
+ {
28
+ id: 'hyphenated name',
29
+ secret: { ...ok, name: 'db.prod-eu.password' },
30
+ domains: ['api.example.com'],
31
+ changed: ['cloud-core'],
32
+ },
33
+ {
34
+ id: 'reserved oauth.* namespace',
35
+ secret: { ...ok, name: 'oauth.github.token' },
36
+ reject: 'oauth\\.\\* namespace is reserved',
37
+ changed: ['cloud-core'],
38
+ },
39
+ {
40
+ id: 'name shadowing another secret’s _DOMAINS line',
41
+ secret: { ...ok, name: 'ADOBE_IMS_TOKEN_DOMAINS', value: 'evil.example' },
42
+ reject: '_DOMAINS are reserved',
43
+ changed: ['cloud-core', 'github-workflow'],
44
+ },
45
+ {
46
+ id: 'empty domains list',
47
+ secret: { ...ok, domains: [] },
48
+ reject: 'non-empty',
49
+ changed: ['cloud-core'],
50
+ },
51
+ {
52
+ id: 'untrimmed domains are trimmed',
53
+ secret: { ...ok, domains: [' api.example.com ', '\t*.example.com'] },
54
+ domains: ['api.example.com', '*.example.com'],
55
+ changed: ['cloud-core'],
56
+ },
57
+ {
58
+ id: 'blank domain entry',
59
+ secret: { ...ok, domains: ['api.example.com', ' '] },
60
+ reject: 'non-blank',
61
+ changed: ['cloud-core'],
62
+ },
63
+ { id: 'name starting with a digit', secret: { ...ok, name: '9LIVES' }, reject: 'name must' },
64
+ { id: 'name with =', secret: { ...ok, name: 'A=B' }, reject: 'name must' },
65
+ { id: 'name with a space', secret: { ...ok, name: 'A B' }, reject: 'name must' },
66
+ { id: 'name with a newline', secret: { ...ok, name: 'A\nB' }, reject: 'name must' },
67
+ { id: 'missing name', secret: { value: 'v', domains: ['d'] }, reject: 'name must' },
68
+ { id: 'multiline value', secret: { ...ok, value: 'a\nb' }, reject: 'single-line' },
69
+ { id: 'CR in value', secret: { ...ok, value: 'a\rb' }, reject: 'single-line' },
70
+ { id: 'missing value', secret: { name: 'A', domains: ['d'] }, reject: 'single-line' },
71
+ { id: 'domains not an array', secret: { ...ok, domains: 'a,b' }, reject: 'string\\[\\]' },
72
+ { id: 'non-string domain', secret: { ...ok, domains: [1] }, reject: 'string\\[\\]' },
73
+ { id: 'comma in a domain', secret: { ...ok, domains: ['a,b'] }, reject: 'comma-free' },
74
+ { id: 'newline in a domain', secret: { ...ok, domains: ['a\nb'] }, reject: 'single-line' },
75
+ { id: 'secret not an object', secret: null, reject: 'not an object' },
76
+ ];
77
+ /**
78
+ * @typedef {{
79
+ * id: string;
80
+ * account: unknown;
81
+ * reject?: string;
82
+ * changed?: Array<'cloud-core' | 'github-workflow'>;
83
+ * }} AccountCase
84
+ */
85
+ /** @type {AccountCase[]} */
86
+ export const ACCOUNT_CASES = [
87
+ {
88
+ id: 'oauth account keeps only known fields',
89
+ account: {
90
+ providerId: 'github',
91
+ kind: 'oauth',
92
+ accessToken: 'gho',
93
+ refreshToken: 'ghr',
94
+ tokenExpiresAt: 1,
95
+ userName: 'octocat',
96
+ baseUrl: 'https://x',
97
+ extra: 'dropped',
98
+ },
99
+ },
100
+ {
101
+ id: 'oauth account with only the required fields',
102
+ account: { providerId: 'adobe', kind: 'oauth', accessToken: 'ims', tokenExpiresAt: '1' },
103
+ },
104
+ {
105
+ id: 'apikey account keeps only known fields',
106
+ account: {
107
+ providerId: 'azure',
108
+ kind: 'apikey',
109
+ apiKey: 'k',
110
+ baseUrl: 'https://x',
111
+ deployment: 'd',
112
+ apiVersion: 'v',
113
+ accessToken: 'dropped',
114
+ },
115
+ },
116
+ {
117
+ id: 'empty providerId',
118
+ account: { providerId: '', kind: 'apikey', apiKey: 'k' },
119
+ reject: 'providerId required',
120
+ changed: ['cloud-core'],
121
+ },
122
+ {
123
+ id: 'empty accessToken',
124
+ account: { providerId: 'x', kind: 'oauth', accessToken: '' },
125
+ reject: 'requires accessToken',
126
+ changed: ['cloud-core'],
127
+ },
128
+ {
129
+ id: 'empty apiKey',
130
+ account: { providerId: 'x', kind: 'apikey', apiKey: '' },
131
+ reject: 'requires apiKey',
132
+ changed: ['cloud-core'],
133
+ },
134
+ { id: 'unknown kind', account: { providerId: 'x', kind: 'saml' }, reject: 'kind must be' },
135
+ { id: 'missing kind', account: { providerId: 'x' }, reject: 'kind' },
136
+ { id: 'account not an object', account: 'x', reject: 'not an object' },
137
+ ];
138
+ export const VALID_EFFORT_LEVELS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh'];
139
+ export const INVALID_EFFORT_LEVELS = ['max', 'HIGH', 'ultra'];
@@ -63,4 +63,21 @@ describe('applyConeConfigDelta (read-modify-write of both files)', () => {
63
63
  it('surfaces a clear error for a corrupt cone-config.json', () => {
64
64
  expect(() => applyConeConfigDelta('{not json', '', {})).toThrow(/corrupt/);
65
65
  });
66
+ // #4129: the agent can persist dotted names (S3 mount profiles) into the
67
+ // cone's secrets.env; the identifier-only rule used to fail every resume.
68
+ it('resumes a cone whose secrets.env holds dotted mount secrets', () => {
69
+ const out = applyConeConfigDelta(JSON.stringify({ model: 'adobe:claude-opus-4-6', accounts: [] }), 's3.r2.access_key_id=AK\ns3.r2.access_key_id_DOMAINS=*.r2.cloudflarestorage.com\n', { upsert: { secrets: [{ name: 'NEW', value: 'n', domains: ['x.com'] }] } });
70
+ expect(out.secretsEnv).toContain('s3.r2.access_key_id=AK\ns3.r2.access_key_id_DOMAINS=*.r2.cloudflarestorage.com\n');
71
+ expect(out.index.secretNames).toEqual(['s3.r2.access_key_id', 'NEW']);
72
+ });
73
+ // Deliberate: the stricter account rules apply to the persisted base too. An
74
+ // empty credential (only a raw-API start under the old rules could store one)
75
+ // fails the resume with the entry named instead of booting a dead account.
76
+ it('rejects a persisted account with an empty credential on resume', () => {
77
+ const existing = JSON.stringify({
78
+ model: 'adobe:claude-opus-4-6',
79
+ accounts: [{ providerId: 'adobe', kind: 'oauth', accessToken: '' }],
80
+ });
81
+ expect(() => applyConeConfigDelta(existing, '', {})).toThrow(/accounts\[0\]: oauth account requires accessToken/);
82
+ });
66
83
  });