clay-server 5.5.0-beta.2 → 5.5.0-beta.4

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 (115) hide show
  1. package/lib/clay-product-control-input.js +2 -2
  2. package/lib/clay-product-control-tools.js +1 -1
  3. package/lib/clay-product-control.js +4 -3
  4. package/lib/daemon-project-access.js +10 -2
  5. package/lib/daemon-projects.js +16 -4
  6. package/lib/daemon-worktree-controls.js +171 -0
  7. package/lib/daemon.js +14 -63
  8. package/lib/personal-provider-install.js +85 -0
  9. package/lib/personal-provider-settings.js +94 -0
  10. package/lib/project-logs-service.js +2 -2
  11. package/lib/project-pair-task-control.js +1 -1
  12. package/lib/project-pending-message-queue.js +6 -2
  13. package/lib/project-product-control.js +1 -0
  14. package/lib/project-session-actions.js +46 -3
  15. package/lib/project-session-pair.js +2 -0
  16. package/lib/project-sessions.js +11 -3
  17. package/lib/project-user-message.js +5 -1
  18. package/lib/project-vendor-login.js +95 -32
  19. package/lib/project-worker-auth.js +71 -0
  20. package/lib/project-worker-conversation.js +11 -2
  21. package/lib/project.js +9 -0
  22. package/lib/public/app.js +22 -0
  23. package/lib/public/css/icon-strip.css +5 -0
  24. package/lib/public/css/overlays.css +18 -0
  25. package/lib/public/css/settings-shell.css +13 -0
  26. package/lib/public/css/settings-ui.css +9 -0
  27. package/lib/public/css/split-view-layout.css +16 -11
  28. package/lib/public/modules/agent-behavior-nav.js +1 -0
  29. package/lib/public/modules/agent-message-bubbles.js +33 -4
  30. package/lib/public/modules/app-messages.js +7 -1
  31. package/lib/public/modules/app-projects.js +3 -4
  32. package/lib/public/modules/clay-control-copy.js +1 -0
  33. package/lib/public/modules/clay-tool-presentation.js +1 -1
  34. package/lib/public/modules/generation-stop.js +4 -4
  35. package/lib/public/modules/pane-activation.js +2 -2
  36. package/lib/public/modules/pane-bridge.js +4 -2
  37. package/lib/public/modules/personal-provider-context.js +11 -0
  38. package/lib/public/modules/project-settings.js +1 -1
  39. package/lib/public/modules/settings-section-nav.js +58 -0
  40. package/lib/public/modules/settings-shell-registry.js +7 -4
  41. package/lib/public/modules/settings-shell.js +17 -6
  42. package/lib/public/modules/sidebar-projects.js +23 -9
  43. package/lib/public/modules/split-pane-force-stop.js +47 -0
  44. package/lib/public/modules/split-pane-header-state.js +11 -1
  45. package/lib/public/modules/split-pane-renderer.js +2 -2
  46. package/lib/public/modules/split-view-workers.js +32 -17
  47. package/lib/public/modules/stt-settings.js +21 -4
  48. package/lib/public/modules/user-settings-layout.js +22 -18
  49. package/lib/public/modules/user-settings-provider-install.js +42 -0
  50. package/lib/public/modules/user-settings-providers.js +102 -0
  51. package/lib/public/modules/user-settings-voice.js +50 -41
  52. package/lib/public/modules/vendor-login-browser.js +1 -1
  53. package/lib/public/modules/vendor-login.js +72 -12
  54. package/lib/public/modules/worker-activity-indicator.js +49 -0
  55. package/lib/public/modules/worker-message-previews.js +47 -11
  56. package/lib/public/modules/worker-stop-controls.js +36 -0
  57. package/lib/public/modules/worktree-controls.js +86 -0
  58. package/lib/public/pane-assets/{app-SEMVZ4AY.js → app-PV3SEOTX.js} +1 -1
  59. package/lib/public/pane-assets/{chunk-C6P7PICY.js → chunk-2G6DB3ES.js} +1 -1
  60. package/lib/public/pane-assets/{chunk-BNNPJJVG.js → chunk-4WYURTPH.js} +1 -1
  61. package/lib/public/pane-assets/{chunk-E4VM2IDB.js → chunk-53KRXJDL.js} +1 -1
  62. package/lib/public/pane-assets/{chunk-4YE4RU27.js → chunk-AMZ7P526.js} +1 -1
  63. package/lib/public/pane-assets/chunk-BK2NRZFM.js +1 -0
  64. package/lib/public/pane-assets/{chunk-5UBN6GR7.js → chunk-D3WR2TYZ.js} +1 -1
  65. package/lib/public/pane-assets/chunk-E7D5A27I.js +1 -0
  66. package/lib/public/pane-assets/{chunk-CQNPEH2M.js → chunk-FB5B2WYF.js} +1 -1
  67. package/lib/public/pane-assets/chunk-FDBSE7BE.js +174 -0
  68. package/lib/public/pane-assets/{chunk-FK3YLGAP.js → chunk-FHB76KH2.js} +1 -1
  69. package/lib/public/pane-assets/{chunk-YR5GH3GI.js → chunk-FNGO6432.js} +1 -1
  70. package/lib/public/pane-assets/chunk-HF7AK56Q.js +1 -0
  71. package/lib/public/pane-assets/chunk-ILVRGTDF.js +1 -0
  72. package/lib/public/pane-assets/{chunk-QWQB2YRF.js → chunk-L3SFMSLP.js} +1 -1
  73. package/lib/public/pane-assets/{chunk-QBCM7QEA.js → chunk-PAY3A4JS.js} +1 -1
  74. package/lib/public/pane-assets/chunk-QVHC324H.js +1 -0
  75. package/lib/public/pane-assets/chunk-SFANEWZA.js +1 -0
  76. package/lib/public/pane-assets/{chunk-M5CWIIIT.js → chunk-SGMEO3P7.js} +1 -1
  77. package/lib/public/pane-assets/{chunk-YVVT3CTV.js → chunk-TK446XFF.js} +1 -1
  78. package/lib/public/pane-assets/{chunk-U7EHYRJZ.js → chunk-TU3AHPSN.js} +1 -1
  79. package/lib/public/pane-assets/chunk-US5VELGB.js +1 -0
  80. package/lib/public/pane-assets/{chunk-K4PAN77B.js → chunk-UVTS6GUM.js} +1 -1
  81. package/lib/public/pane-assets/{chunk-XYZGVYWW.js → chunk-X45WI2U7.js} +1 -1
  82. package/lib/public/pane-assets/manifest.json +401 -393
  83. package/lib/public/pane-assets/style-563D4UN6.css +1 -0
  84. package/lib/sdk-bridge.js +40 -6
  85. package/lib/sdk-force-stop.js +62 -0
  86. package/lib/sdk-message-processor.js +2 -1
  87. package/lib/server-worktree-controls.js +34 -0
  88. package/lib/server.js +11 -1
  89. package/lib/session-force-stop-support.js +15 -0
  90. package/lib/sessions.js +6 -1
  91. package/lib/terminal-manager.js +1 -1
  92. package/lib/terminal.js +13 -1
  93. package/lib/vendor-login-browser-flow.js +1 -1
  94. package/lib/worker-activity.js +26 -0
  95. package/lib/worker-message-previews.js +12 -7
  96. package/lib/worktree-branch.js +57 -0
  97. package/lib/worktree-identity.js +39 -0
  98. package/lib/worktree-preferences.js +25 -0
  99. package/lib/worktree-ref-transaction.js +36 -0
  100. package/lib/yoke/adapters/antigravity.js +3 -0
  101. package/lib/yoke/force-termination.js +26 -0
  102. package/lib/yoke/interface.js +14 -0
  103. package/lib/yoke/process-force-termination.js +24 -0
  104. package/lib/yoke/provider-install-recipes.js +20 -0
  105. package/lib/yoke/vendor-registry.js +20 -1
  106. package/package.json +1 -1
  107. package/lib/public/pane-assets/chunk-6AGSOAOD.js +0 -1
  108. package/lib/public/pane-assets/chunk-AATAIAXL.js +0 -1
  109. package/lib/public/pane-assets/chunk-D3CE5FZL.js +0 -1
  110. package/lib/public/pane-assets/chunk-GKSLBGVE.js +0 -168
  111. package/lib/public/pane-assets/chunk-J5PTSKJ6.js +0 -1
  112. package/lib/public/pane-assets/chunk-QPBO6ID4.js +0 -1
  113. package/lib/public/pane-assets/chunk-RA6VUJTY.js +0 -1
  114. package/lib/public/pane-assets/chunk-XOZUM5ET.js +0 -1
  115. package/lib/public/pane-assets/style-DZX6JAMF.css +0 -1
