sliccy 6.256.7 → 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 (145) 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 +179 -179
  16. package/dist/ui/assets/{account-store-btH-rhSC.js → account-store-BD1MW0QM.js} +1 -1
  17. package/dist/ui/assets/{account-store-CzcIBhIW.js → account-store-F-Hva1nS.js} +1 -1
  18. package/dist/ui/assets/{adobe-CJagkQaj.js → adobe-CLl8UgcL.js} +1 -1
  19. package/dist/ui/assets/{adobe-CbwrOy6h.js → adobe-CndWdX0c.js} +1 -1
  20. package/dist/ui/assets/{agent-panels-CWkdH3No.js → agent-panels-DH8GU_hC.js} +1 -1
  21. package/dist/ui/assets/{almost-bash-shell-headless-CJ_eP6rj.js → almost-bash-shell-headless-DhugB1_j.js} +12 -12
  22. package/dist/ui/assets/{apply-layout-BIG5g9tp.js → apply-layout-D8ntAMP_.js} +1 -1
  23. package/dist/ui/assets/{azure-openai-DmBsM65e.js → azure-openai-D-1XQgyJ.js} +1 -1
  24. package/dist/ui/assets/{azure-openai-Cw7yGm0E.js → azure-openai-LY9c836N.js} +1 -1
  25. package/dist/ui/assets/{cdp-fHtNpyG6.js → cdp-BpNgBtOj.js} +1 -1
  26. package/dist/ui/assets/{cerebras-BF4ZkjX5.js → cerebras-BZFZs9Ht.js} +1 -1
  27. package/dist/ui/assets/{cerebras-BRvzPIo6.js → cerebras-C2TF1niJ.js} +1 -1
  28. package/dist/ui/assets/{composer-speech-CYKpfumH.js → composer-speech-Dxe7pRbz.js} +1 -1
  29. package/dist/ui/assets/{connect-surface-eAvkKA7C.js → connect-surface-j7CbcbrP.js} +1 -1
  30. package/dist/ui/assets/{directed-approval-FuN8_c_j.js → directed-approval-1NtgYEGb.js} +1 -1
  31. package/dist/ui/assets/{emscripten-vfs-hook-Cc4WeSPd.js → emscripten-vfs-hook-Orkw8aUI.js} +1 -1
  32. package/dist/ui/assets/{frozen-archive-writer-CmH9_k8F.js → frozen-archive-writer-CXiseW3m.js} +1 -1
  33. package/dist/ui/assets/{frozen-session-delete-fM62FhkX.js → frozen-session-delete-CLQSNT5q.js} +1 -1
  34. package/dist/ui/assets/{frozen-session-identity-blXQV4n9.js → frozen-session-identity-Dla2v_H8.js} +1 -1
  35. package/dist/ui/assets/{gelatiere-unit-Bo7PCnbF.js → gelatiere-unit-DS5kYHdl.js} +1 -1
  36. package/dist/ui/assets/{github-C1rbK9rb.js → github-CwFqHwM7.js} +1 -1
  37. package/dist/ui/assets/{github-CQol1Ste.js → github-DkBtRTtj.js} +1 -1
  38. package/dist/ui/assets/{github-copilot-Dh5Sw_oV.js → github-copilot-BgtimT-5.js} +1 -1
  39. package/dist/ui/assets/{github-copilot-Da1-tlWc.js → github-copilot-DvlR4p1V.js} +1 -1
  40. package/dist/ui/assets/{hear-DhXegde8.js → hear-DgkNLpQK.js} +1 -1
  41. package/dist/ui/assets/{js-realm-worker-BSYR2sfX.js → js-realm-worker-DvaOkd8I.js} +2 -2
  42. package/dist/ui/assets/{jsh-executor-v3qKqkZF.js → jsh-executor-ByYCAfVx.js} +3 -3
  43. package/dist/ui/assets/{kernel-worker-BItmIWYW.js → kernel-worker-xyDnHfnE.js} +8 -8
  44. package/dist/ui/assets/{lick-ws-bridge-BOvw32aW.js → lick-ws-bridge-BztgRobQ.js} +1 -1
  45. package/dist/ui/assets/{lick-ws-bridge-gBNtu0RL.js → lick-ws-bridge-ViIkTZhn.js} +1 -1
  46. package/dist/ui/assets/{live-session-curation-8wVj6wZH.js → live-session-curation-CwlsC5Wo.js} +1 -1
  47. package/dist/ui/assets/{live-session-curation-7CTGumla.js → live-session-curation-vx6yGkHy.js} +1 -1
  48. package/dist/ui/assets/{live-session-snapshot-D8qPxZ7E.js → live-session-snapshot-CjDUliT7.js} +1 -1
  49. package/dist/ui/assets/{local-llm-DvbP3RyJ.js → local-llm-BDGbw8KW.js} +1 -1
  50. package/dist/ui/assets/{local-llm-CgwaZ6Gd.js → local-llm-Ck0NLGhL.js} +1 -1
  51. package/dist/ui/assets/{main-IZrprgCE.js → main-YhmBlckm.js} +3 -3
  52. package/dist/ui/assets/{main-cherry-CiVZP2ux.js → main-cherry-B2tRa4cV.js} +1 -1
  53. package/dist/ui/assets/{mcp-command-BQnTrbHl.js → mcp-command-DCFbOqLb.js} +10 -10
  54. package/dist/ui/assets/{memory-curation-seam-CjpYohBK.js → memory-curation-seam-bu5MdUMf.js} +1 -1
  55. package/dist/ui/assets/{memory-health-DiVvDJo6.js → memory-health-Cwv7orty.js} +1 -1
  56. package/dist/ui/assets/{memory-write-execute-CPlnwj08.js → memory-write-execute-DKunhcVV.js} +1 -1
  57. package/dist/ui/assets/{merge-folded-cost-into-frozen-CDpUEipJ.js → merge-folded-cost-into-frozen-DI9twAuG.js} +1 -1
  58. package/dist/ui/assets/{new-session-DMBvlX7U.js → new-session-DdoKKj2v.js} +2 -2
  59. package/dist/ui/assets/{oauth-bootstrap-z9Ak2U5k.js → oauth-bootstrap-D2zeCkqT.js} +2 -2
  60. package/dist/ui/assets/{onboarding-orchestrator-Cmp_7XS6.js → onboarding-orchestrator-DTY6LK4k.js} +1 -1
  61. package/dist/ui/assets/{openai-codex-XtzU7AV5.js → openai-codex-BtZ0emDz.js} +1 -1
  62. package/dist/ui/assets/{openai-codex-DObnOrti.js → openai-codex-C4ntaXUk.js} +1 -1
  63. package/dist/ui/assets/{openrouter-h4PBvqqd.js → openrouter-D9MOwkyn.js} +1 -1
  64. package/dist/ui/assets/{openrouter-B9YPpMez.js → openrouter-DbvLMk3L.js} +1 -1
  65. package/dist/ui/assets/{openrouter-free-DsUNrtke.js → openrouter-free-BLccMR3p.js} +1 -1
  66. package/dist/ui/assets/{openrouter-free-Bw98ZXz_.js → openrouter-free-CytTm0tL.js} +1 -1
  67. package/dist/ui/assets/{openrouter-oauth-DlBVHDiI.js → openrouter-oauth-DnEx9Rqh.js} +1 -1
  68. package/dist/ui/assets/{openrouter-oauth-CtAf-wKQ.js → openrouter-oauth-G9EtfjRV.js} +1 -1
  69. package/dist/ui/assets/{panel-rpc-handlers-C2H1GujD.js → panel-rpc-handlers-CnI0y8vs.js} +2 -2
  70. package/dist/ui/assets/{panelize-shell-DjEoCne9.js → panelize-shell-DUBjt6H_.js} +1 -1
  71. package/dist/ui/assets/{pi-edit-execution-DdXRrxQk.js → pi-edit-execution-CX4GKvdv.js} +1 -1
  72. package/dist/ui/assets/{provider-D88ZP1Lj.js → provider-DVbu5LnO.js} +1 -1
  73. package/dist/ui/assets/{provider-CkcZnU60.js → provider-Dbkq5LeU.js} +1 -1
  74. package/dist/ui/assets/{provider-settings-D6OJgUt2.js → provider-settings-CQsfoQ1J.js} +1 -1
  75. package/dist/ui/assets/provider-store-access-CYY1izR6.js +1 -0
  76. package/dist/ui/assets/provider-store-access-DCHamof5.js +1 -0
  77. package/dist/ui/assets/{providers-CNaCaxZH.js → providers-DAe9H_v8.js} +2 -2
  78. package/dist/ui/assets/{providers-Bh-gB-84.js → providers-IlvLc68Q.js} +1 -1
  79. package/dist/ui/assets/{quick-llm-D3vw1Iw4.js → quick-llm-CS859Yj_.js} +1 -1
  80. package/dist/ui/assets/{realm-inprocess-c5_SKCj3.js → realm-inprocess-COL-iKh1.js} +2 -2
  81. package/dist/ui/assets/{realm-unhandled-rejections-B-HhibQP.js → realm-unhandled-rejections-B6xaTDVi.js} +1 -1
  82. package/dist/ui/assets/{realm-unhandled-rejections-V5oYilet.js → realm-unhandled-rejections-C7hmQxXs.js} +1 -1
  83. package/dist/ui/assets/{remote-terminal-view-ByfloxIg.js → remote-terminal-view-BvUG4DYc.js} +2 -2
  84. package/dist/ui/assets/{restore-BByLi1Yd.js → restore-Bwl6K7p3.js} +1 -1
  85. package/dist/ui/assets/{run-BG76L9eu.js → run-B5g_uI07.js} +1 -1
  86. package/dist/ui/assets/{run-C-tci7Wb.js → run-BGGEfu-c.js} +1 -1
  87. package/dist/ui/assets/{run-BZCg7fqf.js → run-ibUaNBQQ.js} +2 -2
  88. package/dist/ui/assets/{run-CJQ6QgvR.js → run-wjLp7772.js} +2 -2
  89. package/dist/ui/assets/{serve-command-fOeuDlHT.js → serve-command-Dz9Stwu3.js} +2 -2
  90. package/dist/ui/assets/{serve-runtime-BgsoA65p.js → serve-runtime-DifvoJEx.js} +1 -1
  91. package/dist/ui/assets/{session-command-memory-Z4gG5kc5.js → session-command-memory-DL2jJXMG.js} +2 -2
  92. package/dist/ui/assets/{session-jsonl-CRoUGl0k.js → session-jsonl-C3C8hKnt.js} +1 -1
  93. package/dist/ui/assets/{session-search-index-C9AzKIIE.js → session-search-index-CwvVidcF.js} +1 -1
  94. package/dist/ui/assets/{setup-feature-flags-remote-HCx9Z23R.js → setup-feature-flags-remote-CXXeeHW_.js} +1 -1
  95. package/dist/ui/assets/{setup-model-catalog-C_9E6bou.js → setup-model-catalog-CbbCvN8c.js} +1 -1
  96. package/dist/ui/assets/{silent-renew-backoff-ByLo6zsQ.js → silent-renew-backoff-Dt40GINt.js} +1 -1
  97. package/dist/ui/assets/slicc-version-B12B_nYb.js +1 -0
  98. package/dist/ui/assets/{soundscape-KuEhg0nr.js → soundscape-BnzHIiac.js} +1 -1
  99. package/dist/ui/assets/{speak-Di_o2s0D.js → speak-s6Ezas3_.js} +1 -1
  100. package/dist/ui/assets/{sprinkle-manager-4tRf736T.js → sprinkle-manager-B6_Tq3WN.js} +1 -1
  101. package/dist/ui/assets/{sprinkle-renderer-EbUVsHUB.js → sprinkle-renderer-DyptAyk4.js} +1 -1
  102. package/dist/ui/assets/{sudo-BlHPVMLU.js → sudo-9bM5adw9.js} +1 -1
  103. package/dist/ui/assets/{supervisor-BjtHX13A.js → supervisor-DWUb8N1P.js} +1 -1
  104. package/dist/ui/assets/{sync-dialog-CG5xrbzN.js → sync-dialog-DB9gPfcg.js} +1 -1
  105. package/dist/ui/assets/{transformers-env-BCIh311V.js → transformers-env-D4iwHGI1.js} +1 -1
  106. package/dist/ui/assets/{tray-leader-DfoPsK4G.js → tray-leader-CbyHPI0I.js} +1 -1
  107. package/dist/ui/assets/{tray-leave-runtime-Cn6l6kQM.js → tray-leave-runtime-CbvRdJPQ.js} +1 -1
  108. package/dist/ui/assets/{tray-sidecar-AttyJaV8.js → tray-sidecar-B5huBZkI.js} +1 -1
  109. package/dist/ui/assets/{upgrade-detection-BPnMErp6.js → upgrade-detection-6edCinYk.js} +1 -1
  110. package/dist/ui/assets/{upgrade-to-seven-oM6Y2jpf.js → upgrade-to-seven-BHUcE9wq.js} +1 -1
  111. package/dist/ui/assets/{voice-reply-DhFXmtN1.js → voice-reply-c7d6CY7I.js} +1 -1
  112. package/dist/ui/assets/{wc-attach-B2_dNi4B.js → wc-attach-lm3QnyXs.js} +2 -2
  113. package/dist/ui/assets/{wc-browser-BvSPcFnk.js → wc-browser-BILPcbgN.js} +1 -1
  114. package/dist/ui/assets/{wc-computers-P_YXw5mk.js → wc-computers-iCzCAT2C.js} +1 -1
  115. package/dist/ui/assets/{wc-detached-C4uhpekQ.js → wc-detached-DFwwR4RF.js} +1 -1
  116. package/dist/ui/assets/{wc-extension-D3l9KUxg.js → wc-extension-0IbGxHjs.js} +2 -2
  117. package/dist/ui/assets/{wc-follower-BN7GwkbB.js → wc-follower-DkgntXOp.js} +3 -3
  118. package/dist/ui/assets/{wc-follower-oauth-PiJAsXE9.js → wc-follower-oauth-C3BLIGbb.js} +1 -1
  119. package/dist/ui/assets/{wc-gelatiere-aEAOP3ay.js → wc-gelatiere-CXX1_rMS.js} +1 -1
  120. package/dist/ui/assets/{wc-live-BeX-_7T4.js → wc-live-B-b1eo1g.js} +5 -5
  121. package/dist/ui/assets/{wc-nav-D7tE4cOW.js → wc-nav-CZXzwu-g.js} +2 -2
  122. package/dist/ui/assets/{wc-onboarding-BsRWvnNO.js → wc-onboarding-BWu-7vxU.js} +2 -2
  123. package/dist/ui/assets/{wc-permissions-xh98BF4d.js → wc-permissions--gzVrLeD.js} +2 -2
  124. package/dist/ui/assets/{wc-placeholder-C2e75ECK.js → wc-placeholder-B2d2q6zQ.js} +2 -2
  125. package/dist/ui/assets/{wc-profile-export-BOUD9Teb.js → wc-profile-export-rlkoo2cb.js} +3 -3
  126. package/dist/ui/assets/{wc-secret-request-9hLiDY0q.js → wc-secret-request-C0MKjBVT.js} +1 -1
  127. package/dist/ui/assets/{wc-settings-C1Ew3xtK.js → wc-settings-Dc8Gmy2S.js} +3 -3
  128. package/dist/ui/assets/{wc-shell-BQm4_AZ-.js → wc-shell-BhkIyAXa.js} +3 -3
  129. package/dist/ui/assets/{wc-shortcut-config-CG3A_xXd.js → wc-shortcut-config-b1PO-pxP.js} +1 -1
  130. package/dist/ui/assets/{wc-sprinkles-DfhVMlB0.js → wc-sprinkles-D20m3z91.js} +2 -2
  131. package/dist/ui/assets/{wc-transcript-export-D5lf1B5S.js → wc-transcript-export-mAAWaVHR.js} +2 -2
  132. package/dist/ui/assets/{wc-tray-DrfK5jNi.js → wc-tray-COZfixoH.js} +4 -4
  133. package/dist/ui/assets/welcome-detection-DMNkjk4H.js +1 -0
  134. package/dist/ui/assets/{whisper-session-B-Uac3-A.js → whisper-session-SzPFfAP_.js} +2 -2
  135. package/dist/ui/assets/{xai-grok-CHwFD6MH.js → xai-grok-B9OK_us-.js} +1 -1
  136. package/dist/ui/assets/{xai-grok-xZGJWELa.js → xai-grok-BC6ijUtp.js} +1 -1
  137. package/dist/ui/index.html +3 -3
  138. package/dist/ui/packages/webapp/index.html +3 -3
  139. package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
  140. package/dist/ui/upgrade-to-seven.html +1 -1
  141. package/package.json +1 -1
  142. package/dist/ui/assets/provider-store-access-Am4wDSnr.js +0 -1
  143. package/dist/ui/assets/provider-store-access-bHvRNk17.js +0 -1
  144. package/dist/ui/assets/slicc-version-BOvQ0meA.js +0 -1
  145. 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
  });