vibe-coding-master 0.8.12 → 0.9.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.
Files changed (50) hide show
  1. package/README.md +7 -3
  2. package/dist/backend/cli/install-vcm-harness.js +57 -18
  3. package/dist/backend/gateway/gateway-service.js +5 -3
  4. package/dist/backend/runtime/terminal-submit.js +1 -0
  5. package/dist/backend/server.js +14 -4
  6. package/dist/backend/services/app-settings-service.js +3 -2
  7. package/dist/backend/services/auto-memory-service.js +6 -4
  8. package/dist/backend/services/claude-hook-service.js +6 -0
  9. package/dist/backend/services/claude-transcript-service.js +2 -13
  10. package/dist/backend/services/claude-version-check.js +46 -0
  11. package/dist/backend/services/gate-review-service.js +47 -8
  12. package/dist/backend/services/harness-service.js +41 -20
  13. package/dist/backend/services/message-service.js +30 -6
  14. package/dist/backend/services/pm-user-question.js +2 -1
  15. package/dist/backend/services/project-service.js +8 -2
  16. package/dist/backend/services/runtime-recovery-service.js +36 -9
  17. package/dist/backend/services/session-service.js +10 -19
  18. package/dist/backend/services/task-close-service.js +1 -0
  19. package/dist/backend/services/terminal-process-exit-service.js +4 -1
  20. package/dist/backend/services/workflow-control-service.js +55 -11
  21. package/dist/backend/templates/harness/architect-agent.js +2 -1
  22. package/dist/backend/templates/harness/architect-evidence-worker-agent.js +2 -1
  23. package/dist/backend/templates/harness/architect-scaffold-worker-agent.js +8 -2
  24. package/dist/backend/templates/harness/architect-validation-worker-agent.js +2 -1
  25. package/dist/backend/templates/harness/architect-worker-frontmatter.js +33 -0
  26. package/dist/backend/templates/harness/check-scaffold-ledger.js +480 -511
  27. package/dist/backend/templates/harness/coder-worker-agent.js +1 -0
  28. package/dist/backend/templates/harness/gate-review.js +676 -643
  29. package/dist/backend/templates/harness/node-tool-runtime.js +102 -0
  30. package/dist/backend/templates/harness/resolve-durable-doc-assignment.js +49 -55
  31. package/dist/backend/templates/harness/restart-architect-skill.js +49 -58
  32. package/dist/backend/templates/harness/vcm-ask-user-skill.js +57 -59
  33. package/dist/backend/templates/harness/vcm-propose-memory-skill.js +4 -0
  34. package/dist/backend/templates/harness/vcm-report-harness-issue-skill.js +6 -2
  35. package/dist/backend/templates/harness/vcm-task-state-skill.js +66 -72
  36. package/dist/shared/types/app-settings.js +31 -0
  37. package/dist-frontend/assets/index-CShYYQQa.css +32 -0
  38. package/dist-frontend/assets/{index-DqANomt1.js → index-DOvvS76Q.js} +41 -41
  39. package/dist-frontend/index.html +2 -2
  40. package/package.json +1 -1
  41. package/scripts/harness-tools/check-durable-docs +332 -298
  42. package/scripts/harness-tools/generate-module-index +1047 -512
  43. package/scripts/harness-tools/generate-public-surface +1231 -1069
  44. package/scripts/harness-tools/package.json +3 -0
  45. package/scripts/harness-tools/run-long-check +608 -531
  46. package/scripts/harness-tools/vcm-artifact +181 -113
  47. package/scripts/harness-tools/vcm-bash-guard +839 -605
  48. package/scripts/harness-tools/vcm-subagent-guard +67 -63
  49. package/scripts/harness-tools/watch-job +313 -238
  50. package/dist-frontend/assets/index-xgiQeUD5.css +0 -32