@@ -0,0 +1,36 @@
1
+ // Fixed prepared Git ref transaction; validation runs while Git owns the ref locks.
2
+ var spawn = require('child_process').spawn;
3
+ var wrap = require('./os-users').wrapSpawnAsUser;
4
+ function remove(root, input, os, validate) {
5
+ return new Promise(function (resolve, reject) {
6
+ var env = Object.assign({}, process.env, { GIT_TERMINAL_PROMPT: '0' });
7
+ if (os && os.home) env.HOME = os.home;
8
+ if (os && os.user) { env.USER = os.user; env.LOGNAME = os.user; }
9
+ var options = { cwd: root, env: env, stdio: ['pipe', 'pipe', 'pipe'] };
10
+ if (os) { options.uid = os.uid; options.gid = os.gid; }
11
+ var wrapped = wrap('git', ['update-ref', '--stdin'], options);
12
+ var child = spawn(wrapped.command, wrapped.args, wrapped.options);
13
+ var output = '', detail = '', failure = null, prepared = false, committed = false;
14
+ var timer = setTimeout(function () { failure = new Error('Local branch transaction timed out; inspect the branch before recovery.'); child.kill('SIGTERM'); }, 15000);
15
+ child.on('error', function (error) { failure = error; });
16
+ child.stdin.on('error', function (error) { failure = failure || error; });
17
+ child.stderr.on('data', function (chunk) { detail = (detail + chunk).slice(-4096); });
18
+ child.stdout.on('data', function (chunk) {
19
+ output = (output + chunk).slice(-4096);
20
+ if (!prepared && output.indexOf('prepare: ok\n') >= 0) {
21
+ prepared = true;
22
+ if (failure) { child.stdin.end('abort\n'); return; }
23
+ try { validate(); child.stdin.end('commit\n'); }
24
+ catch (error) { failure = error; child.stdin.end('abort\n'); }
25
+ }
26
+ if (output.indexOf('commit: ok\n') >= 0) committed = true;
27
+ });
28
+ child.on('close', function (code) {
29
+ clearTimeout(timer);
30
+ if (failure || code !== 0 || !committed) reject(failure || new Error('Local branch transaction was not confirmed: ' + detail.trim()));
31
+ else resolve(true);
32
+ });
33
+ child.stdin.write(input);
34
+ });
35
+ }
36
+ module.exports = { remove: remove };
@@ -379,6 +379,9 @@ function createAntigravityQueryHandle(binaryPath, queryOpts, onFinished) {
379
379
  endEvents();
380
380
  },
