@event4u/agent-config 2.23.0 → 2.25.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 (82) hide show
  1. package/.agent-src/commands/create-pr/description-only.md +39 -11
  2. package/.agent-src/commands/create-pr.md +59 -5
  3. package/.agent-src/commands/video/from-script.md +123 -0
  4. package/.agent-src/commands/video/scene.md +92 -0
  5. package/.agent-src/commands/video/stitch.md +83 -0
  6. package/.agent-src/commands/video/storyboard.md +95 -0
  7. package/.agent-src/commands/video.md +59 -0
  8. package/.agent-src/contexts/execution/roadmap-process-loop.md +69 -14
  9. package/.agent-src/personas/README.md +5 -1
  10. package/.agent-src/personas/ai-video-technical-director.md +81 -0
  11. package/.agent-src/personas/hollywood-director.md +99 -0
  12. package/.agent-src/profiles/content_creator.yml +5 -0
  13. package/.agent-src/rules/media-governance-routing.md +82 -0
  14. package/.agent-src/rules/persona-governance.md +90 -0
  15. package/.agent-src/rules/post-push-rewrite-discipline.md +70 -0
  16. package/.agent-src/rules/provider-lifecycle-discipline.md +75 -0
  17. package/.agent-src/rules/roadmap-ci-steps-policy.md +145 -0
  18. package/.agent-src/rules/roadmap-progress-sync.md +11 -5
  19. package/.agent-src/skills/character-consistency/SKILL.md +131 -0
  20. package/.agent-src/skills/git-workflow/SKILL.md +133 -0
  21. package/.agent-src/skills/motion-choreographer/SKILL.md +161 -0
  22. package/.agent-src/skills/pixar-storyteller/SKILL.md +120 -0
  23. package/.agent-src/skills/roadmap-writing/SKILL.md +10 -0
  24. package/.agent-src/skills/scene-expander/SKILL.md +137 -0
  25. package/.agent-src/skills/scene-expander/scene-blueprint.schema.yaml +108 -0
  26. package/.agent-src/skills/subagent-orchestration/SKILL.md +17 -15
  27. package/.agent-src/skills/video-director/SKILL.md +126 -0
  28. package/.agent-src/templates/agent-settings.md +19 -0
  29. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  30. package/.agent-src/templates/roadmaps.md +16 -0
  31. package/.claude-plugin/marketplace.json +11 -1
  32. package/CHANGELOG.md +65 -0
  33. package/README.md +7 -5
  34. package/config/agent-settings.template.yml +54 -0
  35. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  36. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  37. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
  38. package/docs/architecture.md +3 -3
  39. package/docs/catalog.md +18 -5
  40. package/docs/contracts/command-clusters.md +1 -0
  41. package/docs/contracts/compression-default-kill-criterion.md +1 -1
  42. package/docs/contracts/file-ownership-matrix.json +405 -0
  43. package/docs/contracts/provider-lifecycle.md +122 -0
  44. package/docs/decisions/ADR-011-domain-pack-readiness.md +213 -0
  45. package/docs/decisions/INDEX.md +1 -0
  46. package/docs/getting-started-by-role.md +10 -0
  47. package/docs/getting-started.md +2 -2
  48. package/docs/parity/ruflo.md +3 -3
  49. package/docs/personas.md +73 -26
  50. package/docs/profiles.md +9 -4
  51. package/package.json +1 -1
  52. package/scripts/_tmp_scan_framework_leakage.py +119 -0
  53. package/scripts/ai-video/adapters/gemini-veo.sh +62 -0
  54. package/scripts/ai-video/adapters/higgsfield.sh +88 -0
  55. package/scripts/ai-video/adapters/kling.sh +59 -0
  56. package/scripts/ai-video/adapters/openai-images.sh +57 -0
  57. package/scripts/ai-video/adapters/sora.sh +60 -0
  58. package/scripts/ai-video/lib/adapter-common.sh +116 -0
  59. package/scripts/ai-video/lib/adapter-contract.md +163 -0
  60. package/scripts/ai-video/lib/fixtures/gemini-veo/result.json +1 -0
  61. package/scripts/ai-video/lib/fixtures/gemini-veo/scene-0001.mp4 +1 -0
  62. package/scripts/ai-video/lib/fixtures/higgsfield/result.json +1 -0
  63. package/scripts/ai-video/lib/fixtures/higgsfield/scene-0001.mp4 +1 -0
  64. package/scripts/ai-video/lib/fixtures/kling/result.json +1 -0
  65. package/scripts/ai-video/lib/fixtures/kling/scene-0001.mp4 +1 -0
  66. package/scripts/ai-video/lib/fixtures/openai-images/result.json +1 -0
  67. package/scripts/ai-video/lib/fixtures/openai-images/scene-0001.png +3 -0
  68. package/scripts/ai-video/lib/fixtures/sora/result.json +1 -0
  69. package/scripts/ai-video/lib/fixtures/sora/scene-0001.mp4 +1 -0
  70. package/scripts/ai-video/lib/load-config.sh +140 -0
  71. package/scripts/ai-video/lib/operator-pick.sh +119 -0
  72. package/scripts/ai-video/lib/parse-blueprint.sh +122 -0
  73. package/scripts/ai-video/lib/redact.sh +85 -0
  74. package/scripts/ai-video/lib/validate-deps.sh +132 -0
  75. package/scripts/ai-video/stitch.sh +154 -0
  76. package/scripts/ai-video/test-pipeline.sh +169 -0
  77. package/scripts/check_portability.py +6 -0
  78. package/scripts/lint_media_policy_linkage.py +140 -0
  79. package/scripts/lint_persona_governance.py +164 -0
  80. package/scripts/lint_roadmap_ci_steps.py +182 -0
  81. package/scripts/schemas/command.schema.json +8 -0
  82. package/scripts/smoke/schema.sh +1 -1
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env python3
2
+ """Hard-Gate linter for the ``roadmap-ci-steps-policy`` rule.
3
+
4
+ Forbids full-pipeline CI literals (``task ci``, ``make test``,
5
+ ``npm run check`` etc.) inside ``agents/roadmaps/*.md`` checkbox steps
6
+ or fenced bash blocks **when** ``quality.local_auto_run`` in
7
+ ``.agent-settings.yml`` is ``false``.
8
+
9
+ Carve-outs:
10
+ * Setting is ``true`` → linter no-ops (exit 0).
11
+ * Step line carries ``<!-- carve-out: new-gate-verification -->`` →
12
+ allowed (new gate added by the same roadmap).
13
+ * ``## Acceptance criteria`` section → documentation, not steps.
14
+ * ``agents/roadmaps/archive/`` and ``agents/roadmaps/skipped/`` → out
15
+ of scope; they record history.
16
+
17
+ Cap: ≤ 150 LOC, stdlib only. Hooked into ``task ci-fast`` via
18
+ ``task lint-roadmap-ci-steps``.
19
+ """
20
+ from __future__ import annotations
21
+
22
+ import re
23
+ import sys
24
+ from pathlib import Path
25
+
26
+ QUIET = "--quiet" in sys.argv
27
+
28
+ REPO_ROOT = Path(__file__).resolve().parent.parent
29
+ ROADMAP_GLOB = "agents/roadmaps/*.md"
30
+ SETTINGS_FILE = REPO_ROOT / ".agent-settings.yml"
31
+ LOCAL_AUTO_RUN_PAT = re.compile(
32
+ r"^\s*local_auto_run:\s*(true|false)\s*(?:#.*)?$", re.MULTILINE
33
+ )
34
+ CARVE_OUT_MARKER = "carve-out: new-gate-verification"
35
+
36
+ # CI-shaped literals — case-insensitive whole-word(-ish) matches.
37
+ CI_PATTERNS: tuple[tuple[re.Pattern[str], str], ...] = (
38
+ (re.compile(r"\btask\s+ci-strict\b", re.IGNORECASE), "task ci-strict"),
39
+ (re.compile(r"\btask\s+ci-fast\b", re.IGNORECASE), "task ci-fast"),
40
+ (re.compile(r"\btask\s+ci\b(?!-)", re.IGNORECASE), "task ci"),
41
+ (re.compile(r"\bmake\s+ci\b", re.IGNORECASE), "make ci"),
42
+ (re.compile(r"\bmake\s+test\b", re.IGNORECASE), "make test"),
43
+ (re.compile(r"\bnpm\s+run\s+check\b", re.IGNORECASE), "npm run check"),
44
+ (re.compile(r"\bpnpm\s+run\s+check\b", re.IGNORECASE), "pnpm run check"),
45
+ (re.compile(r"\byarn\s+check\b", re.IGNORECASE), "yarn check"),
46
+ (re.compile(r"\bcomposer\s+test\b", re.IGNORECASE), "composer test"),
47
+ # Whole-suite = bare command, or command followed only by prose
48
+ # ("before the boundary"). A real shell argument starts with ``-``
49
+ # (flag) or contains ``/`` or ``.`` (path / .php file) — that
50
+ # signals a targeted run and is allowed.
51
+ (re.compile(r"\bvendor/bin/phpunit\b(?!\s+(?:-|\S*[/.]))", re.IGNORECASE),
52
+ "vendor/bin/phpunit (whole suite)"),
53
+ (re.compile(r"\bphp\s+artisan\s+test\b(?!\s+(?:-|\S*[/.]))", re.IGNORECASE),
54
+ "php artisan test (whole suite)"),
55
+ )
56
+
57
+ CHECKBOX_PAT = re.compile(r"^\s*-\s*\[[ x~/-]\]\s")
58
+ FENCE_PAT = re.compile(r"^\s*```")
59
+ HEADING_PAT = re.compile(r"^(#{1,6})\s+(.*?)\s*$")
60
+ ACCEPTANCE_HEADING_PAT = re.compile(
61
+ r"^acceptance criteria\b", re.IGNORECASE
62
+ )
63
+
64
+
65
+ def _read_local_auto_run() -> bool:
66
+ """Return ``quality.local_auto_run`` from ``.agent-settings.yml``.
67
+
68
+ Default ``True`` (= no-op) when file or key is missing. The Hard
69
+ Gate only fires when the setting is explicitly ``false``.
70
+ """
71
+ if not SETTINGS_FILE.is_file():
72
+ return True
73
+ try:
74
+ text = SETTINGS_FILE.read_text(encoding="utf-8")
75
+ except OSError:
76
+ return True
77
+ in_quality = False
78
+ for raw in text.splitlines():
79
+ if not raw.strip() or raw.lstrip().startswith("#"):
80
+ continue
81
+ if raw.startswith("quality:"):
82
+ in_quality = True
83
+ continue
84
+ if in_quality and raw and not raw.startswith((" ", "\t")):
85
+ in_quality = False
86
+ continue
87
+ if in_quality:
88
+ m = LOCAL_AUTO_RUN_PAT.match(raw)
89
+ if m:
90
+ return m.group(1).lower() == "true"
91
+ return True
92
+
93
+
94
+ def _scan(text: str) -> list[tuple[int, str, str]]:
95
+ """Return ``(line_no, matched_literal, line_text)`` for every hit.
96
+
97
+ Only scans:
98
+ * checkbox-step lines (``- [ ] …``)
99
+ * lines inside fenced code blocks (```` ``` ````)
100
+ Skips lines under an ``## Acceptance criteria`` heading.
101
+ Skips lines carrying the carve-out marker.
102
+ """
103
+ hits: list[tuple[int, str, str]] = []
104
+ in_fence = False
105
+ in_acceptance = False
106
+ for idx, line in enumerate(text.splitlines(), start=1):
107
+ if FENCE_PAT.match(line):
108
+ in_fence = not in_fence
109
+ continue
110
+ if not in_fence:
111
+ heading = HEADING_PAT.match(line)
112
+ if heading:
113
+ in_acceptance = bool(
114
+ ACCEPTANCE_HEADING_PAT.match(heading.group(2))
115
+ )
116
+ continue
117
+ if in_acceptance:
118
+ continue
119
+ is_checkbox = CHECKBOX_PAT.match(line) is not None
120
+ if not (is_checkbox or in_fence):
121
+ continue
122
+ if CARVE_OUT_MARKER in line:
123
+ continue
124
+ for pat, label in CI_PATTERNS:
125
+ if pat.search(line):
126
+ hits.append((idx, label, line.strip()))
127
+ break
128
+ return hits
129
+
130
+
131
+ def main() -> int:
132
+ if _read_local_auto_run():
133
+ if not QUIET:
134
+ print(
135
+ "✅ quality.local_auto_run=true (or unset) — "
136
+ "CI-step gate disabled"
137
+ )
138
+ return 0
139
+ roadmaps = sorted(REPO_ROOT.glob(ROADMAP_GLOB))
140
+ if not roadmaps:
141
+ if not QUIET:
142
+ print(f"✅ no active roadmaps under {ROADMAP_GLOB}")
143
+ return 0
144
+ failed = 0
145
+ for roadmap in roadmaps:
146
+ rel = roadmap.relative_to(REPO_ROOT)
147
+ text = roadmap.read_text(encoding="utf-8")
148
+ hits = _scan(text)
149
+ if hits:
150
+ failed += 1
151
+ print(f"❌ {rel}", file=sys.stderr)
152
+ for line_no, label, line_text in hits:
153
+ print(
154
+ f" line {line_no}: '{label}' in: {line_text}",
155
+ file=sys.stderr,
156
+ )
157
+ print(
158
+ " → reword as a narrow command "
159
+ "(e.g. 'vendor/bin/phpstan analyse app/Modules/X'), or "
160
+ "mark with '<!-- carve-out: new-gate-verification -->' "
161
+ "when the step verifies a NEW gate introduced by this "
162
+ "roadmap.",
163
+ file=sys.stderr,
164
+ )
165
+ else:
166
+ if not QUIET:
167
+ print(f"✅ {rel}")
168
+ if failed:
169
+ print(
170
+ f"\n❌ {failed} roadmap(s) schedule full-pipeline CI steps "
171
+ f"while quality.local_auto_run=false — "
172
+ f"see .augment/rules/roadmap-ci-steps-policy.md",
173
+ file=sys.stderr,
174
+ )
175
+ return 1
176
+ if not QUIET:
177
+ print(f"\n✅ {len(roadmaps)} roadmap(s) CI-step-clean")
178
+ return 0
179
+
180
+
181
+ if __name__ == "__main__":
182
+ sys.exit(main())
@@ -34,6 +34,14 @@
34
34
  "pattern": "^[a-z][a-z0-9-]*$"
35
35
  }
36
36
  },
37
+ "personas": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string",
41
+ "pattern": "^[a-z][a-z0-9-]*$"
42
+ },
43
+ "description": "Personas this command invokes (see .agent-src.uncompressed/personas/). Mirrors `skills:`; each entry must match a persona slug."
44
+ },
37
45
  "cluster": {
38
46
  "type": "string",
39
47
  "pattern": "^[a-z][a-z0-9-]*$",
@@ -18,7 +18,7 @@
18
18
 
19
19
  set -euo pipefail
20
20
 
21
- EXPECTED_WARNS=92
21
+ EXPECTED_WARNS=93
22
22
  EXPECTED_MIN_TOTAL=438
23
23
 
24
24
  quiet="${SMOKE_QUIET:-0}"