vibe-coding-master 0.2.13 → 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/dist/backend/api/codex-review-routes.js +54 -0
- package/dist/backend/cli/install-vcm-harness.js +55 -0
- package/dist/backend/server.js +15 -0
- package/dist/backend/services/codex-review-service.js +765 -0
- package/dist/backend/services/harness-service.js +63 -3
- package/dist/backend/services/task-service.js +2 -0
- package/dist/backend/templates/harness/claude-root.js +2 -0
- package/dist/backend/templates/harness/codex-review.js +574 -0
- package/dist/backend/templates/harness/project-manager-agent.js +13 -3
- package/dist/backend/templates/harness/vcm-final-acceptance-skill.js +6 -1
- package/dist/shared/types/codex-review.js +5 -0
- package/dist-frontend/assets/index-C9l94uxA.js +92 -0
- package/dist-frontend/assets/index-D6jWo6Jd.css +32 -0
- package/dist-frontend/index.html +2 -2
- package/docs/codex-review-gates.md +515 -0
- package/docs/product-design.md +31 -2
- package/package.json +1 -1
- package/scripts/verify-package.mjs +4 -0
- package/dist-frontend/assets/index-CT20u9Fk.js +0 -92
- package/dist-frontend/assets/index-DC9-SB7F.css +0 -32
|
@@ -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
|
];
|
package/dist/backend/server.js
CHANGED
|
@@ -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,
|