vibeman 0.0.1 → 0.0.3

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 (102) hide show
  1. package/dist/index.js +5 -7
  2. package/dist/runtime/api/.tsbuildinfo +1 -1
  3. package/dist/runtime/api/agent/agent-service.d.ts +18 -19
  4. package/dist/runtime/api/agent/agent-service.js +61 -58
  5. package/dist/runtime/api/agent/ai-providers/claude-code-adapter.d.ts +2 -2
  6. package/dist/runtime/api/agent/ai-providers/claude-code-adapter.js +25 -36
  7. package/dist/runtime/api/agent/ai-providers/codex-cli-provider.d.ts +2 -0
  8. package/dist/runtime/api/agent/ai-providers/codex-cli-provider.js +109 -43
  9. package/dist/runtime/api/agent/ai-providers/types.d.ts +2 -0
  10. package/dist/runtime/api/agent/codex-cli-provider.test.js +83 -1
  11. package/dist/runtime/api/agent/parsers.d.ts +1 -0
  12. package/dist/runtime/api/agent/parsers.js +75 -8
  13. package/dist/runtime/api/agent/prompt-service.d.ts +14 -1
  14. package/dist/runtime/api/agent/prompt-service.js +123 -14
  15. package/dist/runtime/api/agent/prompt-service.test.js +230 -0
  16. package/dist/runtime/api/agent/routing-policy.d.ts +25 -42
  17. package/dist/runtime/api/agent/routing-policy.js +82 -132
  18. package/dist/runtime/api/agent/routing-policy.test.js +63 -0
  19. package/dist/runtime/api/api/routers/ai.d.ts +19 -7
  20. package/dist/runtime/api/api/routers/ai.js +9 -23
  21. package/dist/runtime/api/api/routers/executions.d.ts +4 -4
  22. package/dist/runtime/api/api/routers/executions.js +12 -21
  23. package/dist/runtime/api/api/routers/provider-config.d.ts +165 -0
  24. package/dist/runtime/api/api/routers/provider-config.js +252 -0
  25. package/dist/runtime/api/api/routers/tasks.d.ts +9 -9
  26. package/dist/runtime/api/api/routers/workflows.d.ts +23 -16
  27. package/dist/runtime/api/api/routers/workflows.js +30 -27
  28. package/dist/runtime/api/api/routers/worktrees.d.ts +4 -5
  29. package/dist/runtime/api/api/routers/worktrees.js +11 -11
  30. package/dist/runtime/api/api/trpc.d.ts +16 -16
  31. package/dist/runtime/api/index.js +2 -10
  32. package/dist/runtime/api/lib/local-config.d.ts +245 -0
  33. package/dist/runtime/api/lib/local-config.js +288 -0
  34. package/dist/runtime/api/lib/provider-detection.d.ts +59 -0
  35. package/dist/runtime/api/lib/provider-detection.js +244 -0
  36. package/dist/runtime/api/lib/server/bootstrap.d.ts +38 -0
  37. package/dist/runtime/api/lib/server/bootstrap.js +197 -0
  38. package/dist/runtime/api/lib/server/project-root.js +24 -1
  39. package/dist/runtime/api/lib/trpc/server.d.ts +143 -30
  40. package/dist/runtime/api/lib/trpc/server.js +8 -8
  41. package/dist/runtime/api/lib/trpc/ws-server.js +2 -2
  42. package/dist/runtime/api/router.d.ts +144 -31
  43. package/dist/runtime/api/router.js +9 -31
  44. package/dist/runtime/api/settings-service.js +51 -1
  45. package/dist/runtime/api/types/index.d.ts +8 -1
  46. package/dist/runtime/api/types/settings.d.ts +15 -2
  47. package/dist/runtime/api/workflows/vibing-orchestrator.d.ts +8 -3
  48. package/dist/runtime/api/workflows/vibing-orchestrator.js +214 -184
  49. package/dist/runtime/web/.next/BUILD_ID +1 -1
  50. package/dist/runtime/web/.next/app-build-manifest.json +19 -12
  51. package/dist/runtime/web/.next/app-path-routes-manifest.json +2 -1
  52. package/dist/runtime/web/.next/build-manifest.json +2 -2
  53. package/dist/runtime/web/.next/prerender-manifest.json +10 -10
  54. package/dist/runtime/web/.next/routes-manifest.json +8 -0
  55. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route.js +1 -0
  56. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route.js.nft.json +1 -0
  57. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route_client-reference-manifest.js +1 -0
  58. package/dist/runtime/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  59. package/dist/runtime/web/.next/server/app/_not-found.html +2 -2
  60. package/dist/runtime/web/.next/server/app/_not-found.rsc +5 -5
  61. package/dist/runtime/web/.next/server/app/api/health/route.js +1 -1
  62. package/dist/runtime/web/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  63. package/dist/runtime/web/.next/server/app/api/images/[...path]/route.js +1 -1
  64. package/dist/runtime/web/.next/server/app/api/images/[...path]/route_client-reference-manifest.js +1 -1
  65. package/dist/runtime/web/.next/server/app/api/upload/route.js +1 -1
  66. package/dist/runtime/web/.next/server/app/api/upload/route_client-reference-manifest.js +1 -1
  67. package/dist/runtime/web/.next/server/app/index.html +2 -2
  68. package/dist/runtime/web/.next/server/app/index.rsc +6 -6
  69. package/dist/runtime/web/.next/server/app/page.js +21 -21
  70. package/dist/runtime/web/.next/server/app/page_client-reference-manifest.js +1 -1
  71. package/dist/runtime/web/.next/server/app-paths-manifest.json +2 -1
  72. package/dist/runtime/web/.next/server/chunks/458.js +1 -1
  73. package/dist/runtime/web/.next/server/pages/404.html +2 -2
  74. package/dist/runtime/web/.next/server/pages/500.html +1 -1
  75. package/dist/runtime/web/.next/server/pages-manifest.json +1 -1
  76. package/dist/runtime/web/.next/server/server-reference-manifest.json +1 -1
  77. package/dist/runtime/web/.next/static/5_15u1WQCxN1_eHZpldCv/_buildManifest.js +1 -0
  78. package/dist/runtime/web/.next/static/chunks/{277-0142a939f08738c3.js → 823-6f371a6e829adbba.js} +1 -1
  79. package/dist/runtime/web/.next/static/chunks/app/.vibeman/assets/images/[...path]/route-751c9265a65409e5.js +1 -0
  80. package/dist/runtime/web/.next/static/chunks/app/api/health/route-751c9265a65409e5.js +1 -0
  81. package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-751c9265a65409e5.js +1 -0
  82. package/dist/runtime/web/.next/static/chunks/app/api/upload/route-751c9265a65409e5.js +1 -0
  83. package/dist/runtime/web/.next/static/chunks/app/{layout-dc0cfd29075b2160.js → layout-8435322f09fd0975.js} +1 -1
  84. package/dist/runtime/web/.next/static/chunks/app/page-9fe7d75095b4ccec.js +1 -0
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +5 -1
  87. package/dist/runtime/api/lib/image-paste-drop-extension.d.ts +0 -26
  88. package/dist/runtime/api/lib/image-paste-drop-extension.js +0 -125
  89. package/dist/runtime/api/lib/markdown-utils.d.ts +0 -8
  90. package/dist/runtime/api/lib/markdown-utils.js +0 -282
  91. package/dist/runtime/api/lib/markdown-utils.test.js +0 -348
  92. package/dist/runtime/api/lib/tiptap-utils.clamp-selection.test.js +0 -27
  93. package/dist/runtime/api/lib/tiptap-utils.d.ts +0 -130
  94. package/dist/runtime/api/lib/tiptap-utils.js +0 -327
  95. package/dist/runtime/web/.next/static/1HR8N0rJkCvFRtbTPJMyH/_buildManifest.js +0 -1
  96. package/dist/runtime/web/.next/static/chunks/app/api/health/route-105a61ae865ba536.js +0 -1
  97. package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-105a61ae865ba536.js +0 -1
  98. package/dist/runtime/web/.next/static/chunks/app/api/upload/route-105a61ae865ba536.js +0 -1
  99. package/dist/runtime/web/.next/static/chunks/app/page-f34a8b196b18850b.js +0 -1
  100. /package/dist/runtime/api/{lib/markdown-utils.test.d.ts → agent/prompt-service.test.d.ts} +0 -0
  101. /package/dist/runtime/api/{lib/tiptap-utils.clamp-selection.test.d.ts → agent/routing-policy.test.d.ts} +0 -0
  102. /package/dist/runtime/web/.next/static/{1HR8N0rJkCvFRtbTPJMyH → 5_15u1WQCxN1_eHZpldCv}/_ssgManifest.js +0 -0
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  import { on, EventEmitter } from 'events';
3
3
  import { publicProcedure } from '../trpc.js';
