vibe64 0.1.21 → 0.1.22

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 (143) hide show
  1. package/dist/assets/ProjectTypeGate-B3NHteXC.js +1 -0
  2. package/dist/assets/ProjectTypeGate-fJcYj6sR.css +1 -0
  3. package/dist/assets/{SetupReadinessGate-DkkorR2Y.js → SetupReadinessGate-2twHjoYZ.js} +1 -1
  4. package/dist/assets/{ShellLayout-BcKS2HG9.js → ShellLayout-BjAbXfzf.js} +1 -1
  5. package/dist/assets/{VTabs-BJ8MKoig.js → VTabs-BLGGdbms.js} +1 -1
  6. package/dist/assets/{error-CwT53qTu.js → error-DvUPciuh.js} +1 -1
  7. package/dist/assets/history-DfM4ewyV.js +1 -0
  8. package/dist/assets/home-sh4v0vz7.js +1 -0
  9. package/dist/assets/index-C4JbNnml.css +1 -0
  10. package/dist/assets/{index-BJxDQvyK.js → index-CdFWokfE.js} +1 -1
  11. package/dist/assets/index-D4oqjV9n.js +132 -0
  12. package/dist/assets/{index-CY-wDjNv.js → index-DqoYKexs.js} +15 -15
  13. package/dist/assets/{placement-7FCYadh2.js → placement-QfRaYTFY.js} +1 -1
  14. package/dist/assets/{setup-BzzdD38G.js → setup-B-WOti3H.js} +2 -2
  15. package/dist/assets/{streamEvents-Ba9kHw-1.js → streamEvents-CIqegoLa.js} +1 -1
  16. package/dist/assets/{studioGateApi-hkZdLr1Y.js → studioGateApi-CFtez6lH.js} +1 -1
  17. package/dist/assets/{target-scripts-8hczu84t.js → target-scripts-CI-nAISO.js} +1 -1
  18. package/dist/assets/useStudioTerminal-I8tuBymw.js +1 -0
  19. package/dist/assets/vibe64SessionPanelModel-DLdexNxC.js +1 -0
  20. package/dist/index.html +1 -1
  21. package/node_modules/@local/setup-doctor-core/src/server/doctorToolchain.js +4 -0
  22. package/node_modules/@local/studio-terminal-core/src/server/gitGithubTransport.js +33 -0
  23. package/node_modules/@local/studio-terminal-core/src/server/index.js +1 -0
  24. package/node_modules/@local/studio-terminal-core/src/server/terminalSessions.js +51 -1
  25. package/node_modules/@local/vibe64-adapters/src/server/adapter.js +4 -0
  26. package/node_modules/@local/vibe64-adapters/src/server/adapters/laravel/adapter.js +5 -0
  27. package/node_modules/@local/vibe64-adapters/src/server/adapters/laravel/databaseRuntime.js +50 -0
  28. package/node_modules/@local/vibe64-adapters/src/server/configStore.js +22 -1
  29. package/node_modules/@local/vibe64-adapters/src/server/systemPrompts/agent_conversation.txt +0 -2
  30. package/node_modules/@local/vibe64-adapters/src/server/systemPrompts/draft_issue.txt +18 -0
  31. package/node_modules/@local/vibe64-adapters/src/server/systemPrompts/make_plan.txt +14 -2
  32. package/node_modules/@local/vibe64-adapters/src/server/systemPrompts/prepare_for_merge.txt +2 -0
  33. package/node_modules/@local/vibe64-adapters/src/server/systemPrompts/resolve_pull_request.txt +1 -0
  34. package/node_modules/@local/vibe64-adapters/src/server/systemPrompts/run_deep_ui_check.txt +7 -3
  35. package/node_modules/@local/vibe64-adapters/src/server/workflowCommandTerminal/commitPush.js +4 -22
  36. package/node_modules/@local/vibe64-adapters/src/server/workflowCommandTerminal/factMetadata.js +21 -20
  37. package/node_modules/@local/vibe64-adapters/src/server/workflowCommandTerminal/issuePr.js +27 -4
  38. package/node_modules/@local/vibe64-adapters/src/server/workflowCommandTerminal/mergeSync.js +65 -8
  39. package/node_modules/@local/vibe64-adapters/src/server/workflowCommandTerminal/worktreeDependencies.js +12 -25
  40. package/node_modules/@local/vibe64-adapters/src/server/workflowSessionActions.js +77 -20
  41. package/node_modules/@local/vibe64-core/src/server/terminalWebSocketRoutes.js +14 -5
  42. package/node_modules/@local/vibe64-project/src/server/actions.js +21 -0
  43. package/node_modules/@local/vibe64-project/src/server/registerRoutes.js +6 -0
  44. package/node_modules/@local/vibe64-project/src/server/service.js +125 -8
  45. package/node_modules/@local/vibe64-runtime/src/server/coreProjectTools.js +135 -0
  46. package/node_modules/@local/vibe64-runtime/src/server/index.js +4 -0
  47. package/node_modules/@local/vibe64-runtime/src/server/projectToolRegistry.js +434 -0
  48. package/node_modules/@local/vibe64-runtime/src/server/runtime.js +40 -16
  49. package/node_modules/@local/vibe64-runtime/src/server/sessionWorktreeState.js +25 -0
  50. package/node_modules/@local/vibe64-runtime/src/server/terminalFailureFixRequest.js +112 -0
  51. package/node_modules/@local/vibe64-runtime/src/server/workflowArtifacts.js +2 -2
  52. package/node_modules/@local/vibe64-runtime/src/server/workflowDefinitionBuilders.js +1 -0
  53. package/node_modules/@local/vibe64-runtime/src/server/workflowDefinitionComposers.js +192 -0
  54. package/node_modules/@local/vibe64-runtime/src/server/workflowMachine.js +5 -0
  55. package/node_modules/@local/vibe64-runtime/src/server/workflowModules/coreCoding.js +1309 -419
  56. package/node_modules/@local/vibe64-runtime/src/server/workflowModules/coreLifecycle.js +540 -358
  57. package/node_modules/@local/vibe64-runtime/src/server/workflowModules/coreMaintenance.js +5 -26
  58. package/node_modules/@local/vibe64-runtime/src/server/workflowPresentation.js +153 -26
  59. package/node_modules/@local/vibe64-runtime/src/server/workflowStepMachineHelpers.js +63 -10
  60. package/node_modules/@local/vibe64-runtime/src/server/workflowStepMachines.js +63 -2
  61. package/node_modules/@local/vibe64-sessions/src/server/inputSchemas.js +5 -0
  62. package/node_modules/@local/vibe64-sessions/src/server/service.js +8 -9
  63. package/node_modules/@local/vibe64-terminals/src/server/actions.js +65 -0
  64. package/node_modules/@local/vibe64-terminals/src/server/codexTerminal.js +608 -23
  65. package/node_modules/@local/vibe64-terminals/src/server/commandTerminal.js +261 -4
  66. package/node_modules/@local/vibe64-terminals/src/server/fixCodexJobs.js +420 -0
  67. package/node_modules/@local/vibe64-terminals/src/server/inputSchemas.js +240 -0
  68. package/node_modules/@local/vibe64-terminals/src/server/launchTargetTerminal.js +2 -0
  69. package/node_modules/@local/vibe64-terminals/src/server/registerRoutes.js +226 -0
  70. package/node_modules/@local/vibe64-terminals/src/server/service.js +140 -1
  71. package/node_modules/@local/vibe64-terminals/src/server/targetToolchainTerminal.js +1 -1
  72. package/node_modules/@local/vibe64-terminals/src/server/terminalShared.js +34 -0
  73. package/node_modules/node-pty/build/Makefile +369 -0
  74. package/node_modules/node-pty/build/Release/pty.node +0 -0
  75. package/node_modules/node-pty/build/binding.Makefile +6 -0
  76. package/node_modules/node-pty/build/config.gypi +440 -0
  77. package/node_modules/node-pty/build/pty.target.mk +166 -0
  78. package/node_modules/node-pty/node-addon-api/node_addon_api.Makefile +6 -0
  79. package/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +104 -0
  80. package/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +108 -0
  81. package/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +104 -0
  82. package/node_modules/which/CHANGELOG.md +166 -0
  83. package/package.json +2 -2
  84. package/packages/setup-doctor-core/src/server/doctorToolchain.js +4 -0
  85. package/packages/studio-terminal-core/src/server/gitGithubTransport.js +33 -0
  86. package/packages/studio-terminal-core/src/server/index.js +1 -0
  87. package/packages/studio-terminal-core/src/server/terminalSessions.js +51 -1
  88. package/packages/vibe64-adapters/src/server/adapter.js +4 -0
  89. package/packages/vibe64-adapters/src/server/adapters/laravel/adapter.js +5 -0
  90. package/packages/vibe64-adapters/src/server/adapters/laravel/databaseRuntime.js +50 -0
  91. package/packages/vibe64-adapters/src/server/configStore.js +22 -1
  92. package/packages/vibe64-adapters/src/server/systemPrompts/agent_conversation.txt +0 -2
  93. package/packages/vibe64-adapters/src/server/systemPrompts/draft_issue.txt +18 -0
  94. package/packages/vibe64-adapters/src/server/systemPrompts/make_plan.txt +14 -2
  95. package/packages/vibe64-adapters/src/server/systemPrompts/prepare_for_merge.txt +2 -0
  96. package/packages/vibe64-adapters/src/server/systemPrompts/resolve_pull_request.txt +1 -0
  97. package/packages/vibe64-adapters/src/server/systemPrompts/run_deep_ui_check.txt +7 -3
  98. package/packages/vibe64-adapters/src/server/workflowCommandTerminal/commitPush.js +4 -22
  99. package/packages/vibe64-adapters/src/server/workflowCommandTerminal/factMetadata.js +21 -20
  100. package/packages/vibe64-adapters/src/server/workflowCommandTerminal/issuePr.js +27 -4
  101. package/packages/vibe64-adapters/src/server/workflowCommandTerminal/mergeSync.js +65 -8
  102. package/packages/vibe64-adapters/src/server/workflowCommandTerminal/worktreeDependencies.js +12 -25
  103. package/packages/vibe64-adapters/src/server/workflowSessionActions.js +77 -20
  104. package/packages/vibe64-core/src/server/terminalWebSocketRoutes.js +14 -5
  105. package/packages/vibe64-project/src/server/actions.js +21 -0
  106. package/packages/vibe64-project/src/server/registerRoutes.js +6 -0
  107. package/packages/vibe64-project/src/server/service.js +125 -8
  108. package/packages/vibe64-runtime/src/server/coreProjectTools.js +135 -0
  109. package/packages/vibe64-runtime/src/server/index.js +4 -0
  110. package/packages/vibe64-runtime/src/server/projectToolRegistry.js +434 -0
  111. package/packages/vibe64-runtime/src/server/runtime.js +40 -16
  112. package/packages/vibe64-runtime/src/server/sessionWorktreeState.js +25 -0
  113. package/packages/vibe64-runtime/src/server/terminalFailureFixRequest.js +112 -0
  114. package/packages/vibe64-runtime/src/server/workflowArtifacts.js +2 -2
  115. package/packages/vibe64-runtime/src/server/workflowDefinitionBuilders.js +1 -0
  116. package/packages/vibe64-runtime/src/server/workflowDefinitionComposers.js +192 -0
  117. package/packages/vibe64-runtime/src/server/workflowMachine.js +5 -0
  118. package/packages/vibe64-runtime/src/server/workflowModules/coreCoding.js +1309 -419
  119. package/packages/vibe64-runtime/src/server/workflowModules/coreLifecycle.js +540 -358
  120. package/packages/vibe64-runtime/src/server/workflowModules/coreMaintenance.js +5 -26
  121. package/packages/vibe64-runtime/src/server/workflowPresentation.js +153 -26
  122. package/packages/vibe64-runtime/src/server/workflowStepMachineHelpers.js +63 -10
  123. package/packages/vibe64-runtime/src/server/workflowStepMachines.js +63 -2
  124. package/packages/vibe64-sessions/src/server/inputSchemas.js +5 -0
  125. package/packages/vibe64-sessions/src/server/service.js +8 -9
  126. package/packages/vibe64-terminals/src/server/actions.js +65 -0
  127. package/packages/vibe64-terminals/src/server/codexTerminal.js +608 -23
  128. package/packages/vibe64-terminals/src/server/commandTerminal.js +261 -4
  129. package/packages/vibe64-terminals/src/server/fixCodexJobs.js +420 -0
  130. package/packages/vibe64-terminals/src/server/inputSchemas.js +240 -0
  131. package/packages/vibe64-terminals/src/server/launchTargetTerminal.js +2 -0
  132. package/packages/vibe64-terminals/src/server/registerRoutes.js +226 -0
  133. package/packages/vibe64-terminals/src/server/service.js +140 -1
  134. package/packages/vibe64-terminals/src/server/targetToolchainTerminal.js +1 -1
  135. package/packages/vibe64-terminals/src/server/terminalShared.js +34 -0
  136. package/dist/assets/ProjectTypeGate-DStq4W4X.js +0 -1
  137. package/dist/assets/ProjectTypeGate-Dh2ycSoM.css +0 -1
  138. package/dist/assets/history-HQ_XliX2.js +0 -1
  139. package/dist/assets/home-B89EbUmA.js +0 -1
  140. package/dist/assets/index-16P0GeGq.js +0 -134
  141. package/dist/assets/index-eMhOXhf_.css +0 -1
  142. package/dist/assets/useStudioTerminal-D9TNb50w.js +0 -1
  143. package/dist/assets/vibe64SessionPanelModel-DvY_IbW3.js +0 -1
