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.
@@ -4,6 +4,7 @@ import path from "node:path";
4
4
  import { promisify } from "node:util";
5
5
  import { renderArchitectHarnessRules } from "../templates/harness/architect-agent.js";
6
6
  import { renderCoderHarnessRules } from "../templates/harness/coder-agent.js";
7
+ import { renderCodexAgentsHarnessRules, renderCodexArchitecturePlanPrompt, renderCodexConfigHarnessRules, renderCodexFinalDiffPrompt, renderCodexReviewResultSchema, renderCodexValidationAdequacyPrompt, renderRequestCodexReviewTool, renderVcmCodexReviewGateSkillRules } from "../templates/harness/codex-review.js";
7
8
  import { renderRootClaudeHarnessRules } from "../templates/harness/claude-root.js";
8
9
  import { renderGitignoreHarnessRules } from "../templates/harness/gitignore.js";
9
10
  import { renderProjectManagerHarnessRules } from "../templates/harness/project-manager-agent.js";
@@ -88,6 +89,62 @@ const HARNESS_FILES = [
88
89
  ownership: "whole-file",
89
90
  renderRules: renderVcmLongRunningValidationSkillRules
90
91
  },
92
+ {
93
+ kind: "skill-vcm-codex-review-gate",
94
+ path: ".claude/skills/vcm-codex-review-gate/SKILL.md",
95
+ title: "VCM Codex Review Gate Skill",
96
+ frontmatter: renderSkillFrontmatter("vcm-codex-review-gate", "Use when project-manager reaches a Codex Review Gate or receives a VCM Codex Review callback."),
97
+ ownership: "whole-file",
98
+ renderRules: renderVcmCodexReviewGateSkillRules
99
+ },
100
+ {
101
+ kind: "codex-agents",
102
+ path: ".ai/codex/AGENTS.md",
103
+ title: "VCM Codex Reviewer",
104
+ renderRules: renderCodexAgentsHarnessRules
105
+ },
106
+ {
107
+ kind: "codex-config",
108
+ path: ".ai/codex/config.toml",
109
+ title: "VCM Codex Config",
110
+ ownership: "raw-file",
111
+ renderRules: renderCodexConfigHarnessRules
112
+ },
113
+ {
114
+ kind: "codex-prompt-architecture-plan",
115
+ path: ".ai/codex/prompts/architecture-plan-gate.md",
116
+ title: "Codex Architecture Plan Gate Prompt",
117
+ ownership: "raw-file",
118
+ renderRules: renderCodexArchitecturePlanPrompt
119
+ },
120
+ {
121
+ kind: "codex-prompt-validation-adequacy",
122
+ path: ".ai/codex/prompts/validation-adequacy-gate.md",
123
+ title: "Codex Validation Adequacy Gate Prompt",
124
+ ownership: "raw-file",
125
+ renderRules: renderCodexValidationAdequacyPrompt
126
+ },
127
+ {
128
+ kind: "codex-prompt-final-diff",
129
+ path: ".ai/codex/prompts/final-diff-gate.md",
130
+ title: "Codex Final Diff Gate Prompt",
131
+ ownership: "raw-file",
132
+ renderRules: renderCodexFinalDiffPrompt
133
+ },
134
+ {
135
+ kind: "codex-review-schema",
136
+ path: ".ai/codex/schemas/codex-review-result.schema.json",
137
+ title: "Codex Review Result Schema",
138
+ ownership: "raw-file",
139
+ renderRules: renderCodexReviewResultSchema
140
+ },
141
+ {
142
+ kind: "tool-request-codex-review",
143
+ path: ".ai/tools/request-codex-review",
144
+ title: "Request Codex Review Tool",
145
+ ownership: "raw-file",
146
+ renderRules: renderRequestCodexReviewTool
147
+ },
91
148
  {
92
149
  kind: "agent-project-manager",
93
150
  path: ".claude/agents/project-manager.md",
@@ -232,13 +289,13 @@ async function analyzeHarnessFiles(fs, repoRoot) {
232
289
  }
233
290
  async function analyzeHarnessFile(fs, repoRoot, definition) {
234
291
  const absolutePath = resolveHarnessPath(repoRoot, definition.path);
235
- const expectedContent = definition.ownership === "whole-file"
292
+ const expectedContent = definition.ownership === "whole-file" || definition.ownership === "raw-file"
236
293
  ? renderWholeHarnessFile(definition)
237
294
  : undefined;
238
- const expectedBlock = definition.ownership === "whole-file"
295
+ const expectedBlock = definition.ownership === "whole-file" || definition.ownership === "raw-file"
239
296
  ? undefined
240
297
  : renderManagedBlock(definition, definition.renderRules());
241
- const managedBlockPattern = definition.ownership === "whole-file"
298
+ const managedBlockPattern = definition.ownership === "whole-file" || definition.ownership === "raw-file"
242
299
  ? undefined
243
300
  : getManagedBlockPattern(definition);
244
301
  const exists = await fs.pathExists(absolutePath);
@@ -365,6 +422,9 @@ function renderNewHarnessFile(definition, block) {
365
422
  return `${frontmatter}# ${definition.title}\n\n${block}\n`;
366
423
  }
367
424
  function renderWholeHarnessFile(definition) {
425
+ if (definition.ownership === "raw-file") {
426
+ return ensureTrailingNewline(definition.renderRules().trimEnd());
427
+ }
368
428
  return ensureTrailingNewline(renderNewHarnessFile(definition, definition.renderRules().trimEnd()));
369
429
  }
370
430
  async function analyzeClaudeSettingsFile(fs, repoRoot) {
@@ -204,6 +204,7 @@ async function ensureTaskRuntimeStateDirs(fs, taskRepoRoot, stateRoot) {
204
204
  await fs.ensureDir(path.join(taskRepoRoot, stateRoot, "messages"));
205
205
  await fs.ensureDir(path.join(taskRepoRoot, stateRoot, "orchestration"));
206
206
  await fs.ensureDir(path.join(taskRepoRoot, stateRoot, "translation"));
207
+ await fs.ensureDir(path.join(taskRepoRoot, stateRoot, "codex-reviews"));
207
208
  }
208
209
  async function findActiveInlineTask(fs, taskStoreRoot) {
209
210
  const tasksDir = path.join(taskStoreRoot, "tasks");
@@ -255,6 +256,7 @@ function getTaskStatePaths(taskStoreRoot, taskRepoRoot, stateRoot, handoffRoot,
255
256
  path.join(taskRepoRoot, stateRoot, "messages", `${taskSlug}.jsonl`),
256
257
  path.join(taskRepoRoot, stateRoot, "orchestration", `${taskSlug}.json`),
257
258
  path.join(taskRepoRoot, stateRoot, "translation", taskSlug),
259
+ path.join(taskRepoRoot, stateRoot, "codex-reviews"),
258
260
  path.join(taskRepoRoot, handoffRoot)
259
261
  ];
260
262
  }
@@ -5,6 +5,7 @@ export function renderRootClaudeHarnessRules() {
5
5
  - Read module-local \`CLAUDE.md\` before editing a subdirectory if one exists.
6
6
  - Use \`vcm-route-message\` whenever a VCM role hands off work, asks another role a question, reports a result, reports a blocker, or raises a finding. Follow its write-then-stop rule.
7
7
  - Use \`vcm-long-running-validation\` for long-running validation. Follow the background job limits below.
8
+ - Project-manager uses \`vcm-codex-review-gate\` at enabled Codex Review Gate trigger points and on VCM Codex review callbacks.
8
9
 
9
10
  ## VCM Background Jobs
10
11
 
@@ -31,6 +32,7 @@ export function renderRootClaudeHarnessRules() {
31
32
  - Test-only or validation-only work may use: \`project-manager -> reviewer -> project-manager final acceptance\`.
32
33
  - If a docs/test/validation-only task reveals required code, architecture, public contract, dependency, durable-doc, or test-strategy changes, route back through the full code-change flow.
33
34
  - Keep role outputs under \`.ai/vcm/handoffs/\`.
35
+ - Codex Review Gate reports live under \`.ai/vcm/codex-reviews/\` and are VCM-managed task evidence.
34
36
  - Runtime task records and handoffs under \`.ai/vcm/\` are temporary. Durable facts must move into code, tests, PR text, commit history, or long-term docs.
35
37
  - Record current-task unresolved findings in \`.ai/vcm/handoffs/known-issues.md\`.
36
38