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.
- package/README.md +7 -3
- package/dist/backend/cli/install-vcm-harness.js +57 -18
- package/dist/backend/gateway/gateway-service.js +5 -3
- package/dist/backend/runtime/terminal-submit.js +1 -0
- package/dist/backend/server.js +14 -4
- package/dist/backend/services/app-settings-service.js +3 -2
- package/dist/backend/services/auto-memory-service.js +6 -4
- package/dist/backend/services/claude-hook-service.js +6 -0
- package/dist/backend/services/claude-transcript-service.js +2 -13
- package/dist/backend/services/claude-version-check.js +46 -0
- package/dist/backend/services/gate-review-service.js +47 -8
- package/dist/backend/services/harness-service.js +41 -20
- package/dist/backend/services/message-service.js +30 -6
- package/dist/backend/services/pm-user-question.js +2 -1
- package/dist/backend/services/project-service.js +8 -2
- package/dist/backend/services/runtime-recovery-service.js +36 -9
- package/dist/backend/services/session-service.js +10 -19
- package/dist/backend/services/task-close-service.js +1 -0
- package/dist/backend/services/terminal-process-exit-service.js +4 -1
- package/dist/backend/services/workflow-control-service.js +55 -11
- package/dist/backend/templates/harness/architect-agent.js +2 -1
- package/dist/backend/templates/harness/architect-evidence-worker-agent.js +2 -1
- package/dist/backend/templates/harness/architect-scaffold-worker-agent.js +8 -2
- package/dist/backend/templates/harness/architect-validation-worker-agent.js +2 -1
- package/dist/backend/templates/harness/architect-worker-frontmatter.js +33 -0
- package/dist/backend/templates/harness/check-scaffold-ledger.js +480 -511
- package/dist/backend/templates/harness/coder-worker-agent.js +1 -0
- package/dist/backend/templates/harness/gate-review.js +676 -643
- package/dist/backend/templates/harness/node-tool-runtime.js +102 -0
- package/dist/backend/templates/harness/resolve-durable-doc-assignment.js +49 -55
- package/dist/backend/templates/harness/restart-architect-skill.js +49 -58
- package/dist/backend/templates/harness/vcm-ask-user-skill.js +57 -59
- package/dist/backend/templates/harness/vcm-propose-memory-skill.js +4 -0
- package/dist/backend/templates/harness/vcm-report-harness-issue-skill.js +6 -2
- package/dist/backend/templates/harness/vcm-task-state-skill.js +66 -72
- package/dist/shared/types/app-settings.js +31 -0
- package/dist-frontend/assets/index-CShYYQQa.css +32 -0
- package/dist-frontend/assets/{index-DqANomt1.js → index-DOvvS76Q.js} +41 -41
- package/dist-frontend/index.html +2 -2
- package/package.json +1 -1
- package/scripts/harness-tools/check-durable-docs +332 -298
- package/scripts/harness-tools/generate-module-index +1047 -512
- package/scripts/harness-tools/generate-public-surface +1231 -1069
- package/scripts/harness-tools/package.json +3 -0
- package/scripts/harness-tools/run-long-check +608 -531
- package/scripts/harness-tools/vcm-artifact +181 -113
- package/scripts/harness-tools/vcm-bash-guard +839 -605
- package/scripts/harness-tools/vcm-subagent-guard +67 -63
- package/scripts/harness-tools/watch-job +313 -238
- package/dist-frontend/assets/index-xgiQeUD5.css +0 -32
|
@@ -1,66 +1,70 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
2
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"architect"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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();
|