vibeman 0.0.3 → 0.0.5

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 (184) hide show
  1. package/dist/index.js +3 -3
  2. package/dist/runtime/api/.tsbuildinfo +1 -1
  3. package/dist/runtime/api/agent/agent-service.d.ts +4 -0
  4. package/dist/runtime/api/agent/agent-service.js +62 -3
  5. package/dist/runtime/api/agent/ai-providers/amp-cli-provider.d.ts +38 -0
  6. package/dist/runtime/api/agent/ai-providers/amp-cli-provider.js +268 -0
  7. package/dist/runtime/api/agent/ai-providers/codex-cli-provider.js +40 -12
  8. package/dist/runtime/api/agent/ai-providers/gemini-cli-provider.d.ts +24 -0
  9. package/dist/runtime/api/agent/ai-providers/gemini-cli-provider.js +291 -0
  10. package/dist/runtime/api/agent/ai-providers/index.d.ts +3 -3
  11. package/dist/runtime/api/agent/ai-providers/index.js +3 -1
  12. package/dist/runtime/api/agent/ai-providers/types.d.ts +5 -2
  13. package/dist/runtime/api/agent/amp-cli-provider.test.d.ts +1 -0
  14. package/dist/runtime/api/agent/amp-cli-provider.test.js +99 -0
  15. package/dist/runtime/api/agent/codex-cli-provider.test.js +10 -8
  16. package/dist/runtime/api/agent/prompt-service.js +108 -105
  17. package/dist/runtime/api/agent/prompt-service.test.js +35 -0
  18. package/dist/runtime/api/agent/routing-policy.d.ts +2 -2
  19. package/dist/runtime/api/agent/routing-policy.test.js +4 -4
  20. package/dist/runtime/api/api/routers/ai.d.ts +3 -3
  21. package/dist/runtime/api/api/routers/executions.d.ts +2 -7
  22. package/dist/runtime/api/api/routers/executions.js +2 -2
  23. package/dist/runtime/api/api/routers/provider-config.d.ts +34 -0
  24. package/dist/runtime/api/api/routers/settings.d.ts +19 -0
  25. package/dist/runtime/api/api/routers/settings.js +16 -0
  26. package/dist/runtime/api/api/routers/tasks.d.ts +9 -9
  27. package/dist/runtime/api/api/routers/workflows.d.ts +12 -12
  28. package/dist/runtime/api/api/routers/worktrees.d.ts +2 -2
  29. package/dist/runtime/api/api/trpc.d.ts +16 -16
  30. package/dist/runtime/api/lib/local-config.d.ts +94 -4
  31. package/dist/runtime/api/lib/local-config.js +16 -0
  32. package/dist/runtime/api/lib/provider-detection.d.ts +2 -0
  33. package/dist/runtime/api/lib/provider-detection.js +83 -1
  34. package/dist/runtime/api/lib/server/vibeman-info.d.ts +5 -0
  35. package/dist/runtime/api/lib/server/vibeman-info.js +85 -0
  36. package/dist/runtime/api/lib/trpc/server.d.ts +63 -33
  37. package/dist/runtime/api/persistence/execution-log-persistence.d.ts +1 -1
  38. package/dist/runtime/api/persistence/execution-log-persistence.js +19 -3
  39. package/dist/runtime/api/router.d.ts +63 -33
  40. package/dist/runtime/api/settings-service.js +31 -14
  41. package/dist/runtime/api/tasks/task-file-parser.d.ts +1 -0
  42. package/dist/runtime/api/tasks/task-file-parser.js +20 -1
  43. package/dist/runtime/api/tasks/task-updater.d.ts +62 -0
  44. package/dist/runtime/api/tasks/task-updater.js +260 -0
  45. package/dist/runtime/api/tasks/task-updater.test.d.ts +1 -0
  46. package/dist/runtime/api/tasks/task-updater.test.js +303 -0
  47. package/dist/runtime/api/types/index.d.ts +1 -1
  48. package/dist/runtime/api/types/settings.d.ts +17 -6
  49. package/dist/runtime/api/vcs/git-service.d.ts +9 -0
  50. package/dist/runtime/api/vcs/git-service.js +23 -0
  51. package/dist/runtime/api/vcs/worktree-service.d.ts +1 -1
  52. package/dist/runtime/api/vcs/worktree-service.js +22 -10
  53. package/dist/runtime/api/workflows/quality-pipeline.js +2 -1
  54. package/dist/runtime/api/workflows/vibing-orchestrator.d.ts +93 -5
  55. package/dist/runtime/api/workflows/vibing-orchestrator.js +774 -203
  56. package/dist/runtime/api/workflows/workflow-effects.d.ts +45 -0
  57. package/dist/runtime/api/workflows/workflow-effects.js +49 -0
  58. package/dist/runtime/api/workflows/workflow-reconciler.d.ts +65 -0
  59. package/dist/runtime/api/workflows/workflow-reconciler.js +226 -0
  60. package/dist/runtime/api/workflows/workflow-reducer.d.ts +26 -0
  61. package/dist/runtime/api/workflows/workflow-reducer.js +288 -0
  62. package/dist/runtime/api/workflows/workflow-reducer.test.d.ts +1 -0
  63. package/dist/runtime/api/workflows/workflow-reducer.test.js +247 -0
  64. package/dist/runtime/api/workflows/workflow-schema.d.ts +546 -0
  65. package/dist/runtime/api/workflows/workflow-schema.js +256 -0
  66. package/dist/runtime/web/.next/BUILD_ID +1 -1
  67. package/dist/runtime/web/.next/app-build-manifest.json +50 -50
  68. package/dist/runtime/web/.next/app-path-routes-manifest.json +1 -1
  69. package/dist/runtime/web/.next/build-manifest.json +14 -14
  70. package/dist/runtime/web/.next/prerender-manifest.json +3 -3
  71. package/dist/runtime/web/.next/react-loadable-manifest.json +2 -33
  72. package/dist/runtime/web/.next/required-server-files.json +5 -5
  73. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route.js +1 -1
  74. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route.js.nft.json +1 -1
  75. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route_client-reference-manifest.js +1 -1
  76. package/dist/runtime/web/.next/server/app/_not-found/page.js +2 -2
  77. package/dist/runtime/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  78. package/dist/runtime/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  79. package/dist/runtime/web/.next/server/app/_not-found.html +2 -2
  80. package/dist/runtime/web/.next/server/app/_not-found.rsc +12 -12
  81. package/dist/runtime/web/.next/server/app/api/health/route.js +1 -1
  82. package/dist/runtime/web/.next/server/app/api/health/route.js.nft.json +1 -1
  83. package/dist/runtime/web/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  84. package/dist/runtime/web/.next/server/app/api/images/[...path]/route.js +1 -1
  85. package/dist/runtime/web/.next/server/app/api/images/[...path]/route.js.nft.json +1 -1
  86. package/dist/runtime/web/.next/server/app/api/images/[...path]/route_client-reference-manifest.js +1 -1
  87. package/dist/runtime/web/.next/server/app/api/upload/route.js +1 -1
  88. package/dist/runtime/web/.next/server/app/api/upload/route.js.nft.json +1 -1
  89. package/dist/runtime/web/.next/server/app/api/upload/route_client-reference-manifest.js +1 -1
  90. package/dist/runtime/web/.next/server/app/index.html +2 -2
  91. package/dist/runtime/web/.next/server/app/index.rsc +15 -15
  92. package/dist/runtime/web/.next/server/app/page.js +27 -62
  93. package/dist/runtime/web/.next/server/app/page.js.nft.json +1 -1
  94. package/dist/runtime/web/.next/server/app/page_client-reference-manifest.js +1 -1
  95. package/dist/runtime/web/.next/server/app-paths-manifest.json +1 -1
  96. package/dist/runtime/web/.next/server/chunks/210.js +1 -0
  97. package/dist/runtime/web/.next/server/chunks/291.js +18 -0
  98. package/dist/runtime/web/.next/server/chunks/552.js +22 -0
  99. package/dist/runtime/web/.next/server/chunks/780.js +1 -0
  100. package/dist/runtime/web/.next/server/chunks/905.js +6 -0
  101. package/dist/runtime/web/.next/server/chunks/98.js +1 -0
  102. package/dist/runtime/web/.next/server/middleware-build-manifest.js +1 -1
  103. package/dist/runtime/web/.next/server/middleware-react-loadable-manifest.js +1 -1
  104. package/dist/runtime/web/.next/server/pages/404.html +2 -2
  105. package/dist/runtime/web/.next/server/pages/500.html +1 -1
  106. package/dist/runtime/web/.next/server/pages/_app.js +1 -1
  107. package/dist/runtime/web/.next/server/pages/_app.js.nft.json +1 -1
  108. package/dist/runtime/web/.next/server/pages/_document.js +1 -1
  109. package/dist/runtime/web/.next/server/pages/_document.js.nft.json +1 -1
  110. package/dist/runtime/web/.next/server/pages/_error.js +9 -9
  111. package/dist/runtime/web/.next/server/pages/_error.js.nft.json +1 -1
  112. package/dist/runtime/web/.next/server/pages-manifest.json +1 -1
  113. package/dist/runtime/web/.next/server/server-reference-manifest.json +1 -1
  114. package/dist/runtime/web/.next/server/webpack-runtime.js +1 -1
  115. package/dist/runtime/web/.next/static/{5_15u1WQCxN1_eHZpldCv → LJFZk_8tvKFN_Ee4HqUuM}/_buildManifest.js +1 -1
  116. package/dist/runtime/web/.next/static/chunks/05c91ade-7d09b2b280adffd1.js +1 -0
  117. package/dist/runtime/web/.next/static/chunks/201-51bef3fa8c832e2e.js +1 -0
  118. package/dist/runtime/web/.next/static/chunks/524-89747ed9b0294f8a.js +1 -0
  119. package/dist/runtime/web/.next/static/chunks/554-8bec6e9cca6acc67.js +1 -0
  120. package/dist/runtime/web/.next/static/chunks/764.86e9503a69d45a85.js +1 -0
  121. package/dist/runtime/web/.next/static/chunks/{87c73c54-09e1ba5c70e60a51.js → 7ab4dc20-239138e0ae7af24a.js} +1 -1
  122. package/dist/runtime/web/.next/static/chunks/905-342391e3d3a3678f.js +20 -0
  123. package/dist/runtime/web/.next/static/chunks/a8a5ce16-4edea7df2d9b544a.js +79 -0
  124. package/dist/runtime/web/.next/static/chunks/{8bb4d8db-3e2aa02b0a2384b9.js → ad74d572-4c1b162e2c15acaa.js} +1 -1
  125. package/dist/runtime/web/.next/static/chunks/app/.vibeman/assets/images/[...path]/route-7b752a8641f96c1f.js +1 -0
  126. package/dist/runtime/web/.next/static/chunks/app/_not-found/page-34e66b251c2b5044.js +1 -0
  127. package/dist/runtime/web/.next/static/chunks/app/api/health/route-7b752a8641f96c1f.js +1 -0
  128. package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-7b752a8641f96c1f.js +1 -0
  129. package/dist/runtime/web/.next/static/chunks/app/api/upload/route-7b752a8641f96c1f.js +1 -0
  130. package/dist/runtime/web/.next/static/chunks/app/layout-df9ac93cb02b2385.js +1 -0
  131. package/dist/runtime/web/.next/static/chunks/app/page-6610743f7de5f92a.js +1 -0
  132. package/dist/runtime/web/.next/static/chunks/c25e0690-e9b798b8de667da1.js +1 -0
  133. package/dist/runtime/web/.next/static/chunks/framework-57157ec4d37f64aa.js +1 -0
  134. package/dist/runtime/web/.next/static/chunks/main-app-156cc0c60371bd78.js +1 -0
  135. package/dist/runtime/web/.next/static/chunks/main-df25d367c47b1fec.js +1 -0
  136. package/dist/runtime/web/.next/static/chunks/pages/_app-9f629a5e1131d19f.js +1 -0
  137. package/dist/runtime/web/.next/static/chunks/pages/_error-9238238274c7efcd.js +1 -0
  138. package/dist/runtime/web/.next/static/chunks/webpack-cd50e39b423d1808.js +1 -0
  139. package/dist/runtime/web/.next/static/css/4fbf378a264bd4ea.css +1 -0
  140. package/dist/runtime/web/package.json +8 -8
  141. package/dist/runtime/web/server.js +1 -1
  142. package/dist/tsconfig.tsbuildinfo +1 -1
  143. package/package.json +3 -37
  144. package/dist/runtime/api/lib/trpc/client.d.ts +0 -1
  145. package/dist/runtime/api/lib/trpc/client.js +0 -5
  146. package/dist/runtime/web/.next/server/chunks/217.js +0 -1
  147. package/dist/runtime/web/.next/server/chunks/383.js +0 -6
  148. package/dist/runtime/web/.next/server/chunks/458.js +0 -1
  149. package/dist/runtime/web/.next/server/chunks/576.js +0 -18
  150. package/dist/runtime/web/.next/server/chunks/635.js +0 -22
  151. package/dist/runtime/web/.next/server/chunks/761.js +0 -1
  152. package/dist/runtime/web/.next/server/chunks/777.js +0 -3
  153. package/dist/runtime/web/.next/server/chunks/825.js +0 -1
  154. package/dist/runtime/web/.next/server/chunks/838.js +0 -1
  155. package/dist/runtime/web/.next/server/chunks/973.js +0 -15
  156. package/dist/runtime/web/.next/static/chunks/18-15c10d3288afef2e.js +0 -1
  157. package/dist/runtime/web/.next/static/chunks/1c0ca389.537bbe362e3ffbd9.js +0 -3
  158. package/dist/runtime/web/.next/static/chunks/22747d63-ad5da0c19f4cfe41.js +0 -71
  159. package/dist/runtime/web/.next/static/chunks/355.056c2645878a799a.js +0 -1
  160. package/dist/runtime/web/.next/static/chunks/420.a5ccf151c9e2b2f1.js +0 -1
  161. package/dist/runtime/web/.next/static/chunks/439.1be0c6242fd248d5.js +0 -15
  162. package/dist/runtime/web/.next/static/chunks/440.c52e7c0f797e22b2.js +0 -1
  163. package/dist/runtime/web/.next/static/chunks/575-e2478287c27da87b.js +0 -1
  164. package/dist/runtime/web/.next/static/chunks/691.920d88c115087314.js +0 -1
  165. package/dist/runtime/web/.next/static/chunks/765-e838910065b50c3d.js +0 -1
  166. package/dist/runtime/web/.next/static/chunks/823-6f371a6e829adbba.js +0 -63
  167. package/dist/runtime/web/.next/static/chunks/891cff7f.0f71fc028f87e683.js +0 -1
  168. package/dist/runtime/web/.next/static/chunks/9af238c7-271a911d4e99ab18.js +0 -1
  169. package/dist/runtime/web/.next/static/chunks/app/.vibeman/assets/images/[...path]/route-751c9265a65409e5.js +0 -1
  170. package/dist/runtime/web/.next/static/chunks/app/_not-found/page-1cb74d1cba27d0ab.js +0 -1
  171. package/dist/runtime/web/.next/static/chunks/app/api/health/route-751c9265a65409e5.js +0 -1
  172. package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-751c9265a65409e5.js +0 -1
  173. package/dist/runtime/web/.next/static/chunks/app/api/upload/route-751c9265a65409e5.js +0 -1
  174. package/dist/runtime/web/.next/static/chunks/app/layout-8435322f09fd0975.js +0 -1
  175. package/dist/runtime/web/.next/static/chunks/app/page-9fe7d75095b4ccec.js +0 -1
  176. package/dist/runtime/web/.next/static/chunks/cac567b0-5b77dd12911823cd.js +0 -1
  177. package/dist/runtime/web/.next/static/chunks/framework-2518f1345b5b2806.js +0 -1
  178. package/dist/runtime/web/.next/static/chunks/main-17665e5e39de9a8a.js +0 -1
  179. package/dist/runtime/web/.next/static/chunks/main-app-c0b0f5ba4f7f9d75.js +0 -1
  180. package/dist/runtime/web/.next/static/chunks/pages/_app-d6f6b3bbc3d81ee1.js +0 -1
  181. package/dist/runtime/web/.next/static/chunks/pages/_error-75a96cf1997cc3b9.js +0 -1
  182. package/dist/runtime/web/.next/static/chunks/webpack-c8de37305b4635cf.js +0 -1
  183. package/dist/runtime/web/.next/static/css/08c950681f1a9a92.css +0 -1
  184. /package/dist/runtime/web/.next/static/{5_15u1WQCxN1_eHZpldCv → LJFZk_8tvKFN_Ee4HqUuM}/_ssgManifest.js +0 -0
