@event4u/agent-config 5.4.1 → 5.5.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/.agent-src/commands/knowledge/cross-repo.md +71 -0
- package/.agent-src/commands/knowledge.md +2 -0
- package/.agent-src/commands/skill/preview.md +67 -0
- package/.agent-src/commands/skill.md +48 -0
- package/.agent-src/commands/skills/discover.md +76 -0
- package/.agent-src/commands/skills.md +56 -0
- package/.agent-src/commands/video/from-song.md +317 -0
- package/.agent-src/commands/video.md +19 -9
- package/.agent-src/rules/linked-projects-onboarding-gate.md +1 -1
- package/.agent-src/skills/song-to-script/SKILL.md +193 -0
- package/.claude-plugin/marketplace.json +9 -2
- package/CHANGELOG.md +37 -0
- package/CONTRIBUTING.md +6 -0
- package/README.md +3 -3
- package/dist/cli/registry.js +1 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +171 -17
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +17 -10
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +13 -6
- package/dist/mcp/registry-manifest.json +2 -2
- package/docs/architecture.md +2 -2
- package/docs/contracts/command-clusters.md +4 -1
- package/docs/contracts/cross-repo-retrieval.md +64 -0
- package/docs/contracts/skill-discovery.md +80 -0
- package/docs/contracts/skill-dry-run.md +47 -0
- package/docs/decisions/ADR-032-linked-projects-scope.md +7 -3
- package/docs/getting-started.md +1 -1
- package/docs/guides/cross-repo-linked-projects.md +7 -0
- package/docs/guides/cross-repo-retrieval.md +61 -0
- package/docs/guides/skill-discovery.md +71 -0
- package/docs/guides/skill-preview.md +71 -0
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_dispatch.bash +10 -0
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/ai-video/lib/probe-audio.sh +181 -0
- package/scripts/cross_repo_retrieve.py +172 -0
- package/scripts/inventory_meta_layers.py +288 -0
- package/scripts/linked_projects_list.py +91 -0
- package/scripts/memory_lookup.py +53 -2
- package/scripts/skill_discovery.py +254 -0
- package/scripts/skill_linter.py +8 -4
- package/scripts/skill_preview.py +179 -0
|
@@ -3,7 +3,7 @@ model_tier: inherit
|
|
|
3
3
|
name: video
|
|
4
4
|
tier: 2
|
|
5
5
|
cluster: video
|
|
6
|
-
description: Video-creation orchestrator — Hollywood-level AI video pipeline. Routes to from-script, scene, storyboard, stitch.
|
|
6
|
+
description: Video-creation orchestrator — Hollywood-level AI video pipeline. Routes to from-script, from-song, scene, storyboard, stitch.
|
|
7
7
|
type: orchestrator
|
|
8
8
|
suggestion:
|
|
9
9
|
eligible: true
|
|
@@ -19,31 +19,41 @@ packs:
|
|
|
19
19
|
|
|
20
20
|
Top-level orchestrator for the `/video:*` family — multi-provider AI
|
|
21
21
|
video creation. Reads provider keys + defaults from
|
|
22
|
-
[`agents/.ai-video.xml`](
|
|
22
|
+
[`agents/.ai-video.xml`](../../agents/templates/.ai-video.xml.example) (gitignored
|
|
23
23
|
real file; example shipped). Every subcommand is **dry-run by default**;
|
|
24
24
|
network calls require explicit per-turn confirmation per the adapter
|
|
25
|
-
contract under [`scripts/ai-video/lib/adapter-contract.md`](
|
|
25
|
+
contract under [`scripts/ai-video/lib/adapter-contract.md`](../../scripts/ai-video/lib/adapter-contract.md).
|
|
26
26
|
|
|
27
27
|
## Sub-commands
|
|
28
28
|
|
|
29
29
|
| Sub-command | Routes to | Purpose |
|
|
30
30
|
|---|---|---|
|
|
31
31
|
| `/video:from-script <path>` | `commands/video/from-script.md` | Full pipeline: script → scenes → blueprint → images → operator pick → motion → video → stitch |
|
|
32
|
+
| `/video:from-song <images-dir> <song>` | `commands/video/from-song.md` | Music-video: song + reference images → derived/briefed script → render → stitch → song muxed as master track |
|
|
32
33
|
| `/video:scene "<idea>"` | `commands/video/scene.md` | Single-scene iteration without a full script |
|
|
33
34
|
| `/video:storyboard <path>` | `commands/video/storyboard.md` | Image-only output; contact-sheet storyboard PNG via `ffmpeg` montage |
|
|
34
35
|
| `/video:stitch <slug>` | `commands/video/stitch.md` | Re-stitches existing clips after operator edits, no re-render |
|
|
35
36
|
|
|
36
37
|
## Dispatch
|
|
37
38
|
|
|
38
|
-
1. Parse `/video <sub-command> [args]`.
|
|
39
|
+
1. Parse `/video <sub-command> [args]`. The sub-command is the first
|
|
40
|
+
token; match it against the table's exact sub-command names only. A
|
|
41
|
+
token that is a **file path** (contains `/`, `.`, or a known media
|
|
42
|
+
extension — e.g. `from-song.mp3`, `clip/from-song.wav`) is NOT a
|
|
43
|
+
sub-command: it belongs to `from-script` (a script path) or is a
|
|
44
|
+
mis-typed `/video:from-song` invocation. Never treat `from-song.mp3`
|
|
45
|
+
as the `from-song` sub-command, and never route a bare `from-song`
|
|
46
|
+
(no images-dir + song args) into `from-script` with the song as the
|
|
47
|
+
script. On this ambiguity → ask rather than best-guess.
|
|
39
48
|
2. Look up the sub-command in the table above and execute its file
|
|
40
49
|
verbatim with the remaining args.
|
|
41
50
|
3. Unknown / missing sub-command → print the table and ask:
|
|
42
51
|
|
|
43
52
|
> 1. from-script — full script → final video
|
|
44
|
-
> 2.
|
|
45
|
-
> 3.
|
|
46
|
-
> 4.
|
|
53
|
+
> 2. from-song — music video from a song + reference images
|
|
54
|
+
> 3. scene — single-scene iteration
|
|
55
|
+
> 4. storyboard — image-only contact sheet
|
|
56
|
+
> 5. stitch — re-stitch existing clips
|
|
47
57
|
|
|
48
58
|
## Rules
|
|
49
59
|
|
|
@@ -59,5 +69,5 @@ contract under [`scripts/ai-video/lib/adapter-contract.md`](../scripts/ai-video/
|
|
|
59
69
|
|
|
60
70
|
## See also
|
|
61
71
|
|
|
62
|
-
- [`scripts/ai-video/lib/adapter-contract.md`](
|
|
63
|
-
- [`docs/contracts/command-clusters.md`](
|
|
72
|
+
- [`scripts/ai-video/lib/adapter-contract.md`](../../scripts/ai-video/lib/adapter-contract.md) — provider adapter v1 contract
|
|
73
|
+
- [`docs/contracts/command-clusters.md`](../../docs/contracts/command-clusters.md) — `video` cluster registration
|
|
@@ -73,7 +73,7 @@ Experimental, removable rule. If opt-in consistently declined or siblings never
|
|
|
73
73
|
|
|
74
74
|
## Follow-up (not yet shipped)
|
|
75
75
|
|
|
76
|
-
- Consumer-install detector reachability:
|
|
76
|
+
- Consumer-install detector reachability: ✅ shipped 2026-05-30 — detector now exposed as `agent-config linked-projects:list` (closes ADR-032 follow-up); cross-repo retrieval over opted-in siblings ships as `/knowledge:cross-repo`.
|
|
77
77
|
- Multi-agent verification: only Claude Code empirically validated (ADR-032). Cursor / Augment / Copilot unverified — manual fallback in the guide covers them until tested.
|
|
78
78
|
|
|
79
79
|
Trigger-set above activates this routing under the `balanced` and `full` profiles.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: inherit
|
|
3
|
+
name: song-to-script
|
|
4
|
+
description: "Turn an audio track into a timed `## Scene N` script: song sections → per-scene durations, auto mode adds mood + lip-sync lines. Triggers 'music video', 'from the song', 'cut to the beat'."
|
|
5
|
+
personas:
|
|
6
|
+
- hollywood-director
|
|
7
|
+
domain: product
|
|
8
|
+
workspaces:
|
|
9
|
+
- small-business
|
|
10
|
+
packs:
|
|
11
|
+
- ai-video
|
|
12
|
+
lifecycle: experimental
|
|
13
|
+
trust:
|
|
14
|
+
level: experimental
|
|
15
|
+
install:
|
|
16
|
+
default: false
|
|
17
|
+
removable: true
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# song-to-script
|
|
21
|
+
|
|
22
|
+
> Turn a song into `<project>/script.md` — a sequence of `## Scene N`
|
|
23
|
+
> blocks whose `duration:` values sum to the track length and whose cut
|
|
24
|
+
> points land on real section boundaries. Consumed by
|
|
25
|
+
> [`/video:from-song`](../../commands/video/from-song.md), then handed
|
|
26
|
+
> to [`scene-expander`](../scene-expander/SKILL.md) and
|
|
27
|
+
> [`video-director`](../video-director/SKILL.md). Never invents timing —
|
|
28
|
+
> every boundary comes from the audio probe, and the probe's `method`
|
|
29
|
+
> tells this skill how musical (or not) those boundaries actually are.
|
|
30
|
+
|
|
31
|
+
## When to use
|
|
32
|
+
|
|
33
|
+
- A music-video run needs scenes cut to the song (`/video:from-song`).
|
|
34
|
+
- An existing script must be **re-timed** to a track after the edit
|
|
35
|
+
drifted from the beat (the named second consumer — re-time without a
|
|
36
|
+
full re-author).
|
|
37
|
+
|
|
38
|
+
Do NOT use when:
|
|
39
|
+
|
|
40
|
+
- The operator already supplies a `## Scene N` script with `duration:`
|
|
41
|
+
values — feed it straight to `scene-expander`.
|
|
42
|
+
- There is no audio — use the operator brief with `scene-expander`
|
|
43
|
+
directly.
|
|
44
|
+
|
|
45
|
+
## Inputs
|
|
46
|
+
|
|
47
|
+
- **Audio probe** — JSON from
|
|
48
|
+
[`scripts/ai-video/lib/probe-audio.sh`](../../../../scripts/ai-video/lib/probe-audio.sh):
|
|
49
|
+
`{duration, method, warning?, sections:[{start,end,energy,label}]}`.
|
|
50
|
+
- `method: silence` — boundaries are real quiet gaps; trust them as cuts.
|
|
51
|
+
- `method: rms` — boundaries are energy-delta inflections; usable but
|
|
52
|
+
coarse.
|
|
53
|
+
- `method: interval` — **the track is structurally flat** (brick-walled
|
|
54
|
+
/ sustained); sections are fixed-interval, NOT musical. When `method`
|
|
55
|
+
is `interval` (or `warning` is set), the emitted script header states
|
|
56
|
+
that timing is interval-based and the operator should pass
|
|
57
|
+
`--scene-durations` for musical sync. Never present interval cuts as
|
|
58
|
+
beat-synced.
|
|
59
|
+
- **Mode** — `brief` (operator text is the creative source) or `auto`
|
|
60
|
+
(infer mood + action from energy).
|
|
61
|
+
- **Brief** (brief mode only) — free text: story, settings, look.
|
|
62
|
+
- **Character lock** (optional) — `<project>/character.json` if a human
|
|
63
|
+
subject was locked. **Absent is normal** — abstract / landscape /
|
|
64
|
+
visualiser videos have no locked subject; see Step 2.
|
|
65
|
+
|
|
66
|
+
## Procedure
|
|
67
|
+
|
|
68
|
+
### Step 1: Map sections → scenes
|
|
69
|
+
|
|
70
|
+
One `## Scene N` per probe section. `duration:` = `end - start`
|
|
71
|
+
(rounded to 0.5 s). Merge any section shorter than the provider's
|
|
72
|
+
`min-duration` into its neighbour; split any section longer than the
|
|
73
|
+
provider's `max-duration` into equal sub-scenes so no single clip
|
|
74
|
+
exceeds the backend limit (read both from the resolved provider tuning).
|
|
75
|
+
|
|
76
|
+
### Step 2: Assign mood + action
|
|
77
|
+
|
|
78
|
+
First decide the **subject mode**:
|
|
79
|
+
|
|
80
|
+
- **Character mode** — `character.json` exists: every scene's `action:`
|
|
81
|
+
names the locked subject, never a fresh description.
|
|
82
|
+
- **Style mode** — no `character.json`: scenes describe setting, palette,
|
|
83
|
+
and motion continuity (the recurring *look*), not a person. This is the
|
|
84
|
+
valid abstract / landscape / visualiser path — do not invent a human
|
|
85
|
+
subject to fill the slot.
|
|
86
|
+
|
|
87
|
+
Then assign per scene:
|
|
88
|
+
|
|
89
|
+
- **Brief mode** — distribute the brief's beats across scenes in order;
|
|
90
|
+
energy only modulates pacing (low energy → slow push-in, high energy →
|
|
91
|
+
fast cuts / motion). Do not add story the brief did not state.
|
|
92
|
+
- **Auto mode** — derive mood per section from `energy` and `label`:
|
|
93
|
+
|
|
94
|
+
| label / energy | default scene intent |
|
|
95
|
+
|---|---|
|
|
96
|
+
| intro / low | establishing wide, slow camera, calm subject/scene |
|
|
97
|
+
| build / rising | approach, tightening framing |
|
|
98
|
+
| drop / peak | dynamic motion, weather/FX, fast push |
|
|
99
|
+
| breakdown / dip | close-up / detail, quiet, single light source |
|
|
100
|
+
| outro / fade | pull-back, resolve, hold |
|
|
101
|
+
|
|
102
|
+
### Step 3: Lyric / lip-sync lines (auto mode, vocal tracks)
|
|
103
|
+
|
|
104
|
+
If the probe flags vocal energy in a section and the operator provided
|
|
105
|
+
lyrics (or asked to lip-sync), place the matching lines in that scene's
|
|
106
|
+
`dialogue:` block so the video adapter can drive mouth motion. No
|
|
107
|
+
lyrics → leave `dialogue:` empty; the scene is performance/B-roll, not
|
|
108
|
+
lip-sync. **Never fabricate lyrics** — absent text means no dialogue.
|
|
109
|
+
Lip-sync requires a character subject; in style mode, `dialogue:` stays
|
|
110
|
+
empty.
|
|
111
|
+
|
|
112
|
+
### Step 4: Emit + reconcile
|
|
113
|
+
|
|
114
|
+
Write `<project>/script.md`. Report the delta, the section→scene map,
|
|
115
|
+
**and the probe `method`** (so the operator sees whether cuts are
|
|
116
|
+
silence-derived, energy-derived, or interval-fallback). If the sum cannot
|
|
117
|
+
be reconciled (e.g. provider max-duration forces more time than the song
|
|
118
|
+
has), **halt and surface the conflict** — do not pad silently.
|
|
119
|
+
|
|
120
|
+
### Step 5: Validate before handoff
|
|
121
|
+
|
|
122
|
+
Concrete checks (all must pass before the script is handed to
|
|
123
|
+
`scene-expander`):
|
|
124
|
+
|
|
125
|
+
- **Assert** `Σ(duration) == probe.duration` within ±1.0 s; report the
|
|
126
|
+
exact delta. A larger delta → halt, do not pad.
|
|
127
|
+
- **Verify** every scene boundary equals a probe section boundary (or a
|
|
128
|
+
`--scene-durations` value) — no invented cut points.
|
|
129
|
+
- **Confirm** no scene `duration:` exceeds the provider `max-duration`
|
|
130
|
+
or falls below `min-duration`.
|
|
131
|
+
- **Ensure** every `## Scene N` carries all five keys (`duration` ·
|
|
132
|
+
`mood` · `action` · `camera` · `dialogue`), and that `dialogue:` is
|
|
133
|
+
empty in style mode.
|
|
134
|
+
|
|
135
|
+
## Output format
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
# <project> — derived from <song-file> (<mode> mode · cuts: <method>)
|
|
139
|
+
|
|
140
|
+
## Scene 1
|
|
141
|
+
duration: 6.0
|
|
142
|
+
mood: establishing, cold, pre-storm
|
|
143
|
+
action: <subject from character.json, OR style description in style mode>
|
|
144
|
+
camera: slow push-in
|
|
145
|
+
dialogue:
|
|
146
|
+
|
|
147
|
+
## Scene 2
|
|
148
|
+
duration: 4.5
|
|
149
|
+
mood: build, rising tension
|
|
150
|
+
action: close on <subject / detail>, wind picking up
|
|
151
|
+
camera: handheld tighten
|
|
152
|
+
dialogue:
|
|
153
|
+
- "<subject>: \"<lyric line for this section, if any>\""
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
`scene-expander` consumes this verbatim — keep the keys
|
|
157
|
+
(`duration` · `mood` · `action` · `camera` · `dialogue`) exact.
|
|
158
|
+
|
|
159
|
+
## Gotcha
|
|
160
|
+
|
|
161
|
+
- **`method: interval` is the brick-walled-master signal, not a bug.**
|
|
162
|
+
A compressed modern master has near-constant RMS and no silence, so the
|
|
163
|
+
probe degrades to fixed intervals. That is the honest floor — surface
|
|
164
|
+
it and point the operator at `--scene-durations`; never dress interval
|
|
165
|
+
cuts up as beat-synced.
|
|
166
|
+
- **A vocal section without supplied lyrics is B-roll, not lip-sync.**
|
|
167
|
+
Detected vocal energy alone does not authorise `dialogue:` — only
|
|
168
|
+
operator-supplied lyrics do.
|
|
169
|
+
- **Style mode is the default for a no-character run**, not an error
|
|
170
|
+
path. Landscape / abstract / visualiser videos never get a fabricated
|
|
171
|
+
human subject.
|
|
172
|
+
|
|
173
|
+
## Do NOT
|
|
174
|
+
|
|
175
|
+
- **Do NOT invent timing.** Every cut maps to a probe boundary or a
|
|
176
|
+
`--scene-durations` value — never to taste.
|
|
177
|
+
- **Do NOT present `interval`-fallback cuts as beat-synced.** Always
|
|
178
|
+
surface the probe `method`.
|
|
179
|
+
- **Do NOT emit a clip outside the provider's min/max duration** —
|
|
180
|
+
split/merge in Step 1 instead.
|
|
181
|
+
- **Do NOT fabricate lyrics or story** beyond the brief / detected vocals.
|
|
182
|
+
- **Do NOT invent a human subject** in style mode; defer identity to
|
|
183
|
+
`character.json` only when a lock exists.
|
|
184
|
+
- **Do NOT pad a unreconcilable timing sum** — halt and surface it.
|
|
185
|
+
|
|
186
|
+
## See also
|
|
187
|
+
|
|
188
|
+
- [`/video:from-song`](../../commands/video/from-song.md) — the command
|
|
189
|
+
that drives this skill
|
|
190
|
+
- [`scene-expander`](../scene-expander/SKILL.md) — consumes the emitted
|
|
191
|
+
script
|
|
192
|
+
- [`character-consistency`](../character-consistency/SKILL.md) — supplies
|
|
193
|
+
the locked subject referenced in `action:` (character mode only)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
|
|
9
|
-
"version": "5.
|
|
9
|
+
"version": "5.5.0",
|
|
10
10
|
"keywords": [
|
|
11
11
|
"agent-config",
|
|
12
12
|
"skills",
|
|
@@ -349,6 +349,7 @@
|
|
|
349
349
|
"./.claude/skills/skill-management",
|
|
350
350
|
"./.claude/skills/skill-reviewer",
|
|
351
351
|
"./.claude/skills/skill-writing",
|
|
352
|
+
"./.claude/skills/song-to-script",
|
|
352
353
|
"./.claude/skills/sql-writing",
|
|
353
354
|
"./.claude/skills/stakeholder-tradeoff",
|
|
354
355
|
"./.claude/skills/subagent-orchestration",
|
|
@@ -384,13 +385,19 @@
|
|
|
384
385
|
"./.claude/skills/video",
|
|
385
386
|
"./.claude/skills/video-director",
|
|
386
387
|
"./.claude/skills/video-from-script",
|
|
388
|
+
"./.claude/skills/video-from-song",
|
|
387
389
|
"./.claude/skills/video-scene",
|
|
388
390
|
"./.claude/skills/video-stitch",
|
|
389
391
|
"./.claude/skills/video-storyboard",
|
|
390
392
|
"./.claude/skills/vision-articulation",
|
|
391
393
|
"./.claude/skills/voc-extract",
|
|
392
394
|
"./.claude/skills/voice-and-tone-design",
|
|
393
|
-
"./.claude/skills/work"
|
|
395
|
+
"./.claude/skills/work",
|
|
396
|
+
"./.claude/skills/knowledge-cross-repo",
|
|
397
|
+
"./.claude/skills/skill",
|
|
398
|
+
"./.claude/skills/skill-preview",
|
|
399
|
+
"./.claude/skills/skills",
|
|
400
|
+
"./.claude/skills/skills-discover"
|
|
394
401
|
]
|
|
395
402
|
}
|
|
396
403
|
]
|
package/CHANGELOG.md
CHANGED
|
@@ -811,6 +811,43 @@ our recommendation order, not its support status.
|
|
|
811
811
|
> that forces a new era split (`# Era: 5.5.x`, etc.) — see
|
|
812
812
|
> [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
|
|
813
813
|
|
|
814
|
+
## [5.5.0](https://github.com/event4u-app/agent-config/compare/5.4.1...5.5.0) (2026-05-31)
|
|
815
|
+
|
|
816
|
+
### Features
|
|
817
|
+
|
|
818
|
+
* /skill:preview — non-destructive skill dry-run ([03ce5fc](https://github.com/event4u-app/agent-config/commit/03ce5fc757f9b42226083627ad7380dd0d895ef7))
|
|
819
|
+
* cross-repo retrieval + linked-projects:list (ADR-032 Option A) ([894e2e8](https://github.com/event4u-app/agent-config/commit/894e2e88c2a7e6744eb45a90907c634953aec0ec))
|
|
820
|
+
* /skills:discover — local, explained skill recommender ([d887c56](https://github.com/event4u-app/agent-config/commit/d887c561514b019f2ae1a3eca068087f4ffee351))
|
|
821
|
+
* meta-layer concept-surface audit tool + zero-cut evidence ([b4a7f3e](https://github.com/event4u-app/agent-config/commit/b4a7f3e5e87ab0c5aa4a820784fba09d8306284a))
|
|
822
|
+
* **video:** add /video:from-song music-video command + register in cluster ([05752df](https://github.com/event4u-app/agent-config/commit/05752dfd0837759923bf02f3731fecfb81dec9e7))
|
|
823
|
+
* **ai-video:** add probe-audio.sh hybrid audio segmentation ([41b4f8d](https://github.com/event4u-app/agent-config/commit/41b4f8dd57d1352df49bdc31bc81ea8e7e04f550))
|
|
824
|
+
|
|
825
|
+
### Bug Fixes
|
|
826
|
+
|
|
827
|
+
* classify command-cluster files as commands, not skills ([0fd25da](https://github.com/event4u-app/agent-config/commit/0fd25dad8f75cfb7021512e2905b23b24fea88c1))
|
|
828
|
+
* **ai-video:** portability + regenerate stale derived for from-song ([9d728b8](https://github.com/event4u-app/agent-config/commit/9d728b88687a6c27dfa647dd233fb4412f7e8d5a))
|
|
829
|
+
|
|
830
|
+
### Documentation
|
|
831
|
+
|
|
832
|
+
* reword execution-type mentions to dodge check-refs false positive ([dc84ed0](https://github.com/event4u-app/agent-config/commit/dc84ed01d3aa6845a1e15674ed1ec3ff3bbfb9ce))
|
|
833
|
+
* add discoverable BREAKING_CHANGES.md + major-bump rationale ([385b8a2](https://github.com/event4u-app/agent-config/commit/385b8a225b764cfe09a7e31640184140de4e07d9))
|
|
834
|
+
* **roadmap:** avoid check-refs false-positive on pack name ([bd02ef0](https://github.com/event4u-app/agent-config/commit/bd02ef0b07d27653dbec4971b984d1d12b75ac5e))
|
|
835
|
+
* **roadmap:** /video:from-song implementation roadmap + dashboard ([e4899c2](https://github.com/event4u-app/agent-config/commit/e4899c2c4f57b77bc62aa9187d4aa768ea6885f6))
|
|
836
|
+
|
|
837
|
+
### Tests
|
|
838
|
+
|
|
839
|
+
* **ai-video:** cover probe-audio segmentation + from-song registration ([9a58807](https://github.com/event4u-app/agent-config/commit/9a588071de1601337e6e65dc9b940b0a36dcfd42))
|
|
840
|
+
|
|
841
|
+
### Chores
|
|
842
|
+
|
|
843
|
+
* archive road-to-leaner-core-and-discovery (all phases complete) ([6b6b191](https://github.com/event4u-app/agent-config/commit/6b6b191f3b9ff328b9b7f3d6aa6eaf718e471934))
|
|
844
|
+
* regenerate core pack manifest with skill/skill:preview commands ([9bd88c9](https://github.com/event4u-app/agent-config/commit/9bd88c9b7b18bdd16ef2c77066aa485d96fc2b2f))
|
|
845
|
+
* register skills/skill/knowledge clusters + regen outputs ([1156566](https://github.com/event4u-app/agent-config/commit/1156566ad82647c596e47483d57b3fcb71f9a275))
|
|
846
|
+
* bump command count 135 -> 136 in README badge + browse lines ([82c27c3](https://github.com/event4u-app/agent-config/commit/82c27c3383f53d29735784bae5fb86a151c19e39))
|
|
847
|
+
* **ai-video:** regenerate manifests, counts, condensation hashes ([fe4dc28](https://github.com/event4u-app/agent-config/commit/fe4dc280437f209b31190a5117848feb92290015))
|
|
848
|
+
|
|
849
|
+
Tests: 5336 (+65 since 5.4.1)
|
|
850
|
+
|
|
814
851
|
## [5.4.1](https://github.com/event4u-app/agent-config/compare/5.4.0...5.4.1) (2026-05-30)
|
|
815
852
|
|
|
816
853
|
### Documentation
|
package/CONTRIBUTING.md
CHANGED
|
@@ -237,6 +237,12 @@ Release notes live in [`CHANGELOG.md`](CHANGELOG.md) and are generated by
|
|
|
237
237
|
the last tag. Contributors do **not** edit the changelog by hand; writing
|
|
238
238
|
clean commit subjects is how notes are authored.
|
|
239
239
|
|
|
240
|
+
The consumer-facing breaking changes per major are indexed for discovery in
|
|
241
|
+
[`BREAKING_CHANGES.md`](BREAKING_CHANGES.md) — one row per `X.0.0`, each pointing
|
|
242
|
+
back to the full `CHANGELOG.md` entry. That file is the discoverable index; this
|
|
243
|
+
section and [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts/CHANGELOG-conventions.md)
|
|
244
|
+
remain the canonical policy.
|
|
245
|
+
|
|
240
246
|
### Runtime dependency floors — never pin to the freshest patch
|
|
241
247
|
|
|
242
248
|
`dependencies` in `package.json` are resolved on the **consumer's** machine
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [](https://www.npmjs.com/package/@event4u/agent-config)
|
|
6
6
|
|
|
7
|
-
[](.agent-src/skills/) [](.agent-src/rules/) [](.agent-src/commands/) [](docs/guidelines/) [](.agent-src/personas/) [](.agent-src/personas/advisors/)
|
|
8
8
|
|
|
9
9
|
> **The Universal AI Agent OS for Founders, Content Creators, Consultants, Sales, Finance, and Engineering teams. Bring your own AI provider.**
|
|
10
10
|
|
|
@@ -43,7 +43,7 @@ Beyond software: [`user-types/`](packages/core/.agent-src.uncondensed/user-types
|
|
|
43
43
|
</p>
|
|
44
44
|
|
|
45
45
|
<p align="center">
|
|
46
|
-
<sub>Distribution: <code>npm install @event4u/agent-config</code> · npm-primary per <a href="docs/decisions/ADR-033-distribution-identity-npm-primary.md">ADR-033</a>. Major bumps follow <a href="CONTRIBUTING.md#versioning-policy">semver</a>; each ships a <a href="CHANGELOG.md#breaking--v400-unified-setup-road-to-unified-setup"><code>### Breaking</code></a> entry
|
|
46
|
+
<sub>Distribution: <code>npm install @event4u/agent-config</code> · npm-primary per <a href="docs/decisions/ADR-033-distribution-identity-npm-primary.md">ADR-033</a>. Major bumps follow <a href="CONTRIBUTING.md#versioning-policy">semver</a>; each ships a <a href="CHANGELOG.md#breaking--v400-unified-setup-road-to-unified-setup"><code>### Breaking</code></a> entry — all majors indexed in <a href="BREAKING_CHANGES.md">BREAKING_CHANGES.md</a>.</sub>
|
|
47
47
|
</p>
|
|
48
48
|
|
|
49
49
|
---
|
|
@@ -369,7 +369,7 @@ When a prompt matches a command's purpose ("setze ticket ABC-123 um" → `/imple
|
|
|
369
369
|
| [**Migration**](docs/MIGRATION.md) | Per-version upgrade steps |
|
|
370
370
|
| [**Showcase**](docs/showcase.md) | More examples & expected behavior |
|
|
371
371
|
|
|
372
|
-
Browse content: [all
|
|
372
|
+
Browse content: [all 141 commands](.agent-src/commands/) · [skills catalog](docs/skills-catalog.md) · [full catalog](docs/catalog.md) · [`llms.txt`](llms.txt).
|
|
373
373
|
|
|
374
374
|
---
|
|
375
375
|
|
package/dist/cli/registry.js
CHANGED
|
@@ -50,6 +50,7 @@ export const REGISTRY = [
|
|
|
50
50
|
{ name: 'keys:install-openai', disposition: 'delegate' },
|
|
51
51
|
{ name: 'first-run', disposition: 'delegate' },
|
|
52
52
|
{ name: 'memory:lookup', disposition: 'delegate' },
|
|
53
|
+
{ name: 'linked-projects:list', disposition: 'delegate' },
|
|
53
54
|
{ name: 'memory:signal', disposition: 'delegate' },
|
|
54
55
|
{ name: 'memory:hash', disposition: 'delegate' },
|
|
55
56
|
{ name: 'memory:check', disposition: 'delegate' },
|
package/dist/cli/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,MAAM,CAAC,MAAM,QAAQ,GAA4B;IAC7C,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,2BAA2B,EAAE;IAChF,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,8BAA8B,EAAE;IACnF,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,kCAAkC,EAAE;IAC3F,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,oCAAoC,EAAE;IACzF,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,oCAAoC,EAAE;IACrG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,mEAAmE,EAAE;IAC3H,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,mEAAmE,EAAE;IAC3H,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,sCAAsC,EAAE;IAC7F,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3C,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3C,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE;IACnD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,mEAAmE,EAAE;IACpI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE;IAC9C,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE;IAC1C,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3C,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,oCAAoC,EAAE;IAC/F,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,EAAE;IACnF,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,8BAA8B,EAAE;IACrF,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,kEAAkE,EAAE;IACxH,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,4DAA4D,EAAE;IAChH,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,8DAA8D,EAAE;IACvH,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,yDAAyD,EAAE;IAC7G,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,iDAAiD,EAAE;IACpG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE;IAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE;IAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE;IAC9C,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE;IACrD,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3D,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE;IAClD,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACjD,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACjD,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACjD,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,UAAU,EAAE;IAC3D,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,EAAE;IACxD,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE;IAC9C,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE;IAClD,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE;IACzD,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE;IAClD,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE;IAChD,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE;IACjD,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,EAAE;IAC1D,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE;IACnD,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE;IACzD,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,EAAE;IACtD,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,UAAU,EAAE;IAC5D,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,UAAU,EAAE;IAC1D,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE;IACzD,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE;IACzD,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE;IAClD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE;IACrD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE;IACrD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE;IACrD,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE;IACrD,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE;IAChD,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE;CAC7C,CAAC;AAEX,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACjC,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,QAAQ,CAAC;AACvD,CAAC"}
|