@surething/cockpit 1.0.240 → 1.0.242

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 (56) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +5 -5
  3. package/.next-prod/build-manifest.json +2 -2
  4. package/.next-prod/prerender-manifest.json +3 -3
  5. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next-prod/server/app/_global-error.html +1 -1
  7. package/.next-prod/server/app/_global-error.rsc +1 -1
  8. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next-prod/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next-prod/server/app/_not-found.html +2 -2
  16. package/.next-prod/server/app/_not-found.rsc +3 -3
  17. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
  18. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  20. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next-prod/server/app/api/commands/route.js +1 -1
  24. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  25. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  26. package/.next-prod/server/app/project/page.js +1 -1
  27. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  28. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  29. package/.next-prod/server/app-paths-manifest.json +5 -5
  30. package/.next-prod/server/chunks/304.js +3 -3
  31. package/.next-prod/server/chunks/4848.js +33 -3
  32. package/.next-prod/server/chunks/9658.js +5 -5
  33. package/.next-prod/server/middleware-build-manifest.js +1 -1
  34. package/.next-prod/server/pages/404.html +2 -2
  35. package/.next-prod/server/pages/500.html +1 -1
  36. package/.next-prod/server/server-reference-manifest.json +1 -1
  37. package/.next-prod/static/chunks/5408-f9fd9ece18d916dc.js +25 -0
  38. package/.next-prod/static/chunks/{9530-aac4bba2518aa113.js → 9530-44f82b2151a66f3c.js} +2 -2
  39. package/.next-prod/static/chunks/app/{layout-95cb81ab4128b70e.js → layout-fdd40a9f4769a9d2.js} +1 -1
  40. package/.next-prod/static/chunks/app/{page-5969e7f2f5788be2.js → page-7e283c0e1ba7bf80.js} +1 -1
  41. package/.next-prod/static/chunks/app/project/{page-5969e7f2f5788be2.js → page-7e283c0e1ba7bf80.js} +1 -1
  42. package/.next-prod/static/css/9f26a08be661160a.css +1 -0
  43. package/.next-prod/trace +13 -13
  44. package/.next-prod/trace-build +1 -1
  45. package/dist/{chunk-TRQ4S2LT.mjs → chunk-53DHIXIY.mjs} +1 -1
  46. package/dist/{chunk-44DBCDDK.mjs → chunk-PTHQK26K.mjs} +46 -14
  47. package/dist/{chunk-JDX7Z54G.mjs → chunk-RBT65EBM.mjs} +1 -1
  48. package/dist/httpApi.mjs +2 -2
  49. package/dist/scheduledTasks.mjs +37 -2
  50. package/dist/{server-UDKNFSZE.mjs → server-XWLYHEMD.mjs} +2 -2
  51. package/dist/wsServer.mjs +4 -4
  52. package/package.json +1 -1
  53. package/.next-prod/static/chunks/5408-b31a0bb83ee220ad.js +0 -25
  54. package/.next-prod/static/css/5b0dd8036a3ffc10.css +0 -1
  55. /package/.next-prod/static/{ArsrRKOrvluh7oFS0G-Fg → YsWseNHOrhvA60UWaNkzK}/_buildManifest.js +0 -0
  56. /package/.next-prod/static/{ArsrRKOrvluh7oFS0G-Fg → YsWseNHOrhvA60UWaNkzK}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":19805131,"timestamp":147055665,"id":14,"parentId":1,"tags":{},"startTime":1783606754071,"traceId":"ce5c44a5e03e6b79"},{"name":"run-typescript","duration":18284716,"timestamp":166864451,"id":1630,"parentId":1,"tags":{},"startTime":1783606773880,"traceId":"ce5c44a5e03e6b79"},{"name":"static-check","duration":1188376,"timestamp":185192582,"id":1633,"parentId":1,"tags":{},"startTime":1783606792208,"traceId":"ce5c44a5e03e6b79"},{"name":"static-generation","duration":6494351,"timestamp":186521942,"id":1911,"parentId":1,"tags":{},"startTime":1783606793537,"traceId":"ce5c44a5e03e6b79"},{"name":"collect-build-traces","duration":20271788,"timestamp":186383968,"id":1908,"parentId":1,"tags":{},"startTime":1783606793399,"traceId":"ce5c44a5e03e6b79"},{"name":"telemetry-flush","duration":62,"timestamp":206659722,"id":1920,"parentId":1,"tags":{},"startTime":1783606813675,"traceId":"ce5c44a5e03e6b79"},{"name":"next-build","duration":59783832,"timestamp":146875970,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1783606753891,"traceId":"ce5c44a5e03e6b79"}]
