vibe-coding-master 0.2.12 → 0.3.0

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.
package/README.md CHANGED
@@ -50,9 +50,18 @@ From npm:
50
50
 
51
51
  ```bash
52
52
  npm install -g vibe-coding-master
53
+ vcm --version
53
54
  vcm
54
55
  ```
55
56
 
57
+ Useful CLI flags:
58
+
59
+ ```bash
60
+ vcm --help
61
+ vcm --version
62
+ vcm --host=127.0.0.1 --port=4173
63
+ ```
64
+
56
65
  From source:
57
66
 
58
67
  ```bash
@@ -0,0 +1,54 @@
1
+ import { VcmError } from "../errors.js";
2
+ import { isCodexReviewGate } from "../services/codex-review-service.js";
3
+ export function registerCodexReviewRoutes(app, deps) {
4
+ app.get("/api/tasks/:taskSlug/codex-review", async (request) => {
5
+ const project = await requireCurrentProject(deps.projectService);
6
+ return deps.codexReviewService.getState(project.repoRoot, request.params.taskSlug);
7
+ });
8
+ app.post("/api/tasks/:taskSlug/codex-review/:gate/request", async (request) => {
9
+ const project = await requireCurrentProject(deps.projectService);
10
+ const gate = parseGate(request.params.gate);
11
+ return deps.codexReviewService.requestReviewGate(project.repoRoot, request.params.taskSlug, gate);
12
+ });
13
+ app.post("/api/tasks/:taskSlug/codex-review/:gate/retry", async (request) => {
14
+ const project = await requireCurrentProject(deps.projectService);
15
+ const gate = parseGate(request.params.gate);
16
+ return deps.codexReviewService.retryReviewGate(project.repoRoot, request.params.taskSlug, gate);
17
+ });
18
+ app.post("/api/tasks/:taskSlug/codex-review/:gate/skip", async (request) => {
19
+ const project = await requireCurrentProject(deps.projectService);
20
+ const gate = parseGate(request.params.gate);
21
+ return deps.codexReviewService.skipReviewGate(project.repoRoot, request.params.taskSlug, gate, request.body);
22
+ });
23
+ app.post("/api/tasks/:taskSlug/codex-review/:gate/override", async (request) => {
24
+ const project = await requireCurrentProject(deps.projectService);
25
+ const gate = parseGate(request.params.gate);
26
+ return deps.codexReviewService.overrideReviewGate(project.repoRoot, request.params.taskSlug, gate, request.body);
27
+ });
28
+ app.get("/api/tasks/:taskSlug/codex-review/:gate/report", async (request) => {
29
+ const project = await requireCurrentProject(deps.projectService);
30
+ const gate = parseGate(request.params.gate);
31
+ return deps.codexReviewService.readReport(project.repoRoot, request.params.taskSlug, gate);
32
+ });
33
+ }
34
+ function parseGate(gate) {
35
+ if (!isCodexReviewGate(gate)) {
36
+ throw new VcmError({
37
+ code: "UNKNOWN_CODEX_REVIEW_GATE",
38
+ message: `Unknown Codex review gate: ${gate}`,
39
+ statusCode: 400
40
+ });
41
+ }
42
+ return gate;
43
+ }
44
+ async function requireCurrentProject(projectService) {
45
+ const project = await projectService.getCurrentProject();
46
+ if (!project) {
47
+ throw new VcmError({
48
+ code: "PROJECT_NOT_CONNECTED",
49
+ message: "Connect a repository first.",
50
+ statusCode: 409
51
+ });
52
+ }
53
+ return project;
54
+ }
@@ -6,6 +6,7 @@ import process from "node:process";
6
6
  import { fileURLToPath } from "node:url";
7
7
  import { renderArchitectHarnessRules } from "../templates/harness/architect-agent.js";
8
8
  import { renderCoderHarnessRules } from "../templates/harness/coder-agent.js";
9
+ import { renderCodexAgentsHarnessRules, renderCodexArchitecturePlanPrompt, renderCodexConfigHarnessRules, renderCodexFinalDiffPrompt, renderCodexReviewResultSchema, renderCodexValidationAdequacyPrompt, renderRequestCodexReviewTool, renderVcmCodexReviewGateSkillRules } from "../templates/harness/codex-review.js";
9
10
  import { renderRootClaudeHarnessRules } from "../templates/harness/claude-root.js";
10
11
  import { renderGitignoreHarnessRules } from "../templates/harness/gitignore.js";
11
12
  import { renderProjectManagerHarnessRules } from "../templates/harness/project-manager-agent.js";
@@ -101,6 +102,13 @@ const MANAGED_FILES = [
101
102
  commentStyle: "html",
102
103
  category: "pull-request-template",
103
104
  content: renderPullRequestTemplateHarnessRules()
105
+ },
106
+ {
107
+ path: ".ai/codex/AGENTS.md",
108
+ title: "VCM Codex Reviewer",
109
+ commentStyle: "html",
110
+ category: "codex-reviewer-agent",
111
+ content: renderCodexAgentsHarnessRules()
104
112
  }
105
113
  ];
106
114
  const DURABLE_DOC_TEMPLATES = [
@@ -154,6 +162,48 @@ const WHOLE_FILES = [
154
162
  mode: 0o644,
155
163
  content: renderSkillFile("VCM Route Message Skill", "vcm-route-message", "Use when a VCM role needs to hand off work, ask a question, report a result, report a blocker, or raise a finding to another VCM role.", renderVcmRouteMessageSkillRules())
156
164
  },
165
+ {
166
+ path: ".claude/skills/vcm-codex-review-gate/SKILL.md",
167
+ category: "skill",
168
+ mode: 0o644,
169
+ content: renderSkillFile("VCM Codex Review Gate Skill", "vcm-codex-review-gate", "Use when project-manager reaches a Codex Review Gate or receives a VCM Codex Review callback.", renderVcmCodexReviewGateSkillRules())
170
+ },
171
+ {
172
+ path: ".ai/codex/config.toml",
173
+ category: "codex-review-config",
174
+ mode: 0o644,
175
+ content: renderCodexConfigHarnessRules()
176
+ },
177
+ {
178
+ path: ".ai/codex/prompts/architecture-plan-gate.md",
179
+ category: "codex-review-prompt",
180
+ mode: 0o644,
181
+ content: renderCodexArchitecturePlanPrompt()
182
+ },
183
+ {
184
+ path: ".ai/codex/prompts/validation-adequacy-gate.md",
185
+ category: "codex-review-prompt",
186
+ mode: 0o644,
187
+ content: renderCodexValidationAdequacyPrompt()
188
+ },
189
+ {
190
+ path: ".ai/codex/prompts/final-diff-gate.md",
191
+ category: "codex-review-prompt",
192
+ mode: 0o644,
193
+ content: renderCodexFinalDiffPrompt()
194
+ },
195
+ {
196
+ path: ".ai/codex/schemas/codex-review-result.schema.json",
197
+ category: "codex-review-schema",
198
+ mode: 0o644,
199
+ content: renderCodexReviewResultSchema()
200
+ },
201
+ {
202
+ path: ".ai/tools/request-codex-review",
203
+ category: "runtime-tool",
204
+ mode: 0o755,
205
+ content: renderRequestCodexReviewTool()
206
+ },
157
207
  {
158
208
  path: ".ai/tools/run-long-check",
159
209
  category: "runtime-tool",
@@ -365,6 +415,11 @@ function fixedDirectories() {
365
415
  ".claude/skills/vcm-harness-bootstrap/",
366
416
  ".claude/skills/vcm-long-running-validation/",
367
417
  ".claude/skills/vcm-route-message/",
418
+ ".claude/skills/vcm-codex-review-gate/",
419
+ ".ai/codex/",
420
+ ".ai/codex/prompts/",
421
+ ".ai/codex/schemas/",
422
+ ".ai/vcm/codex-reviews/",
368
423
  ".ai/tools/",
369
424
  ".ai/generated/"
370
425
  ];
@@ -10,6 +10,7 @@ import { createClaudeHookService } from "./services/claude-hook-service.js";
10
10
  import { createGitAdapter } from "./adapters/git-adapter.js";
11
11
  import { createAppSettingsService } from "./services/app-settings-service.js";
12
12
  import { createClaudeTranscriptService } from "./services/claude-transcript-service.js";
13
+ import { createCodexReviewService } from "./services/codex-review-service.js";
13
14
  import { createHarnessService, createScriptFixedHarnessInstaller } from "./services/harness-service.js";
14
15
  import { createNodeFileSystemAdapter } from "./adapters/filesystem.js";
15
16
  import { createNodePtyTerminalRuntime } from "./runtime/node-pty-runtime.js";
@@ -31,6 +32,7 @@ import { createTranslationService } from "./services/translation-service.js";
31
32
  import { registerAppSettingsRoutes } from "./api/app-settings-routes.js";
32
33
  import { registerArtifactRoutes } from "./api/artifact-routes.js";
33
34
  import { registerClaudeHookRoutes } from "./api/claude-hook-routes.js";
35
+ import { registerCodexReviewRoutes } from "./api/codex-review-routes.js";
34
36
  import { registerHarnessRoutes } from "./api/harness-routes.js";
35
37
  import { registerMessageRoutes } from "./api/message-routes.js";
36
38
  import { registerProjectRoutes } from "./api/project-routes.js";
@@ -56,6 +58,10 @@ export async function createServer(deps, options = {}) {
56
58
  });
57
59
  registerAppSettingsRoutes(app, { appSettings: deps.appSettings });
58
60
  registerClaudeHookRoutes(app, { claudeHookService: deps.claudeHookService });
61
+ registerCodexReviewRoutes(app, {
62
+ projectService: deps.projectService,
63
+ codexReviewService: deps.codexReviewService
64
+ });
59
65
  registerProjectRoutes(app, { projectService: deps.projectService });
60
66
  registerHarnessRoutes(app, {
61
67
  projectService: deps.projectService,
@@ -175,6 +181,14 @@ export function createDefaultServerDeps(options = {}) {
175
181
  sessionService,
176
182
  taskService
177
183
  });
184
+ const codexReviewService = createCodexReviewService({
185
+ fs,
186
+ runner,
187
+ runtime,
188
+ projectService,
189
+ taskService,
190
+ sessionService
191
+ });
178
192
  const roundService = createRoundService({
179
193
  fs,
180
194
  onSessionStatusChange: async ({ repoRoot, taskSlug, status }) => {
@@ -232,6 +246,7 @@ export function createDefaultServerDeps(options = {}) {
232
246
  commandDispatcher,
233
247
  claudeHookService,
234
248
  messageService,
249
+ codexReviewService,
235
250
  roundService,
236
251
  statusService,
237
252
  translationService,