@surething/cockpit 1.0.260 → 1.0.261
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/.next-prod/BUILD_ID +1 -1
- package/.next-prod/app-path-routes-manifest.json +4 -4
- package/.next-prod/build-manifest.json +2 -2
- package/.next-prod/cockpit-build.json +1 -1
- package/.next-prod/prerender-manifest.json +3 -3
- package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
- package/.next-prod/server/app/_global-error.html +1 -1
- package/.next-prod/server/app/_global-error.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
- package/.next-prod/server/app/_not-found.html +1 -1
- package/.next-prod/server/app/_not-found.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js +1 -1
- package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/glm/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/chat/stop/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/deepseek/balance/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/deepseek/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/glm/credentials/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/glm/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/glm/usage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/kimi/credentials/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/kimi/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/kimi/usage/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/prompts/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js +1 -1
- package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js +1 -1
- package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
- package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
- package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
- package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -1
- package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
- package/.next-prod/server/app/m/page.js.nft.json +1 -1
- package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next-prod/server/app/page.js.nft.json +1 -1
- package/.next-prod/server/app/project/page.js.nft.json +1 -1
- package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
- package/.next-prod/server/app-paths-manifest.json +4 -4
- package/.next-prod/server/chunks/516.js +1 -0
- package/.next-prod/server/chunks/9352.js +2 -2
- package/.next-prod/server/middleware-build-manifest.js +1 -1
- package/.next-prod/server/pages/404.html +1 -1
- package/.next-prod/server/pages/500.html +1 -1
- package/.next-prod/server/server-reference-manifest.json +1 -1
- package/.next-prod/trace +14 -14
- package/.next-prod/trace-build +1 -1
- package/apps/devkit/app.jsx +20 -18
- package/dist/scheduledTasks.mjs +37 -3
- package/package.json +1 -1
- package/.next-prod/server/chunks/151.js +0 -1
- /package/.next-prod/static/{4Jgc-wu2w_CC8iS5G1QZf → pgteRwI6FQcp683smeSNO}/_buildManifest.js +0 -0
- /package/.next-prod/static/{4Jgc-wu2w_CC8iS5G1QZf → pgteRwI6FQcp683smeSNO}/_ssgManifest.js +0 -0
package/.next-prod/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":12890187,"timestamp":319517246,"id":14,"parentId":1,"tags":{},"startTime":1786594549919,"traceId":"e9d5d13331642872"},{"name":"run-typescript","duration":3785267,"timestamp":332410595,"id":1453,"parentId":1,"tags":{},"startTime":1786594562812,"traceId":"e9d5d13331642872"},{"name":"static-check","duration":988895,"timestamp":336224662,"id":1456,"parentId":1,"tags":{},"startTime":1786594566626,"traceId":"e9d5d13331642872"},{"name":"static-generation","duration":4584220,"timestamp":337298104,"id":1760,"parentId":1,"tags":{},"startTime":1786594567700,"traceId":"e9d5d13331642872"},{"name":"collect-build-traces","duration":17178619,"timestamp":337214048,"id":1757,"parentId":1,"tags":{},"startTime":1786594567615,"traceId":"e9d5d13331642872"},{"name":"telemetry-flush","duration":36,"timestamp":354395590,"id":1769,"parentId":1,"tags":{},"startTime":1786594584797,"traceId":"e9d5d13331642872"},{"name":"next-build","duration":35010061,"timestamp":319385573,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1786594549787,"traceId":"e9d5d13331642872"}]
|
package/apps/devkit/app.jsx
CHANGED
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
* buy a ~50ms process spawn per keystroke and a "is that binary installed?"
|
|
7
7
|
* failure mode. MD5 comes from ./md5.js, SHA from the browser's crypto.subtle.
|
|
8
8
|
*/
|
|
9
|
+
// React/ReactDOM come from the /html-lib script tags in index.html; `md5` is
|
|
10
|
+
// the global exported by the sibling ./md5.js script tag.
|
|
11
|
+
/* global React, ReactDOM, md5 */
|
|
9
12
|
const { useState, useEffect, useMemo, useCallback, useRef, useContext, createContext } = React;
|
|
10
13
|
|
|
11
14
|
/* ------------------------------------------------------------------ utils */
|
|
@@ -243,14 +246,14 @@ function TextCodecPanel({ state, patch, kind }) {
|
|
|
243
246
|
}, [debounced, state.mode, kind]);
|
|
244
247
|
|
|
245
248
|
const controls = (
|
|
246
|
-
|
|
249
|
+
<>
|
|
247
250
|
<Segmented value={state.mode} onChange={(mode) => patch({ mode })}
|
|
248
251
|
options={[{ value: 'encode', label: 'Encode' }, { value: 'decode', label: 'Decode' }]} />
|
|
249
252
|
<button className="btn" onClick={() => patch({ text: '' })}>Clear</button>
|
|
250
253
|
<span className="bar-note">
|
|
251
254
|
{kind === 'base64' ? 'UTF-8 safe — handles non-ASCII text.' : 'encodeURIComponent / decodeURIComponent.'}
|
|
252
255
|
</span>
|
|
253
|
-
|
|
256
|
+
</>
|
|
254
257
|
);
|
|
255
258
|
|
|
256
259
|
return (
|
|
@@ -281,12 +284,12 @@ function JsonPanel({ state, patch }) {
|
|
|
281
284
|
}, [debounced, state.mode]);
|
|
282
285
|
|
|
283
286
|
const controls = (
|
|
284
|
-
|
|
287
|
+
<>
|
|
285
288
|
<Segmented value={state.mode} onChange={(mode) => patch({ mode })}
|
|
286
289
|
options={[{ value: 'pretty', label: 'Pretty' }, { value: 'minify', label: 'Minify' }]} />
|
|
287
290
|
<button className="btn" onClick={() => patch({ text: '' })}>Clear</button>
|
|
288
291
|
<span className="bar-note">Parses as you type — the error message doubles as validation.</span>
|
|
289
|
-
|
|
292
|
+
</>
|
|
290
293
|
);
|
|
291
294
|
|
|
292
295
|
return (
|
|
@@ -339,14 +342,14 @@ function HashPanel({ state, patch }) {
|
|
|
339
342
|
}, [debounced]);
|
|
340
343
|
|
|
341
344
|
const controls = (
|
|
342
|
-
|
|
345
|
+
<>
|
|
343
346
|
<button className="btn" onClick={() => patch({ text: '' })}>Clear</button>
|
|
344
347
|
<span className="bar-note">
|
|
345
348
|
{SUBTLE
|
|
346
349
|
? 'MD5 computed locally; SHA via the browser\'s WebCrypto.'
|
|
347
350
|
: 'SHA needs a secure context — open DevKit over localhost to enable it.'}
|
|
348
351
|
</span>
|
|
349
|
-
|
|
352
|
+
</>
|
|
350
353
|
);
|
|
351
354
|
|
|
352
355
|
return (
|
|
@@ -450,7 +453,7 @@ function JwtPanel({ state, patch }) {
|
|
|
450
453
|
)}
|
|
451
454
|
|
|
452
455
|
{decoded && decoded.header && (
|
|
453
|
-
|
|
456
|
+
<>
|
|
454
457
|
<div className="section">
|
|
455
458
|
<div className="section-hd">
|
|
456
459
|
<span className="section-title">Header</span>
|
|
@@ -458,7 +461,7 @@ function JwtPanel({ state, patch }) {
|
|
|
458
461
|
</div>
|
|
459
462
|
<pre className="mono-block">{headerJson}</pre>
|
|
460
463
|
{algNone && (
|
|
461
|
-
<span className="kv-v error">alg is
|
|
464
|
+
<span className="kv-v error">alg is "none" — this token is unsigned.</span>
|
|
462
465
|
)}
|
|
463
466
|
</div>
|
|
464
467
|
|
|
@@ -488,7 +491,7 @@ function JwtPanel({ state, patch }) {
|
|
|
488
491
|
<span className="section-title">Signature</span>
|
|
489
492
|
<pre className="mono-block muted">{decoded.signature || '(empty)'}</pre>
|
|
490
493
|
</div>
|
|
491
|
-
|
|
494
|
+
</>
|
|
492
495
|
)}
|
|
493
496
|
</div>
|
|
494
497
|
</div>
|
|
@@ -546,12 +549,12 @@ function TimestampPanel({ state, patch }) {
|
|
|
546
549
|
<div className="kv"><span className="kv-v error">{fromEpoch.error}</span></div>
|
|
547
550
|
)}
|
|
548
551
|
{fromEpoch && fromEpoch.date && (
|
|
549
|
-
|
|
552
|
+
<>
|
|
550
553
|
<div className="kv"><span className="kv-k">Detected</span><span className="kv-v muted">{fromEpoch.unit}</span></div>
|
|
551
554
|
<div className="kv"><span className="kv-k">Local</span><span className="kv-v">{formatLocal(fromEpoch.date)}</span></div>
|
|
552
555
|
<div className="kv"><span className="kv-k">UTC</span><span className="kv-v">{formatUTC(fromEpoch.date)}</span></div>
|
|
553
556
|
<div className="kv"><span className="kv-k">ISO</span><span className="kv-v">{fromEpoch.date.toISOString()}</span></div>
|
|
554
|
-
|
|
557
|
+
</>
|
|
555
558
|
)}
|
|
556
559
|
</div>
|
|
557
560
|
</div>
|
|
@@ -570,7 +573,7 @@ function TimestampPanel({ state, patch }) {
|
|
|
570
573
|
<div className="kv"><span className="kv-v error">{fromDate.error}</span></div>
|
|
571
574
|
)}
|
|
572
575
|
{fromDate && fromDate.date && (
|
|
573
|
-
|
|
576
|
+
<>
|
|
574
577
|
<div className="kv">
|
|
575
578
|
<span className="kv-k">Seconds</span>
|
|
576
579
|
<span className="kv-v">{Math.floor(fromDate.date.getTime() / 1000)}</span>
|
|
@@ -582,7 +585,7 @@ function TimestampPanel({ state, patch }) {
|
|
|
582
585
|
<CopyButton text={String(fromDate.date.getTime())} label="Milliseconds" />
|
|
583
586
|
</div>
|
|
584
587
|
<div className="kv"><span className="kv-k">ISO</span><span className="kv-v">{fromDate.date.toISOString()}</span></div>
|
|
585
|
-
|
|
588
|
+
</>
|
|
586
589
|
)}
|
|
587
590
|
</div>
|
|
588
591
|
</div>
|
|
@@ -603,7 +606,6 @@ function UuidPanel({ state, patch }) {
|
|
|
603
606
|
listRef.current = state.list;
|
|
604
607
|
useEffect(() => {
|
|
605
608
|
if (listRef.current.length === 0) generate(state.count);
|
|
606
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
607
609
|
}, []);
|
|
608
610
|
|
|
609
611
|
const shown = useMemo(() => state.list.map((u) => {
|
|
@@ -680,13 +682,13 @@ function App() {
|
|
|
680
682
|
const [state, setState] = useState(INITIAL);
|
|
681
683
|
const [toastMsg, setToastMsg] = useState(null);
|
|
682
684
|
|
|
683
|
-
const
|
|
685
|
+
const toastTimerRef = useRef(null);
|
|
684
686
|
const toast = useCallback((message) => {
|
|
685
687
|
setToastMsg(message);
|
|
686
|
-
clearTimeout(
|
|
687
|
-
|
|
688
|
+
clearTimeout(toastTimerRef.current);
|
|
689
|
+
toastTimerRef.current = setTimeout(() => setToastMsg(null), 1600);
|
|
688
690
|
}, []);
|
|
689
|
-
useEffect(() => () => clearTimeout(
|
|
691
|
+
useEffect(() => () => clearTimeout(toastTimerRef.current), []);
|
|
690
692
|
|
|
691
693
|
const patchers = useMemo(() => {
|
|
692
694
|
const out = {};
|
package/dist/scheduledTasks.mjs
CHANGED
|
@@ -17478,6 +17478,8 @@ var CODEX_IMAGE_ONLY_TEXT = "[Image]";
|
|
|
17478
17478
|
var CODEX_TOOL_NAMES = {
|
|
17479
17479
|
bash: "Bash",
|
|
17480
17480
|
applyPatch: "ApplyPatch",
|
|
17481
|
+
/** `view_image` → claude's Read: it opens a file, and Read is in READ_ONLY_TOOLS. */
|
|
17482
|
+
read: "Read",
|
|
17481
17483
|
/** `spawn_agent` → claude's Task, so one bubble == one sub-agent. */
|
|
17482
17484
|
task: "Task",
|
|
17483
17485
|
/** `update_plan` / live `todo_list` → the checklist MessageBubble already renders. */
|
|
@@ -17488,6 +17490,7 @@ var CODEX_TOOL_NAMES = {
|
|
|
17488
17490
|
var CODEX_MCP_NAMESPACE_PREFIX = "mcp__";
|
|
17489
17491
|
var codexMcpToolName = (server, tool2) => `${CODEX_MCP_NAMESPACE_PREFIX}${server}__${tool2}`;
|
|
17490
17492
|
var CODEX_SPAWN_FN_NAME = "spawn_agent";
|
|
17493
|
+
var CODEX_SUB_AGENT_ACTIVITY_TYPE = "sub_agent_activity";
|
|
17491
17494
|
var CODEX_PATCH_FN_NAME = "apply_patch";
|
|
17492
17495
|
var CODEX_EXEC_SCRIPT_FN_NAME = "exec";
|
|
17493
17496
|
function codexTodoInput(items) {
|
|
@@ -17596,15 +17599,37 @@ function parseCodexExecScript(script) {
|
|
|
17596
17599
|
}
|
|
17597
17600
|
var CODEX_AGENT_DONE = /* @__PURE__ */ new Set(["completed", "errored", "interrupted", "not_found", "failed"]);
|
|
17598
17601
|
function parseCodexSpawnInput(args, extra) {
|
|
17599
|
-
const
|
|
17600
|
-
const
|
|
17602
|
+
const message = typeof args.message === "string" ? args.message : "";
|
|
17603
|
+
const encrypted = isCodexEncryptedPayload(message);
|
|
17604
|
+
const prompt = encrypted ? "" : message;
|
|
17605
|
+
const agentType = typeof args.agent_type === "string" ? args.agent_type : typeof args.task_name === "string" ? codexAgentPathName(args.task_name) : void 0;
|
|
17601
17606
|
return {
|
|
17602
17607
|
...agentType ? { subagent_type: agentType } : {},
|
|
17603
17608
|
description: codexSpawnDescription(extra?.nickname, agentType, prompt),
|
|
17604
|
-
prompt,
|
|
17609
|
+
...encrypted ? { message_encrypted: true } : { prompt },
|
|
17605
17610
|
...extra?.agentId ? { agent_id: extra.agentId } : {}
|
|
17606
17611
|
};
|
|
17607
17612
|
}
|
|
17613
|
+
var CODEX_FERNET_TOKEN_RE = /^gAAAAA[A-Za-z0-9_-]{32,}={0,2}$/;
|
|
17614
|
+
function isCodexEncryptedPayload(text) {
|
|
17615
|
+
return CODEX_FERNET_TOKEN_RE.test(text.trim());
|
|
17616
|
+
}
|
|
17617
|
+
function codexAgentPathName(agentPath) {
|
|
17618
|
+
const segments = agentPath.split("/").filter(Boolean);
|
|
17619
|
+
return segments[segments.length - 1] || agentPath;
|
|
17620
|
+
}
|
|
17621
|
+
function parseCodexSubAgentActivity(payload) {
|
|
17622
|
+
if (!payload || payload.type !== CODEX_SUB_AGENT_ACTIVITY_TYPE) return null;
|
|
17623
|
+
const { event_id: callId, agent_thread_id: agentThreadId } = payload;
|
|
17624
|
+
if (typeof callId !== "string" || !callId) return null;
|
|
17625
|
+
if (typeof agentThreadId !== "string" || !agentThreadId) return null;
|
|
17626
|
+
return {
|
|
17627
|
+
callId,
|
|
17628
|
+
agentThreadId,
|
|
17629
|
+
...typeof payload.agent_path === "string" ? { agentPath: payload.agent_path } : {},
|
|
17630
|
+
...typeof payload.kind === "string" ? { kind: payload.kind } : {}
|
|
17631
|
+
};
|
|
17632
|
+
}
|
|
17608
17633
|
function codexSpawnDescription(nickname, agentType, prompt) {
|
|
17609
17634
|
if (nickname) return agentType ? `${nickname} (${agentType})` : nickname;
|
|
17610
17635
|
const firstLine = prompt.split("\n", 1)[0]?.trim() || "";
|
|
@@ -17714,6 +17739,15 @@ function parseCallLines(text, exec2, patch, spawns, mcps) {
|
|
|
17714
17739
|
target.nickname = parsed.nickname;
|
|
17715
17740
|
}
|
|
17716
17741
|
}
|
|
17742
|
+
} else {
|
|
17743
|
+
const activity = parseCodexSubAgentActivity(p);
|
|
17744
|
+
if (activity) {
|
|
17745
|
+
const target = spawns.find((s) => s.callId === activity.callId && !s.agentId);
|
|
17746
|
+
if (target) {
|
|
17747
|
+
target.agentId = activity.agentThreadId;
|
|
17748
|
+
if (activity.agentPath) target.agentPath = activity.agentPath;
|
|
17749
|
+
}
|
|
17750
|
+
}
|
|
17717
17751
|
}
|
|
17718
17752
|
}
|
|
17719
17753
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@surething/cockpit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.261",
|
|
4
4
|
"description": "The open-source Claude Code GUI — an IDE-like workbench for parallel AI coding. Drive Claude (default), Codex, DeepSeek, Kimi, or local Ollama in tabs. Terminal, browser & DB bubbles, code review. Self-host on a shared dev box — a seat for every teammate. Local-first, MIT.",
|
|
5
5
|
"author": "Robert",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=151,exports.ids=[151],exports.modules={26479:(a,b,c)=>{c.d(b,{CR:()=>h,my:()=>i,os:()=>g});var d=c(29021),e=c(33873),f=c(7939);function g(a,b){let c=(0,f.Kk)(a,b);if(d.existsSync(c))return{sessionPath:c,engine:"claude"};let e=(0,f.Xi)(a,b);if(d.existsSync(e))return{sessionPath:e,engine:"deepseek"};let g=(0,f.n2)(a,b);if(d.existsSync(g))return{sessionPath:g,engine:"kimi"};let h=(0,f.Rk)(a,b);if(d.existsSync(h))return{sessionPath:h,engine:"glm"};let i=(0,f.eg)(b);if(i)return{sessionPath:i,engine:"codex"};let j=(0,f.yw)(a,b);return d.existsSync(j)?{sessionPath:j,engine:"ollama"}:null}function h(a){return!!a.engine}function i(a,b,c){switch(a.engine){case"claude":return(0,f.Kk)(b,c);case"deepseek":return(0,f.Xi)(b,c);case"kimi":return(0,f.n2)(b,c);case"glm":return(0,f.Rk)(b,c);case"ollama":return(0,f.yw)(b,c);case"codex":{let a=new Date,b=a=>String(a).padStart(2,"0"),d=String(a.getFullYear()),g=b(a.getMonth()+1),h=b(a.getDate()),i=`${d}-${g}-${h}T${b(a.getHours())}-${b(a.getMinutes())}-${b(a.getSeconds())}`;return(0,e.join)(f.yk,d,g,h,`rollout-${i}-${c}.jsonl`)}default:return null}}},40516:(a,b,c)=>{c.d(b,{$H:()=>h,BZ:()=>B,Bn:()=>m,C4:()=>e,Dn:()=>g,Hq:()=>E,L8:()=>K,RA:()=>d,TB:()=>t,U6:()=>r,Uk:()=>n,VW:()=>w,Y8:()=>o,YU:()=>s,dr:()=>G,g$:()=>j,iN:()=>x,jB:()=>i,nE:()=>F,nq:()=>C,o4:()=>A,p7:()=>D,q4:()=>y,qW:()=>p,uz:()=>q,wL:()=>f,yM:()=>l});let d="[Image]",e={bash:"Bash",applyPatch:"ApplyPatch",task:"Task",todo:"TodoWrite",webSearch:"WebSearch",webFetch:"WebFetch"},f="mcp__",g=(a,b)=>`${f}${a}__${b}`,h="spawn_agent",i="wait_agent",j=new Set([h,i,"close_agent","send_input","resume_agent"]),k="update_plan",l="apply_patch",m="exec",n=new Set([l,m]);function o(a,b){return b?.startsWith(f)?`${b}__${a}`:"shell_command"===a||"exec_command"===a?e.bash:"apply_patch"===a?e.applyPatch:a===h?e.task:a===k?e.todo:a}function p(a){return{todos:(a??[]).flatMap(a=>"string"==typeof a?.text?[{content:a.text,status:a.completed?"completed":"pending"}]:[])}}function q(a){let b=a.filter(a=>"completed"===a.status).length;return`${b}/${a.length} completed`}function r(a,b){if(b?.type==="open_page"&&b.url)return{name:e.webFetch,input:{url:b.url},result:b.url};let c=b?.query||a||"",d=b?.queries?.length?b.queries:c?[c]:[];return{name:e.webSearch,input:{query:c},result:d.join("\n")}}function s(a){return a.error?.message?a.error.message:null===a.result||void 0===a.result?"":"string"==typeof a.result?a.result:JSON.stringify(a.result,null,2)}function t(a){let b,c=[],d=/^\*\*\* (Add|Update|Delete) File: (.+)$/gm;for(;b=d.exec(a);)c.push({path:b[2].trim(),kind:b[1].toLowerCase()});return{changes:c}}let u=/"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`/g,v={n:"\n",r:"\r",t:" ",b:"\b",f:"\f",v:"\v",0:"\0"};function w(a){let b=function(a){let b;for(u.lastIndex=0;b=u.exec(a);){let a=function(a){if(a.startsWith('"'))try{return JSON.parse(a)}catch{}return a.slice(1,-1).replace(/\\(u\{[0-9a-fA-F]+\}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2}|[\s\S])/g,(a,b)=>b.startsWith("u{")?String.fromCodePoint(parseInt(b.slice(2,-1),16)):b.startsWith("u")||b.startsWith("x")?String.fromCharCode(parseInt(b.slice(1),16)):v[b]??b)}(b[0]);if(a.includes("*** Begin Patch"))return a}return null}(a);if(b)return{kind:"patch",patch:b};let c=function(a){let b=a.indexOf("tools.exec_command(");if(-1===b)return null;let c=a.indexOf("{",b);if(-1===c)return null;let d=0,e="";for(let b=c;b<a.length;b++){let f=a[b];if(e){"\\"===f?b++:f===e&&(e="");continue}if('"'===f||"'"===f||"`"===f){e=f;continue}if("{"===f)d++;else if("}"===f&&0==--d)try{let d=JSON.parse(a.slice(c,b+1));return d&&"object"==typeof d?d:null}catch{break}}return null}(a);return c?{kind:"exec",command:"string"==typeof c.cmd?c.cmd:"",args:c}:{kind:"unknown"}}function x(a){let b=w(a);return"patch"===b.kind?{name:e.applyPatch,input:t(b.patch)}:"exec"===b.kind?{name:e.bash,input:G("exec_command",b.args)}:{name:e.bash,input:{command:a}}}function y(a){if(null==a)return"";if("string"==typeof a)return a;if(Array.isArray(a))return a.map(y).join("");if("object"==typeof a){let b=a.text;return"string"==typeof b?b:JSON.stringify(a)}return String(a)}let z=new Set(["completed","errored","interrupted","not_found","failed"]);function A(a,b){let c="string"==typeof a.message?a.message:"",d="string"==typeof a.agent_type?a.agent_type:void 0;return{...d?{subagent_type:d}:{},description:B(b?.nickname,d,c),prompt:c,...b?.agentId?{agent_id:b.agentId}:{}}}function B(a,b,c){if(a)return b?`${a} (${b})`:a;let d=c.split("\n",1)[0]?.trim()||"";return d?d.slice(0,80):b||"subagent"}function C(a){try{let b=JSON.parse(a);if("string"!=typeof b?.agent_id||!b.agent_id)return null;return{agentId:b.agent_id,..."string"==typeof b.nickname?{nickname:b.nickname}:{}}}catch{return null}}function D(a){let b;try{b=JSON.parse(a)}catch{return[]}let c=b?.status;if(!c||"object"!=typeof c)return[];let d=[];for(let[a,b]of Object.entries(c)){if(!b||"object"!=typeof b)continue;let[c,e]=Object.entries(b)[0]??[];c&&d.push({agentId:a,status:c,message:"string"==typeof e?e:"",done:z.has(c)})}return d}function E(a){return a&&"object"==typeof a?Object.entries(a).flatMap(([a,b])=>{let c="string"==typeof b?.status?b.status:"";return c?[{agentId:a,status:c,message:"string"==typeof b?.message?b.message:"",done:z.has(c)}]:[]}):[]}function F(a){return a.message||`(agent ${a.status})`}function G(a,b){if(a===h)return A(b);if(a===k)return{todos:(Array.isArray(b.plan)?b.plan:[]).flatMap(a=>"string"!=typeof a?.step?[]:[{content:a.step,status:"string"==typeof a.status?a.status:"pending"}])};if(o(a)!==e.bash||"string"==typeof b.command||"string"!=typeof b.cmd)return b;let{cmd:c,...d}=b;return{...d,command:b.cmd}}let H=/^<image\b[^>]*>$/i,I=/<\/?image\b[^>]*>/gi,J=/^data:(image\/(?:png|jpeg|webp|gif));base64,([\s\S]*)$/;function K(a){return{text:(a?.filter(a=>"input_text"===a.type&&a.text&&!H.test(a.text.trim())).map(a=>a.text).join("")||"").replace(I,""),images:a?.filter(a=>"input_image"===a.type&&a.image_url).map(a=>{let b;return(b=a.image_url.match(J))?{type:"base64",media_type:b[1],data:b[2]}:null}).filter(a=>null!==a)||[]}}},72891:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{OZ:()=>o,RL:()=>n,k9:()=>p,ok:()=>l});var e=c(37625),f=c(52693),g=c(18412),h=c(89705),i=c(94506),j=c(770),k=a([i]);i=(k.then?(await k)():k)[0];let l=(a,b=200)=>new Response(JSON.stringify(a),{status:b,headers:{"content-type":"application/json"}}),m=a=>{let b=e.od(a);if(f.Ru(b)){let a=b.value,c=(0,j.Sh)(a);return new Response(JSON.stringify({error:(a=>{let b=a.message;if("string"==typeof b&&b.length>0)return b;let c=a.cause;if(c instanceof Error&&c.message.length>0)return c.message;switch(a._tag){case"ValidationError":return`Invalid ${a.field}: ${a.reason}`;case"NotFoundError":return`${a.resource} not found: ${a.id}`;case"PermissionError":return`Permission denied: ${a.action} on ${a.resource}`;case"DBError":return`${a.db} ${a.op} failed`;case"FSError":return`${a.op} ${a.path} failed`;case"WSError":return`${a.proto} ${a.kind} failed`;case"AgentError":return`${a.provider} ${a.kind} failed`;default:return a._tag}})(a),tag:a._tag}),{status:c,headers:{"content-type":"application/json"}})}return console.error("[handler] uncaught defect:\n"+e.j9(a)),new Response(JSON.stringify({error:"Internal Server Error",tag:"InternalError"}),{status:500,headers:{"content-type":"application/json"}})},n=a=>async b=>{let c=await i.s9.runPromiseExit(a(b));return g.YW(c,{onFailure:a=>m(a),onSuccess:a=>a})},o=a=>async(b,c)=>{let d=await c.params,e=await i.s9.runPromiseExit(a(b,d));return g.YW(e,{onFailure:a=>m(a),onSuccess:a=>a})},p=a=>h.$mh({try:()=>a.json(),catch:()=>new j.yI({field:"body",reason:"invalid JSON"})});d()}catch(a){d(a)}})},98084:(a,b,c)=>{function d(a){return a.isMeta&&a.sourceToolUseID?"skill":a.origin?.kind==="task-notification"?"task-notification":a.origin?.kind&&"human"!==a.origin.kind||a.isMeta||a.isCompactSummary?"meta":null}function e(a){if("user"!==a.type||null!==d(a))return!1;let b=a.message?.content;return"string"==typeof b?b.length>0:!!Array.isArray(b)&&b.some(a=>a?.type==="text")}c.d(b,{k:()=>d,l:()=>e})}};
|
/package/.next-prod/static/{4Jgc-wu2w_CC8iS5G1QZf → pgteRwI6FQcp683smeSNO}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|