1
+ [{"name":"run-webpack","duration":17818959,"timestamp":187786547,"id":14,"parentId":1,"tags":{},"startTime":1783948879287,"traceId":"9619af7c73190300"},{"name":"run-typescript","duration":15136342,"timestamp":205614781,"id":1630,"parentId":1,"tags":{},"startTime":1783948897115,"traceId":"9619af7c73190300"},{"name":"static-check","duration":962008,"timestamp":220782608,"id":1633,"parentId":1,"tags":{},"startTime":1783948912283,"traceId":"9619af7c73190300"},{"name":"static-generation","duration":5185281,"timestamp":221846117,"id":1911,"parentId":1,"tags":{},"startTime":1783948913346,"traceId":"9619af7c73190300"},{"name":"collect-build-traces","duration":15774094,"timestamp":221745204,"id":1908,"parentId":1,"tags":{},"startTime":1783948913245,"traceId":"9619af7c73190300"},{"name":"telemetry-flush","duration":48,"timestamp":237522629,"id":1920,"parentId":1,"tags":{},"startTime":1783948929023,"traceId":"9619af7c73190300"},{"name":"next-build","duration":49847788,"timestamp":187674899,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1783948879175,"traceId":"9619af7c73190300"}]
@@ -13,7 +13,7 @@ import {
13
13
  getTerminalOutputPath,
14
14
  readJsonFile,
15
15
  writeJsonFile
16
- } from "./chunk-44DBCDDK.mjs";
16
+ } from "./chunk-PTHQK26K.mjs";
17
17
 
18
18
  // packages/feature/console/src/server/plugins/browser/BrowserBridge.ts
19
19
  import { WebSocket } from "ws";
@@ -30009,6 +30009,27 @@ var runGitOk = (repoDir, workTree, args2, input) => runGit(repoDir, workTree, ar
30009
30009
  })
30010
30010
  )
30011
30011
  );
30012
+ var SYMLINK_PATHSPEC_RE = /beyond a symbolic link/;
30013
+ var stageAdds = (repoDir, cwd, paths) => Effect_exports.gen(function* () {
30014
+ const addArgs = ["add", "-A", "--pathspec-from-file=-", "--pathspec-file-nul"];
30015
+ const batch = yield* runGit(repoDir, cwd, addArgs, paths.map((p) => `:(literal)${p}`).join("\0"));
30016
+ if (batch.code === 0) return;
30017
+ if (!SYMLINK_PATHSPEC_RE.test(batch.stderr)) {
30018
+ return yield* Effect_exports.fail(
30019
+ new AppError({ message: `git add exited ${batch.code}: ${batch.stderr.slice(0, 400)}` })
30020
+ );
30021
+ }
30022
+ for (const p of paths) {
30023
+ const one = yield* runGit(repoDir, cwd, addArgs, `:(literal)${p}`);
30024
+ if (one.code === 0) continue;
30025
+ if (!SYMLINK_PATHSPEC_RE.test(one.stderr)) {
30026
+ return yield* Effect_exports.fail(
30027
+ new AppError({ message: `git add ${p} exited ${one.code}: ${one.stderr.slice(0, 400)}` })
30028
+ );
30029
+ }
30030
+ yield* runGitOk(repoDir, cwd, ["rm", "--cached", "--quiet", "--ignore-unmatch", "--", `:(literal)${p}`]);
30031
+ }
30032
+ });
30012
30033
  var gSem = globalThis;
30013
30034
  var semaphores = gSem.__cockpitSnapshotSemaphores ?? (gSem.__cockpitSnapshotSemaphores = /* @__PURE__ */ new Map());
30014
30035
  var withRepoLock = (repoDir, effect4) => {
@@ -30164,35 +30185,46 @@ var snapshotOnce = (snapshotsRoot, maxFileBytes, trigger, kind) => Effect_export
30164
30185
  yield* tripGuard(`${entries2.length} changed files exceeds ${MAX_CHANGED_FILES}`);
30165
30186
  return { staged: false };
30166
30187
  }
