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
@@ -1,12 +1,104 @@
1
1
  import type { TaskService } from './tasks/task-service.js';
2
2
  import type { GitService } from './vcs/git-service.js';
3
3
  import type { VibingOrchestrator } from './workflows/vibing-orchestrator.js';
4
- export declare function createRouter(taskService: TaskService, gitService?: GitService, vibingOrchestrator?: VibingOrchestrator, getVibingOrchestratorAsync?: () => Promise<VibingOrchestrator>): import("@trpc/server").TRPCBuiltRouter<{
4
+ export declare function createRouter(taskService: TaskService, gitService: GitService, vibingOrchestrator: VibingOrchestrator): import("@trpc/server").TRPCBuiltRouter<{
5
5
  ctx: import("./api/trpc.js").Context;
6
6
  meta: object;
7
7
  errorShape: import("@trpc/server").TRPCDefaultErrorShape;
8
8
  transformer: true;
9
9
  }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
10
+ detectAllProviders: import("@trpc/server").TRPCQueryProcedure<{
11
+ input: void;
12
+ output: Record<string, import("./lib/provider-detection.js").DetectionResult>;
13
+ meta: object;
14
+ }>;
15
+ detectProvider: import("@trpc/server").TRPCQueryProcedure<{
16
+ input: {
17
+ provider: string;
18
+ };
19
+ output: import("./lib/provider-detection.js").DetectionResult;
20
+ meta: object;
21
+ }>;
22
+ setProviderPath: import("@trpc/server").TRPCMutationProcedure<{
23
+ input: {
24
+ path: string;
25
+ provider: string;
26
+ };
27
+ output: {
28
+ success: boolean;
29
+ result: import("./lib/provider-detection.js").DetectionResult;
30
+ };
31
+ meta: object;
32
+ }>;
33
+ clearProviderPath: import("@trpc/server").TRPCMutationProcedure<{
34
+ input: {
35
+ provider: string;
36
+ };
37
+ output: {
38
+ success: boolean;
39
+ };
40
+ meta: object;
41
+ }>;
42
+ getLocalConfigInfo: import("@trpc/server").TRPCQueryProcedure<{
43
+ input: void;
44
+ output: {
45
+ providers: {
46
+ 'claude-code'?: {
47
+ binPath?: string | undefined;
48
+ detectedPath?: string | undefined;
49
+ lastDetected?: string | undefined;
50
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
51
+ } | undefined;
52
+ codex?: {
53
+ binPath?: string | undefined;
54
+ detectedPath?: string | undefined;
55
+ lastDetected?: string | undefined;
56
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
57
+ } | undefined;
58
+ };
59
+ path: string;
60
+ exists: boolean;
61
+ size?: number;
62
+ };
63
+ meta: object;
64
+ }>;
65
+ clearValidationCache: import("@trpc/server").TRPCMutationProcedure<{
66
+ input: void;
67
+ output: {
68
+ success: boolean;
69
+ };
70
+ meta: object;
71
+ }>;
72
+ getProviderDiagnostics: import("@trpc/server").TRPCQueryProcedure<{
73
+ input: void;
74
+ output: {
75
+ localConfigPath: string;
76
+ localConfigExists: boolean;
77
+ providers: {
78
+ provider: string;
79
+ detection: import("./lib/provider-detection.js").DetectionResult;
80
+ localConfig: {
81
+ binPath?: string | undefined;
82
+ detectedPath?: string | undefined;
83
+ lastDetected?: string | undefined;
84
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
85
+ } | {
86
+ binPath?: string | undefined;
87
+ detectedPath?: string | undefined;
88
+ lastDetected?: string | undefined;
89
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
90
+ } | undefined;
91
+ cached: {
92
+ available: boolean;
93
+ error: string | undefined;
94
+ version: string | undefined;
95
+ checkedAt: string;
96
+ isFresh: boolean;
97
+ } | null;
98
+ }[];
99
+ };
100
+ meta: object;
101
+ }>;
10
102
  listProviders: import("@trpc/server").TRPCQueryProcedure<{
11
103
  input: void;
12
104
  output: {
@@ -28,19 +120,31 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
28
120
  }>;
29
121
  getRoutingPolicy: import("@trpc/server").TRPCQueryProcedure<{
30
122
  input: void;
31
- output: any;
123
+ output: {
124
+ defaultProvider: string;
125
+ operations?: Partial<Record<"execute_task" | "quality_checks" | "improve_task" | "ai_merge" | "ai_codereview", {
126
+ provider: string;
127
+ options?: {
128
+ temperature?: number | undefined;
129
+ maxTokens?: number | undefined;
130
+ tools?: string[] | undefined;
131
+ } | undefined;
132
+ model?: string | undefined;
133
+ fallback?: string[] | undefined;
134
+ }>> | undefined;
135
+ };
32
136
  meta: object;
33
137
  }>;
34
138
  updateRoutingPolicy: import("@trpc/server").TRPCMutationProcedure<{
35
139
  input: {
36
140
  policy: {
37
141
  defaultProvider?: string | undefined;
38
- operations?: Partial<Record<"execute_task" | "improve_task" | "ai_codereview" | "ai_merge", {
142
+ operations?: Partial<Record<"execute_task" | "quality_checks" | "improve_task" | "ai_merge" | "ai_codereview", {
39
143
  provider: string;
40
144
  options?: {
145
+ temperature?: number | undefined;
41
146
  maxTokens?: number | undefined;
42
147
  tools?: string[] | undefined;
43
- temperature?: number | undefined;
44
148
  } | undefined;
45
149
  model?: string | undefined;
46
150
  fallback?: string[] | undefined;
@@ -65,17 +169,17 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
65
169
  }>;
66
170
  setOperationConfig: import("@trpc/server").TRPCMutationProcedure<{
67
171
  input: {
172
+ operation: "execute_task" | "quality_checks" | "improve_task" | "ai_merge" | "ai_codereview";
68
173
  config: {
69
174
  provider: string;
70
175
  options?: {
176
+ temperature?: number | undefined;
71
177
  maxTokens?: number | undefined;
72
178
  tools?: string[] | undefined;
73
- temperature?: number | undefined;
74
179
  } | undefined;
75
180
  model?: string | undefined;
76
181
  fallback?: string[] | undefined;
77
182
  };
78
- operation: "execute_task" | "improve_task" | "ai_codereview" | "ai_merge";
79
183
  };
80
184
  output: {
81
185
  success: boolean;
@@ -244,24 +348,25 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
244
348
  }>;
245
349
  updateWorkflowOptions: import("@trpc/server").TRPCMutationProcedure<{
246
350
  input: {
351
+ workflowId: string;
247
352
  config: {
353
+ autoCommit?: boolean | undefined;
354
+ createPR?: boolean | undefined;
248
355
  autoQualityChecks?: boolean | undefined;
249
356
  requireHumanApproval?: boolean | undefined;
250
- aiCodeReview?: boolean | undefined;
251
- autoCommit?: boolean | undefined;
252
357
  stepByStepMode?: boolean | undefined;
253
- createPR?: boolean | undefined;
254
358
  autoMerge?: boolean | undefined;
359
+ aiCodeReview?: boolean | undefined;
255
360
  aiRoutingOverrides?: {
256
361
  execute_task?: {
257
362
  provider?: string | undefined;
258
363
  model?: string | undefined;
259
364
  } | undefined;
260
- improve_task?: {
365
+ quality_checks?: {
261
366
  provider?: string | undefined;
262
367
  model?: string | undefined;
263
368
  } | undefined;
264
- ai_codereview?: {
369
+ improve_task?: {
265
370
  provider?: string | undefined;
266
371
  model?: string | undefined;
267
372
  } | undefined;
@@ -269,9 +374,12 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
269
374
  provider?: string | undefined;
270
375
  model?: string | undefined;
271
376
  } | undefined;
377
+ ai_codereview?: {
378
+ provider?: string | undefined;
379
+ model?: string | undefined;
380
+ } | undefined;
272
381
  } | undefined;
273
382
  };
274
- workflowId: string;
275
383
  };
276
384
  output: {
277
385
  readonly success: true;
@@ -282,23 +390,23 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
282
390
  input: {
283
391
  taskId: string;
284
392
  config?: {
393
+ autoCommit?: boolean | undefined;
394
+ createPR?: boolean | undefined;
285
395
  autoQualityChecks?: boolean | undefined;
286
396
  requireHumanApproval?: boolean | undefined;
287
- aiCodeReview?: boolean | undefined;
288
- autoCommit?: boolean | undefined;
289
397
  stepByStepMode?: boolean | undefined;
290
- createPR?: boolean | undefined;
291
398
  autoMerge?: boolean | undefined;
399
+ aiCodeReview?: boolean | undefined;
292
400
  aiRoutingOverrides?: {
293
401
  execute_task?: {
294
402
  provider?: string | undefined;
295
403
  model?: string | undefined;
296
404
  } | undefined;
297
- improve_task?: {
405
+ quality_checks?: {
298
406
  provider?: string | undefined;
299
407
  model?: string | undefined;
300
408
  } | undefined;
301
- ai_codereview?: {
409
+ improve_task?: {
302
410
  provider?: string | undefined;
303
411
  model?: string | undefined;
304
412
  } | undefined;
@@ -306,6 +414,10 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
306
414
  provider?: string | undefined;
307
415
  model?: string | undefined;
308
416
  } | undefined;
417
+ ai_codereview?: {
418
+ provider?: string | undefined;
419
+ model?: string | undefined;
420
+ } | undefined;
309
421
  } | undefined;
310
422
  } | undefined;
311
423
  };
@@ -426,12 +538,12 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
426
538
  output: import("./types/index.js").VibingExecution | null;
427
539
  meta: object;
428
540
  }>;
429
- reviewCode: import("@trpc/server").TRPCMutationProcedure<{
541
+ aiReviewCode: import("@trpc/server").TRPCMutationProcedure<{
430
542
  input: {
431
543
  taskId: string;
432
544
  provider?: string | undefined;
433
- model?: string | undefined;
434
545
  workflowId?: string | undefined;
546
+ model?: string | undefined;
435
547
  reviewContext?: string | undefined;
436
548
  };
437
549
  output: {
@@ -586,9 +698,9 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
586
698
  cleanupWorktree: import("@trpc/server").TRPCMutationProcedure<{
587
699
  input: {
588
700
  isConnectedToTask: boolean;
589
- worktreePath?: string | undefined;
590
- force?: boolean | undefined;
591
701
  taskId?: string | undefined;
702
+ force?: boolean | undefined;
703
+ worktreePath?: string | undefined;
592
704
  branchName?: string | undefined;
593
705
  };
594
706
  output: {
@@ -656,9 +768,9 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
656
768
  }>;
657
769
  improveTask: import("@trpc/server").TRPCMutationProcedure<{
658
770
  input: {
771
+ title: string;
659
772
  type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
660
773
  priority: "low" | "medium" | "high";
661
- title: string;
662
774
  content: string;
663
775
  taskId: string;
664
776
  executionId?: string | undefined;
@@ -667,6 +779,7 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
667
779
  type: string;
668
780
  priority: string;
669
781
  content: string;
782
+ title?: string;
670
783
  executionId: string;
671
784
  selectedModel?: string;
672
785
  };
@@ -686,11 +799,11 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
686
799
  }>;
687
800
  listTasks: import("@trpc/server").TRPCQueryProcedure<{
688
801
  input: {
802
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
689
803
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
690
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
804
+ tags?: string[] | undefined;
691
805
  priority?: "low" | "medium" | "high" | undefined;
692
806
  search?: string | undefined;
693
- tags?: string[] | undefined;
694
807
  includeDeleted?: boolean | undefined;
695
808
  onlyDeleted?: boolean | undefined;
696
809
  } | undefined;
@@ -706,15 +819,15 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
706
819
  }>;
707
820
  createTask: import("@trpc/server").TRPCMutationProcedure<{
708
821
  input: {
709
- type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
710
822
  title: string;
823
+ type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
711
824
  content: string;
712
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
713
- priority?: "low" | "medium" | "high" | undefined;
825
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
714
826
  id?: string | undefined;
715
827
  tags?: string[] | undefined;
716
828
  due_date?: string | undefined;
717
829
  assignee?: string[] | undefined;
830
+ priority?: "low" | "medium" | "high" | undefined;
718
831
  comments?: string[] | undefined;
719
832
  };
720
833
  output: import("./types/index.js").Task;
@@ -723,13 +836,13 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
723
836
  updateTask: import("@trpc/server").TRPCMutationProcedure<{
724
837
  input: {
725
838
  id: string;
726
- type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
727
- status?: "backlog" | "in-progress" | "review" | "done" | undefined;
728
- priority?: "low" | "medium" | "high" | undefined;
839
+ status?: "review" | "in-progress" | "backlog" | "done" | undefined;
729
840
  title?: string | undefined;
841
+ type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
730
842
  tags?: string[] | undefined;
731
843
  due_date?: string | undefined;
732
844
  assignee?: string[] | undefined;
845
+ priority?: "low" | "medium" | "high" | undefined;
733
846
  comments?: string[] | undefined;
734
847
  content?: string | undefined;
735
848
  deleted_at?: string | undefined;
@@ -748,7 +861,7 @@ export declare function createRouter(taskService: TaskService, gitService?: GitS
748
861
  }>;
749
862
  moveTask: import("@trpc/server").TRPCMutationProcedure<{
750
863
  input: {
751
- status: "backlog" | "in-progress" | "review" | "done";
864
+ status: "review" | "in-progress" | "backlog" | "done";
752
865
  id: string;
753
866
  };
754
867
  output: import("./types/index.js").Task;
@@ -6,44 +6,21 @@ import { buildWorkflowRoutes } from './api/routers/workflows.js';
6
6
  import { buildGitRoutes } from './api/routers/git.js';
7
7
  import { buildAIRoutes } from './api/routers/ai.js';
8
8
  import { buildSettingsRoutes } from './api/routers/settings.js';
9
- export function createRouter(taskService, gitService, vibingOrchestrator, getVibingOrchestratorAsync) {
10
- const requireOrchestrator = async () => {
11
- if (vibingOrchestrator)
12
- return vibingOrchestrator;
13
- if (getVibingOrchestratorAsync)
14
- return await getVibingOrchestratorAsync();
15
- throw new Error('Vibing orchestrator unavailable');
16
- };
17
- const requireOrchestratorSync = () => {
18
- if (vibingOrchestrator)
19
- return vibingOrchestrator;
20
- throw new Error('Vibing orchestrator unavailable');
21
- };
9
+ import { buildProviderConfigRoutes } from './api/routers/provider-config.js';
10
+ export function createRouter(taskService, gitService, vibingOrchestrator) {
22
11
  const tasks = buildTaskRoutes(taskService, gitService);
23
12
  const executions = buildExecutionRoutes({
24
13
  taskService,
25
- requireOrchestrator,
26
- requireOrchestratorSync,
14
+ vibingOrchestrator,
27
15
  });
28
- const worktrees = buildWorktreeRoutes({ requireOrchestrator, requireOrchestratorSync });
29
- const workflows = buildWorkflowRoutes({ requireOrchestrator, requireOrchestratorSync });
16
+ const worktrees = buildWorktreeRoutes({ vibingOrchestrator });
17
+ const workflows = buildWorkflowRoutes({ vibingOrchestrator });
30
18
  const settings = buildSettingsRoutes();
31
- // Always include git routes for stable AppRouter typing; use throwing stub if unavailable
32
- const gitFallback = gitService ||
33
- new Proxy({}, {
34
- get() {
35
- return () => {
36
- throw new Error('Git service unavailable in this environment');
37
- };
38
- },
39
- });
40
- const git = buildGitRoutes(taskService, gitFallback);
19
+ const git = buildGitRoutes(taskService, gitService);
41
20
  const ai = buildAIRoutes({
42
- requireAgentService: () => {
43
- const orchestrator = requireOrchestratorSync();
44
- return orchestrator.getAgentService();
45
- },
21
+ agentService: vibingOrchestrator.getAgentService(),
46
22
  });
23
+ const providerConfig = buildProviderConfigRoutes();
47
24
  return router({
48
25
  ...tasks,
49
26
  ...executions,
@@ -52,5 +29,6 @@ export function createRouter(taskService, gitService, vibingOrchestrator, getVib
52
29
  ...settings,
53
30
  ...git,
54
31
  ...ai,
32
+ ...providerConfig,
55
33
  });
56
34
  }
@@ -16,7 +16,42 @@ const CLAUDE_ALLOWED_MODELS = [
16
16
  'claude-opus-4-1-20250805',
17
17
  'claude-3-5-haiku-20241022',
18
18
  ];
19
- const MODEL_ENUM = [...CLAUDE_ALLOWED_MODELS, 'gpt-5'];
19
+ const CODEX_ALLOWED_MODELS = [
20
+ 'gpt-5',
21
+ 'gpt-5-low',
22
+ 'gpt-5-medium',
23
+ 'gpt-5-high',
24
+ 'gpt-5-codex',
25
+ 'gpt-5-codex-low',
26
+ 'gpt-5-codex-medium',
27
+ 'gpt-5-codex-high',
28
+ ];
29
+ const MODEL_ENUM = [...CLAUDE_ALLOWED_MODELS, ...CODEX_ALLOWED_MODELS];
30
+ const ROUTABLE_OPERATIONS = [
31
+ 'execute_task',
32
+ 'quality_checks',
33
+ 'ai_codereview',
34
+ 'ai_merge',
35
+ 'improve_task',
36
+ ];
37
+ const RoutingOperationSchema = z.object({
38
+ provider: z.string(),
39
+ model: z.string().optional(),
40
+ options: z
41
+ .object({
42
+ temperature: z.number().min(0).max(2).optional(),
43
+ maxTokens: z.number().positive().optional(),
44
+ tools: z.array(z.string()).optional(),
45
+ })
46
+ .optional(),
47
+ fallback: z.array(z.string()).optional(),
48
+ });
49
+ const RoutingPolicySettingsSchema = z
50
+ .object({
51
+ defaultProvider: z.enum(['claude-code', 'codex']).optional(),
52
+ operations: z.record(z.enum(ROUTABLE_OPERATIONS), RoutingOperationSchema).optional(),
53
+ })
54
+ .optional();
20
55
  const VibemanSettingsSchema = z.object({
21
56
  agents: z.object({
22
57
  defaultProvider: z.enum(['claude-code', 'codex']),
@@ -35,12 +70,15 @@ const VibemanSettingsSchema = z.object({
35
70
  systemPrompt: z.string().min(10),
36
71
  taskPrompt: z.string().min(10),
37
72
  }),
73
+ // Note: Provider binary paths are now stored in local config (.vibeman/.local/)
74
+ // This field is kept for backwards compatibility but deprecated
38
75
  providers: z
39
76
  .object({
40
77
  claudeCode: z.object({ binPath: z.string().min(1).optional() }).optional(),
41
78
  codex: z.object({ binPath: z.string().min(1).optional() }).optional(),
42
79
  })
43
80
  .optional(),
81
+ routingPolicy: RoutingPolicySettingsSchema,
44
82
  }),
45
83
  defaultWorkflow: z.object({
46
84
  autoQualityChecks: z.boolean(),
@@ -114,6 +152,10 @@ const DEFAULT_SETTINGS = {
114
152
  taskPrompt: 'Please implement the following task with attention to quality and testing.',
115
153
  },
116
154
  providers: {},
155
+ routingPolicy: {
156
+ defaultProvider: 'claude-code',
157
+ operations: {},
158
+ },
117
159
  },
118
160
  defaultWorkflow: {
119
161
  autoQualityChecks: true,
@@ -556,6 +598,14 @@ export class SettingsService extends EventEmitter {
556
598
  ...DEFAULT_SETTINGS.agents.defaultPrompts,
557
599
  ...settings.agents?.defaultPrompts,
558
600
  },
601
+ routingPolicy: {
602
+ ...DEFAULT_SETTINGS.agents.routingPolicy,
603
+ ...settings.agents?.routingPolicy,
604
+ operations: {
605
+ ...(DEFAULT_SETTINGS.agents.routingPolicy?.operations ?? {}),
606
+ ...(settings.agents?.routingPolicy?.operations ?? {}),
607
+ },
608
+ },
559
609
  },
560
610
  defaultWorkflow: {
561
611
  ...DEFAULT_SETTINGS.defaultWorkflow,
@@ -109,6 +109,13 @@ export interface VibingExecution {
109
109
  previousExecutionId?: string;
110
110
  }>;
111
111
  qualityResults?: QualityResults;
112
+ aiReviewResult?: {
113
+ executionId: string;
114
+ reviewSummary: string;
115
+ recommendations: string[];
116
+ qualityScore: number;
117
+ timestamp?: string;
118
+ };
112
119
  links?: {
113
120
  prUrl?: string;
114
121
  prNumber?: number;
@@ -164,7 +171,7 @@ export interface VibingConfig {
164
171
  timeout?: number;
165
172
  enabled?: boolean;
166
173
  }>;
167
- aiRoutingOverrides?: Partial<Record<'execute_task' | 'improve_task' | 'ai_codereview' | 'ai_merge', {
174
+ aiRoutingOverrides?: Partial<Record<'execute_task' | 'quality_checks' | 'ai_codereview' | 'ai_merge' | 'improve_task', {
168
175
  provider?: string;
169
176
  model?: string;
170
177
  }>>;
@@ -3,12 +3,12 @@ export interface VibemanSettings {
3
3
  defaultProvider: 'claude-code' | 'codex';
4
4
  codingAgent: {
5
5
  provider: 'claude-code' | 'codex';
6
- model: 'claude-sonnet-4-20250514' | 'claude-opus-4-1-20250805' | 'claude-3-5-haiku-20241022' | 'gpt-5';
6
+ model: 'claude-sonnet-4-20250514' | 'claude-opus-4-1-20250805' | 'claude-3-5-haiku-20241022' | 'gpt-5' | 'gpt-5-low' | 'gpt-5-medium' | 'gpt-5-high' | 'gpt-5-codex' | 'gpt-5-codex-low' | 'gpt-5-codex-medium' | 'gpt-5-codex-high';
7
7
  maxTokens?: number;
8
8
  };
9
9
  judgeAgent: {
10
10
  provider: 'claude-code' | 'codex';
11
- model: 'claude-sonnet-4-20250514' | 'claude-opus-4-1-20250805' | 'claude-3-5-haiku-20241022' | 'gpt-5';
11
+ model: 'claude-sonnet-4-20250514' | 'claude-opus-4-1-20250805' | 'claude-3-5-haiku-20241022' | 'gpt-5' | 'gpt-5-low' | 'gpt-5-medium' | 'gpt-5-high' | 'gpt-5-codex' | 'gpt-5-codex-low' | 'gpt-5-codex-medium' | 'gpt-5-codex-high';
12
12
  maxTokens?: number;
13
13
  reviewThresholdScore: number;
14
14
  };
@@ -24,6 +24,19 @@ export interface VibemanSettings {
24
24
  binPath?: string;
25
25
  };
26
26
  };
27
+ routingPolicy?: {
28
+ defaultProvider?: 'claude-code' | 'codex';
29
+ operations?: Partial<Record<'execute_task' | 'quality_checks' | 'ai_codereview' | 'ai_merge' | 'improve_task', {
30
+ provider: string;
31
+ model?: string;
32
+ options?: {
33
+ temperature?: number;
34
+ maxTokens?: number;
35
+ tools?: string[];
36
+ };
37
+ fallback?: string[];
38
+ }>>;
39
+ };
27
40
  };
28
41
  defaultWorkflow: {
29
42
  autoQualityChecks: boolean;
@@ -4,6 +4,7 @@ import { TaskService } from '../tasks/task-service.js';
4
4
  import { AgentService } from '../agent/agent-service.js';
5
5
  import { WorktreeService } from '../vcs/worktree-service.js';
6
6
  import { GitService } from '../vcs/git-service.js';
7
+ import type { ResolvedProvider } from '../agent/routing-policy.js';
7
8
  export declare class VibingOrchestrator extends EventEmitter {
8
9
  private taskService;
9
10
  private agentService;
@@ -63,13 +64,14 @@ export declare class VibingOrchestrator extends EventEmitter {
63
64
  type: string;
64
65
  priority: string;
65
66
  content: string;
67
+ title?: string;
66
68
  executionId: string;
67
69
  selectedModel?: string;
68
70
  }>;
69
- reviewCode(taskId: string, reviewContext?: string, options?: {
71
+ aiReviewCode(taskId: string, reviewContext?: string, options?: {
70
72
  workflowId?: string;
71
- provider?: string;
72
- model?: string;
73
+ overrides?: Partial<ResolvedProvider>;
74
+ executionId?: string;
73
75
  }): Promise<{
74
76
  executionId: string;
75
77
  reviewSummary: string;
@@ -81,6 +83,7 @@ export declare class VibingOrchestrator extends EventEmitter {
81
83
  workflowId?: string;
82
84
  provider?: string;
83
85
  model?: string;
86
+ executionId?: string;
84
87
  }): Promise<{
85
88
  executionId: string;
86
89
  }>;
@@ -203,6 +206,7 @@ export declare class VibingOrchestrator extends EventEmitter {
203
206
  * Execute AI review as a dedicated phase
204
207
  */
205
208
  private executeAiReviewPhase;
209
+ private executeAwaitingReview;
206
210
  /**
207
211
  * Execute validation phase with quality checks
208
212
  */
@@ -215,6 +219,7 @@ export declare class VibingOrchestrator extends EventEmitter {
215
219
  * Execute merge phase
216
220
  */
217
221
  private executeMerge;
222
+ private updateCleanupStatus;
218
223
  /**
219
224
  * Public: run merge phase on demand
220
225
  * This will attempt merge regardless of current phase.