4
4
  import { TRPCError } from '@trpc/server';
5
- export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSync }) {
5
+ export function buildWorkflowRoutes({ vibingOrchestrator }) {
6
6
  const OperationOverrideSchema = z.object({
7
7
  provider: z.string().optional(),
8
8
  model: z.string().optional(),
@@ -10,9 +10,10 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
10
10
  const WorkflowAIRoutingOverrides = z
11
11
  .object({
12
12
  execute_task: OperationOverrideSchema.optional(),
13
- improve_task: OperationOverrideSchema.optional(),
13
+ quality_checks: OperationOverrideSchema.optional(),
14
14
  ai_codereview: OperationOverrideSchema.optional(),
15
15
  ai_merge: OperationOverrideSchema.optional(),
16
+ improve_task: OperationOverrideSchema.optional(),
16
17
  })
17
18
  .partial();
18
19
  const WorkflowConfig = z.object({
@@ -30,14 +31,14 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
30
31
  updateWorkflowOptions: publicProcedure
31
32
  .input(z.object({ workflowId: z.string(), config: WorkflowConfig }))
32
33
  .mutation(async ({ input }) => {
33
- const orchestrator = await requireOrchestrator();
34
+ const orchestrator = vibingOrchestrator;
34
35
  await orchestrator.updateWorkflowOptions(input.workflowId, input.config);
35
36
  return { success: true };
36
37
  }),
37
38
  startWorkflow: publicProcedure
38
39
  .input(z.object({ taskId: z.string(), config: WorkflowConfigOpt }))
39
40
  .mutation(async ({ input }) => {
40
- const orchestrator = await requireOrchestrator();
41
+ const orchestrator = vibingOrchestrator;
41
42
  const workflowId = await orchestrator.startWorkflow(input.taskId, input.config || {});
42
43
  return { workflowId };
43
44
  }),
@@ -45,7 +46,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
45
46
  .input(z.object({ workflowId: z.string() }))
46
47
  .mutation(async ({ input }) => {
47
48
  try {
48
- const orchestrator = await requireOrchestrator();
49
+ const orchestrator = vibingOrchestrator;
49
50
  await orchestrator.continueWorkflow(input.workflowId);
50
51
  return { success: true };
51
52
  }
@@ -58,7 +59,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
58
59
  runValidation: publicProcedure
59
60
  .input(z.object({ workflowId: z.string() }))
60
61
  .mutation(async ({ input }) => {
61
- const orchestrator = await requireOrchestrator();
62
+ const orchestrator = vibingOrchestrator;
62
63
  await orchestrator.runValidation(input.workflowId);
63
64
  return { success: true };
64
65
  }),
@@ -69,7 +70,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
69
70
  model: z.string().optional(),
70
71
  }))
71
72
  .mutation(async ({ input }) => {
72
- const orchestrator = await requireOrchestrator();
73
+ const orchestrator = vibingOrchestrator;
73
74
  await orchestrator.runMerge(input.workflowId, {
74
75
  provider: input.provider,
75
76
  model: input.model,
@@ -79,14 +80,14 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
79
80
  runCleanup: publicProcedure
80
81
  .input(z.object({ workflowId: z.string() }))
81
82
  .mutation(async ({ input }) => {
82
- const orchestrator = await requireOrchestrator();
83
+ const orchestrator = vibingOrchestrator;
83
84
  await orchestrator.runCleanup(input.workflowId);
84
85
  return { success: true };
85
86
  }),
86
87
  pauseWorkflow: publicProcedure
87
88
  .input(z.object({ workflowId: z.string() }))
88
89
  .mutation(async ({ input }) => {
89
- const orchestrator = await requireOrchestrator();
90
+ const orchestrator = vibingOrchestrator;
90
91
  await orchestrator.pauseWorkflow(input.workflowId);
91
92
  return { success: true };
92
93
  }),
@@ -97,7 +98,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
97
98
  force: z.boolean().optional(),
98
99
  }))
99
100
  .mutation(async ({ input }) => {
100
- const orchestrator = await requireOrchestrator();
101
+ const orchestrator = vibingOrchestrator;
101
102
  await orchestrator.resetWorkflow(input.workflowId, {
102
103
  deleteWorktree: input.deleteWorktree,
103
104
  force: input.force,
@@ -107,14 +108,14 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
107
108
  approveWorkflow: publicProcedure
108
109
  .input(z.object({ workflowId: z.string(), comments: z.string().optional() }))
109
110
  .mutation(async ({ input }) => {
110
- const orchestrator = await requireOrchestrator();
111
+ const orchestrator = vibingOrchestrator;
111
112
  await orchestrator.approveWorkflow(input.workflowId);
112
113
  return { success: true };
113
114
  }),
114
115
  rejectWorkflow: publicProcedure
115
116
  .input(z.object({ workflowId: z.string(), feedback: z.string() }))
116
117
  .mutation(async ({ input }) => {
117
- const orchestrator = await requireOrchestrator();
118
+ const orchestrator = vibingOrchestrator;
118
119
  await orchestrator.rejectWorkflow(input.workflowId, input.feedback);
119
120
  return { success: true };
120
121
  }),
@@ -122,7 +123,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
122
123
  .input(z.object({ taskId: z.string().optional() }).optional())
123
124
  .subscription(async function* (opts) {
124
125
  const input = opts.input;
125
- const orchestrator = requireOrchestratorSync();
126
+ const orchestrator = vibingOrchestrator;
126
127
  const proxy = new EventEmitter();
127
128
  const handleStarted = (workflow) => {
128
129
  if (!input?.taskId || workflow.taskId === input.taskId)
@@ -208,22 +209,22 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
208
209
  getWorkflow: publicProcedure
209
210
  .input(z.object({ workflowId: z.string() }))
210
211
  .query(async ({ input }) => {
211
- const orchestrator = await requireOrchestrator();
212
+ const orchestrator = vibingOrchestrator;
212
213
  return orchestrator.getWorkflow(input.workflowId);
213
214
  }),
214
215
  getWorkflowsByTaskId: publicProcedure
215
216
  .input(z.object({ taskId: z.string() }))
216
217
  .query(async ({ input }) => {
217
- const orchestrator = await requireOrchestrator();
218
+ const orchestrator = vibingOrchestrator;
218
219
  return orchestrator.getTaskWorkflows(input.taskId);
219
220
  }),
220
221
  getLatestWorkflowByTaskId: publicProcedure
221
222
  .input(z.object({ taskId: z.string() }))
222
223
  .query(async ({ input }) => {
223
- const orchestrator = await requireOrchestrator();
224
+ const orchestrator = vibingOrchestrator;
224
225
  return orchestrator.getLatestWorkflowByTask(input.taskId);
225
226
  }),
226
- reviewCode: publicProcedure
227
+ aiReviewCode: publicProcedure
227
228
  .input(z.object({
228
229
  taskId: z.string(),
229
230
  workflowId: z.string().optional(),
@@ -232,31 +233,33 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
232
233
  model: z.string().optional(),
233
234
  }))
234
235
  .mutation(async ({ input }) => {
235
- const orchestrator = await requireOrchestrator();
236
- return await orchestrator.reviewCode(input.taskId, input.reviewContext, {
236
+ const orchestrator = vibingOrchestrator;
237
+ const overrides = input.provider || input.model
238
+ ? { provider: input.provider, model: input.model }
239
+ : undefined;
240
+ return await orchestrator.aiReviewCode(input.taskId, input.reviewContext, {
237
241
  workflowId: input.workflowId,
238
- provider: input.provider,
239
- model: input.model,
242
+ overrides,
240
243
  });
241
244
  }),
242
245
  approveAndContinueReview: publicProcedure
243
246
  .input(z.object({ workflowId: z.string() }))
244
247
  .mutation(async ({ input }) => {
245
- const orchestrator = await requireOrchestrator();
248
+ const orchestrator = vibingOrchestrator;
246
249
  await orchestrator.approveAndContinueReview(input.workflowId);
247
250
  return { success: true };
248
251
  }),
249
252
  markCompleted: publicProcedure
250
253
  .input(z.object({ workflowId: z.string() }))
251
254
  .mutation(async ({ input }) => {
252
- const orchestrator = await requireOrchestrator();
255
+ const orchestrator = vibingOrchestrator;
253
256
  await orchestrator.markWorkflowCompleted(input.workflowId);
254
257
  return { success: true };
255
258
  }),
256
259
  checkWorktreeStatus: publicProcedure
257
260
  .input(z.object({ workflowId: z.string() }))
258
261
  .mutation(async ({ input }) => {
259
- const orchestrator = await requireOrchestrator();
262
+ const orchestrator = vibingOrchestrator;
260
263
  return await orchestrator.checkWorktreeStatus(input.workflowId);
261
264
  }),
262
265
  rerunImplementation: publicProcedure
@@ -267,7 +270,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
267
270
  model: z.string().optional(),
268
271
  }))
269
272
  .mutation(async ({ input }) => {
270
- const orchestrator = await requireOrchestrator();
273
+ const orchestrator = vibingOrchestrator;
271
274
  await orchestrator.rerunImplementation(input.workflowId, input.feedback, {
272
275
  provider: input.provider,
273
276
  model: input.model,
@@ -277,7 +280,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
277
280
  skipToNextPhase: publicProcedure
278
281
  .input(z.object({ workflowId: z.string() }))
279
282
  .mutation(async ({ input }) => {
280
- const orchestrator = await requireOrchestrator();
283
+ const orchestrator = vibingOrchestrator;
281
284
  await orchestrator.skipToNextPhase(input.workflowId);
282
285
  return { success: true };
283
286
  }),
@@ -300,7 +303,7 @@ export function buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSy
300
303
  ]),
301
304
  }))
302
305
  .mutation(async ({ input }) => {
303
- const orchestrator = await requireOrchestrator();
306
+ const orchestrator = vibingOrchestrator;
304
307
  await orchestrator.rerunPhase(input.workflowId, input.phase);
305
308
  return { success: true };
306
309
  }),
@@ -1,9 +1,8 @@
1
1
  import type { VibingOrchestrator } from '../../workflows/vibing-orchestrator.js';
2
2
  type Deps = {
3
- requireOrchestrator: () => Promise<VibingOrchestrator>;
4
- requireOrchestratorSync: () => VibingOrchestrator;
3
+ vibingOrchestrator: VibingOrchestrator;
5
4
  };
6
- export declare function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSync }: Deps): {
5
+ export declare function buildWorktreeRoutes({ vibingOrchestrator }: Deps): {
7
6
  readonly listWorktrees: import("@trpc/server").TRPCQueryProcedure<{
8
7
  input: void;
9
8
  output: (import("../../types/index.js").WorktreeInfo & {
@@ -88,9 +87,9 @@ export declare function buildWorktreeRoutes({ requireOrchestrator, requireOrches
88
87
  readonly cleanupWorktree: import("@trpc/server").TRPCMutationProcedure<{
89
88
  input: {
90
89
  isConnectedToTask: boolean;
91
- worktreePath?: string | undefined;
92
- force?: boolean | undefined;
93
90
  taskId?: string | undefined;
91
+ force?: boolean | undefined;
92
+ worktreePath?: string | undefined;
94
93
  branchName?: string | undefined;
95
94
  };
96
95
  output: {
@@ -2,19 +2,19 @@ import { z } from 'zod';
2
2
  import { publicProcedure } from '../trpc.js';
3
3
  import { TaskIdSchema, WorktreePathSchema, withErrors } from '../router-helpers.js';
4
4
  import { log } from '../../lib/logger.js';
5
- export function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSync }) {
5
+ export function buildWorktreeRoutes({ vibingOrchestrator }) {
6
6
  return {
7
7
  listWorktrees: publicProcedure.query(withErrors('list worktrees', 'router:listWorktrees', async () => {
8
- const orchestrator = await requireOrchestrator();
8
+ const orchestrator = vibingOrchestrator;
9
9
  return await orchestrator.listWorktrees();
10
10
  })),
11
11
  syncWorktreeState: publicProcedure.mutation(withErrors('sync worktree state', 'router:syncWorktreeState', async () => {
12
- const orchestrator = await requireOrchestrator();
12
+ const orchestrator = vibingOrchestrator;
13
13
  await orchestrator.syncWorktreeState();
14
14
  return { success: true, message: 'Worktree state synchronized' };
15
15
  })),
16
16
  getWorktreeInfo: publicProcedure.input(TaskIdSchema).query(async ({ input }) => {
17
- const orchestrator = await requireOrchestrator();
17
+ const orchestrator = vibingOrchestrator;
18
18
  const worktree = orchestrator.getWorktreeInfo(input.taskId);
19
19
  if (!worktree)
20
20
  return null;
@@ -22,7 +22,7 @@ export function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSy
22
22
  return serializableWorktree;
23
23
  }),
24
24
  createWorktree: publicProcedure.input(TaskIdSchema).mutation(async ({ input }) => {
25
- const orchestrator = await requireOrchestrator();
25
+ const orchestrator = vibingOrchestrator;
26
26
  const worktree = await orchestrator.createWorktree(input.taskId);
27
27
  const { git, ...serializableWorktree } = worktree;
28
28
  return serializableWorktree;
@@ -30,7 +30,7 @@ export function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSy
30
30
  deleteWorktree: publicProcedure
31
31
  .input(z.object({ taskId: z.string(), force: z.coerce.boolean().optional() }))
32
32
  .mutation(async ({ input }) => {
33
- const orchestrator = await requireOrchestrator();
33
+ const orchestrator = vibingOrchestrator;
34
34
  await orchestrator.deleteWorktree(input.taskId, input.force || false);
35
35
  if (orchestrator) {
36
36
  await orchestrator.removeWorkflowsByTask(input.taskId);
@@ -38,13 +38,13 @@ export function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSy
38
38
  return { success: true };
39
39
  }),
40
40
  openInEditor: publicProcedure.input(WorktreePathSchema).mutation(withErrors('open in editor', 'router:openInEditor', async ({ input }) => {
41
- const orchestrator = requireOrchestratorSync();
41
+ const orchestrator = vibingOrchestrator;
42
42
  await orchestrator.openInEditor(input.worktreePath);
43
43
  // Ensure we return a clean, serializable object
44
44
  return { success: true };
45
45
  })),
46
46
  openInTerminal: publicProcedure.input(WorktreePathSchema).mutation(withErrors('open in terminal', 'router:openInTerminal', async ({ input }) => {
47
- const orchestrator = requireOrchestratorSync();
47
+ const orchestrator = vibingOrchestrator;
48
48
  await orchestrator.openInTerminal(input.worktreePath);
49
49
  // Ensure we return a clean, serializable object
50
50
  return { success: true };
@@ -53,14 +53,14 @@ export function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSy
53
53
  createWorktreePR: publicProcedure
54
54
  .input(z.object({ taskId: z.string(), baseBranch: z.string().optional().default('main') }))
55
55
  .mutation(async ({ input }) => {
56
- const orchestrator = await requireOrchestrator();
56
+ const orchestrator = vibingOrchestrator;
57
57
  log.warn('Deprecated route used: createWorktreePR; prefer createPullRequest', { taskId: input.taskId }, 'router:createWorktreePR');
58
58
  return await orchestrator.createPullRequest(input.taskId, input.baseBranch);
59
59
  }),
60
60
  createPullRequest: publicProcedure
61
61
  .input(z.object({ taskId: z.string(), baseBranch: z.string().optional().default('main') }))
62
62
  .mutation(withErrors('create pull request', 'router:createPullRequest', async ({ input }) => {
63
- const orchestrator = await requireOrchestrator();
63
+ const orchestrator = vibingOrchestrator;
64
64
  return await orchestrator.createPullRequest(input.taskId, input.baseBranch);
65
65
  })),
66
66
  cleanupWorktree: publicProcedure
@@ -72,7 +72,7 @@ export function buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSy
72
72
  force: z.coerce.boolean().optional().default(false),
73
73
  }))
74
74
  .mutation(async ({ input }) => {
75
- const orchestrator = await requireOrchestrator();
75
+ const orchestrator = vibingOrchestrator;
76
76
  await orchestrator.cleanupWorktree(input);
77
77
  return { success: true };
78
78
  }),
@@ -31,26 +31,26 @@ export declare const TaskCreateSchema: z.ZodObject<{
31
31
  comments: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
32
32
  content: z.ZodString;
33
33
  }, "strip", z.ZodTypeAny, {
34
- type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
35
- status: "backlog" | "in-progress" | "review" | "done";
36
- priority: "low" | "medium" | "high";
34
+ status: "review" | "in-progress" | "backlog" | "done";
37
35
  title: string;
36
+ type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
38
37
  tags: string[];
39
38
  assignee: string[];
39
+ priority: "low" | "medium" | "high";
40
40
  comments: string[];
41
41
  content: string;
42
42
  id?: string | undefined;
43
43
  due_date?: string | undefined;
44
44
  }, {
45
- type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
46
45
  title: string;
46
+ type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
47
47
  content: string;
48
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
49
- priority?: "low" | "medium" | "high" | undefined;
48
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
50
49
  id?: string | undefined;
51
50
  tags?: string[] | undefined;
52
51
  due_date?: string | undefined;
53
52
  assignee?: string[] | undefined;
53
+ priority?: "low" | "medium" | "high" | undefined;
54
54
  comments?: string[] | undefined;
55
55
  }>;
56
56
  export declare const TaskUpdateSchema: z.ZodObject<{
@@ -68,25 +68,25 @@ export declare const TaskUpdateSchema: z.ZodObject<{
68
68
  deleted_at: z.ZodOptional<z.ZodString>;
69
69
  }, "strip", z.ZodTypeAny, {
70
70
  id: string;
71
- type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
72
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
73
- priority?: "low" | "medium" | "high" | undefined;
71
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
74
72
  title?: string | undefined;
73
+ type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
75
74
  tags?: string[] | undefined;
76
75
  due_date?: string | undefined;
77
76
  assignee?: string[] | undefined;
77
+ priority?: "low" | "medium" | "high" | undefined;
78
78
  comments?: string[] | undefined;
79
79
  content?: string | undefined;
80
80
  deleted_at?: string | undefined;
81
81
  }, {
82
82
  id: string;
83
- type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
84
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
85
- priority?: "low" | "medium" | "high" | undefined;
83
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
86
84
  title?: string | undefined;
85
+ type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
87
86
  tags?: string[] | undefined;
88
87
  due_date?: string | undefined;
89
88
  assignee?: string[] | undefined;
89
+ priority?: "low" | "medium" | "high" | undefined;
90
90
  comments?: string[] | undefined;
91
91
  content?: string | undefined;
92
92
  deleted_at?: string | undefined;
@@ -100,19 +100,19 @@ export declare const TaskFilterSchema: z.ZodObject<{
100
100
  includeDeleted: z.ZodOptional<z.ZodBoolean>;
101
101
  onlyDeleted: z.ZodOptional<z.ZodBoolean>;
102
102
  }, "strip", z.ZodTypeAny, {
103
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
103
104
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
104
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
105
+ tags?: string[] | undefined;
105
106
  priority?: "low" | "medium" | "high" | undefined;
106
107
  search?: string | undefined;
107
- tags?: string[] | undefined;
108
108
  includeDeleted?: boolean | undefined;
109
109
  onlyDeleted?: boolean | undefined;
110
110
  }, {
111
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
111
112
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
112
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
113
+ tags?: string[] | undefined;
113
114
  priority?: "low" | "medium" | "high" | undefined;
114
115
  search?: string | undefined;
115
- tags?: string[] | undefined;
116
116
  includeDeleted?: boolean | undefined;
117
117
  onlyDeleted?: boolean | undefined;
118
118
  }>;
@@ -100,16 +100,8 @@ try {
100
100
  if (isMain) {
101
101
  const host = process.env.HOST || 'localhost';
102
102
  const resolveApiPort = async () => {
103
- // Highest precedence: explicit API port
104
- const explicit = getNumberEnv('VIBEMAN_API_PORT', NaN);
105
- if (Number.isFinite(explicit) && explicit > 0)
106
- return explicit;
107
- // If PORT (web) is set, use web+1
108
- const webPort = getNumberEnv('PORT', 0);
109
- if (webPort > 0)
110
- return webPort + 1;
111
- // Default dev behavior: assume web on 3000, so API on 3001
112
- return 3001;
103
+ const port = getNumberEnv('PORT', 3000);
104
+ return port + 1;
113
105
  };
114
106
  (async () => {
115
107
  const port = await resolveApiPort();
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Local Configuration Manager
3
+ * Handles machine-specific configuration that should not be committed to git
4
+ */
5
+ import { EventEmitter } from 'events';
6
+ import { z } from 'zod';
7
+ declare const LocalConfigSchema: z.ZodObject<{
8
+ providers: z.ZodOptional<z.ZodObject<{
9
+ 'claude-code': z.ZodOptional<z.ZodObject<{
10
+ binPath: z.ZodOptional<z.ZodString>;
11
+ detectedPath: z.ZodOptional<z.ZodString>;
12
+ lastDetected: z.ZodOptional<z.ZodString>;
13
+ detectionMethod: z.ZodOptional<z.ZodEnum<["explicit", "PATH", "common-location"]>>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ binPath?: string | undefined;
16
+ detectedPath?: string | undefined;
17
+ lastDetected?: string | undefined;
18
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
19
+ }, {
20
+ binPath?: string | undefined;
21
+ detectedPath?: string | undefined;
22
+ lastDetected?: string | undefined;
23
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
24
+ }>>;
25
+ codex: z.ZodOptional<z.ZodObject<{
26
+ binPath: z.ZodOptional<z.ZodString>;
27
+ detectedPath: z.ZodOptional<z.ZodString>;
28
+ lastDetected: z.ZodOptional<z.ZodString>;
29
+ detectionMethod: z.ZodOptional<z.ZodEnum<["explicit", "PATH", "common-location"]>>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ binPath?: string | undefined;
32
+ detectedPath?: string | undefined;
33
+ lastDetected?: string | undefined;
34
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
35
+ }, {
36
+ binPath?: string | undefined;
37
+ detectedPath?: string | undefined;
38
+ lastDetected?: string | undefined;
39
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
40
+ }>>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ 'claude-code'?: {
43
+ binPath?: string | undefined;
44
+ detectedPath?: string | undefined;
45
+ lastDetected?: string | undefined;
46
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
47
+ } | undefined;
48
+ codex?: {
49
+ binPath?: string | undefined;
50
+ detectedPath?: string | undefined;
51
+ lastDetected?: string | undefined;
52
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
53
+ } | undefined;
54
+ }, {
55
+ 'claude-code'?: {
56
+ binPath?: string | undefined;
57
+ detectedPath?: string | undefined;
58
+ lastDetected?: string | undefined;
59
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
60
+ } | undefined;
61
+ codex?: {
62
+ binPath?: string | undefined;
63
+ detectedPath?: string | undefined;
64
+ lastDetected?: string | undefined;
65
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
66
+ } | undefined;
67
+ }>>;
68
+ cache: z.ZodOptional<z.ZodObject<{
69
+ lastProviderValidation: z.ZodOptional<z.ZodString>;
70
+ validationResults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
71
+ available: z.ZodBoolean;
72
+ error: z.ZodOptional<z.ZodString>;
73
+ version: z.ZodOptional<z.ZodString>;
74
+ checkedAt: z.ZodString;
75
+ }, "strip", z.ZodTypeAny, {
76
+ available: boolean;
77
+ checkedAt: string;
78
+ error?: string | undefined;
79
+ version?: string | undefined;
80
+ }, {
81
+ available: boolean;
82
+ checkedAt: string;
83
+ error?: string | undefined;
84
+ version?: string | undefined;
85
+ }>>>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ lastProviderValidation?: string | undefined;
88
+ validationResults?: Record<string, {
89
+ available: boolean;
90
+ checkedAt: string;
91
+ error?: string | undefined;
92
+ version?: string | undefined;
93
+ }> | undefined;
94
+ }, {
95
+ lastProviderValidation?: string | undefined;
96
+ validationResults?: Record<string, {
97
+ available: boolean;
98
+ checkedAt: string;
99
+ error?: string | undefined;
100
+ version?: string | undefined;
101
+ }> | undefined;
102
+ }>>;
103
+ }, "strip", z.ZodTypeAny, {
104
+ providers?: {
105
+ 'claude-code'?: {
106
+ binPath?: string | undefined;
107
+ detectedPath?: string | undefined;
108
+ lastDetected?: string | undefined;
109
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
110
+ } | undefined;
111
+ codex?: {
112
+ binPath?: string | undefined;
113
+ detectedPath?: string | undefined;
114
+ lastDetected?: string | undefined;
115
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
116
+ } | undefined;
117
+ } | undefined;
118
+ cache?: {
119
+ lastProviderValidation?: string | undefined;
120
+ validationResults?: Record<string, {
121
+ available: boolean;
122
+ checkedAt: string;
123
+ error?: string | undefined;
124
+ version?: string | undefined;
125
+ }> | undefined;
126
+ } | undefined;
127
+ }, {
128
+ providers?: {
129
+ 'claude-code'?: {
130
+ binPath?: string | undefined;
131
+ detectedPath?: string | undefined;
132
+ lastDetected?: string | undefined;
133
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
134
+ } | undefined;
135
+ codex?: {
136
+ binPath?: string | undefined;
137
+ detectedPath?: string | undefined;
138
+ lastDetected?: string | undefined;
139
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
140
+ } | undefined;
141
+ } | undefined;
142
+ cache?: {
143
+ lastProviderValidation?: string | undefined;
144
+ validationResults?: Record<string, {
145
+ available: boolean;
146
+ checkedAt: string;
147
+ error?: string | undefined;
148
+ version?: string | undefined;
149
+ }> | undefined;
150
+ } | undefined;
151
+ }>;
152
+ export type LocalConfig = z.infer<typeof LocalConfigSchema>;
153
+ export interface LocalConfigServiceConfig {
154
+ configDir?: string;
155
+ configFileName?: string;
156
+ }
157
+ /**
158
+ * Local Configuration Service
159
+ * Manages machine-specific configuration stored in local-only directory
160
+ */
161
+ export declare class LocalConfigService extends EventEmitter {
162
+ private config;
163
+ private configPath;
164
+ private initialized;
165
+ constructor(options?: LocalConfigServiceConfig);
166
+ /**
167
+ * Initialize the local config service
168
+ */
169
+ initialize(): Promise<void>;
170
+ /**
171
+ * Get the full local configuration
172
+ */
173
+ getConfig(): LocalConfig;
174
+ /**
175
+ * Get provider-specific configuration
176
+ */
177
+ getProviderConfig(provider: 'claude-code' | 'codex'): {
178
+ binPath?: string | undefined;
179
+ detectedPath?: string | undefined;
180
+ lastDetected?: string | undefined;
181
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
182
+ } | {
183
+ binPath?: string | undefined;
184
+ detectedPath?: string | undefined;
185
+ lastDetected?: string | undefined;
186
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
187
+ } | undefined;
188
+ /**
189
+ * Set provider binary path and detection info
190
+ */
191
+ setProviderPath(provider: 'claude-code' | 'codex', binPath: string, detectionMethod?: 'explicit' | 'PATH' | 'common-location'): Promise<void>;
192
+ updateDetectedProvider(provider: 'claude-code' | 'codex', detectedPath: string, detectionMethod?: 'PATH' | 'common-location'): Promise<void>;
193
+ /**
194
+ * Clear provider configuration
195
+ */
196
+ clearProviderPath(provider: 'claude-code' | 'codex'): Promise<void>;
197
+ /**
198
+ * Cache provider validation results
199
+ */
200
+ cacheValidationResult(provider: string, result: {
201
+ available: boolean;
202
+ error?: string;
203
+ version?: string;
204
+ }): Promise<void>;
205
+ /**
206
+ * Get cached validation result
207
+ */
208
+ getCachedValidationResult(provider: string): {
209
+ available: boolean;
210
+ error?: string;
211
+ version?: string;
212
+ checkedAt: string;
213
+ } | undefined;
214
+ /**
215
+ * Check if cached validation is still fresh (within last 5 minutes)
216
+ */
217
+ isCachedValidationFresh(provider: string): boolean;
218
+ /**
219
+ * Clear all cached validation results
220
+ */
221
+ clearValidationCache(): Promise<void>;
222
+ /**
223
+ * Get configuration file information
224
+ */
225
+ getConfigInfo(): Promise<{
226
+ path: string;
227
+ exists: boolean;
228
+ size?: number;
229
+ }>;
230
+ /**
231
+ * Export configuration for debugging/backup
232
+ */
233
+ exportConfig(): Promise<string>;
234
+ /**
235
+ * Import configuration from JSON string
236
+ */
237
+ importConfig(configJson: string): Promise<void>;
238
+ private ensureConfigDirectory;
239
+ private loadConfig;
240
+ private saveConfig;
241
+ private fileExists;
242
+ private mergeWithDefaults;
243
+ }
244
+ export declare function getLocalConfigService(config?: LocalConfigServiceConfig): LocalConfigService;
245
+ export {};