vibe-coding-master 0.7.43 → 0.7.45

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 (54) hide show
  1. package/README.md +64 -39
  2. package/dist/backend/adapters/claude-adapter.js +2 -2
  3. package/dist/backend/adapters/codex-bridge-adapter.js +213 -0
  4. package/dist/backend/api/app-settings-routes.js +6 -6
  5. package/dist/backend/api/artifact-routes.js +3 -0
  6. package/dist/backend/api/harness-routes.js +16 -0
  7. package/dist/backend/api/task-routes.js +1 -0
  8. package/dist/backend/api/workflow-control-routes.js +12 -0
  9. package/dist/backend/cli/install-vcm-harness.js +21 -0
  10. package/dist/backend/server.js +11 -9
  11. package/dist/backend/services/app-settings-service.js +11 -11
  12. package/dist/backend/services/artifact-service.js +7 -30
  13. package/dist/backend/services/auto-memory-service.js +640 -12
  14. package/dist/backend/services/claude-hook-service.js +80 -2
  15. package/dist/backend/services/{ccr-integration-service.js → codex-bridge-integration-service.js} +71 -71
  16. package/dist/backend/services/gate-review-service.js +173 -74
  17. package/dist/backend/services/harness-feedback-service.js +76 -78
  18. package/dist/backend/services/harness-service.js +27 -3
  19. package/dist/backend/services/runtime-coordinator-service.js +2 -1
  20. package/dist/backend/services/session-service.js +16 -16
  21. package/dist/backend/services/status-service.js +1 -0
  22. package/dist/backend/services/translation-worker-service.js +19 -4
  23. package/dist/backend/services/usage-analytics-service.js +3 -3
  24. package/dist/backend/services/workflow-control-service.js +96 -12
  25. package/dist/backend/templates/handoff.js +44 -2
  26. package/dist/backend/templates/harness/architect-agent.js +13 -7
  27. package/dist/backend/templates/harness/architect-scaffold-worker-agent.js +1 -1
  28. package/dist/backend/templates/harness/check-scaffold-ledger.js +234 -10
  29. package/dist/backend/templates/harness/claude-root.js +3 -2
  30. package/dist/backend/templates/harness/coder-agent.js +8 -0
  31. package/dist/backend/templates/harness/gate-review.js +144 -49
  32. package/dist/backend/templates/harness/harness-engineer-agent.js +25 -10
  33. package/dist/backend/templates/harness/project-manager-agent.js +16 -10
  34. package/dist/backend/templates/harness/resolve-durable-doc-assignment.js +60 -0
  35. package/dist/backend/templates/harness/tester-agent.js +13 -0
  36. package/dist/backend/templates/harness/vcm-ask-user-skill.js +82 -0
  37. package/dist/backend/templates/harness/vcm-code-navigation-skill.js +7 -5
  38. package/dist/backend/templates/harness/vcm-task-state-skill.js +2 -2
  39. package/dist/backend/templates/harness/vcm-workflow-review-skill.js +1 -1
  40. package/dist/shared/types/session.js +28 -22
  41. package/dist/shared/types/workflow.js +1 -0
  42. package/dist/shared/validation/artifact-check.js +3 -3
  43. package/dist/shared/validation/artifact-contract.js +1 -1
  44. package/dist/shared/validation/artifact-registry.js +16 -0
  45. package/dist-frontend/assets/index-DDmygnV6.css +32 -0
  46. package/dist-frontend/assets/{index-VW9tYPP5.js → index-nAV6toi8.js} +47 -47
  47. package/dist-frontend/index.html +2 -2
  48. package/package.json +1 -1
  49. package/scripts/claude-plugins/vcm-lsp-bridge/.claude-plugin/plugin.json +21 -6
  50. package/scripts/{ccr-api-key-helper.mjs → codex-bridge-api-key-helper.mjs} +1 -1
  51. package/scripts/harness-tools/vcm-artifact +1 -2
  52. package/scripts/harness-tools/vcm-bash-guard +1 -1
  53. package/dist/backend/adapters/ccr-gateway-adapter.js +0 -172
  54. package/dist-frontend/assets/index-B0d4Z6ny.css +0 -32
@@ -3,7 +3,7 @@ import { createHash } from "node:crypto";
3
3
  import { VCM_ROLE_NAMES } from "../../shared/constants.js";
4
4
  import { GATE_REVIEW_GATES } from "../../shared/types/gate-review.js";
5
5
  import { createDefaultLaunchTemplate, createDefaultToolSessionDefaults, DEFAULT_TRANSLATION_OUTPUT_MODE, DEFAULT_TRANSLATION_TARGET_LANGUAGE, TRANSLATION_OUTPUT_MODE_OPTIONS, TRANSLATION_TARGET_LANGUAGE_OPTIONS } from "../../shared/types/app-settings.js";