381
381
  };
382
+ handle.forceStop = require('../process-force-termination').create(function () { return processHandle; }, function () { return processExited; }, function () {
383
+ inputEnded = true; messages = []; if (killTimer) clearTimeout(killTimer); endEvents();
384
+ }, queryOpts._forceTerminationOptions);
382
385
  removeAbort = bindAbort(queryOpts.abortController, function () { handle.abort(); });
383
386
  return handle;
384
387
  }
@@ -0,0 +1,26 @@
1
+ // A declaration and an actual exact-query method are both required.
2
+ var UNSUPPORTED = 'Force termination is not yet supported for this vendor';
3
+ function support(provider, handle) {
4
+ var declared = require('./provider-contract').resolve(provider).forceTermination === true;
5
+ if (!declared) return { supported: false, reason: UNSUPPORTED };
6
+ if (!handle || typeof handle.forceStop !== 'function') return { supported: false, reason: 'Force termination is unavailable for this session runtime' };
7
+ return { supported: true, scope: 'query-runtime', externalEffects: 'unconfirmed' };
8
+ }
9
+ function operation(provider, handle) {
10
+ var state = support(provider, handle);
11
+ if (!state.supported) throw new Error(state.reason);
12
+ var method = handle.forceStop;
13
+ return function () {
14
+ var timer, effect;
15
+ try { effect = method.call(handle); } catch (error) { effect = Promise.reject(error); }
16
+ return Promise.race([Promise.resolve(effect), new Promise(function (resolve) {
17
+ timer = setTimeout(function () { resolve(null); }, 6000);
18
+ })]).then(function (result) {
19
+ if (!result || result.status !== 'terminated' || result.scope !== 'query-runtime') {
20
+ return { status: 'unconfirmed', scope: 'query-runtime', externalEffects: 'unconfirmed' };
21
+ }
22
+ return { status: 'terminated', scope: 'query-runtime', externalEffects: 'unconfirmed' };
23
+ }).finally(function () { clearTimeout(timer); });
24
+ };
25
+ }
26
+ module.exports = { support: support, operation: operation, UNSUPPORTED: UNSUPPORTED };
@@ -78,6 +78,20 @@ var INITIALIZE_TIMEOUT_MS = 90000;
78
78
  * .createToolServer(def): ToolServer (opaque)
