vibeman 0.0.2 → 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 (71) hide show
  1. package/dist/runtime/api/.tsbuildinfo +1 -1
  2. package/dist/runtime/api/agent/agent-service.d.ts +7 -6
  3. package/dist/runtime/api/agent/agent-service.js +36 -27
  4. package/dist/runtime/api/agent/ai-providers/codex-cli-provider.d.ts +2 -0
  5. package/dist/runtime/api/agent/ai-providers/codex-cli-provider.js +62 -30
  6. package/dist/runtime/api/agent/codex-cli-provider.test.js +47 -2
  7. package/dist/runtime/api/agent/routing-policy.d.ts +13 -30
  8. package/dist/runtime/api/agent/routing-policy.js +82 -132
  9. package/dist/runtime/api/agent/routing-policy.test.js +63 -0
  10. package/dist/runtime/api/api/routers/ai.d.ts +15 -3
  11. package/dist/runtime/api/api/routers/ai.js +7 -6
  12. package/dist/runtime/api/api/routers/executions.d.ts +1 -1
  13. package/dist/runtime/api/api/routers/tasks.d.ts +3 -3
  14. package/dist/runtime/api/api/routers/workflows.d.ts +8 -0
  15. package/dist/runtime/api/api/routers/workflows.js +2 -1
  16. package/dist/runtime/api/api/trpc.d.ts +6 -6
  17. package/dist/runtime/api/lib/trpc/server.d.ts +27 -7
  18. package/dist/runtime/api/router.d.ts +27 -7
  19. package/dist/runtime/api/settings-service.js +49 -1
  20. package/dist/runtime/api/types/index.d.ts +8 -1
  21. package/dist/runtime/api/types/settings.d.ts +15 -2
  22. package/dist/runtime/api/workflows/vibing-orchestrator.js +32 -1
  23. package/dist/runtime/web/.next/BUILD_ID +1 -1
  24. package/dist/runtime/web/.next/app-build-manifest.json +18 -11
  25. package/dist/runtime/web/.next/app-path-routes-manifest.json +2 -1
  26. package/dist/runtime/web/.next/build-manifest.json +2 -2
  27. package/dist/runtime/web/.next/prerender-manifest.json +10 -10
  28. package/dist/runtime/web/.next/routes-manifest.json +8 -0
  29. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route.js +1 -0
  30. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route.js.nft.json +1 -0
  31. package/dist/runtime/web/.next/server/app/.vibeman/assets/images/[...path]/route_client-reference-manifest.js +1 -0
  32. package/dist/runtime/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  33. package/dist/runtime/web/.next/server/app/_not-found.html +2 -2
  34. package/dist/runtime/web/.next/server/app/_not-found.rsc +1 -1
  35. package/dist/runtime/web/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  36. package/dist/runtime/web/.next/server/app/api/images/[...path]/route.js +1 -1
  37. package/dist/runtime/web/.next/server/app/api/images/[...path]/route_client-reference-manifest.js +1 -1
  38. package/dist/runtime/web/.next/server/app/api/upload/route.js +1 -1
  39. package/dist/runtime/web/.next/server/app/api/upload/route_client-reference-manifest.js +1 -1
  40. package/dist/runtime/web/.next/server/app/index.html +2 -2
  41. package/dist/runtime/web/.next/server/app/index.rsc +2 -2
  42. package/dist/runtime/web/.next/server/app/page.js +21 -21
  43. package/dist/runtime/web/.next/server/app/page_client-reference-manifest.js +1 -1
  44. package/dist/runtime/web/.next/server/app-paths-manifest.json +2 -1
  45. package/dist/runtime/web/.next/server/pages/404.html +2 -2
  46. package/dist/runtime/web/.next/server/pages/500.html +1 -1
  47. package/dist/runtime/web/.next/server/server-reference-manifest.json +1 -1
  48. package/dist/runtime/web/.next/static/5_15u1WQCxN1_eHZpldCv/_buildManifest.js +1 -0
  49. package/dist/runtime/web/.next/static/chunks/{277-0142a939f08738c3.js → 823-6f371a6e829adbba.js} +1 -1
  50. package/dist/runtime/web/.next/static/chunks/app/.vibeman/assets/images/[...path]/route-751c9265a65409e5.js +1 -0
  51. package/dist/runtime/web/.next/static/chunks/app/api/health/route-751c9265a65409e5.js +1 -0
  52. package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-751c9265a65409e5.js +1 -0
  53. package/dist/runtime/web/.next/static/chunks/app/api/upload/route-751c9265a65409e5.js +1 -0
  54. package/dist/runtime/web/.next/static/chunks/app/page-9fe7d75095b4ccec.js +1 -0
  55. package/package.json +1 -1
  56. package/dist/runtime/api/lib/image-paste-drop-extension.d.ts +0 -26
  57. package/dist/runtime/api/lib/image-paste-drop-extension.js +0 -125
  58. package/dist/runtime/api/lib/markdown-utils.d.ts +0 -8
  59. package/dist/runtime/api/lib/markdown-utils.js +0 -282
  60. package/dist/runtime/api/lib/markdown-utils.test.js +0 -348
  61. package/dist/runtime/api/lib/tiptap-utils.clamp-selection.test.d.ts +0 -1
  62. package/dist/runtime/api/lib/tiptap-utils.clamp-selection.test.js +0 -27
  63. package/dist/runtime/api/lib/tiptap-utils.d.ts +0 -130
  64. package/dist/runtime/api/lib/tiptap-utils.js +0 -327
  65. package/dist/runtime/web/.next/static/chunks/app/api/health/route-105a61ae865ba536.js +0 -1
  66. package/dist/runtime/web/.next/static/chunks/app/api/images/[...path]/route-105a61ae865ba536.js +0 -1
  67. package/dist/runtime/web/.next/static/chunks/app/api/upload/route-105a61ae865ba536.js +0 -1
  68. package/dist/runtime/web/.next/static/chunks/app/page-8c3ba579efc6f918.js +0 -1
  69. package/dist/runtime/web/.next/static/mRpNgPfbYR_0wrODzlg_4/_buildManifest.js +0 -1
  70. /package/dist/runtime/api/{lib/markdown-utils.test.d.ts → agent/routing-policy.test.d.ts} +0 -0
  71. /package/dist/runtime/web/.next/static/{mRpNgPfbYR_0wrODzlg_4 → 5_15u1WQCxN1_eHZpldCv}/_ssgManifest.js +0 -0