6
- import { CLAUDE_MODEL_OPTIONS, CCR_GPT_SESSION_MODEL, SESSION_EFFORT_OPTIONS } from "../../shared/types/session.js";
6
+ import { CLAUDE_MODEL_OPTIONS, isCodexBridgeSessionModel, SESSION_EFFORT_OPTIONS } from "../../shared/types/session.js";
7
7
  import { resolveVcmDataDir } from "../vcm-data-dir.js";
8
8
  const MAX_RECENT_REPOSITORIES = 5;
9
9
  export function createAppSettingsService(deps) {
@@ -161,20 +161,20 @@ export function createAppSettingsService(deps) {
161
161
  requiredGates: normalizedRequiredGates
162
162
  };
163
163
  },
164
- async getCcrIntegrationSettings() {
165
- return normalizeCcrIntegrationSettings((await loadSettings()).ccr);
164
+ async getCodexBridgeIntegrationSettings() {
165
+ return normalizeCodexBridgeIntegrationSettings((await loadSettings()).codexBridge);
166
166
  },
167
- async updateCcrIntegrationSettings(input) {
167
+ async updateCodexBridgeIntegrationSettings(input) {
168
168
  const current = await loadSettings();
169
- const ccr = normalizeCcrIntegrationSettings({
170
- ...current.ccr,
169
+ const codexBridge = normalizeCodexBridgeIntegrationSettings({
170
+ ...current.codexBridge,
171
171
  ...input
172
172
  });
173
173
  await saveSettings({
174
174
  ...current,
175
- ccr
175
+ codexBridge
176
176
  });
177
- return ccr;
177
+ return codexBridge;
178
178
  },
179
179
  getSettingsPath() {
180
180
  return settingsPath;
@@ -261,10 +261,10 @@ function normalizeSettingsFile(input) {
261
261
  if (gateReview) {
262
262
  settings.gateReview = gateReview;
263
263
  }
264
- settings.ccr = normalizeCcrIntegrationSettings(input.ccr);
264
+ settings.codexBridge = normalizeCodexBridgeIntegrationSettings(input.codexBridge);
265
265
  return settings;
266
266
  }
267
- function normalizeCcrIntegrationSettings(input) {
267
+ function normalizeCodexBridgeIntegrationSettings(input) {
268
268
  const candidate = isObject(input) ? input : {};
269
269
  const apiKey = typeof candidate.apiKey === "string" ? candidate.apiKey.trim() : "";
270
270
  return {
@@ -355,7 +355,7 @@ function normalizeClaudeModel(input, fallback) {
355
355
  if (typeof input !== "string") {
356
356
  return fallback;
357
357
  }
358
- if (input === CCR_GPT_SESSION_MODEL) {
358
+ if (isCodexBridgeSessionModel(input)) {
359
359
  return input;
360
360
  }
361
361
  const model = CLAUDE_MODEL_OPTIONS.find((option) => option.value === input);
@@ -4,7 +4,7 @@ import { checkMarkdownArtifact } from "../../shared/validation/artifact-check.js
4
4
  import { getArtifactDefinition, isArtifactKind } from "../../shared/validation/artifact-registry.js";
5
5
  import { VcmError } from "../errors.js";
6
6
  import { resolveRepoPath } from "../adapters/filesystem.js";
7
- import { renderArchitectureBriefTemplate, renderArchitectureDiagnosisTemplate, renderArchitectureEvidenceTemplate, renderArchitecturePlanTemplate, renderArchitectDebugTemplate, renderCoderCompletionTemplate, renderDocsSyncReportTemplate, renderFinalAcceptanceTemplate, renderKnownIssuesTemplate, renderPlanningProgressTemplate, renderMessageRouteTemplate, renderTestReportTemplate, renderWorkflowProgressTemplate } from "../templates/handoff.js";
7
+ import { renderArchitectureBriefTemplate, renderArchitectureDiagnosisTemplate, renderArchitectureEvidenceTemplate, renderArchitecturePlanTemplate, renderArchitectDebugTemplate, renderCoderCompletionTemplate, renderDocsUpdateReportTemplate, renderDocsSyncReportTemplate, renderFinalAcceptanceTemplate, renderKnownIssuesTemplate, renderPlanningProgressTemplate, renderMessageRouteTemplate, renderTestReportTemplate, renderWorkflowProgressTemplate } from "../templates/handoff.js";
8
8
  import { renderRoleCommandTemplate } from "../templates/role-command.js";
9
9
  import { validateMemoryProposal } from "./memory-proposal-validation.js";
10
10
  import { isMemoryProposalSubmissionPath } from "./memory-review-paths.js";
@@ -18,6 +18,7 @@ const ARTIFACT_PATH_KEYS = [
18
18
  ["architect-debug", "architectDebugPath"],
19
19
  ["architecture-diagnosis", "architectureDiagnosisPath"],
20
20
  ["test-report", "testReportPath"],
21
+ ["docs-update-report", "docsUpdateReportPath"],
21
22
  ["docs-sync-report", "docsSyncReportPath"],
22
23
  ["workflow-progress", "workflowProgressPath"],
23
24
  ["final-acceptance", "finalAcceptancePath"]
@@ -55,6 +56,7 @@ export function createArtifactService(fs, deps = {}) {
55
56
  architectDebugPath: path.posix.join(handoffDir, "architect-debug.md"),
56
57
  architectureDiagnosisPath: path.posix.join(handoffDir, "architecture-diagnosis.md"),
57
58
  testReportPath: path.posix.join(handoffDir, "test-report.md"),
59
+ docsUpdateReportPath: path.posix.join(handoffDir, "docs-update-report.md"),
58
60
  docsSyncReportPath: path.posix.join(handoffDir, "docs-sync-report.md"),
59
61
  workflowProgressPath: path.posix.join(handoffDir, "workflow-progress.md"),
60
62
  finalAcceptancePath: path.posix.join(handoffDir, "final-acceptance.md")
@@ -85,6 +87,7 @@ export function createArtifactService(fs, deps = {}) {
85
87
  [paths.architectDebugPath, renderArchitectDebugTemplate(input.taskSlug)],
86
88
  [paths.architectureDiagnosisPath, renderArchitectureDiagnosisTemplate(input.taskSlug)],
87
89
  [paths.testReportPath, renderTestReportTemplate(input.taskSlug)],
90
+ [paths.docsUpdateReportPath, renderDocsUpdateReportTemplate(input.taskSlug)],
88
91
  [paths.docsSyncReportPath, renderDocsSyncReportTemplate(input.taskSlug)],
89
92
  [paths.workflowProgressPath, renderWorkflowProgressTemplate(input.taskSlug)],
90
93
  [paths.finalAcceptancePath, renderFinalAcceptanceTemplate(input.taskSlug)],
@@ -190,10 +193,11 @@ export function createArtifactService(fs, deps = {}) {
190
193
  }
191
194
  if (isArtifactKind(input.kind)) {
192
195
  const definition = getArtifactDefinition(input.kind);
193
- if (definition.owner !== input.role) {
196
+ const owners = Array.isArray(definition.owner) ? definition.owner : [definition.owner];
197
+ if (!owners.includes(input.role)) {
194
198
  throw new VcmError({
195
199
  code: "ARTIFACT_OWNER_MISMATCH",
196
- message: `${input.kind} is owned by ${definition.owner}, not ${input.role}.`,
200
+ message: `${input.kind} is owned by ${owners.join("|")}, not ${input.role}.`,
197
201
  statusCode: 403
198
202
  });
199
203
  }
@@ -334,39 +338,12 @@ async function validateDynamicArtifact(fs, input, content, workflowControlServic
334
338
  validateHarnessFeedback(content);
335
339
  return { kind: input.kind, root: input.baseRepoRoot, path: artifactPath };
336
340
  }
337
- if (input.kind === "retrospective-report") {
338
- if (input.role !== "harness-engineer") {
339
- throw artifactRejected(input.kind, ["Only Harness Engineer may submit a retrospective report."]);
340
- }
341
- if (!/^\.ai\/vcm\/harness-feedback\/task-retrospectives\/[A-Za-z0-9._-]+\.md$/.test(artifactPath)) {
342
- throw artifactRejected(input.kind, ["Retrospective report path must be under .ai/vcm/harness-feedback/task-retrospectives/."]);
343
- }
344
- validateRetrospectiveReport(content);
345
- return { kind: input.kind, root: input.baseRepoRoot, path: artifactPath };
346
- }
347
341
  throw new VcmError({
348
342
  code: "ARTIFACT_KIND_INVALID",
349
343
  message: `Unknown managed artifact kind: ${input.kind}`,
350
344
  statusCode: 400
351
345
  });
352
346
  }
353
- function validateRetrospectiveReport(content) {
354
- const errors = getRetrospectiveReportErrors(content);
355
- if (errors.length > 0)
356
- throw artifactRejected("retrospective-report", errors);
357
- }
358
- export function getRetrospectiveReportErrors(content) {
359
- const errors = [];
360
- if (!/^# Task Harness Retrospective(?::\s*.+)?\s*$/m.test(content)) {
361
- errors.push("Retrospective report requires '# Task Harness Retrospective: <task>'.");
362
- }
363
- for (const heading of ["Findings", "Feedback Dispositions", "Recommended Harness Changes", "VCM Issue Drafts"]) {
364
- if (!new RegExp(`^## ${escapeRegExp(heading)}\\s*$`, "m").test(content)) {
365
- errors.push(`Missing required section: ${heading}.`);
366
- }
367
- }
368
- return errors;
369
- }
370
347
  function validateCoderWorkerReport(content) {
371
348
  const errors = [];
372
349
  if (!/^# Coder Worker Report:\s*\S.+$/m.test(content)) {