79
79
  * .createQuery(opts): QueryHandle
80
80
  *
81
+ * Force termination (independent of ordinary abort/close):
82
+ * providerContract.forceTermination === true (or registry declaration), AND
83
+ * QueryHandle.forceStop(): Promise<{status: "terminated"|"unconfirmed",
84
+ * scope: "query-runtime", externalEffects: "unconfirmed"}>.
85
+ * Missing/unknown declarations or missing methods mean unsupported. Never infer
86
+ * support from abort, close, stopAndWait, kill delivery or iterator completion.
87
+ * forceStop must synchronously fence new query input/startup, terminate only the
88
+ * runtime owned by this query, preserve sibling/shared provider processes, and
89
+ * settle within a bounded deadline. "terminated" requires observed exact runtime
90
+ * exit (or proof it never started/already exited); acknowledgements are not proof.
91
+ * Detached commands, descendants and external requests remain unconfirmed.
92
+ * Host authorization, all-target preflight, generation fencing, queue pause and
93
+ * explicit resumption still apply. No uncertain work may replay automatically.
94
+ *
81
95
  * Optional query orchestration contract (.queryContract):
82
96
  * toolTransport: "sdk-mcp" | "dynamic" | "stdio-mcp" (absent: unsupported)
83
97
  * catalogLifetime: "query" | "conversation"