@@ -120,14 +120,26 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
120
120
  }>;
121
121
  getRoutingPolicy: import("@trpc/server").TRPCQueryProcedure<{
122
122
  input: void;
123
- 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
+ };
124
136
  meta: object;
125
137
  }>;
126
138
  updateRoutingPolicy: import("@trpc/server").TRPCMutationProcedure<{
127
139
  input: {
128
140
  policy: {
129
141
  defaultProvider?: string | undefined;
130
- operations?: Partial<Record<"execute_task" | "improve_task" | "ai_merge" | "ai_codereview", {
142
+ operations?: Partial<Record<"execute_task" | "quality_checks" | "improve_task" | "ai_merge" | "ai_codereview", {
131
143
  provider: string;
132
144
  options?: {
133
145
  temperature?: number | undefined;
@@ -157,7 +169,7 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
157
169
  }>;
158
170
  setOperationConfig: import("@trpc/server").TRPCMutationProcedure<{
159
171
  input: {
160
- operation: "execute_task" | "improve_task" | "ai_merge" | "ai_codereview";
172
+ operation: "execute_task" | "quality_checks" | "improve_task" | "ai_merge" | "ai_codereview";
161
173
  config: {
162
174
  provider: string;
163
175
  options?: {
@@ -350,6 +362,10 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
350
362
  provider?: string | undefined;
351
363
  model?: string | undefined;
352
364
  } | undefined;
365
+ quality_checks?: {
366
+ provider?: string | undefined;
367
+ model?: string | undefined;
368
+ } | undefined;
353
369
  improve_task?: {
354
370
  provider?: string | undefined;
355
371
  model?: string | undefined;
@@ -386,6 +402,10 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
386
402
  provider?: string | undefined;
387
403
  model?: string | undefined;
388
404
  } | undefined;
405
+ quality_checks?: {
406
+ provider?: string | undefined;
407
+ model?: string | undefined;
408
+ } | undefined;
389
409
  improve_task?: {
390
410
  provider?: string | undefined;
391
411
  model?: string | undefined;
@@ -750,7 +770,7 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
750
770
  input: {
751
771
  title: string;
752
772
  type: "feature" | "bug" | "chore" | "refactor" | "test" | "doc";
753
- priority: "high" | "medium" | "low";
773
+ priority: "low" | "medium" | "high";
754
774
  content: string;
755
775
  taskId: string;
756
776
  executionId?: string | undefined;
@@ -782,7 +802,7 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
782
802
  status?: "review" | "in-progress" | "backlog" | "done" | undefined;
783
803
  type?: "feature" | "bug" | "chore" | "refactor" | "test" | "doc" | undefined;
784
804
  tags?: string[] | undefined;
785
- priority?: "high" | "medium" | "low" | undefined;
805
+ priority?: "low" | "medium" | "high" | undefined;
786
806
  search?: string | undefined;
787
807
  includeDeleted?: boolean | undefined;
788
808
  onlyDeleted?: boolean | undefined;
@@ -807,7 +827,7 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
807
827
  tags?: string[] | undefined;
808
828
  due_date?: string | undefined;
809
829
  assignee?: string[] | undefined;
810
- priority?: "high" | "medium" | "low" | undefined;
830
+ priority?: "low" | "medium" | "high" | undefined;
811
831
  comments?: string[] | undefined;
812
832
  };
813
833
  output: import("./types/index.js").Task;
@@ -822,7 +842,7 @@ export declare function createRouter(taskService: TaskService, gitService: GitSe
822
842
  tags?: string[] | undefined;
823
843
  due_date?: string | undefined;
824
844
  assignee?: string[] | undefined;
825
- priority?: "high" | "medium" | "low" | undefined;
845
+ priority?: "low" | "medium" | "high" | undefined;
826
846
  comments?: string[] | undefined;
827
847
  content?: string | undefined;
828
848
  deleted_at?: string | undefined;
@@ -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']),
@@ -43,6 +78,7 @@ const VibemanSettingsSchema = z.object({
43
78
  codex: z.object({ binPath: z.string().min(1).optional() }).optional(),
44
79
  })
45
80
  .optional(),
81
+ routingPolicy: RoutingPolicySettingsSchema,
46
82
  }),
47
83
  defaultWorkflow: z.object({
48
84
  autoQualityChecks: z.boolean(),
@@ -116,6 +152,10 @@ const DEFAULT_SETTINGS = {
116
152
  taskPrompt: 'Please implement the following task with attention to quality and testing.',
117
153
  },
118
154
  providers: {},
155
+ routingPolicy: {
156
+ defaultProvider: 'claude-code',
157
+ operations: {},
158
+ },
119
159
  },
120
160
  defaultWorkflow: {
121
161
  autoQualityChecks: true,
@@ -558,6 +598,14 @@ export class SettingsService extends EventEmitter {
558
598
  ...DEFAULT_SETTINGS.agents.defaultPrompts,
559
599
  ...settings.agents?.defaultPrompts,
560
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
+ },
561
609
  },
562
610
  defaultWorkflow: {
563
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;
@@ -323,10 +323,12 @@ export class VibingOrchestrator extends EventEmitter {
323
323
  if (wfId) {
324
324
  const wf = this.workflows.get(wfId);
325
325
  if (wf) {
326
+ const timestamp = new Date().toISOString();
326
327
  wf.metadata = {
327
328
  ...wf.metadata,
328
- aiReviewResult: { ...res, timestamp: new Date().toISOString() },
329
+ aiReviewResult: { ...res, timestamp },
329
330
  };
331
+ wf.aiReviewResult = { ...res, timestamp };
330
332
  // Record execution ID under ai-reviewing for UI/observability
331
333
  if (res?.executionId) {
332
334
  wf.executionIds = wf.executionIds || {};
@@ -737,6 +739,14 @@ export class VibingOrchestrator extends EventEmitter {
737
739
  (workflow.failureContext?.atPhase
738
740
  ? `Retry after ${workflow.failureContext.atPhase} failure`
739
741
  : undefined);
742
+ const aiReviewSource = workflow.aiReviewResult || workflow.metadata?.aiReviewResult;
743
+ const aiReviewContext = aiReviewSource
744
+ ? {
745
+ summary: aiReviewSource.reviewSummary,
746
+ recommendations: aiReviewSource.recommendations,
747
+ score: aiReviewSource.qualityScore,
748
+ }
749
+ : undefined;
740
750
  // Prepare to capture executionId from event, then start execution
741
751
  const createdPromise = this.waitForExecutionCreated(workflow.taskId, workflowId, 20000);
742
752
  // Fire-and-forget; attach catch to prevent unhandled rejection from crashing process
@@ -748,6 +758,7 @@ export class VibingOrchestrator extends EventEmitter {
748
758
  previousExecutionId: previousExecId,
749
759
  failurePhase: workflow.failureContext?.atPhase,
750
760
  qualityResults: workflow.qualityResults,
761
+ aiReview: aiReviewContext,
751
762
  attempt,
752
763
  }
753
764
  : undefined,
@@ -945,6 +956,7 @@ export class VibingOrchestrator extends EventEmitter {
945
956
  ...workflow.metadata,
946
957
  aiReviewResult: { ...review, timestamp },
947
958
  };
959
+ workflow.aiReviewResult = { ...review, timestamp };
948
960
  // Track execution ID under ai-reviewing for observability
949
961
  const executionId = providedExecutionId ?? review?.executionId;
950
962
  if (executionId) {
@@ -1088,6 +1100,17 @@ export class VibingOrchestrator extends EventEmitter {
1088
1100
  workflowId,
1089
1101
  workingDirectory,
1090
1102
  });
1103
+ const qualityOverride = workflow.metadata?.aiRoutingOverrides?.quality_checks;
1104
+ try {
1105
+ const resolved = await this.agentService.previewProviderForOperation('quality_checks', qualityOverride);
1106
+ const providerLabel = resolved.model
1107
+ ? `${resolved.provider} (model: ${resolved.model})`
1108
+ : resolved.provider;
1109
+ await this.agentService.logGenericExecution(execId, `[validation] Using provider: ${providerLabel}`);
1110
+ }
1111
+ catch (err) {
1112
+ log.warn('Failed to resolve quality-check provider', err, 'vibing-orchestrator');
1113
+ }
1091
1114
  workflow.executionIds = workflow.executionIds || {};
1092
1115
  const valList = workflow.executionIds['validating'] || [];
1093
1116
  workflow.executionIds['validating'] = [...valList, execId];
@@ -1831,6 +1854,14 @@ function serializeVibe(workflow) {
1831
1854
  timestamp: new Date(workflow.qualityResults.timestamp).toISOString(),
1832
1855
  }
1833
1856
  : undefined,
1857
+ aiReviewResult: workflow.aiReviewResult
1858
+ ? {
1859
+ ...workflow.aiReviewResult,
1860
+ timestamp: workflow.aiReviewResult.timestamp
1861
+ ? new Date(workflow.aiReviewResult.timestamp).toISOString()
1862
+ : undefined,
1863
+ }
1864
+ : undefined,
1834
1865
  };
1835
1866
  }
1836
1867
  async function getDbStats(db) {
@@ -1 +1 @@
1
- mRpNgPfbYR_0wrODzlg_4
1
+ 5_15u1WQCxN1_eHZpldCv
@@ -7,19 +7,33 @@
7
7
  "static/chunks/main-app-c0b0f5ba4f7f9d75.js",
8
8
  "static/chunks/app/_not-found/page-1cb74d1cba27d0ab.js"
9
9
  ],
10
+ "/.vibeman/assets/images/[...path]/route": [
11
+ "static/chunks/webpack-c8de37305b4635cf.js",
12
+ "static/chunks/87c73c54-09e1ba5c70e60a51.js",
13
+ "static/chunks/18-15c10d3288afef2e.js",
14
+ "static/chunks/main-app-c0b0f5ba4f7f9d75.js",
15
+ "static/chunks/app/.vibeman/assets/images/[...path]/route-751c9265a65409e5.js"
16
+ ],
10
17
  "/api/health/route": [
11
18
  "static/chunks/webpack-c8de37305b4635cf.js",
12
19
  "static/chunks/87c73c54-09e1ba5c70e60a51.js",
13
20
  "static/chunks/18-15c10d3288afef2e.js",
14
21
  "static/chunks/main-app-c0b0f5ba4f7f9d75.js",
15
- "static/chunks/app/api/health/route-105a61ae865ba536.js"
22
+ "static/chunks/app/api/health/route-751c9265a65409e5.js"
16
23
  ],
17
24
  "/api/images/[...path]/route": [
18
25
  "static/chunks/webpack-c8de37305b4635cf.js",
19
26
  "static/chunks/87c73c54-09e1ba5c70e60a51.js",
20
27
  "static/chunks/18-15c10d3288afef2e.js",
21
28
  "static/chunks/main-app-c0b0f5ba4f7f9d75.js",
22
- "static/chunks/app/api/images/[...path]/route-105a61ae865ba536.js"
29
+ "static/chunks/app/api/images/[...path]/route-751c9265a65409e5.js"
30
+ ],
31
+ "/api/upload/route": [
32
+ "static/chunks/webpack-c8de37305b4635cf.js",
33
+ "static/chunks/87c73c54-09e1ba5c70e60a51.js",
34
+ "static/chunks/18-15c10d3288afef2e.js",
35
+ "static/chunks/main-app-c0b0f5ba4f7f9d75.js",
36
+ "static/chunks/app/api/upload/route-751c9265a65409e5.js"
23
37
  ],
24
38
  "/layout": [
25
39
  "static/chunks/webpack-c8de37305b4635cf.js",
@@ -34,13 +48,6 @@
34
48
  "static/chunks/765-e838910065b50c3d.js",
35
49
  "static/chunks/app/layout-8435322f09fd0975.js"
36
50
  ],
37
- "/api/upload/route": [
38
- "static/chunks/webpack-c8de37305b4635cf.js",
39
- "static/chunks/87c73c54-09e1ba5c70e60a51.js",
40
- "static/chunks/18-15c10d3288afef2e.js",
41
- "static/chunks/main-app-c0b0f5ba4f7f9d75.js",
42
- "static/chunks/app/api/upload/route-105a61ae865ba536.js"
43
- ],
44
51
  "/page": [
45
52
  "static/chunks/webpack-c8de37305b4635cf.js",
46
53
  "static/chunks/87c73c54-09e1ba5c70e60a51.js",
@@ -52,8 +59,8 @@
52
59
  "static/chunks/22747d63-ad5da0c19f4cfe41.js",
53
60
  "static/chunks/8bb4d8db-3e2aa02b0a2384b9.js",
54
61
  "static/chunks/575-e2478287c27da87b.js",
55
- "static/chunks/277-0142a939f08738c3.js",
56
- "static/chunks/app/page-8c3ba579efc6f918.js"
62
+ "static/chunks/823-6f371a6e829adbba.js",
63
+ "static/chunks/app/page-9fe7d75095b4ccec.js"
57
64
  ]
58
65
  }
59
66
  }
@@ -1,7 +1,8 @@
1
1
  {
2
+ "/.vibeman/assets/images/[...path]/route": "/.vibeman/assets/images/[...path]",
2
3
  "/api/health/route": "/api/health",
3
4
  "/api/images/[...path]/route": "/api/images/[...path]",
4
- "/_not-found/page": "/_not-found",
5
5
  "/api/upload/route": "/api/upload",
6
+ "/_not-found/page": "/_not-found",
6
7
  "/page": "/"
7
8
  }
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/mRpNgPfbYR_0wrODzlg_4/_buildManifest.js",
9
- "static/mRpNgPfbYR_0wrODzlg_4/_ssgManifest.js"
8
+ "static/5_15u1WQCxN1_eHZpldCv/_buildManifest.js",
9
+ "static/5_15u1WQCxN1_eHZpldCv/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [
12
12
  "static/chunks/webpack-c8de37305b4635cf.js",
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "version": 4,
3
3
  "routes": {
4
- "/_not-found": {
5
- "initialStatus": 404,
4
+ "/": {
6
5
  "experimentalBypassFor": [
7
6
  {
8
7
  "type": "header",
@@ -15,8 +14,8 @@
15
14
  }
16
15
  ],
17
16
  "initialRevalidateSeconds": false,
18
- "srcRoute": "/_not-found",
19
- "dataRoute": "/_not-found.rsc",
17
+ "srcRoute": "/",
18
+ "dataRoute": "/index.rsc",
20
19
  "allowHeader": [
21
20
  "host",
22
21
  "x-matched-path",
@@ -26,7 +25,8 @@
26
25
  "x-next-revalidate-tag-token"
27
26
  ]
28
27
  },
29
- "/": {
28
+ "/_not-found": {
29
+ "initialStatus": 404,
30
30
  "experimentalBypassFor": [
31
31
  {
32
32
  "type": "header",
@@ -39,8 +39,8 @@
39
39
  }
40
40
  ],
41
41
  "initialRevalidateSeconds": false,
42
- "srcRoute": "/",
43
- "dataRoute": "/index.rsc",
42
+ "srcRoute": "/_not-found",
43
+ "dataRoute": "/_not-found.rsc",
44
44
  "allowHeader": [
45
45
  "host",
46
46
  "x-matched-path",
@@ -54,8 +54,8 @@
54
54
  "dynamicRoutes": {},
55
55
  "notFoundRoutes": [],
56
56
  "preview": {
57
- "previewModeId": "03a9b538fba39124f8691ffda05da8fa",
58
- "previewModeSigningKey": "7af5b8d11e26e2288ce29c591de1c6dfb0afa5d616b2b87cdff307f8c516c426",
59
- "previewModeEncryptionKey": "a19958cfa9716d3f3eab68594cebb7e760a891f19851604a0378b92c3f1985d9"
57
+ "previewModeId": "6acd1c87e3fa37988f1d8d27a0715b12",
58
+ "previewModeSigningKey": "37a84e68e50eed8a1f5d5a84a7e75d77f54e557e249e5e9f642c9b2a9f493a23",
59
+ "previewModeEncryptionKey": "3cd5a924f19c2a5ae113f75d937257ab4fcabe25e19d35dbfba3aa31e304f371"
60
60
  }
61
61
  }
@@ -19,6 +19,14 @@
19
19
  "fallback": []
20
20
  },
21
21
  "dynamicRoutes": [
22
+ {
23
+ "page": "/.vibeman/assets/images/[...path]",
24
+ "regex": "^/\\.vibeman/assets/images/(.+?)(?:/)?$",
25
+ "routeKeys": {
26
+ "nxtPpath": "nxtPpath"
27
+ },
28
+ "namedRegex": "^/\\.vibeman/assets/images/(?<nxtPpath>.+?)(?:/)?$"
29
+ },
22
30
  {
23
31
  "page": "/api/images/[...path]",
24
32
  "regex": "^/api/images/(.+?)(?:/)?$",
@@ -0,0 +1 @@
1
+ (()=>{var a={};a.id=744,a.ids=[744],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},32511:(a,b,c)=>{"use strict";c.d(b,{C0:()=>i,Ui:()=>j,bx:()=>k,k3:()=>h});var d=c(29021),e=c.n(d),f=c(33873),g=c.n(f);function h(){return g().join(g().join(g().join(function(){let a=process.env.VIBEMAN_PROJECT_ROOT?.trim();if(a){if(g().isAbsolute(a))return g().normalize(a);let b=[process.env.VIBEMAN_PROJECT_ROOT_BASE,process.env.INIT_CWD,process.env.PWD,process.cwd()].filter(a=>!!a?.trim()),c=null;for(let d of b){let b=g().resolve(d,a);if(c||(c=b),e().existsSync(b))return b}return c??g().resolve(a)}let b=process.cwd(),{root:c}=g().parse(b);for(;;){if(e().existsSync(g().join(b,".git")))return b;if(b===c)break;b=g().dirname(b)}for(b=process.cwd();;){if(e().existsSync(g().join(b,".vibeman")))return b;if(b===c)break;b=g().dirname(b)}return process.cwd()}(),".vibeman"),"assets"),"images")}async function i(){let a=h();return await d.promises.mkdir(a,{recursive:!0}),a}function j(a){return[".vibeman/assets/images",l(a)].join("/")}function k(a){return["/.vibeman/assets/images",l(a)].join("/")}function l(a){let b=a.replace(/\\\\/g,"/"),c=g().posix.normalize(b);if(c.startsWith(".."))throw Error("Invalid image filename");return c.replace(/^\//,"")}},33873:a=>{"use strict";a.exports=require("path")},40306:(a,b,c)=>{"use strict";c.r(b),c.d(b,{handler:()=>A,patchFetch:()=>z,routeModule:()=>v,serverHooks:()=>y,workAsyncStorage:()=>w,workUnitAsyncStorage:()=>x});var d={};c.r(d),c.d(d,{GET:()=>u.GET});var e=c(26421),f=c(97714),g=c(85681),h=c(22369),i=c(37587),j=c(261),k=c(46537),l=c(3463),m=c(1889),n=c(85250),o=c(23620),p=c(29790),q=c(67876),r=c(57749),s=c(86439),t=c(40139),u=c(91827);let v=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/.vibeman/assets/images/[...path]/route",pathname:"/.vibeman/assets/images/[...path]",filename:"route",bundlePath:"app/.vibeman/assets/images/[...path]/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/Users/harryyu/BDev/vibeman/apps/web/src/app/.vibeman/assets/images/[...path]/route.ts",nextConfigOutput:"standalone",userland:d}),{workAsyncStorage:w,workUnitAsyncStorage:x,serverHooks:y}=v;function z(){return(0,g.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:x})}async function A(a,b,c){var d;let e="/.vibeman/assets/images/[...path]/route";"/index"===e&&(e="/");let g=await v.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:w,nextConfig:x,isDraftMode:y,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(z.dynamicRoutes[E]||z.routes[D]);if(F&&!y){let a=!!z.routes[D],b=z.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||v.isDev||y||(G="/index"===(G=D)?"/":G);let H=!0===v.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:w,prerenderManifest:z,renderOpts:{experimental:{cacheComponents:!!x.experimental.cacheComponents,authInterrupts:!!x.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=x.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>v.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>v.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await v.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await v.handleResponse({req:a,nextConfig:x,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),y&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(L||b instanceof s.NoFallbackError||await v.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},80408:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87032:()=>{},91827:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GET:()=>j});var d=c(53444),e=c(29021),f=c(33873),g=c.n(f),h=c(32511);let i={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".gif":"image/gif",".webp":"image/webp",".svg":"image/svg+xml"};async function j(a,{params:b}){try{let a=b?.path??[];if(!Array.isArray(a)||0===a.length)return new d.NextResponse("Not Found",{status:404});let c=function(a){let b=a.join("/"),c=g().posix.normalize(b);return c.startsWith("..")?null:c}(a);if(!c)return new d.NextResponse("Forbidden",{status:403});let f=(0,h.k3)(),j=g().join(f,c),k=g().normalize(j),l=g().normalize(f+g().sep);if(!k.startsWith(l))return new d.NextResponse("Forbidden",{status:403});try{await e.promises.access(j)}catch{return new d.NextResponse("Not Found",{status:404})}let m=await e.promises.readFile(j),n=i[g().extname(j).toLowerCase()]??"application/octet-stream";return new d.NextResponse(m,{headers:{"Content-Type":n,"Cache-Control":"public, max-age=31536000, immutable"}})}catch(a){return console.error("Error serving image:",a),new d.NextResponse("Internal Server Error",{status:500})}}}};var b=require("../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[635,825],()=>b(b.s=40306));module.exports=c})();
@@ -0,0 +1 @@
1
+ {"version":1,"files":["../../../../../../../package.json","../../../../../../package.json","../../../../../chunks/635.js","../../../../../chunks/825.js","../../../../../webpack-runtime.js","route_client-reference-manifest.js"]}