@@ -5,15 +5,14 @@ type Deps = {
5
5
  export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
6
6
  readonly updateWorkflowOptions: import("@trpc/server").TRPCMutationProcedure<{
7
7
  input: {
8
- workflowId: string;
9
8
  config: {
10
- autoCommit?: boolean | undefined;
11
- createPR?: boolean | undefined;
12
9
  autoQualityChecks?: boolean | undefined;
13
10
  requireHumanApproval?: boolean | undefined;
11
+ aiCodeReview?: boolean | undefined;
12
+ autoCommit?: boolean | undefined;
13
+ createPR?: boolean | undefined;
14
14
  stepByStepMode?: boolean | undefined;
15
15
  autoMerge?: boolean | undefined;
16
- aiCodeReview?: boolean | undefined;
17
16
  aiRoutingOverrides?: {
18
17
  execute_task?: {
19
18
  provider?: string | undefined;
@@ -23,7 +22,7 @@ export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
23
22
  provider?: string | undefined;
24
23
  model?: string | undefined;
25
24
  } | undefined;
26
- improve_task?: {
25
+ ai_codereview?: {
27
26
  provider?: string | undefined;
28
27
  model?: string | undefined;
29
28
  } | undefined;
@@ -31,12 +30,13 @@ export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
31
30
  provider?: string | undefined;
32
31
  model?: string | undefined;
33
32
  } | undefined;
34
- ai_codereview?: {
33
+ improve_task?: {
35
34
  provider?: string | undefined;
36
35
  model?: string | undefined;
37
36
  } | undefined;
38
37
  } | undefined;
39
38
  };
39
+ workflowId: string;
40
40
  };
41
41
  output: {
42
42
  readonly success: true;
@@ -47,13 +47,13 @@ export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
47
47
  input: {
48
48
  taskId: string;
49
49
  config?: {
50
- autoCommit?: boolean | undefined;
51
- createPR?: boolean | undefined;
52
50
  autoQualityChecks?: boolean | undefined;
53
51
  requireHumanApproval?: boolean | undefined;
52
+ aiCodeReview?: boolean | undefined;
53
+ autoCommit?: boolean | undefined;
54
+ createPR?: boolean | undefined;
54
55
  stepByStepMode?: boolean | undefined;
55
56
  autoMerge?: boolean | undefined;
56
- aiCodeReview?: boolean | undefined;
57
57
  aiRoutingOverrides?: {
58
58
  execute_task?: {
59
59
  provider?: string | undefined;
@@ -63,7 +63,7 @@ export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
63
63
  provider?: string | undefined;
64
64
  model?: string | undefined;
65
65
  } | undefined;
66
- improve_task?: {
66
+ ai_codereview?: {
67
67
  provider?: string | undefined;
68
68
  model?: string | undefined;
69
69
  } | undefined;
@@ -71,7 +71,7 @@ export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
71
71
  provider?: string | undefined;
72
72
  model?: string | undefined;
73
73
  } | undefined;
74
- ai_codereview?: {
74
+ improve_task?: {
75
75
  provider?: string | undefined;
76
76
  model?: string | undefined;
77
77
  } | undefined;
@@ -199,8 +199,8 @@ export declare function buildWorkflowRoutes({ vibingOrchestrator }: Deps): {
199
199
  input: {
200
200
  taskId: string;
201
201
  provider?: string | undefined;
202
- workflowId?: string | undefined;
203
202
  model?: string | undefined;
203
+ workflowId?: string | undefined;
204
204
  reviewContext?: string | undefined;
205
205
  };
206
206
  output: {
@@ -87,9 +87,9 @@ export declare function buildWorktreeRoutes({ vibingOrchestrator }: Deps): {
87
87
  readonly cleanupWorktree: import("@trpc/server").TRPCMutationProcedure<{
88
88
  input: {
89
89
  isConnectedToTask: boolean;
90
- taskId?: string | undefined;
91
- force?: boolean | undefined;
92
90
  worktreePath?: string | undefined;
91
+ force?: boolean | undefined;
92
+ taskId?: string | undefined;
93
93
  branchName?: string | undefined;
94
94
  };
95
95
  output: {
@@ -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
- status: "review" | "in-progress" | "backlog" | "done";
35
- title: string;
36
34
  type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
35
+ status: "backlog" | "in-progress" | "review" | "done";
36
+ priority: "low" | "medium" | "high";
37
+ title: string;
37
38
  tags: string[];
38
39
  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
- title: string;
46
45
  type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
46
+ title: string;
47
47
  content: string;
48
- status?: "review" | "in-progress" | "backlog" | "done" | undefined;
48
+ status?: "backlog" | "in-progress" | "review" | "done" | undefined;
49
+ priority?: "low" | "medium" | "high" | undefined;
49
50
  id?: string | undefined;
50
51
  tags?: string[] | undefined;
51
52
  due_date?: string | undefined;
52
53
  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
- status?: "review" | "in-progress" | "backlog" | "done" | undefined;
72
- title?: string | undefined;
73
71
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
72
+ status?: "backlog" | "in-progress" | "review" | "done" | undefined;
73
+ priority?: "low" | "medium" | "high" | undefined;
74
+ title?: string | undefined;
74
75
  tags?: string[] | undefined;
75
76
  due_date?: string | undefined;
76
77
  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
- status?: "review" | "in-progress" | "backlog" | "done" | undefined;
84
- title?: string | undefined;
85
83
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
84
+ status?: "backlog" | "in-progress" | "review" | "done" | undefined;
85
+ priority?: "low" | "medium" | "high" | undefined;
86
+ title?: string | undefined;
86
87
  tags?: string[] | undefined;
87
88
  due_date?: string | undefined;
88
89
  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;
104
103
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
105
- tags?: string[] | undefined;
104
+ status?: "backlog" | "in-progress" | "review" | "done" | undefined;
106
105
  priority?: "low" | "medium" | "high" | undefined;
107
106
  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;
112
111
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
113
- tags?: string[] | undefined;
112
+ status?: "backlog" | "in-progress" | "review" | "done" | undefined;
114
113
  priority?: "low" | "medium" | "high" | undefined;
115
114
  search?: string | undefined;
115
+ tags?: string[] | undefined;
116
116
  includeDeleted?: boolean | undefined;
117
117
  onlyDeleted?: boolean | undefined;
118
118
  }>;
@@ -38,6 +38,38 @@ declare const LocalConfigSchema: z.ZodObject<{
38
38
  lastDetected?: string | undefined;
39
39
  detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
40
40
  }>>;
41
+ gemini: z.ZodOptional<z.ZodObject<{
42
+ binPath: z.ZodOptional<z.ZodString>;
43
+ detectedPath: z.ZodOptional<z.ZodString>;
44
+ lastDetected: z.ZodOptional<z.ZodString>;
45
+ detectionMethod: z.ZodOptional<z.ZodEnum<["explicit", "PATH", "common-location"]>>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ binPath?: string | undefined;
48
+ detectedPath?: string | undefined;
49
+ lastDetected?: string | undefined;
50
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
51
+ }, {
52
+ binPath?: string | undefined;
53
+ detectedPath?: string | undefined;
54
+ lastDetected?: string | undefined;
55
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
56
+ }>>;
57
+ amp: z.ZodOptional<z.ZodObject<{
58
+ binPath: z.ZodOptional<z.ZodString>;
59
+ detectedPath: z.ZodOptional<z.ZodString>;
60
+ lastDetected: z.ZodOptional<z.ZodString>;
61
+ detectionMethod: z.ZodOptional<z.ZodEnum<["explicit", "PATH", "common-location"]>>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ binPath?: string | undefined;
64
+ detectedPath?: string | undefined;
65
+ lastDetected?: string | undefined;
66
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
67
+ }, {
68
+ binPath?: string | undefined;
69
+ detectedPath?: string | undefined;
70
+ lastDetected?: string | undefined;
71
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
72
+ }>>;
41
73
  }, "strip", z.ZodTypeAny, {
42
74
  'claude-code'?: {
43
75
  binPath?: string | undefined;
@@ -51,6 +83,18 @@ declare const LocalConfigSchema: z.ZodObject<{
51
83
  lastDetected?: string | undefined;
52
84
  detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
53
85
  } | undefined;
86
+ gemini?: {
87
+ binPath?: string | undefined;
88
+ detectedPath?: string | undefined;
89
+ lastDetected?: string | undefined;
90
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
91
+ } | undefined;
92
+ amp?: {
93
+ binPath?: string | undefined;
94
+ detectedPath?: string | undefined;
95
+ lastDetected?: string | undefined;
96
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
97
+ } | undefined;
54
98
  }, {
55
99
  'claude-code'?: {
56
100
  binPath?: string | undefined;
@@ -64,6 +108,18 @@ declare const LocalConfigSchema: z.ZodObject<{
64
108
  lastDetected?: string | undefined;
65
109
  detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
66
110
  } | undefined;
111
+ gemini?: {
112
+ binPath?: string | undefined;
113
+ detectedPath?: string | undefined;
114
+ lastDetected?: string | undefined;
115
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
116
+ } | undefined;
117
+ amp?: {
118
+ binPath?: string | undefined;
119
+ detectedPath?: string | undefined;
120
+ lastDetected?: string | undefined;
121
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
122
+ } | undefined;
67
123
  }>>;
68
124
  cache: z.ZodOptional<z.ZodObject<{
69
125
  lastProviderValidation: z.ZodOptional<z.ZodString>;
@@ -114,6 +170,18 @@ declare const LocalConfigSchema: z.ZodObject<{
114
170
  lastDetected?: string | undefined;
115
171
  detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
116
172
  } | undefined;
173
+ gemini?: {
174
+ binPath?: string | undefined;
175
+ detectedPath?: string | undefined;
176
+ lastDetected?: string | undefined;
177
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
178
+ } | undefined;
179
+ amp?: {
180
+ binPath?: string | undefined;
181
+ detectedPath?: string | undefined;
182
+ lastDetected?: string | undefined;
183
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
184
+ } | undefined;
117
185
  } | undefined;
118
186
  cache?: {
119
187
  lastProviderValidation?: string | undefined;
@@ -138,6 +206,18 @@ declare const LocalConfigSchema: z.ZodObject<{
138
206
  lastDetected?: string | undefined;
139
207
  detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
140
208
  } | undefined;
209
+ gemini?: {
210
+ binPath?: string | undefined;
211
+ detectedPath?: string | undefined;
212
+ lastDetected?: string | undefined;
213
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
214
+ } | undefined;
215
+ amp?: {
216
+ binPath?: string | undefined;
217
+ detectedPath?: string | undefined;
218
+ lastDetected?: string | undefined;
219
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
220
+ } | undefined;
141
221
  } | undefined;
142
222
  cache?: {
143
223
  lastProviderValidation?: string | undefined;
@@ -174,7 +254,17 @@ export declare class LocalConfigService extends EventEmitter {
174
254
  /**
175
255
  * Get provider-specific configuration
176
256
  */
177
- getProviderConfig(provider: 'claude-code' | 'codex'): {
257
+ getProviderConfig(provider: 'claude-code' | 'codex' | 'gemini' | 'amp'): {
258
+ binPath?: string | undefined;
259
+ detectedPath?: string | undefined;
260
+ lastDetected?: string | undefined;
261
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
262
+ } | {
263
+ binPath?: string | undefined;
264
+ detectedPath?: string | undefined;
265
+ lastDetected?: string | undefined;
266
+ detectionMethod?: "explicit" | "PATH" | "common-location" | undefined;
267
+ } | {
178
268
  binPath?: string | undefined;
179
269
  detectedPath?: string | undefined;
180
270
  lastDetected?: string | undefined;
@@ -188,12 +278,12 @@ export declare class LocalConfigService extends EventEmitter {
188
278
  /**
189
279
  * Set provider binary path and detection info
190
280
  */
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>;
281
+ setProviderPath(provider: 'claude-code' | 'codex' | 'gemini' | 'amp', binPath: string, detectionMethod?: 'explicit' | 'PATH' | 'common-location'): Promise<void>;
282
+ updateDetectedProvider(provider: 'claude-code' | 'codex' | 'gemini' | 'amp', detectedPath: string, detectionMethod?: 'PATH' | 'common-location'): Promise<void>;
193
283
  /**
194
284
  * Clear provider configuration
195
285
  */
196
- clearProviderPath(provider: 'claude-code' | 'codex'): Promise<void>;
286
+ clearProviderPath(provider: 'claude-code' | 'codex' | 'gemini' | 'amp'): Promise<void>;
197
287
  /**
198
288
  * Cache provider validation results
199
289
  */
@@ -28,6 +28,22 @@ const LocalConfigSchema = z.object({
28
28
  detectionMethod: z.enum(['explicit', 'PATH', 'common-location']).optional(),
29
29
  })
30
30
  .optional(),
31
+ gemini: z
32
+ .object({
33
+ binPath: z.string().optional(),
34
+ detectedPath: z.string().optional(),
35
+ lastDetected: z.string().optional(), // ISO date
36
+ detectionMethod: z.enum(['explicit', 'PATH', 'common-location']).optional(),
37
+ })
38
+ .optional(),
39
+ amp: z
40
+ .object({
41
+ binPath: z.string().optional(),
42
+ detectedPath: z.string().optional(),
43
+ lastDetected: z.string().optional(), // ISO date
44
+ detectionMethod: z.enum(['explicit', 'PATH', 'common-location']).optional(),
45
+ })
46
+ .optional(),
31
47
  })
32
48
  .optional(),
33
49
  cache: z
@@ -51,9 +51,11 @@ export declare class ProviderDetectionService {
51
51
  getCachedResult(providerId: string): Promise<DetectionResult | null>;
52
52
  private checkExplicitConfig;
53
53
  private checkSystemCommand;
54
+ private checkEnvOverride;
54
55
  private getVersion;
55
56
  private resolveCommand;
56
57
  private toLocalConfigKey;
57
58
  private cacheDetectionResult;
59
+ private isVersionLessThan;
58
60
  }
59
61
  export declare function getProviderDetectionService(): ProviderDetectionService;
@@ -10,6 +10,7 @@ import { log } from './logger.js';
10
10
  import { getLocalConfigService } from './local-config.js';
11
11
  const execAsync = promisify(exec);
12
12
  const execFileAsync = promisify(execFile);
13
+ const MIN_CODEX_CLI_VERSION = '0.73.0';
13
14
  /**
14
15
  * Provider definitions for detection
15
16
  */
@@ -26,6 +27,19 @@ export const PROVIDER_DEFINITIONS = {
26
27
  versionArgsList: [['--version'], ['-v']],
27
28
  versionRegex: /(\d+\.\d+\.\d+)/,
28
29
  },
30
+ gemini: {
31
+ name: 'Gemini CLI',
32
+ command: 'gemini',
33
+ versionArgsList: [['--version'], ['-v']],
34
+ // Capture a semantic version or generic version-like token
35
+ versionRegex: /(\d+\.\d+\.\d+|\d+\.\d+|[0-9a-zA-Z_.-]+)/,
36
+ },
37
+ amp: {
38
+ name: 'Amp CLI',
39
+ command: 'amp',
40
+ versionArgsList: [['--version'], ['-v']],
41
+ versionRegex: /(\d+\.\d+\.\d+)/,
42
+ },
29
43
  };
30
44
  /**
31
45
  * Enhanced Provider Detection Service
@@ -50,6 +64,12 @@ export class ProviderDetectionService {
50
64
  };
51
65
  }
52
66
  log.debug(`Detecting provider: ${provider.name}`, { providerId }, 'provider-detection');
67
+ // Strategy 0: Explicit environment override (e.g., VIBEMAN_GEMINI_BIN)
68
+ const envOverride = await this.checkEnvOverride(providerId, provider);
69
+ if (envOverride?.found) {
70
+ await this.cacheDetectionResult(providerId, envOverride);
71
+ return envOverride;
72
+ }
53
73
  // Strategy 1: Check explicit configuration from local config
54
74
  const explicitResult = await this.checkExplicitConfig(providerId, provider);
55
75
  if (explicitResult.found) {
@@ -104,6 +124,16 @@ export class ProviderDetectionService {
104
124
  }
105
125
  // Try to execute version command
106
126
  const version = await this.getVersion(binPath, provider);
127
+ if (provider.command === 'codex' && version) {
128
+ if (this.isVersionLessThan(version, MIN_CODEX_CLI_VERSION)) {
129
+ return {
130
+ found: false,
131
+ path: binPath,
132
+ version,
133
+ error: `Codex CLI ${version} is outdated. Install v${MIN_CODEX_CLI_VERSION} or newer to enable --full-auto danger-full-access automation.`,
134
+ };
135
+ }
136
+ }
107
137
  return {
108
138
  found: true,
109
139
  path: binPath,
@@ -180,6 +210,32 @@ export class ProviderDetectionService {
180
210
  }
181
211
  return this.validateBinaryPath(resolvedPath, provider, 'PATH');
182
212
  }
213
+ async checkEnvOverride(providerId, provider) {
214
+ // Only currently defined for known providers
215
+ const envVar = providerId === 'claude-code'
216
+ ? process.env.VIBEMAN_CLAUDE_BIN
217
+ : providerId === 'codex'
218
+ ? process.env.VIBEMAN_CODEX_BIN
219
+ : providerId === 'gemini'
220
+ ? process.env.VIBEMAN_GEMINI_BIN
221
+ : providerId === 'amp'
222
+ ? process.env.VIBEMAN_AMP_BIN
223
+ : undefined;
224
+ if (envVar && envVar.trim()) {
225
+ try {
226
+ const result = await this.validateBinaryPath(envVar.trim(), provider, 'explicit');
227
+ return result;
228
+ }
229
+ catch {
230
+ return {
231
+ found: false,
232
+ path: envVar,
233
+ error: `Environment override invalid for ${providerId}`,
234
+ };
235
+ }
236
+ }
237
+ return null;
238
+ }
183
239
  async getVersion(binPath, provider) {
184
240
  const argSets = provider.versionArgsList ?? [['--version']];
185
241
  for (const args of argSets) {
@@ -217,7 +273,13 @@ export class ProviderDetectionService {
217
273
  return null;
218
274
  }
219
275
  toLocalConfigKey(providerId) {
220
- return providerId === 'claude-code' ? 'claude-code' : 'codex';
276
+ if (providerId === 'claude-code')
277
+ return 'claude-code';
278
+ if (providerId === 'gemini')
279
+ return 'gemini';
280
+ if (providerId === 'amp')
281
+ return 'amp';
282
+ return 'codex';
221
283
  }
222
284
  async cacheDetectionResult(providerId, result) {
223
285
  if (result.found && result.path) {
@@ -235,6 +297,26 @@ export class ProviderDetectionService {
235
297
  version: result.version,
236
298
  });
237
299
  }
300
+ isVersionLessThan(version, minimum) {
301
+ const toParts = (v) => v
302
+ .split('.')
303
+ .map((part) => {
304
+ const parsed = parseInt(part, 10);
305
+ return Number.isNaN(parsed) ? 0 : parsed;
306
+ })
307
+ .slice(0, 4);
308
+ const vParts = toParts(version);
309
+ const mParts = toParts(minimum);
310
+ const maxLength = Math.max(vParts.length, mParts.length);
311
+ for (let i = 0; i < maxLength; i++) {
312
+ const a = vParts[i] ?? 0;
313
+ const b = mParts[i] ?? 0;
314
+ if (a === b)
315
+ continue;
316
+ return a < b;
317
+ }
318
+ return false;
319
+ }
238
320
  }
239
321
  // Singleton instance
240
322
  let providerDetectionService = null;
@@ -0,0 +1,5 @@
1
+ export interface VibemanInfo {
2
+ version?: string;
3
+ gitShortHash?: string;
4
+ }
5
+ export declare function getVibemanInfo(): Promise<VibemanInfo>;
@@ -0,0 +1,85 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { simpleGit } from 'simple-git';
5
+ import { log } from '../logger.js';
6
+ const moduleDir = path.dirname(fileURLToPath(import.meta.url));
7
+ function readPackageJson(pkgPath) {
8
+ try {
9
+ return JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
10
+ }
11
+ catch (error) {
12
+ log.warn('Failed to read package.json', { error, path: pkgPath }, 'vibeman-info');
13
+ return null;
14
+ }
15
+ }
16
+ function findGitRoot(startDir) {
17
+ let dir = startDir;
18
+ const { root } = path.parse(dir);
19
+ while (true) {
20
+ if (fs.existsSync(path.join(dir, '.git'))) {
21
+ return dir;
22
+ }
23
+ if (dir === root)
24
+ break;
25
+ dir = path.dirname(dir);
26
+ }
27
+ return null;
28
+ }
29
+ function findPackageRoot(startDir, packageName) {
30
+ let dir = startDir;
31
+ const { root } = path.parse(dir);
32
+ while (true) {
33
+ const pkgPath = path.join(dir, 'package.json');
34
+ if (fs.existsSync(pkgPath)) {
35
+ const pkg = readPackageJson(pkgPath);
36
+ if (pkg?.name === packageName) {
37
+ return dir;
38
+ }
39
+ }
40
+ if (dir === root)
41
+ break;
42
+ dir = path.dirname(dir);
43
+ }
44
+ return null;
45
+ }
46
+ function readPackageVersion(pkgPath) {
47
+ const pkg = readPackageJson(pkgPath);
48
+ if (!pkg)
49
+ return undefined;
50
+ const version = pkg.version;
51
+ return typeof version === 'string' && version.trim().length > 0 ? version.trim() : undefined;
52
+ }
53
+ function resolveVibemanVersion(gitRoot, packageRoot) {
54
+ if (gitRoot) {
55
+ const cliPackage = path.join(gitRoot, 'apps', 'cli', 'package.json');
56
+ if (fs.existsSync(cliPackage)) {
57
+ const version = readPackageVersion(cliPackage);
58
+ if (version)
59
+ return version;
60
+ }
61
+ }
62
+ if (packageRoot) {
63
+ const cliPackage = path.join(packageRoot, 'package.json');
64
+ if (fs.existsSync(cliPackage)) {
65
+ return readPackageVersion(cliPackage);
66
+ }
67
+ }
68
+ return undefined;
69
+ }
70
+ export async function getVibemanInfo() {
71
+ const gitRoot = findGitRoot(moduleDir);
72
+ let gitShortHash;
73
+ if (gitRoot) {
74
+ try {
75
+ const hash = await simpleGit(gitRoot).revparse(['--short', 'HEAD']);
76
+ gitShortHash = hash.trim();
77
+ }
78
+ catch (error) {
79
+ log.warn('Failed to resolve Vibeman git hash', { error, gitRoot }, 'vibeman-info');
80
+ }
81
+ }
82
+ const packageRoot = findPackageRoot(moduleDir, '@vibeman/cli');
83
+ const version = resolveVibemanVersion(gitRoot, packageRoot);
84
+ return { version, gitShortHash };
85
+ }