@@ -0,0 +1,24 @@
1
+ // Terminate only the child owned by this query; never a shared server or PID scan.
2
+ function create(getProcess, hasExited, stopInput, options) {
3
+ var pending = null;
4
+ return function forceStop() {
5
+ if (pending) return pending;
6
+ stopInput();
7
+ pending = new Promise(function (resolve) {
8
+ var child = getProcess(), timer;
9
+ function finish(terminated) {
10
+ clearTimeout(timer);
11
+ if (child) child.removeListener('exit', exited);
12
+ resolve({ status: terminated ? 'terminated' : 'unconfirmed', scope: 'query-runtime', externalEffects: 'unconfirmed' });
13
+ }
14
+ function exited() { finish(true); }
15
+ if (!child || hasExited()) { finish(true); return; }
16
+ child.once('exit', exited);
17
+ timer = setTimeout(function () { finish(false); }, options && options.timeoutMs || 5000);
18
+ try { if (child.kill('SIGKILL') === false) finish(false); }
19
+ catch (error) { finish(false); }
20
+ });
21
+ return pending;
22
+ };
23
+ }
24
+ module.exports = { create: create };
@@ -0,0 +1,20 @@
1
+ // Registry-owned installation contracts. Sources verified 2026-10-23.
2
+ // No caller-supplied executable, package, URL, flags or shell input is accepted.
3
+ var recipes = {
4
+ claude: Object.freeze({ revision: 'claude-native-1', source: 'https://code.claude.com/docs/en/setup',
5
+ command: 'curl -fsSL https://claude.ai/install.sh | bash',
6
+ effects: 'Downloads and runs the official native installer in your runtime account. Writes ~/.local/bin/claude and ~/.local/share/claude. Native installations auto-update.' }),
7
+ codex: Object.freeze({ revision: 'codex-npm-user-1', source: 'https://developers.openai.com/cookbook/examples/codex/using_goals_in_codex',
8
+ command: 'npm install --global --prefix "$HOME/.local" --cache "$HOME/.cache/clay-provider-npm" --userconfig /dev/null --globalconfig /dev/null --registry https://registry.npmjs.org @openai/codex@latest',
9
+ effects: 'Downloads the official npm package and runs its installation scripts as your runtime account. Requires Node.js and npm on the runtime PATH. Writes ~/.local and ~/.cache/clay-provider-npm; does not edit shell profiles. ~/.local/bin must be on the runtime PATH.',
10
+ configurationSource: 'https://docs.npmjs.com/cli/v11/using-npm/config/' })
11
+ };
12
+ function eligible(recipe, identity) {
13
+ var os = require('os');
14
+ if (!recipe || Object.keys(recipes).every(function (id) { return recipes[id] !== recipe; })) return 'No reviewed installation recipe is registered for this provider.';
15
+ if (['linux','darwin'].indexOf(process.platform) < 0 || ['x64','arm64'].indexOf(process.arch) < 0) return 'Reviewed installation supports only macOS or Linux on x64 or ARM64.';
16
+ if (process.platform === 'darwin' && Number(os.release().split('.')[0]) < 22) return 'Reviewed installation requires macOS 13 or later.';
17
+ if (!identity || !Number.isInteger(identity.uid) || identity.uid <= 0 || !Number.isInteger(identity.gid) || !identity.user || typeof identity.home !== 'string' || identity.home[0] !== '/' || identity.home === '/' || /[\r\n\0]/.test(identity.home)) return 'A non-root runtime OS account with an absolute HOME is required. Ask the server operator to complete setup.';
18
+ return '';
19
+ }
20
+ module.exports = { claude: recipes.claude, codex: recipes.codex, eligible: eligible };
@@ -10,6 +10,8 @@ var EFFORT_ORDER = ["minimal", "low", "medium", "high", "xhigh", "max", "ultra"]
10
10
  // sessionBoundTools gates whether per-session MCP tool mounting reaches a vendor's process.