30167
- const changedPaths = entries2.map((e) => e.slice(3)).filter(Boolean);
30188
+ const addPaths = [];
30189
+ const rmPaths = [];
30190
+ for (const e of entries2) {
30191
+ const path = e.slice(3);
30192
+ if (!path) continue;
30193
+ if (e[1] === "D") rmPaths.push(path);
30194
+ else addPaths.push(path);
30195
+ }
30168
30196
  const sizes = yield* Effect_exports.all(
30169
- changedPaths.map(
30197
+ addPaths.map(
30170
30198
  (p) => fsTry("stat", () => stat(join5(cwd, p)).then((s) => s.isFile() ? s.size : 0)).pipe(
30171
- // Deleted files fail the stat → size 0 (they must stay included).
30199
+ // Untracked path vanishing between status and stat → size 0.
30172
30200
  Effect_exports.orElseSucceed(() => 0)
30173
30201
  )
30174
30202
  ),
30175
30203
  { concurrency: 16 }
30176
30204
  );
30177
- const included = [];
30205
+ const includedAdds = [];
30178
30206
  let totalBytes = 0;
30179
- for (let i = 0; i < changedPaths.length; i++) {
30207
+ for (let i = 0; i < addPaths.length; i++) {
30180
30208
  if (sizes[i] > maxFileBytes) continue;
30181
- included.push(changedPaths[i]);
30209
+ includedAdds.push(addPaths[i]);
30182
30210
  totalBytes += sizes[i];
30183
30211
  }
30184
30212
  if (totalBytes > MAX_TOTAL_BYTES) {
30185
30213
  yield* tripGuard(`${Math.round(totalBytes / 1048576)}MB of changes exceeds ${Math.round(MAX_TOTAL_BYTES / 1048576)}MB`);
30186
30214
  return { staged: false };
30187
30215
  }
30188
- if (included.length === 0) return { staged: false };
30189
- const pathspec = included.map((p) => `:(literal)${p}`).join("\0");
30190
- yield* runGitOk(
30191
- repoDir,
30192
- cwd,
30193
- ["add", "-A", "--pathspec-from-file=-", "--pathspec-file-nul"],
30194
- pathspec
30195
- );
30216
+ if (includedAdds.length === 0 && rmPaths.length === 0) return { staged: false };
30217
+ if (rmPaths.length > 0) {
30218
+ yield* runGitOk(
30219
+ repoDir,
30220
+ cwd,
30221
+ ["rm", "--cached", "--quiet", "--ignore-unmatch", "--pathspec-from-file=-", "--pathspec-file-nul"],
30222
+ rmPaths.map((p) => `:(literal)${p}`).join("\0")
30223
+ );
30224
+ }
30225
+ if (includedAdds.length > 0) {
30226
+ yield* stageAdds(repoDir, cwd, includedAdds);
30227
+ }
30196
30228
  return { staged: true };
30197
30229
  });
30198
30230
  return yield* withRepoLock(
@@ -10,7 +10,7 @@ import {
10
10
  readJsonFile,
11
11
  withFileLock,
12
12
  writeJsonFile
13
- } from "./chunk-44DBCDDK.mjs";
13
+ } from "./chunk-PTHQK26K.mjs";
14
14
 
15
15
  // packages/feature/agent/src/server/state/globalState.ts
16
16
  import { createReadStream, existsSync } from "fs";
package/dist/httpApi.mjs CHANGED
@@ -22,10 +22,10 @@ import {
22
22
  unregisterBrowser,
23
23
  unregisterTerminal,
24
24
  writeStdinToCommand
25
- } from "./chunk-TRQ4S2LT.mjs";
25
+ } from "./chunk-53DHIXIY.mjs";
26
26
  import {
27
27
  getTerminalHistoryPath
28
- } from "./chunk-44DBCDDK.mjs";
28
+ } from "./chunk-PTHQK26K.mjs";
29
29
  import "./chunk-7P6ASYW6.mjs";
30
30
 
31
31
  // src/lib/httpApi.ts
@@ -10,7 +10,7 @@ import {
10
10
  setRunAbort,
11
11
  startRun,
12
12
  updateGlobalState
13
- } from "./chunk-JDX7Z54G.mjs";
13
+ } from "./chunk-RBT65EBM.mjs";
14
14
  import {
15
15
  AgentError,
16
16
  AppRuntime,
@@ -36,7 +36,7 @@ import {
36
36
  settlePendingRecord,
37
37
  withFileLock,
38
38
  writeJsonFile
39
- } from "./chunk-44DBCDDK.mjs";
39
+ } from "./chunk-PTHQK26K.mjs";
40
40
  import {
41
41
  __export
42
42
  } from "./chunk-7P6ASYW6.mjs";