@@ -1,66 +1,70 @@
1
- #!/usr/bin/env python3
2
- """Restrict VCM role sessions to their assigned worker subagents."""
3
-
4
- import json
5
- import os
6
- import sys
7
-
8
-
9
- ALLOWED_SUBAGENTS = {
10
- "architect": frozenset({
11
- "vcm-architect-evidence-worker",
12
- "vcm-architect-scaffold-worker",
13
- "vcm-architect-validation-worker",
14
- }),
15
- "coder": frozenset({"vcm-coder-worker"}),
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // Restrict VCM role sessions to their assigned worker subagents.
4
+
5
+ const fs = require("node:fs");
6
+
7
+ const ALLOWED_SUBAGENTS = {
8
+ architect: [
9
+ "vcm-architect-evidence-worker",
10
+ "vcm-architect-scaffold-worker",
11
+ "vcm-architect-validation-worker"
12
+ ],
13
+ coder: ["vcm-coder-worker"]
14
+ };
15
+
16
+ function deny(reason) {
17
+ process.stdout.write(`${JSON.stringify({
18
+ hookSpecificOutput: {
19
+ hookEventName: "PreToolUse",
20
+ permissionDecision: "deny",
21
+ permissionDecisionReason: reason
22
+ }
23
+ })}\n`);
16
24
  }
17
25
 
26
+ function main() {
27
+ const role = (process.env.VCM_ROLE || "").trim();
28
+ if (!role) {
29
+ return;
30
+ }
31
+
32
+ let payload;
33
+ try {
34
+ payload = JSON.parse(fs.readFileSync(0, "utf8"));
35
+ } catch {
36
+ deny("VCM could not validate this subagent request because its hook payload is invalid.");
37
+ return;
38
+ }
39
+
40
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
41
+ deny("VCM could not validate this subagent request because its hook payload is invalid.");
42
+ return;
43
+ }
44
+
45
+ if (payload.tool_name !== "Agent") {
46
+ return;
47
+ }
48
+
49
+ if (payload.agent_id) {
50
+ deny("VCM worker subagents may not invoke nested subagents.");
51
+ return;
52
+ }
53
+
54
+ const toolInput = payload.tool_input;
55
+ const subagentType = toolInput && typeof toolInput === "object" ? toolInput.subagent_type : undefined;
56
+ const allowed = ALLOWED_SUBAGENTS[role];
57
+
58
+ if (!allowed) {
59
+ deny(`VCM role \`${role}\` may not invoke subagents.`);
60
+ return;
61
+ }
62
+
63
+ if (!allowed.includes(subagentType)) {
64
+ const requested = typeof subagentType === "string" && subagentType ? subagentType : "<missing>";
65
+ const allowedNames = [...allowed].sort().map((name) => `\`${name}\``).join(", ");
66
+ deny(`VCM role \`${role}\` may invoke only ${allowedNames}, not \`${requested}\`.`);
67
+ }
68
+ }
18
69
 
19
- def deny(reason: str) -> None:
20
- print(json.dumps({
21
- "hookSpecificOutput": {
22
- "hookEventName": "PreToolUse",
23
- "permissionDecision": "deny",
24
- "permissionDecisionReason": reason,
25
- }
26
- }))
27
-
28
-
29
- def main() -> None:
30
- role = os.environ.get("VCM_ROLE", "").strip()
31
- if not role:
32
- return
33
-
34
- try:
35
- payload = json.load(sys.stdin)
36
- except (json.JSONDecodeError, OSError):
37
- deny("VCM could not validate this subagent request because its hook payload is invalid.")
38
- return
39
-
40
- if not isinstance(payload, dict):
41
- deny("VCM could not validate this subagent request because its hook payload is invalid.")
42
- return
43
-
44
- if payload.get("tool_name") != "Agent":
45
- return
46
-
47
- if payload.get("agent_id"):
48
- deny("VCM worker subagents may not invoke nested subagents.")
49
- return
50
-
51
- tool_input = payload.get("tool_input")
52
- subagent_type = tool_input.get("subagent_type") if isinstance(tool_input, dict) else None
53
- allowed = ALLOWED_SUBAGENTS.get(role)
54
-
55
- if allowed is None:
56
- deny(f"VCM role `{role}` may not invoke subagents.")
57
- return
58
-
59
- if subagent_type not in allowed:
60
- requested = subagent_type if isinstance(subagent_type, str) and subagent_type else "<missing>"
61
- allowed_names = ", ".join(f"`{name}`" for name in sorted(allowed))
62
- deny(f"VCM role `{role}` may invoke only {allowed_names}, not `{requested}`.")
63
-
64
-
65
- if __name__ == "__main__":
66
- main()
70
+ main();