@@ -1,10 +1,17 @@
1
1
  import {
2
2
  codexAttachmentInputValidator,
3
3
  commandTerminalInputValidator,
4
+ fixCodexReportInputValidator,
4
5
  launchTargetInputValidator,
6
+ projectToolFixInputValidator,
7
+ projectToolRunInputValidator,
8
+ sessionTerminalFixInputValidator,
5
9
  shellTerminalInputValidator
6
10
  } from "./inputSchemas.js";
7
11
  import {
12
+ ACTION_RUN_PROJECT_TOOL,
13
+ ACTION_START_PROJECT_TOOL_FIX,
14
+ ACTION_START_SESSION_TERMINAL_FIX,
8
15
  ACTION_OPEN_LAUNCH_TARGET,
9
16
  ACTION_START_COMMAND_TERMINAL,
10
17
  ACTION_START_LAUNCH_TARGET_TERMINAL,
@@ -39,6 +46,61 @@ function registerRoutes(
39
46
  });
40
47
  const terminalService = () => getTerminalService(app);
41
48
 
49
+ routes.serviceRoute("GET", "/codex-terminal", {
50
+ summary: "Read global Vibe64 Codex terminal status."
51
+ }, () => {
52
+ return terminalService().globalCodexTerminalState();
53
+ });
54
+
55
+ routes.serviceRoute("POST", "/codex-terminal", {
56
+ summary: "Start a global Vibe64 Codex terminal."
57
+ }, () => {
58
+ return terminalService().startGlobalCodexTerminal();
59
+ });
60
+
61
+ routes.actionRoute("POST", "/tools/:toolId/run", {
62
+ actionId: ACTION_RUN_PROJECT_TOOL,
63
+ body: projectToolRunInputValidator,
64
+ buildInput(request) {
65
+ return {
66
+ ...routes.requestBody(request),
67
+ toolId: request.params.toolId
68
+ };
69
+ },
70
+ summary: "Run a Vibe64 project tool."
71
+ });
72
+
73
+ routes.actionRoute("POST", "/tools/:toolId/fix", {
74
+ actionId: ACTION_START_PROJECT_TOOL_FIX,
75
+ body: projectToolFixInputValidator,
76
+ buildInput(request) {
77
+ return {
78
+ ...routes.requestBody(request),
79
+ toolId: request.params.toolId
80
+ };
81
+ },
82
+ summary: "Start an ephemeral Fix Codex job for a Vibe64 project tool failure."
83
+ });
84
+
85
+ routes.serviceRoute("POST", "/fix-codex-jobs/:jobId/report", {
86
+ body: fixCodexReportInputValidator,
87
+ summary: "Report an ephemeral Fix Codex job result."
88
+ }, (request) => {
89
+ return terminalService().reportFixCodexJob(request.params.jobId, routes.requestBody(request));
90
+ });
91
+
92
+ routes.actionRoute("POST", "/sessions/:sessionId/terminal-failure-fix", {
93
+ actionId: ACTION_START_SESSION_TERMINAL_FIX,
94
+ body: sessionTerminalFixInputValidator,
95
+ buildInput(request) {
96
+ return {
97
+ ...routes.requestBody(request),
98
+ sessionId: request.params.sessionId
99
+ };
100
+ },
101
+ summary: "Start an ephemeral Fix Codex job for a Vibe64 session terminal failure."
102
+ });
103
+
42
104
  routes.serviceRoute("GET", "/sessions/:sessionId/launch-targets", {
43
105
  summary: "Read Vibe64 launch target status."
44
106
  }, (request) => {
@@ -110,6 +172,30 @@ function registerRoutes(
110
172
  closeSummary: "Close an Vibe64 Codex terminal."
111
173
  });
112
174
 
175
+ registerGlobalTerminalSnapshotRoutes(routes, {
176
+ close: (terminalSessionId) => terminalService().closeGlobalCodexTerminal(terminalSessionId),
177
+ path: "/codex-terminal/:terminalSessionId",
178
+ read: (terminalSessionId) => terminalService().readGlobalCodexTerminal(terminalSessionId),
179
+ readSummary: "Read a global Vibe64 Codex terminal snapshot.",
180
+ closeSummary: "Close a global Vibe64 Codex terminal."
181
+ });
182
+
183
+ registerToolTerminalSnapshotRoutes(routes, {
184
+ close: (toolId, terminalSessionId) => terminalService().closeProjectToolTerminal(toolId, terminalSessionId),
185
+ path: "/tools/:toolId/terminal/:terminalSessionId",
186
+ read: (toolId, terminalSessionId) => terminalService().readProjectToolTerminal(toolId, terminalSessionId),
187
+ readSummary: "Read a Vibe64 project tool terminal snapshot.",
188
+ closeSummary: "Close a Vibe64 project tool terminal."
189
+ });
190
+
191
+ registerFixTerminalSnapshotRoutes(routes, {
192
+ close: (jobId, terminalSessionId) => terminalService().closeFixCodexTerminal(jobId, terminalSessionId),
193
+ path: "/fix-codex-jobs/:jobId/terminal/:terminalSessionId",
194
+ read: (jobId, terminalSessionId) => terminalService().readFixCodexTerminal(jobId, terminalSessionId),
195
+ readSummary: "Read a Fix Codex terminal snapshot.",
196
+ closeSummary: "Close a Fix Codex terminal."
197
+ });
198
+
113
199
  registerTerminalSnapshotRoutes(routes, {
114
200
  close: (sessionId, terminalSessionId) => terminalService().closeCommandTerminal(sessionId, terminalSessionId),
115
201
  path: "/sessions/:sessionId/command-terminal/:terminalSessionId",
@@ -151,6 +237,26 @@ function terminalRouteInput(request) {
151
237
  };
152
238
  }
153
239
 
240
+ function globalTerminalRouteInput(request) {
241
+ return {
242
+ terminalSessionId: request.params.terminalSessionId
243
+ };
244
+ }
245
+
246
+ function toolTerminalRouteInput(request) {
247
+ return {
248
+ terminalSessionId: request.params.terminalSessionId,
249
+ toolId: request.params.toolId
250
+ };
251
+ }
252
+
253
+ function fixTerminalRouteInput(request) {
254
+ return {
255
+ jobId: request.params.jobId,
256
+ terminalSessionId: request.params.terminalSessionId
257
+ };
258
+ }
259
+
154
260
  function registerTerminalSnapshotRoutes(routes, {
155
261
  close,
156
262
  closeSummary,
@@ -176,7 +282,127 @@ function registerTerminalSnapshotRoutes(routes, {
176
282
  });
177
283
  }
178
284
 
285
+ function registerGlobalTerminalSnapshotRoutes(routes, {
286
+ close,
287
+ closeSummary,
288
+ path,
289
+ read,
290
+ readSummary
291
+ }) {
292
+ routes.serviceRoute("GET", path, {
293
+ failureStatus: 404,
294
+ successStatus: 200,
295
+ summary: readSummary
296
+ }, (request) => {
297
+ const input = globalTerminalRouteInput(request);
298
+ return read(input.terminalSessionId);
299
+ });
300
+
301
+ routes.serviceRoute("DELETE", path, {
302
+ statusCode: 200,
303
+ summary: closeSummary
304
+ }, (request) => {
305
+ const input = globalTerminalRouteInput(request);
306
+ return close(input.terminalSessionId);
307
+ });
308
+ }
309
+
310
+ function registerToolTerminalSnapshotRoutes(routes, {
311
+ close,
312
+ closeSummary,
313
+ path,
314
+ read,
315
+ readSummary
316
+ }) {
317
+ routes.serviceRoute("GET", path, {
318
+ failureStatus: 404,
319
+ successStatus: 200,
320
+ summary: readSummary
321
+ }, (request) => {
322
+ const input = toolTerminalRouteInput(request);
323
+ return read(input.toolId, input.terminalSessionId);
324
+ });
325
+
326
+ routes.serviceRoute("DELETE", path, {
327
+ statusCode: 200,
328
+ summary: closeSummary
329
+ }, (request) => {
330
+ const input = toolTerminalRouteInput(request);
331
+ return close(input.toolId, input.terminalSessionId);
332
+ });
333
+ }
334
+
335
+ function registerFixTerminalSnapshotRoutes(routes, {
336
+ close,
337
+ closeSummary,
338
+ path,
339
+ read,
340
+ readSummary
341
+ }) {
342
+ routes.serviceRoute("GET", path, {
343
+ failureStatus: 404,
344
+ successStatus: 200,
345
+ summary: readSummary
346
+ }, (request) => {
347
+ const input = fixTerminalRouteInput(request);
348
+ return read(input.jobId, input.terminalSessionId);
349
+ });
350
+
351
+ routes.serviceRoute("DELETE", path, {
352
+ statusCode: 200,
353
+ summary: closeSummary
354
+ }, (request) => {
355
+ const input = fixTerminalRouteInput(request);
356
+ return close(input.jobId, input.terminalSessionId);
357
+ });
358
+ }
359
+
179
360
  function registerVibe64TerminalWebSocketRoutes(app, routes) {
361
+ registerTerminalWebSocketRoute(app, {
362
+ routePath: `${routes.routeBase}/codex-terminal/:terminalSessionId/ws`,
363
+ serviceId: VIBE64_TERMINALS_SERVICE,
364
+ serviceUnavailableMessage: VIBE64_TERMINALS_UNAVAILABLE,
365
+ subscribe(service, { subscriber, terminalSessionId }) {
366
+ return service.subscribeGlobalCodexTerminal(terminalSessionId, subscriber);
367
+ },
368
+ resize(service, { cols, rows, terminalSessionId }) {
369
+ return service.resizeGlobalCodexTerminal(terminalSessionId, { cols, rows });
370
+ },
371
+ write(service, { data, terminalSessionId }) {
372
+ return service.writeGlobalCodexTerminal(terminalSessionId, data);
373
+ }
374
+ });
375
+
376
+ registerTerminalWebSocketRoute(app, {
377
+ routePath: `${routes.routeBase}/fix-codex-jobs/:jobId/terminal/:terminalSessionId/ws`,
378
+ serviceId: VIBE64_TERMINALS_SERVICE,
379
+ serviceUnavailableMessage: VIBE64_TERMINALS_UNAVAILABLE,
380
+ subscribe(service, { jobId, subscriber, terminalSessionId }) {
381
+ return service.subscribeFixCodexTerminal(jobId, terminalSessionId, subscriber);
382
+ },
383
+ resize(service, { cols, jobId, rows, terminalSessionId }) {
384
+ return service.resizeFixCodexTerminal(jobId, terminalSessionId, { cols, rows });
385
+ },
386
+ write(service, { data, jobId, terminalSessionId }) {
387
+ return service.writeFixCodexTerminal(jobId, terminalSessionId, data);
388
+ }
389
+ });
390
+
391
+ registerTerminalWebSocketRoute(app, {
392
+ routePath: `${routes.routeBase}/tools/:toolId/terminal/:terminalSessionId/ws`,
393
+ serviceId: VIBE64_TERMINALS_SERVICE,
394
+ serviceUnavailableMessage: VIBE64_TERMINALS_UNAVAILABLE,
395
+ subscribe(service, { subscriber, terminalSessionId, toolId }) {
396
+ return service.subscribeProjectToolTerminal(toolId, terminalSessionId, subscriber);
397
+ },
398
+ resize(service, { cols, rows, terminalSessionId, toolId }) {
399
+ return service.resizeProjectToolTerminal(toolId, terminalSessionId, { cols, rows });
400
+ },
401
+ write(service, { data, terminalSessionId, toolId }) {
402
+ return service.writeProjectToolTerminal(toolId, terminalSessionId, data);
403
+ }
404
+ });
405
+
180
406
  registerTerminalWebSocketRoute(app, {
181
407
  routePath: `${routes.routeBase}/sessions/:sessionId/codex-terminal/:terminalSessionId/ws`,
182
408
  serviceId: VIBE64_TERMINALS_SERVICE,
@@ -1,7 +1,18 @@
1
1
  import { createCodexTerminalController } from "./codexTerminal.js";
2
- import { createCommandTerminalController } from "./commandTerminal.js";
2
+ import {
3
+ createCommandTerminalController,
4
+ createProjectToolTerminalController
5
+ } from "./commandTerminal.js";
3
6
  import { createLaunchTargetTerminalController } from "./launchTargetTerminal.js";
4
7
  import { createShellTerminalController } from "./shellTerminal.js";
8
+ import {
9
+ projectToolFailureFixPrompt,
10
+ sessionTerminalFailureFixPrompt
11
+ } from "@local/vibe64-runtime/server/terminalFailureFixRequest";
12
+ import {
13
+ terminalTargetRoot,
14
+ terminalWorktreePath
15
+ } from "./terminalShared.js";
5
16
 
6
17
  function createService({
7
18
  projectService,
@@ -33,6 +44,9 @@ function createService({
33
44
  projectService,
34
45
  publishSessionChanged: publishSessionChanged.launchTarget
35
46
  });
47
+ const projectTool = createProjectToolTerminalController({
48
+ projectService
49
+ });
36
50
  const shell = createShellTerminalController({
37
51
  projectService
38
52
  });
@@ -65,10 +79,22 @@ function createService({
65
79
  return codex.closeTerminal(sessionId, terminalSessionId);
66
80
  },
67
81
 
82
+ closeGlobalCodexTerminal(terminalSessionId) {
83
+ return codex.closeGlobalTerminal(terminalSessionId);
84
+ },
85
+
86
+ closeFixCodexTerminal(jobId, terminalSessionId) {
87
+ return codex.closeFixTerminal(jobId, terminalSessionId);
88
+ },
89
+
68
90
  closeCommandTerminal(sessionId, terminalSessionId) {
69
91
  return command.closeTerminal(sessionId, terminalSessionId);
70
92
  },
71
93
 
94
+ closeProjectToolTerminal(toolId, terminalSessionId) {
95
+ return projectTool.closeTerminal(toolId, terminalSessionId);
96
+ },
97
+
72
98
  closeLaunchTargetTerminal(sessionId, terminalSessionId) {
73
99
  return launchTarget.closeTerminal(sessionId, terminalSessionId);
74
100
  },
@@ -81,6 +107,10 @@ function createService({
81
107
  return codex.injectCodexPrompt(sessionId, handoff);
82
108
  },
83
109
 
110
+ injectGlobalCodexPrompt(handoff = {}) {
111
+ return codex.injectGlobalCodexPrompt(handoff);
112
+ },
113
+
84
114
  ensureCodexThread(sessionId) {
85
115
  return codex.ensureThread(sessionId);
86
116
  },
@@ -89,6 +119,18 @@ function createService({
89
119
  return codex.terminalState(sessionId);
90
120
  },
91
121
 
122
+ globalCodexTerminalState() {
123
+ return codex.globalTerminalState();
124
+ },
125
+
126
+ readGlobalCodexTerminal(terminalSessionId) {
127
+ return codex.readGlobalTerminal(terminalSessionId);
128
+ },
129
+
130
+ readFixCodexTerminal(jobId, terminalSessionId) {
131
+ return codex.readFixTerminal(jobId, terminalSessionId);
132
+ },
133
+
92
134
  readCodexTerminal(sessionId, terminalSessionId) {
93
135
  return codex.readTerminal(sessionId, terminalSessionId);
94
136
  },
@@ -97,6 +139,10 @@ function createService({
97
139
  return command.readTerminal(sessionId, terminalSessionId);
98
140
  },
99
141
 
142
+ readProjectToolTerminal(toolId, terminalSessionId) {
143
+ return projectTool.readTerminal(toolId, terminalSessionId);
144
+ },
145
+
100
146
  readLaunchTargetTerminal(sessionId, terminalSessionId) {
101
147
  return launchTarget.readTerminal(sessionId, terminalSessionId);
102
148
  },
@@ -117,10 +163,67 @@ function createService({
117
163
  return codex.startTerminal(sessionId);
118
164
  },
119
165
 
166
+ startGlobalCodexTerminal() {
167
+ return codex.startGlobalTerminal();
168
+ },
169
+
170
+ async startProjectToolFixJob(toolId, input = {}) {
171
+ const targetRoot = projectService.targetRoot || "";
172
+ return codex.startFixJob({
173
+ prompt: projectToolFailureFixPrompt({
174
+ ...input,
175
+ targetRoot,
176
+ toolId: input.toolId || toolId,
177
+ toolLabel: input.toolLabel || input.actionLabel
178
+ }),
179
+ scope: "project",
180
+ subject: input.toolLabel || input.actionLabel || toolId,
181
+ targetRoot
182
+ });
183
+ },
184
+
185
+ async startSessionTerminalFixJob(sessionId, input = {}) {
186
+ const runtime = await projectService.createRuntime();
187
+ const session = await runtime.getSession(sessionId);
188
+ const targetRoot = terminalTargetRoot(session, projectService);
189
+ const worktreePath = terminalWorktreePath(session);
190
+ return codex.startFixJob({
191
+ prompt: sessionTerminalFailureFixPrompt({
192
+ ...input,
193
+ currentStep: input.currentStep || session.currentStep || "",
194
+ sessionId: input.sessionId || sessionId,
195
+ stepStatus: input.stepStatus || session.stepMachine?.status || "",
196
+ targetRoot,
197
+ worktreePath
198
+ }),
199
+ scope: "session",
200
+ subject: input.actionLabel || input.launchTargetLabel || input.actionId || input.launchTargetId || sessionId,
201
+ targetRoot,
202
+ workdir: worktreePath || targetRoot
203
+ });
204
+ },
205
+
206
+ reportFixCodexJob(jobId, input = {}) {
207
+ return codex.reportFixJob(jobId, input);
208
+ },
209
+
120
210
  startCommandTerminal(sessionId, input = {}) {
121
211
  return command.startTerminal(sessionId, input);
122
212
  },
123
213
 
214
+ async runProjectTool(toolId, input = {}) {
215
+ const run = await projectService.prepareProjectToolRun(toolId, input);
216
+ if (run?.ok === false) {
217
+ return run;
218
+ }
219
+ if (run.type === "prompt") {
220
+ return codex.injectGlobalCodexPrompt({
221
+ prompt: run.prompt
222
+ });
223
+ }
224
+ return projectTool.startPreparedRun(toolId, run);
225
+ },
226
+
124
227
  startLaunchTargetTerminal(sessionId, input = {}) {
125
228
  return launchTarget.startTerminal(sessionId, input);
126
229
  },
@@ -137,10 +240,22 @@ function createService({
137
240
  return codex.subscribeTerminal(sessionId, terminalSessionId, subscriber);
138
241
  },
139
242
 
243
+ subscribeGlobalCodexTerminal(terminalSessionId, subscriber) {
244
+ return codex.subscribeGlobalTerminal(terminalSessionId, subscriber);
245
+ },
246
+
247
+ subscribeFixCodexTerminal(jobId, terminalSessionId, subscriber) {
248
+ return codex.subscribeFixTerminal(jobId, terminalSessionId, subscriber);
249
+ },
250
+
140
251
  subscribeCommandTerminal(sessionId, terminalSessionId, subscriber) {
141
252
  return command.subscribeTerminal(sessionId, terminalSessionId, subscriber);
142
253
  },
143
254
 
255
+ subscribeProjectToolTerminal(toolId, terminalSessionId, subscriber) {
256
+ return projectTool.subscribeTerminal(toolId, terminalSessionId, subscriber);
257
+ },
258
+
144
259
  subscribeLaunchTargetTerminal(sessionId, terminalSessionId, subscriber) {
145
260
  return launchTarget.subscribeTerminal(sessionId, terminalSessionId, subscriber);
146
261
  },
@@ -157,18 +272,42 @@ function createService({
157
272
  return codex.writeTerminal(sessionId, terminalSessionId, data);
158
273
  },
159
274
 
275
+ writeGlobalCodexTerminal(terminalSessionId, data) {
276
+ return codex.writeGlobalTerminal(terminalSessionId, data);
277
+ },
278
+
279
+ writeFixCodexTerminal(jobId, terminalSessionId, data) {
280
+ return codex.writeFixTerminal(jobId, terminalSessionId, data);
281
+ },
282
+
160
283
  resizeCodexTerminal(sessionId, terminalSessionId, size) {
161
284
  return codex.resizeTerminal(sessionId, terminalSessionId, size);
162
285
  },
163
286
 
287
+ resizeGlobalCodexTerminal(terminalSessionId, size) {
288
+ return codex.resizeGlobalTerminal(terminalSessionId, size);
289
+ },
290
+
291
+ resizeFixCodexTerminal(jobId, terminalSessionId, size) {
292
+ return codex.resizeFixTerminal(jobId, terminalSessionId, size);
293
+ },
294
+
164
295
  writeCommandTerminal(sessionId, terminalSessionId, data) {
165
296
  return command.writeTerminal(sessionId, terminalSessionId, data);
166
297
  },
167
298
 
299
+ writeProjectToolTerminal(toolId, terminalSessionId, data) {
300
+ return projectTool.writeTerminal(toolId, terminalSessionId, data);
301
+ },
302
+
168
303
  resizeCommandTerminal(sessionId, terminalSessionId, size) {
169
304
  return command.resizeTerminal(sessionId, terminalSessionId, size);
170
305
  },
171
306
 
307
+ resizeProjectToolTerminal(toolId, terminalSessionId, size) {
308
+ return projectTool.resizeTerminal(toolId, terminalSessionId, size);
309
+ },
310
+
172
311
  writeLaunchTargetTerminal(sessionId, terminalSessionId, data) {
173
312
  return launchTarget.writeTerminal(sessionId, terminalSessionId, data);
174
313
  },
@@ -69,7 +69,7 @@ function targetToolchainTerminalArgs({
69
69
  ...dockerLabelArgs([
70
70
  kind ? studioDockerLabel("kind", kind) : "",
71
71
  `${STUDIO_DAEMON_PID_LABEL}=${process.pid}`,
72
- studioDockerLabel("session", sessionId),
72
+ sessionId ? studioDockerLabel("session", sessionId) : "",
73
73
  studioDockerLabel("terminal", terminalId),
74
74
  studioDockerLabel("target", stableHash(targetRoot)),
75
75
  ...extraLabels
@@ -13,9 +13,12 @@ import {
13
13
 
14
14
  const CODEX_TERMINAL_NAMESPACE = "vibe64-codex";
15
15
  const CODEX_TERMINAL_NAMESPACE_PREFIX = `${CODEX_TERMINAL_NAMESPACE}:`;
16
+ const GLOBAL_CODEX_TERMINAL_NAMESPACE = "vibe64-global-codex";
16
17
  const COMMAND_TERMINAL_NAMESPACE = "vibe64-command";
17
18
  const LAUNCH_TARGET_TERMINAL_NAMESPACE = "vibe64-launch-target";
18
19
  const SHELL_TERMINAL_NAMESPACE = "vibe64-shell";
20
+ const TOOL_TERMINAL_NAMESPACE = "vibe64-tool";
21
+ const FIX_CODEX_TERMINAL_NAMESPACE = "vibe64-fix-codex";
19
22
 
20
23
  function vibe64Result(operation) {
21
24
  return sharedVibe64Result(operation, {
@@ -28,10 +31,22 @@ function codexTerminalNamespace(sessionId) {
28
31
  return `${CODEX_TERMINAL_NAMESPACE}:${String(sessionId || "")}`;
29
32
  }
30
33
 
34
+ function globalCodexTerminalNamespace() {
35
+ return GLOBAL_CODEX_TERMINAL_NAMESPACE;
36
+ }
37
+
38
+ function fixCodexTerminalNamespace(jobId) {
39
+ return `${FIX_CODEX_TERMINAL_NAMESPACE}:${String(jobId || "")}`;
40
+ }
41
+
31
42
  function commandTerminalNamespace(sessionId) {
32
43
  return `${COMMAND_TERMINAL_NAMESPACE}:${String(sessionId || "")}`;
33
44
  }
34
45
 
46
+ function toolTerminalNamespace(toolId) {
47
+ return `${TOOL_TERMINAL_NAMESPACE}:${String(toolId || "")}`;
48
+ }
49
+
35
50
  function launchTargetTerminalNamespace(sessionId) {
36
51
  return `${LAUNCH_TARGET_TERMINAL_NAMESPACE}:${String(sessionId || "")}`;
37
52
  }
@@ -40,6 +55,21 @@ function shellTerminalNamespace(sessionId) {
40
55
  return `${SHELL_TERMINAL_NAMESPACE}:${String(sessionId || "")}`;
41
56
  }
42
57
 
58
+ function commandInvocation({
59
+ args = [],
60
+ command = ""
61
+ } = {}) {
62
+ const normalizedCommand = String(command || "").trim();
63
+ if (!normalizedCommand) {
64
+ return "";
65
+ }
66
+ const normalizedArgs = Array.isArray(args) ? args : [];
67
+ return [
68
+ normalizedCommand,
69
+ ...normalizedArgs.map((arg) => String(arg))
70
+ ].map(shellQuote).join(" ");
71
+ }
72
+
43
73
  async function directoryExists(filePath = "") {
44
74
  try {
45
75
  return (await stat(filePath)).isDirectory();
@@ -97,14 +127,18 @@ export {
97
127
  CODEX_TERMINAL_NAMESPACE_PREFIX,
98
128
  vibe64Result,
99
129
  codexTerminalNamespace,
130
+ commandInvocation,
100
131
  commandTerminalNamespace,
101
132
  directoryExists,
133
+ fixCodexTerminalNamespace,
134
+ globalCodexTerminalNamespace,
102
135
  launchTargetTerminalNamespace,
103
136
  pathInsideOrEqual,
104
137
  shellTerminalNamespace,
105
138
  sessionTerminalCwd,
106
139
  terminalTargetRoot,
107
140
  terminalWorktreePath,
141
+ toolTerminalNamespace,
108
142
  dockerCommand,
109
143
  normalizePlainObject,
110
144
  shellQuote,