@@ -150,6 +150,40 @@ function snapshotOnRunEvent(cwd, sessionKey, provider, event) {
150
150
  import { mkdirSync, writeFileSync, readFileSync } from "fs";
151
151
  import { join } from "path";
152
152
 
153
+ // packages/feature/agent/src/server/lib/apPrompt.ts
154
+ var AP_PROMPT_ZH = `---
155
+ name: ap
156
+ description: "apply\uFF1A\u5B9E\u73B0 <SPEC>\uFF0C\u5E76\u5728\u5B9E\u73B0\u8FC7\u7A0B\u4E2D\u6301\u7EED\u7EF4\u62A4\u4E00\u4EFD apply-notes HTML \u6587\u4EF6\uFF08\u653E\u5728\u4E34\u65F6\u76EE\u5F55\uFF09\uFF0C\u8BB0\u5F55\u89C4\u683C\u672A\u8986\u76D6\u7684\u51B3\u7B56\u3001\u6539\u52A8\u4E0E\u6743\u8861\u3002"
157
+ argument-hint: "[SPEC \u8DEF\u5F84 / \u7559\u7A7A = \u672C\u6B21\u5BF9\u8BDD\u4E2D\u5DF2\u8FBE\u6210\u4E00\u81F4\u7684 spec]"
158
+ ---
159
+
160
+ \u5B9E\u73B0 <SPEC>\uFF1B\u5728\u5B9E\u73B0\u8FC7\u7A0B\u4E2D\uFF0C\u6301\u7EED\u7EF4\u62A4\u4E00\u4E2A apply-notes.html \u6587\u4EF6\uFF0C\u8BB0\u5F55\u90A3\u4E9B
161
+ \u89C4\u683C\u91CC\u6CA1\u6709\u3001\u4F46\u4F60\u4E0D\u5F97\u4E0D\u505A\u7684\u51B3\u7B56\uFF0C\u4E0D\u5F97\u4E0D\u6539\u7684\u4E1C\u897F\uFF0C\u4E0D\u5F97\u4E0D\u505A\u7684\u6743\u8861\uFF0C\u4EE5\u53CA\u4EFB\u4F55
162
+ \u6211\u5E94\u8BE5\u77E5\u9053\u7684\u4E8B\u60C5\u3002\u5B83\u4E0D\u662F\u5DE5\u4F5C\u65E5\u5FD7\u2014\u2014\u6D4B\u8BD5\u901A\u8FC7\u3001\u6784\u5EFA\u53D8\u7EFF\u8FD9\u7C7B\u5E38\u89C4\u8FDB\u5C55\u4E0D\u8BE5\u5199\u8FDB\u53BB\u3002
163
+
164
+ \u6587\u4EF6\u653E\u5728 \`\${TMPDIR%/}/apply-notes-<feature-name>.html\`\uFF0C\u7EDD\u4E0D\u653E\u8FDB\u4ED3\u5E93\u91CC\uFF0C
165
+ \u6BCF\u4E2A\u9700\u6C42\u4E00\u4E2A\u6587\u4EF6\uFF1A\u5F53\u67D0\u4E00\u8F6E\u662F\u5728\u5EF6\u7EED\u540C\u4E00\u4E2A\u4EFB\u52A1\u65F6\uFF0C\u5728\u5DF2\u6709\u6587\u4EF6\u91CC\u65B0\u8D77\u4E00\u4E2A round
166
+ \u5C0F\u8282\u8FFD\u52A0\uFF0C\u800C\u4E0D\u662F\u65B0\u5EFA\u4E00\u4E2A\uFF1B\u53EA\u6709\u65B0\u9700\u6C42\u624D\u65B0\u5EFA\u6587\u4EF6\u3002\u59CB\u7EC8\u7528 Edit \u5DE5\u5177\u66F4\u65B0\u5B83
167
+ \uFF08\u4EC5\u9996\u6B21\u521B\u5EFA\u65F6\u7528 Write\uFF09\uFF0C\u7EDD\u4E0D\u901A\u8FC7 shell \u91CD\u5B9A\u5411\u5199\u5165\u3002`;
168
+ var AP_PROMPT_EN = `---
169
+ name: ap
170
+ description: "apply: implement <SPEC> while keeping a running apply-notes HTML file (in temp dir) of decisions not covered by the spec, changes, and tradeoffs."
171
+ argument-hint: "[SPEC path / empty = spec agreed in this conversation]"
172
+ ---
173
+
174
+ Implement <SPEC>; and while you do, keep a running apply-notes.html file
175
+ with decisions you had to make that weren't in the spec, things you had
176
+ to change, tradeoffs you had to make, or anything else I should know.
177
+ It is not a work log \u2014 routine progress like tests passing or builds
178
+ going green doesn't belong in it.
179
+
180
+ Keep the file at \`\${TMPDIR%/}/apply-notes-<feature-name>.html\`, never
181
+ inside the repo, one file per requirement: when a round continues the
182
+ same task, append to the existing file under a new round heading rather
183
+ than starting a fresh one; only a new requirement gets a new file.
184
+ Always update it with the Edit tool (Write only when first creating it),
185
+ never through shell redirection.`;
186
+
153
187
  // packages/feature/agent/src/server/lib/ccPrompt.ts
154
188
  var CC_LABEL_ZH = "\u4EFB\u52A1\uFF1A";
155
189
  var CC_LABEL_EN = "Task: ";
@@ -1650,6 +1684,7 @@ When done, briefly report: skill slug, source path (\`<skills-dir>/<slug>/SKILL.
1650
1684
  // packages/feature/agent/src/server/lib/slashCommands.ts
1651
1685
  var COMMAND_CONTENT = {
1652
1686
  qa: { zh: QA_PROMPT_ZH, en: QA_PROMPT_EN },
1687
+ ap: { zh: AP_PROMPT_ZH, en: AP_PROMPT_EN },
1653
1688
  fx: { zh: FX_PROMPT_ZH, en: FX_PROMPT_EN },
1654
1689
  ex: { zh: EX_PROMPT_ZH, en: EX_PROMPT_EN },
1655
1690
  go: { zh: GO_PROMPT_ZH, en: GO_PROMPT_EN },
@@ -45,12 +45,12 @@ import {
45
45
  unregisterTerminal,
46
46
  updateBrowserWs,
47
47
  writeStdinToCommand
48
- } from "./chunk-TRQ4S2LT.mjs";
48
+ } from "./chunk-53DHIXIY.mjs";
49
49
  import {
50
50
  createNeo4jDriver,
51
51
  runCypherWithDriver,
52
52
  serializeValue
53
- } from "./chunk-44DBCDDK.mjs";
53
+ } from "./chunk-PTHQK26K.mjs";
54
54
  import "./chunk-7P6ASYW6.mjs";
55
55
  export {
56
56
  INTERRUPTED_EXIT_CODE,
package/dist/wsServer.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  addRunListener,
3
3
  getGlobalSessionsSnapshot,
4
4
  getRunSnapshot
5
- } from "./chunk-JDX7Z54G.mjs";
5
+ } from "./chunk-RBT65EBM.mjs";
6
6
  import {
7
7
  addExitListener,
8
8
  addOutputListener,
@@ -18,7 +18,7 @@ import {
18
18
  resolvePendingRequest,
19
19
  unregisterBrowser,
20
20
  writeStdinToCommand
21
- } from "./chunk-TRQ4S2LT.mjs";
21
+ } from "./chunk-53DHIXIY.mjs";
22
22
  import {
23
23
  AppError,
24
24
  Effect_exports,
@@ -33,7 +33,7 @@ import {
33
33
  Stream_exports,
34
34
  ValidationError,
35
35
  WSError
36
- } from "./chunk-44DBCDDK.mjs";
36
+ } from "./chunk-PTHQK26K.mjs";
37
37
  import "./chunk-7P6ASYW6.mjs";
38
38
 
39
39
  // src/lib/wsServer.ts
@@ -665,7 +665,7 @@ var handleJupyter = (conn, bubbleId, cwd) => Effect_exports.gen(function* () {
665
665
  Effect_exports.annotateLogs("cwd", cwd)
666
666
  );
667
667
  const { kernelManager } = yield* Effect_exports.tryPromise({
668
- try: () => import("./server-UDKNFSZE.mjs"),
668
+ try: () => import("./server-XWLYHEMD.mjs"),
669
669
  catch: (cause) => new AppError({
670
670
  message: "failed to import kernel manager",
671
671
  cause
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surething/cockpit",
3
- "version": "1.0.240",
3
+ "version": "1.0.242",
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",