11
11
  var VENDOR_REGISTRY = {
12
12
  claude: {
13
+ setupUrl: "https://code.claude.com/docs/en/setup",
14
+ installRecipe: require("./provider-install-recipes").claude,
13
15
  readSessionHistory: require("./cli-sessions").readCliSessionHistory,
14
16
  terminalResumeCommand: "claude --resume",
15
17
  planPathSegments: [".claude/plans/"],
@@ -47,6 +49,8 @@ var VENDOR_REGISTRY = {
47
49
  rateLimitTracking: true,
48
50
  },
49
51
  codex: {
52
+ setupUrl: "https://learn.chatgpt.com/docs/codex/cli",
53
+ installRecipe: require("./provider-install-recipes").codex,
50
54
  credentialDirectories: [".codex"],
51
55
  preferredModelFamilies: ["astra", "sol", "gpt", "o"],
52
56
  classifyError: require("./providers/codex-errors").classify,
@@ -78,6 +82,7 @@ var VENDOR_REGISTRY = {
78
82
  rateLimitTracking: true,
79
83
  },
80
84
  muse: {
85
+ setupUrl: "https://dev.meta.ai/docs/overview",
81
86
  displayName: "Muse Code",
82
87
  loginCommand: "muse",
83
88
  binaryName: "muse",
@@ -96,6 +101,8 @@ var VENDOR_REGISTRY = {
96
101
  configuration: { auto: true, permissionModes: [{ value: "default", label: "Ask" }] },
97
102
  },
98
103
  antigravity: {
104
+ setupUrl: "https://www.antigravity.google/docs/getting-started?tab=cli",
105
+ forceTermination: true,
99
106
  resolveExecutable: require("./providers/antigravity-executable").resolve,
100
107
  mapQueryOptions: require("./options/antigravity").map,
101
108
  displayName: "Antigravity CLI",
@@ -110,6 +117,7 @@ var VENDOR_REGISTRY = {
110
117
  rateLimitTracking: false,
111
118
  },
112
119
  opencode: {
120
+ setupUrl: "https://opencode.ai/docs/",
113
121
  resolveExecutable: require("./discovery").acpResolver("opencode"),
114
122
  mapQueryOptions: require("./options/acp").map,
115
123
  displayName: "OpenCode",
@@ -124,6 +132,7 @@ var VENDOR_REGISTRY = {
124
132
  rateLimitTracking: false,
125
133
  },
126
134
  kimi: {
135
+ setupUrl: "https://www.kimi.com/code/docs/en/kimi-code-cli/guides/getting-started.html",
127
136
  resolveExecutable: require("./discovery").acpResolver("kimi"),
128
137
  mapQueryOptions: require("./options/acp").map,
129
138
  displayName: "Kimi Code",
@@ -138,6 +147,7 @@ var VENDOR_REGISTRY = {
138
147
  rateLimitTracking: false,
139
148
  },
140
149
  grok: {
150
+ setupUrl: "https://docs.x.ai/build/overview",
141
151
  resolveExecutable: require("./discovery").acpResolver("grok"),
142
152
  mapQueryOptions: require("./options/acp").map,
143
153
  displayName: "Grok Build",
@@ -152,6 +162,7 @@ var VENDOR_REGISTRY = {
152
162
  rateLimitTracking: false,
153
163
  },
154
164
  copilot: {
165
+ setupUrl: "https://docs.github.com/en/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli",
155
166
  resolveExecutable: require("./discovery").acpResolver("copilot"),
156
167
  mapQueryOptions: require("./options/acp").map,
157
168
  displayName: "GitHub Copilot CLI",
@@ -166,6 +177,7 @@ var VENDOR_REGISTRY = {
166
177
  rateLimitTracking: false,
167
178
  },
168
179
  qwen: {
180
+ setupUrl: "https://qwenlm.github.io/qwen-code-docs/en/users/quickstart/",
169
181
  resolveExecutable: require("./discovery").acpResolver("qwen"),
170
182
  mapQueryOptions: require("./options/acp").map,
171
183
  displayName: "Qwen Code",
@@ -180,6 +192,7 @@ var VENDOR_REGISTRY = {
180
192
  rateLimitTracking: false,
181
193
  },
182
194
  junie: {
195
+ setupUrl: "https://junie.jetbrains.com/docs/junie-cli.html",
183
196
  resolveExecutable: require("./discovery").acpResolver("junie"),
184
197
  mapQueryOptions: require("./options/acp").map,
185
198
  displayName: "Junie CLI",
@@ -194,6 +207,7 @@ var VENDOR_REGISTRY = {
194
207
  rateLimitTracking: false,
195
208
  },
196
209
  kiro: {
210
+ setupUrl: "https://kiro.dev/docs/cli/",
197
211
  normalizeContext: require("./usage").tokenContext,
198
212
  resolveExecutable: require("./discovery").bundledResolver(function() { return require("./kiro-acp-server").findKiroPath(); }, "kiro-cli"),
199
213
  mapQueryOptions: require("./options/kiro").map,
@@ -210,6 +224,11 @@ var VENDOR_REGISTRY = {
210
224
  },
211
225
  };
212
226
 
227
+ // No other adapter currently confirms exact-query hard termination.
228
+ Object.keys(VENDOR_REGISTRY).forEach(function (vendor) {
229
+ if (VENDOR_REGISTRY[vendor].forceTermination !== true) VENDOR_REGISTRY[vendor].forceTermination = false;
230
+ });
231
+
213
232
  function getVendorInfo(vendor) {
214
233
  return VENDOR_REGISTRY[vendor] || null;
215
234
  }
@@ -243,7 +262,7 @@ function publicInfo() {
243
262
  var result = {};
244
263
  Object.keys(VENDOR_REGISTRY).forEach(function(vendor) {
245
264
  var info = VENDOR_REGISTRY[vendor], entry = {};
246
- ["displayName", "terminalResumeCommand", "planPathSegments", "loginCommand", "binaryName", "avatar", "sessionModes", "effortLevels", "osUserIsolation", "sessionBoundTools", "usageDashboard", "rateLimitTracking", "rateLimitScheduling", "acceptsUnstampedQuota", "configuration"].forEach(function(key) {
265
+ ["forceTermination", "displayName", "terminalResumeCommand", "planPathSegments", "loginCommand", "binaryName", "avatar", "sessionModes", "effortLevels", "osUserIsolation", "sessionBoundTools", "usageDashboard", "rateLimitTracking", "rateLimitScheduling", "acceptsUnstampedQuota", "configuration"].forEach(function(key) {
247
266
  if (info[key] !== undefined) entry[key] = info[key];
248
267
  });
249
268
  entry.browserLoginSupported = typeof info.browserLoginCommand === "string" && Array.isArray(info.oauthHosts) && info.oauthHosts.length > 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clay-server",
3
- "version": "5.5.0-beta.2",
3
+ "version": "5.5.0-beta.4",
4
4
  "description": "Self-hosted team workspace for Claude Code and Codex. Multi-user, browser-based, with persistent AI mates.",
5
5
  "bin": {
6
6
  "clay-server": "./bin/cli.js"
@@ -1 +0,0 @@
1
- import{l as a,m as b,n as c,o as d}from"./chunk-GKSLBGVE.js";import"./chunk-4YE4RU27.js";import"./chunk-JIV7O5GN.js";import"./chunk-YVVT3CTV.js";import"./chunk-BNNPJJVG.js";import"./chunk-K4PAN77B.js";import"./chunk-R7QVVFUG.js";import"./chunk-5UBN6GR7.js";import"./chunk-VZ2OKDAO.js";export{a as closeLinear,c as handleLinearResult,d as initLinearPanel,b as openLinear};
@@ -1 +0,0 @@
1
- import{A as c,y as a,z as b}from"./chunk-GKSLBGVE.js";import"./chunk-4YE4RU27.js";import"./chunk-JIV7O5GN.js";import"./chunk-YVVT3CTV.js";import"./chunk-BNNPJJVG.js";import"./chunk-K4PAN77B.js";import"./chunk-R7QVVFUG.js";import"./chunk-5UBN6GR7.js";import"./chunk-VZ2OKDAO.js";export{a as closeLoginBrowser,c as handleLoginBrowserMessage,b as openLoginBrowser};
@@ -1 +0,0 @@
1
- import{hc as a,ic as b,jc as c,kc as d}from"./chunk-GKSLBGVE.js";import"./chunk-4YE4RU27.js";import"./chunk-JIV7O5GN.js";import"./chunk-YVVT3CTV.js";import"./chunk-BNNPJJVG.js";import"./chunk-K4PAN77B.js";import"./chunk-R7QVVFUG.js";import"./chunk-5UBN6GR7.js";import"./chunk-VZ2OKDAO.js";export{c as closeDebatesWorkbench,a as handleDebatesWorkbenchState,d as initDebatesWorkbench,b as openDebatesWorkbench};