vibe-coding-master 0.2.3 → 0.2.4

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,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>VibeCodingMaster</title>
7
- <script type="module" crossorigin src="/assets/index-DaVjpyA9.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-CfZ3VYXY.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-CfqduxVB.css">
9
9
  </head>
10
10
  <body>
@@ -91,13 +91,13 @@ These entries match the current `example/rust-layered/.ai/vcm-harness-manifest.j
91
91
  | Skill directory | `.claude/skills/vcm-harness-bootstrap/` | VCM-created directory | Conditional long-term | Claude Code registration directory for the harness-bootstrap skill. |
92
92
  | Skill | `.claude/skills/vcm-route-message/SKILL.md` | whole-file | Conditional long-term | Route-file authoring protocol. |
93
93
  | Skill | `.claude/skills/vcm-final-acceptance/SKILL.md` | whole-file | Conditional long-term | PM final evidence audit. |
94
- | Skill | `.claude/skills/vcm-long-running-validation/SKILL.md` | whole-file | Conditional long-term | Role-independent long-running command protocol. |
94
+ | Skill | `.claude/skills/vcm-long-running-validation/SKILL.md` | whole-file | Conditional long-term | Role-independent long-running command protocol with 60 minute maximum timeout. |
95
95
  | Skill | `.claude/skills/vcm-harness-bootstrap/SKILL.md` | whole-file | Conditional long-term | AI-assisted project understanding procedure. |
96
96
  | Harness tool directory | `.ai/tools/` | VCM-created directory | Long-term | Repo-local harness tools. |
97
97
  | Generated-context tool | `.ai/tools/generate-module-index` | whole-file | Long-term | Generates `.ai/generated/module-index.json`. |
98
98
  | Generated-context tool | `.ai/tools/generate-public-surface` | whole-file | Long-term | Generates `.ai/generated/public-surface.json`. |
99
- | Runtime tool | `.ai/tools/run-long-check` | whole-file | Conditional long-term | Starts file-backed long-running command jobs. |
100
- | Runtime tool | `.ai/tools/watch-job` | whole-file | Conditional long-term | Bounded watcher for long-running command jobs. |
99
+ | Runtime tool | `.ai/tools/run-long-check` | whole-file | Conditional long-term | Starts the only VCM-allowed file-backed background job for long-running validation. |
100
+ | Runtime tool | `.ai/tools/watch-job` | whole-file | Conditional long-term | Bounded watcher for long-running command jobs; rejects timeouts over 60 minutes. |
101
101
  | Generated context directory | `.ai/generated/` | VCM-created directory | Long-term | Derived context artifacts. |
102
102
  | Generated context | `.ai/generated/module-index.json` | derived artifact | Derived | Regenerated by `generate-module-index`; do not hand-edit as source truth. |
103
103
  | Generated context | `.ai/generated/public-surface.json` | derived artifact | Derived | Regenerated by `generate-public-surface`; do not hand-edit as source truth. |
@@ -167,7 +167,7 @@ The current example installs these skills:
167
167
 
168
168
  - `vcm-route-message`: route-file write protocol.
169
169
  - `vcm-final-acceptance`: final PM evidence audit.
170
- - `vcm-long-running-validation`: role-independent long-running command protocol.
170
+ - `vcm-long-running-validation`: role-independent long-running command protocol with a 60 minute maximum timeout.
171
171
  - `vcm-harness-bootstrap`: one-time or occasional project-understanding, generated-context refresh, and durable-doc bootstrap procedure.
172
172
 
173
173
  The current example does not install a separate `vcm-docs-sync` skill. Docs sync
@@ -253,6 +253,7 @@ The default theme mode is `System`, which follows the OS/browser color-scheme pr
253
253
 
254
254
  When `Flow pause alert` is on, VCM plays a short, soft, two-note local chime after a role flow stops advancing. If the flow lasted less than 10 minutes, the chime plays 3 times, 1.4 seconds apart, and stops. If the flow lasted 10 minutes or longer, VCM shows an in-app alert dialog and repeats the chime until the user confirms the dialog. The alert sound must reuse one browser audio context after user activation instead of creating a fresh context for each repeat, because Safari can block repeated timer-driven playback when every repeat looks like a new autoplay attempt.
255
255
  `Try alert` must work even when no flow has just paused so the user can verify browser sound and notification behavior.
256
+ Safari may still require the user to manually set `Safari > Website Settings > Auto-Play > Allow All Auto-Play`; Chrome is the recommended browser for reliable repeated alert sound.
256
257
 
257
258
  There is no separate `Pause orchestration` or `Resume orchestration` control in the GUI. The current product model is one on/off toggle in the role console toolbar.
258
259
 
@@ -337,7 +338,7 @@ Task-level round state:
337
338
  - The normal pause transition is timer-driven from the `Stop` event. Round-state reads also settle expired deadlines as a recovery fallback after restarts, sleep, or missed timers.
338
339
  - The same round state stores total round count, prompt-submit count, stop count, and Claude Code active runtime. Active runtime is measured only between `UserPromptSubmit` and `Stop`, not during the settling window.
339
340
 
340
- The frontend polls this task-level round state and deduplicates `pauseId`. Flow duration is measured from the first `UserPromptSubmit` to the last `Stop`; the 10 second settle window is not counted. Pauses under 10 minutes trigger the weak 3-chime reminder at 1.4 second intervals. Pauses at or above 10 minutes trigger the strong alert dialog and repeating sound until confirmation.
341
+ The frontend polls this task-level round state and deduplicates each paused round so the same paused state does not alert on every poll. Flow duration is measured from the first `UserPromptSubmit` to `pausedAt`, falling back to the last `Stop` when needed. Pauses under 10 minutes trigger the weak 3-chime reminder at 1.4 second intervals. Pauses at or above 10 minutes trigger the strong alert dialog and repeating sound until confirmation.
341
342
 
342
343
  ## 9. Session Lifecycle
343
344
 
@@ -516,6 +517,8 @@ VCM uses `UserPromptSubmit` as the Claude Code acceptance signal. A successful P
516
517
 
517
518
  The injected role rules require asynchronous file messaging: after writing or updating a route file, the role must end the current Claude Code turn and wait for VCM to deliver a later reply. Roles should use `.claude/skills/vcm-route-message/SKILL.md` to author route files. Roles must not poll files, start shell loops, keep the turn open waiting for another role to answer, paste directly into another role terminal, or use Claude Code Task/Subagent for VCM role delegation.
518
519
 
520
+ Roles must not start background jobs. The only allowed background job is `.ai/tools/run-long-check` when used through `vcm-long-running-validation`; `watch-job` rejects timeouts over 60 minutes.
521
+
519
522
  There is no `vcmctl` in the target design. Hook entrypoints are direct HTTP from Claude Code hooks to the local VCM backend.
520
523
 
521
524
  ## 13. Translation
@@ -280,6 +280,11 @@ This skill is role-independent. It only handles long-running command execution,
280
280
  bounded waiting, file-backed status, timeout, and log summaries. The caller
281
281
  decides where to record command evidence.
282
282
 
283
+ VCM roles must not start background jobs. The only allowed background job is
284
+ `.ai/tools/run-long-check` when used through `vcm-long-running-validation`.
285
+ `vcm-long-running-validation` has a hard maximum timeout of 60 minutes; split
286
+ larger validation/build work or ask the user before suggesting anything longer.
287
+
283
288
  ## 10. Generated Context
284
289
 
285
290
  The current example has two generated artifacts:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-coding-master",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Local GUI session cockpit for Claude Code role sessions.",
5
5
  "type": "module",
6
6
  "files": [
@@ -39,7 +39,16 @@ const MANAGED_FILES = [
39
39
  - Use the durable project docs below as role-relevant project truth.
40
40
  - Read module-local \`CLAUDE.md\` before editing a subdirectory if one exists.
41
41
  - 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.
42
- - Use \`vcm-long-running-validation\` for builds, browser checks, E2E tests, release suites, or any validation command that may take long enough for shell-completion callbacks to become unreliable. Do not end the current turn only to wait for a long-running shell callback.
42
+ - Use \`vcm-long-running-validation\` for long-running validation. Follow the background job limits below.
43
+
44
+ ## VCM Background Jobs
45
+
46
+ - Do not start background jobs.
47
+ - The only allowed background job is \`.ai/tools/run-long-check\` when used through the \`vcm-long-running-validation\` skill.
48
+ - \`vcm-long-running-validation\` has a hard maximum timeout of 60 minutes.
49
+ - Do not run or suggest operations expected to exceed 60 minutes without user approval.
50
+ - Design every single validation/build operation to complete within 60 minutes; split anything larger before running it.
51
+ - Do not end the current turn only to wait for a long-running shell callback.
43
52
 
44
53
  ## VCM Durable Project Docs
45
54
 
@@ -613,9 +622,11 @@ Use this skill for builds, browser checks, E2E tests, release suites, or any com
613
622
 
614
623
  ## Rule
615
624
 
616
- Do not end the current turn only to wait for a long-running shell callback.
625
+ Do not start background jobs.
617
626
 
618
- Use a bounded file-backed job instead.
627
+ The only allowed background job is \`.ai/tools/run-long-check\` when used through this skill.
628
+
629
+ This skill has a hard maximum timeout of 60 minutes. Do not run or suggest operations expected to exceed 60 minutes without user approval.
619
630
 
620
631
  ## Protocol
621
632
 
@@ -646,12 +657,15 @@ Example:
646
657
 
647
658
  Timeout is not "unknown". It is a command result.
648
659
 
660
+ \`watch-job\` rejects timeouts over 60 minutes.
661
+
649
662
  On timeout:
650
663
 
651
664
  - summarize the latest log tail
652
665
  - record the timeout in \`status.json\`
653
666
  - report whether the timed-out process was stopped
654
667
  - do not mark the command as passed
668
+ - do not continue the job in the background
655
669
 
656
670
  \`watch-job\` should attempt to stop the timed-out command process group. If termination cannot be confirmed, say so in the summary.
657
671
 
@@ -916,11 +930,15 @@ import argparse
916
930
  import json
917
931
  import os
918
932
  import signal
933
+ import sys
919
934
  import time
920
935
  from datetime import datetime, timezone
921
936
  from pathlib import Path
922
937
 
923
938
 
939
+ MAX_TIMEOUT_SECONDS = 60 * 60
940
+
941
+
924
942
  def root_dir() -> Path:
925
943
  return Path(__file__).resolve().parents[2]
926
944
 
@@ -938,6 +956,16 @@ def parse_duration(value: str) -> float:
938
956
  return float(value)
939
957
 
940
958
 
959
+ def validate_duration(name: str, value: float, maximum: float | None = None) -> bool:
960
+ if value <= 0:
961
+ print(f"error: {name} must be positive", file=sys.stderr)
962
+ return False
963
+ if maximum is not None and value > maximum:
964
+ print(f"error: {name} exceeds maximum 60m", file=sys.stderr)
965
+ return False
966
+ return True
967
+
968
+
941
969
  def read_status(path: Path) -> dict:
942
970
  return json.loads(path.read_text())
943
971
 
@@ -1056,8 +1084,16 @@ def main() -> int:
1056
1084
  parser.add_argument("--interval", default="1s")
1057
1085
  args = parser.parse_args()
1058
1086
 
1059
- timeout = parse_duration(args.timeout)
1060
- interval = parse_duration(args.interval)
1087
+ try:
1088
+ timeout = parse_duration(args.timeout)
1089
+ interval = parse_duration(args.interval)
1090
+ except ValueError as exc:
1091
+ print(f"error: invalid duration: {exc}", file=sys.stderr)
1092
+ return 2
1093
+ if not validate_duration("timeout", timeout, MAX_TIMEOUT_SECONDS):
1094
+ return 2
1095
+ if not validate_duration("interval", interval):
1096
+ return 2
1061
1097
  directory = root_dir() / ".ai/vcm/jobs" / args.job_id
1062
1098
  status_path = directory / "status.json"
1063
1099