sliccy 6.256.7 → 6.256.9

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 (152) 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 +184 -184
  16. package/dist/ui/assets/{account-store-btH-rhSC.js → account-store-C53Um_mm.js} +1 -1
  17. package/dist/ui/assets/{account-store-CzcIBhIW.js → account-store-D6K6yEpr.js} +1 -1
  18. package/dist/ui/assets/{adobe-CbwrOy6h.js → adobe-BA_LWoXE.js} +1 -1
  19. package/dist/ui/assets/{adobe-CJagkQaj.js → adobe-BoUssaQx.js} +1 -1
  20. package/dist/ui/assets/{agent-panels-CWkdH3No.js → agent-panels-BN_g6RId.js} +1 -1
  21. package/dist/ui/assets/{almost-bash-shell-headless-CJ_eP6rj.js → almost-bash-shell-headless-BKZkvJ6e.js} +15 -15
  22. package/dist/ui/assets/{apply-layout-BIG5g9tp.js → apply-layout-B1yCBAUQ.js} +1 -1
  23. package/dist/ui/assets/{azure-openai-Cw7yGm0E.js → azure-openai-0Br25NSz.js} +1 -1
  24. package/dist/ui/assets/{azure-openai-DmBsM65e.js → azure-openai-CgjU22QR.js} +1 -1
  25. package/dist/ui/assets/{cdp-fHtNpyG6.js → cdp-CHnFD10W.js} +1 -1
  26. package/dist/ui/assets/{cerebras-BF4ZkjX5.js → cerebras-BekGtwM3.js} +1 -1
  27. package/dist/ui/assets/{cerebras-BRvzPIo6.js → cerebras-Dp-xxYie.js} +1 -1
  28. package/dist/ui/assets/{composer-speech-CYKpfumH.js → composer-speech-Cdhkyi5i.js} +1 -1
  29. package/dist/ui/assets/{connect-surface-eAvkKA7C.js → connect-surface-SdQMNXt8.js} +1 -1
  30. package/dist/ui/assets/{directed-approval-FuN8_c_j.js → directed-approval-WBVpFoZZ.js} +1 -1
  31. package/dist/ui/assets/{emscripten-vfs-hook-Cc4WeSPd.js → emscripten-vfs-hook-DZwJD4y2.js} +1 -1
  32. package/dist/ui/assets/frames-bfeIWWdf.js +1 -0
  33. package/dist/ui/assets/{frozen-archive-writer-CmH9_k8F.js → frozen-archive-writer-BQ8dZRjd.js} +1 -1
  34. package/dist/ui/assets/{frozen-session-delete-fM62FhkX.js → frozen-session-delete-ep62Dh64.js} +1 -1
  35. package/dist/ui/assets/{frozen-session-identity-blXQV4n9.js → frozen-session-identity-BawyNd51.js} +1 -1
  36. package/dist/ui/assets/{gelatiere-unit-Bo7PCnbF.js → gelatiere-unit-BdvxF-bo.js} +1 -1
  37. package/dist/ui/assets/{github-C1rbK9rb.js → github-685Sxap0.js} +1 -1
  38. package/dist/ui/assets/{github-CQol1Ste.js → github-B3ki0kW7.js} +1 -1
  39. package/dist/ui/assets/{github-copilot-Dh5Sw_oV.js → github-copilot-Bn1Tofcl.js} +1 -1
  40. package/dist/ui/assets/{github-copilot-Da1-tlWc.js → github-copilot-lc6Ufqa3.js} +1 -1
  41. package/dist/ui/assets/{hear-DhXegde8.js → hear-0djFXv_9.js} +1 -1
  42. package/dist/ui/assets/{js-realm-worker-BSYR2sfX.js → js-realm-worker--QdwOZAk.js} +2 -2
  43. package/dist/ui/assets/{jsh-executor-v3qKqkZF.js → jsh-executor-BxZA2hXH.js} +3 -3
  44. package/dist/ui/assets/{kernel-worker-BItmIWYW.js → kernel-worker-CLURD9IR.js} +8 -8
  45. package/dist/ui/assets/{lick-ws-bridge-gBNtu0RL.js → lick-ws-bridge-Ck6kaT2S.js} +1 -1
  46. package/dist/ui/assets/{lick-ws-bridge-BOvw32aW.js → lick-ws-bridge-CoG2qesw.js} +1 -1
  47. package/dist/ui/assets/{live-session-curation-8wVj6wZH.js → live-session-curation-DC5ilmnE.js} +1 -1
  48. package/dist/ui/assets/{live-session-curation-7CTGumla.js → live-session-curation-DRsIIv8O.js} +1 -1
  49. package/dist/ui/assets/{live-session-snapshot-D8qPxZ7E.js → live-session-snapshot-CkkdDwxI.js} +1 -1
  50. package/dist/ui/assets/{local-llm-CgwaZ6Gd.js → local-llm-DGOkH498.js} +1 -1
  51. package/dist/ui/assets/{local-llm-DvbP3RyJ.js → local-llm-DkHtUWu5.js} +1 -1
  52. package/dist/ui/assets/{main-IZrprgCE.js → main-D9oUgloo.js} +3 -3
  53. package/dist/ui/assets/{main-cherry-CiVZP2ux.js → main-cherry-CG3eAQlV.js} +1 -1
  54. package/dist/ui/assets/{mcp-command-BQnTrbHl.js → mcp-command-CNI5aZm4.js} +10 -10
  55. package/dist/ui/assets/{memory-curation-seam-CjpYohBK.js → memory-curation-seam-CQRsPoO7.js} +1 -1
  56. package/dist/ui/assets/{memory-health-DiVvDJo6.js → memory-health-qES7fXVO.js} +1 -1
  57. package/dist/ui/assets/{memory-write-execute-CPlnwj08.js → memory-write-execute-Dz2AOQlc.js} +1 -1
  58. package/dist/ui/assets/{merge-folded-cost-into-frozen-CDpUEipJ.js → merge-folded-cost-into-frozen-Cp-3wSiw.js} +1 -1
  59. package/dist/ui/assets/{new-session-DMBvlX7U.js → new-session-oUWvETeg.js} +2 -2
  60. package/dist/ui/assets/{oauth-bootstrap-z9Ak2U5k.js → oauth-bootstrap-DFYdogxM.js} +2 -2
  61. package/dist/ui/assets/{onboarding-orchestrator-Cmp_7XS6.js → onboarding-orchestrator-DwzGpye8.js} +1 -1
  62. package/dist/ui/assets/{openai-codex-XtzU7AV5.js → openai-codex-Lc8obIKU.js} +1 -1
  63. package/dist/ui/assets/{openai-codex-DObnOrti.js → openai-codex-a3KU-PYz.js} +1 -1
  64. package/dist/ui/assets/{openrouter-h4PBvqqd.js → openrouter-CQJlo-7Q.js} +1 -1
  65. package/dist/ui/assets/{openrouter-B9YPpMez.js → openrouter-DCWj0mxO.js} +1 -1
  66. package/dist/ui/assets/{openrouter-free-Bw98ZXz_.js → openrouter-free-C6ait2MT.js} +1 -1
  67. package/dist/ui/assets/{openrouter-free-DsUNrtke.js → openrouter-free-CB_5hU3Q.js} +1 -1
  68. package/dist/ui/assets/{openrouter-oauth-DlBVHDiI.js → openrouter-oauth-B5nARrbg.js} +1 -1
  69. package/dist/ui/assets/{openrouter-oauth-CtAf-wKQ.js → openrouter-oauth-BFc8K4Yo.js} +1 -1
  70. package/dist/ui/assets/{panel-rpc-handlers-C2H1GujD.js → panel-rpc-handlers-C9VEsFxZ.js} +2 -2
  71. package/dist/ui/assets/{panelize-shell-DjEoCne9.js → panelize-shell-DDW-oKWB.js} +1 -1
  72. package/dist/ui/assets/{pi-edit-execution-DdXRrxQk.js → pi-edit-execution-DATJLr54.js} +1 -1
  73. package/dist/ui/assets/{provider-D88ZP1Lj.js → provider-BFovwIok.js} +1 -1
  74. package/dist/ui/assets/{provider-CkcZnU60.js → provider-C-y9IsNb.js} +1 -1
  75. package/dist/ui/assets/{provider-settings-D6OJgUt2.js → provider-settings-BaLOxUmM.js} +1 -1
  76. package/dist/ui/assets/provider-store-access-BKZWsf7y.js +1 -0
  77. package/dist/ui/assets/provider-store-access-DeL4f_Qp.js +1 -0
  78. package/dist/ui/assets/{providers-Bh-gB-84.js → providers-3AZB7Al_.js} +1 -1
  79. package/dist/ui/assets/{providers-CNaCaxZH.js → providers-DErgbS_D.js} +2 -2
  80. package/dist/ui/assets/{quick-llm-D3vw1Iw4.js → quick-llm-D9onASDw.js} +1 -1
  81. package/dist/ui/assets/{realm-inprocess-c5_SKCj3.js → realm-inprocess-NmMZhEli.js} +2 -2
  82. package/dist/ui/assets/{realm-unhandled-rejections-B-HhibQP.js → realm-unhandled-rejections-BC_zQVgp.js} +1 -1
  83. package/dist/ui/assets/{realm-unhandled-rejections-V5oYilet.js → realm-unhandled-rejections-Dj1YS7MU.js} +1 -1
  84. package/dist/ui/assets/{remote-terminal-view-ByfloxIg.js → remote-terminal-view-CIQ1PZ9w.js} +2 -2
  85. package/dist/ui/assets/{restore-BByLi1Yd.js → restore-UlheFg8K.js} +1 -1
  86. package/dist/ui/assets/{run-BG76L9eu.js → run-BDovOz9c.js} +1 -1
  87. package/dist/ui/assets/{run-C-tci7Wb.js → run-BgxWF2oM.js} +1 -1
  88. package/dist/ui/assets/{run-B9uXGQYv.js → run-Bi_CtYdz.js} +2 -2
  89. package/dist/ui/assets/{run-BZCg7fqf.js → run-Cph20KL5.js} +2 -2
  90. package/dist/ui/assets/{run-CJQ6QgvR.js → run-Q1zeRJAj.js} +2 -2
  91. package/dist/ui/assets/{scale-B8PGb3fG.js → scale-DGaWcXnU.js} +1 -1
  92. package/dist/ui/assets/{serve-command-fOeuDlHT.js → serve-command-Dh9-nJKr.js} +2 -2
  93. package/dist/ui/assets/{serve-runtime-BgsoA65p.js → serve-runtime-CWel-hw-.js} +1 -1
  94. package/dist/ui/assets/{session-command-memory-Z4gG5kc5.js → session-command-memory-GUh-MoKZ.js} +2 -2
  95. package/dist/ui/assets/{session-jsonl-CRoUGl0k.js → session-jsonl-DnrB6xFa.js} +1 -1
  96. package/dist/ui/assets/{session-search-index-C9AzKIIE.js → session-search-index-C2YxS1lH.js} +1 -1
  97. package/dist/ui/assets/{setup-feature-flags-remote-HCx9Z23R.js → setup-feature-flags-remote-B4z23nRG.js} +1 -1
  98. package/dist/ui/assets/{setup-model-catalog-C_9E6bou.js → setup-model-catalog-Do0Mpo0E.js} +1 -1
  99. package/dist/ui/assets/{silent-renew-backoff-ByLo6zsQ.js → silent-renew-backoff-ki1gZZUf.js} +1 -1
  100. package/dist/ui/assets/slicc-version-C-ysp_tA.js +1 -0
  101. package/dist/ui/assets/{soundscape-KuEhg0nr.js → soundscape-AyeLTgUD.js} +1 -1
  102. package/dist/ui/assets/{speak-Di_o2s0D.js → speak-CCP5aDYi.js} +1 -1
  103. package/dist/ui/assets/{sprinkle-manager-4tRf736T.js → sprinkle-manager-Dsh6A0ZY.js} +1 -1
  104. package/dist/ui/assets/{sprinkle-renderer-EbUVsHUB.js → sprinkle-renderer-tXii7z20.js} +1 -1
  105. package/dist/ui/assets/{ssh-COAG0Prl.js → ssh-QXOZ_9C5.js} +1 -1
  106. package/dist/ui/assets/{sudo-BlHPVMLU.js → sudo-CRyyMDJI.js} +1 -1
  107. package/dist/ui/assets/{supervisor-BjtHX13A.js → supervisor-BHGgl-nU.js} +1 -1
  108. package/dist/ui/assets/{sync-dialog-CG5xrbzN.js → sync-dialog-LmjIPOl5.js} +1 -1
  109. package/dist/ui/assets/{tab-D9i-XOmT.js → tab-BxQIB_Z9.js} +1 -1
  110. package/dist/ui/assets/{transformers-env-BCIh311V.js → transformers-env-DviFGXIh.js} +1 -1
  111. package/dist/ui/assets/{tray-leader-DfoPsK4G.js → tray-leader-DRAiFyH0.js} +1 -1
  112. package/dist/ui/assets/{tray-leave-runtime-Cn6l6kQM.js → tray-leave-runtime-CBTcgox7.js} +1 -1
  113. package/dist/ui/assets/{tray-sidecar-AttyJaV8.js → tray-sidecar-DR2gfFr1.js} +1 -1
  114. package/dist/ui/assets/{upgrade-detection-BPnMErp6.js → upgrade-detection-CLcKWSrE.js} +1 -1
  115. package/dist/ui/assets/{upgrade-to-seven-oM6Y2jpf.js → upgrade-to-seven-DGK7_pzH.js} +1 -1
  116. package/dist/ui/assets/{v86-BhyJfU3t.js → v86-hpXjGyeJ.js} +1 -1
  117. package/dist/ui/assets/{voice-reply-DhFXmtN1.js → voice-reply-CbIPZ3RI.js} +1 -1
  118. package/dist/ui/assets/{wc-attach-B2_dNi4B.js → wc-attach-SKMBIFz8.js} +2 -2
  119. package/dist/ui/assets/{wc-browser-BvSPcFnk.js → wc-browser-BmbHK6T2.js} +1 -1
  120. package/dist/ui/assets/{wc-computers-P_YXw5mk.js → wc-computers-CCW36xmA.js} +1 -1
  121. package/dist/ui/assets/{wc-detached-C4uhpekQ.js → wc-detached-wYR_-B4N.js} +1 -1
  122. package/dist/ui/assets/{wc-extension-D3l9KUxg.js → wc-extension-CowOxRjX.js} +2 -2
  123. package/dist/ui/assets/{wc-follower-oauth-PiJAsXE9.js → wc-follower-oauth-B4ghxt1Z.js} +1 -1
  124. package/dist/ui/assets/{wc-follower-BN7GwkbB.js → wc-follower-trWpq3AT.js} +3 -3
  125. package/dist/ui/assets/{wc-gelatiere-aEAOP3ay.js → wc-gelatiere-DCWY8DLx.js} +1 -1
  126. package/dist/ui/assets/{wc-live-BeX-_7T4.js → wc-live-DMxoy1ey.js} +5 -5
  127. package/dist/ui/assets/{wc-nav-D7tE4cOW.js → wc-nav-B60Q1YWx.js} +2 -2
  128. package/dist/ui/assets/{wc-onboarding-BsRWvnNO.js → wc-onboarding-DFKkF2SS.js} +2 -2
  129. package/dist/ui/assets/{wc-permissions-xh98BF4d.js → wc-permissions-0ZaDh6E3.js} +2 -2
  130. package/dist/ui/assets/{wc-placeholder-C2e75ECK.js → wc-placeholder-C1lk5MWN.js} +2 -2
  131. package/dist/ui/assets/{wc-profile-export-BOUD9Teb.js → wc-profile-export-C_CPVCiz.js} +3 -3
  132. package/dist/ui/assets/{wc-secret-request-9hLiDY0q.js → wc-secret-request-BVUEEzXV.js} +1 -1
  133. package/dist/ui/assets/{wc-settings-C1Ew3xtK.js → wc-settings-BGMa1-7M.js} +3 -3
  134. package/dist/ui/assets/{wc-shell-BQm4_AZ-.js → wc-shell-C8i5txed.js} +47 -42
  135. package/dist/ui/assets/{wc-shortcut-config-CG3A_xXd.js → wc-shortcut-config-D_X09nxe.js} +1 -1
  136. package/dist/ui/assets/{wc-sprinkles-DfhVMlB0.js → wc-sprinkles-DxoN0545.js} +2 -2
  137. package/dist/ui/assets/{wc-transcript-export-D5lf1B5S.js → wc-transcript-export-Cl9ciceV.js} +2 -2
  138. package/dist/ui/assets/{wc-tray-DrfK5jNi.js → wc-tray-CnnaCOxC.js} +4 -4
  139. package/dist/ui/assets/welcome-detection-BJdrXx9O.js +1 -0
  140. package/dist/ui/assets/{whisper-session-B-Uac3-A.js → whisper-session-DkP7Jo2t.js} +2 -2
  141. package/dist/ui/assets/{xai-grok-CHwFD6MH.js → xai-grok-0KYkTeE-.js} +1 -1
  142. package/dist/ui/assets/{xai-grok-xZGJWELa.js → xai-grok-SPC-yKdi.js} +1 -1
  143. package/dist/ui/index.html +3 -3
  144. package/dist/ui/packages/webapp/index.html +3 -3
  145. package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
  146. package/dist/ui/upgrade-to-seven.html +1 -1
  147. package/package.json +2 -2
  148. package/dist/ui/assets/frames-CU-jXCBt.js +0 -1
  149. package/dist/ui/assets/provider-store-access-Am4wDSnr.js +0 -1
  150. package/dist/ui/assets/provider-store-access-bHvRNk17.js +0 -1
  151. package/dist/ui/assets/slicc-version-BOvQ0meA.js +0 -1
  152. package/dist/ui/assets/welcome-detection-D98VbCw6.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
  });