@event4u/agent-config 9.32.0 → 9.34.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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +85 -72
- package/dist/agent-src/commands/agent-handoff.md +15 -3
- package/dist/agent-src/commands/review/routing.md +3 -4
- package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +65 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +3 -0
- package/dist/agent-src/rules/delegation-policy.md +6 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
- package/dist/agent-src/scripts/roadmap_gates.ts +107 -3
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +21 -12
- package/dist/agent-src/skills/design-tokens/SKILL.md +15 -0
- package/dist/agent-src/skills/docker/SKILL.md +11 -0
- package/dist/agent-src/skills/laravel/SKILL.md +11 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +24 -0
- package/dist/agent-src/skills/review-routing/SKILL.md +23 -6
- package/dist/agent-src/skills/rule-writing/SKILL.md +23 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +80 -2
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +24 -0
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/scripts/ownership-map.example.yml +1 -1
- package/dist/cli/registry.js +4 -4
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli-delegate/chunk-HTIU3W56.js +66 -0
- package/dist/cli-delegate/{chunk-2WELHO3P.js → chunk-I5EAFRII.js} +35 -0
- package/dist/cli-delegate/{chunk-ITIQSGOQ.js → chunk-MA4GFWDY.js} +7 -4
- package/dist/cli-delegate/{chunk-PFBV6XRT.js → chunk-Q26HT4QT.js} +1 -63
- package/dist/cli-delegate/{chunk-542DZR4P.js → chunk-REMEZSVP.js} +1660 -146
- package/dist/cli-delegate/{chunk-3EWYC3YK.js → chunk-UEZ7D35A.js} +4 -3
- package/dist/cli-delegate/{chunk-LVRYBKTI.js → chunk-YPAWXXXR.js} +158 -0
- package/dist/cli-delegate/cmd_conformance.js +256 -226
- package/dist/cli-delegate/cmd_doctor.js +3 -2
- package/dist/cli-delegate/cmd_export.js +1 -1
- package/dist/cli-delegate/cmd_handoff.js +21 -28
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_prune.js +1 -1
- package/dist/cli-delegate/cmd_route_audit.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +20 -5
- package/dist/cli-delegate/cmd_settings_get.js +4 -2
- package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
- package/dist/cli-delegate/cmd_settings_set.js +5 -3
- package/dist/cli-delegate/cmd_sync.js +1 -1
- package/dist/cli-delegate/cmd_uninstall.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +17 -17
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/dormancy-report.md +17 -0
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/hooks/dispatch.js +114 -7
- package/dist/install/install.mjs +7 -4
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +3755 -1168
- package/docs/guidelines/agent-infra/failure-signatures.md +47 -12
- package/package.json +2 -2
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +35 -1
- package/src/agent-src/scripts/roadmap_gates.ts +107 -3
- package/src/agent-src/templates/scripts/ownership-map.example.yml +1 -1
- package/src/config/cost-parity-budget.json +167 -0
- package/src/config/gate-coverage.yml +44 -5
- package/src/config/quorum-attendance-budget.json +39 -0
- package/src/scripts/_cli/cmd_doctor.ts +69 -1
- package/src/scripts/_cli/cmd_session_recycle.ts +25 -4
- package/src/scripts/_dispatch.bash +5 -3
- package/src/scripts/_lib/env_kill_switch.ts +37 -0
- package/src/scripts/_lib/orchestration_record.ts +45 -0
- package/src/scripts/_lib/security_lint.ts +18 -4
- package/src/scripts/_lib/self_repair.ts +60 -0
- package/src/scripts/_lib/self_repair_store.ts +65 -5
- package/src/scripts/_lib/subagent_capsule.ts +78 -1
- package/src/scripts/ai_council/clients.ts +31 -0
- package/src/scripts/ai_council/events_log.ts +130 -8
- package/src/scripts/ai_council/orchestrator.ts +50 -3
- package/src/scripts/ai_council/pricing.ts +48 -1
- package/src/scripts/ai_council/prompts.ts +165 -3
- package/src/scripts/ai_council/quorum.ts +30 -0
- package/src/scripts/ai_council/session.ts +11 -0
- package/src/scripts/ai_team/review_gate.ts +2 -2
- package/src/scripts/ask_transport.ts +20 -1
- package/src/scripts/build_discovery_manifest.ts +165 -0
- package/src/scripts/cache_realization_report.ts +38 -0
- package/src/scripts/check_claims.ts +51 -2
- package/src/scripts/check_release_highlights.ts +7 -1
- package/src/scripts/ci_time_ratio.ts +3 -1
- package/src/scripts/conformance_scan.ts +105 -0
- package/src/scripts/cost/track.mjs +39 -0
- package/src/scripts/cost_summary.ts +104 -1
- package/src/scripts/council_cli.ts +131 -13
- package/src/scripts/discovery_graph.ts +201 -27
- package/src/scripts/dispatch_economy_report.ts +5 -2
- package/src/scripts/dispatch_r2_reviewer.ts +102 -1
- package/src/scripts/install.ts +20 -6
- package/src/scripts/lint_budget_ownership.ts +81 -0
- package/src/scripts/lint_handoffs.ts +92 -2
- package/src/scripts/lint_hedge_words.ts +317 -0
- package/src/scripts/lint_mcp_config_security.ts +1 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +56 -2
- package/src/scripts/lint_workflow_paths.ts +384 -0
- package/src/scripts/preamble_byte_census.ts +9 -1
- package/src/scripts/report_carrier_divergence.ts +10 -0
- package/src/scripts/report_conformance_funnel.ts +40 -0
- package/src/scripts/schemas/subagent.schema.json +3 -2
- package/src/scripts/self_repair_cli.ts +26 -1
- package/src/scripts/skill_linter.ts +58 -2
|
@@ -184,18 +184,27 @@ Each domain ships `data/manifest.json` beside its CSVs — declaring its
|
|
|
184
184
|
- BM25 tokenizer drops tokens ≤2 chars — "UI", "a11y" style queries need
|
|
185
185
|
longer companions.
|
|
186
186
|
|
|
187
|
-
##
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
- **
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
187
|
+
## Security constraints (Step 1.6 runtime-safety record)
|
|
188
|
+
|
|
189
|
+
Four scripts ship under `scripts/`: `ground.ts` (CLI), `bm25_search.ts`,
|
|
190
|
+
`decision_engine.ts`, `schema_validator.ts`.
|
|
191
|
+
|
|
192
|
+
- **What they may touch** — corpus CSVs and the manifest under the
|
|
193
|
+
manifest's own directory. `resolve_data_path` refuses absolute paths and
|
|
194
|
+
`..` escapes, so the manifest directory is the read boundary.
|
|
195
|
+
- **What they must never do** — read outside that directory, reach the
|
|
196
|
+
network, or spawn a subprocess. Embeddings and remote retrievers are
|
|
197
|
+
intentionally not implemented (ADR-061 §2), and that is a containment
|
|
198
|
+
decision, not a missing feature.
|
|
199
|
+
- **Default invocation** — read-only. The single write surface is opt-in
|
|
200
|
+
`--persist DIR`, which writes `MASTER.md` (and `pages/<page>.md` when
|
|
201
|
+
`--page` is given) under `DIR/design-system/<project-slug>/`. Nothing
|
|
202
|
+
else writes.
|
|
203
|
+
- **Outbound** — nothing. No network access at all.
|
|
204
|
+
|
|
205
|
+
One qualified exception: `rules_module` executes a manifest-adjacent
|
|
206
|
+
TypeScript module via dynamic `import()`. That is the same trust domain as
|
|
207
|
+
the skill shipping the manifest, and its containment is `resolve_data_path`.
|
|
199
208
|
|
|
200
209
|
## See also
|
|
201
210
|
|
|
@@ -113,6 +113,21 @@ four-operation split assigns to *rules/linters*, not the corpus).
|
|
|
113
113
|
3. `validate` report — exit 0 evidence, or the violations list handed to
|
|
114
114
|
the polish round as `token_violation` findings.
|
|
115
115
|
|
|
116
|
+
## Security constraints
|
|
117
|
+
|
|
118
|
+
`scripts/tokens.ts` is the only shipped script.
|
|
119
|
+
|
|
120
|
+
- **What it may touch** — the `tokens.json` config path it is given, the
|
|
121
|
+
directory it is asked to `validate`, and the `--output` path it is asked
|
|
122
|
+
to write. Nothing outside the paths named on the command line.
|
|
123
|
+
- **What it must never do** — reach the network, spawn a subprocess, or
|
|
124
|
+
write to a path the caller did not name. It never edits the generated CSS
|
|
125
|
+
it produced earlier; regeneration replaces, it does not patch.
|
|
126
|
+
- **Default invocation** — read-only. `generate` prints to stdout unless
|
|
127
|
+
`--output PATH` is passed; `--output` is the flag that makes it mutating,
|
|
128
|
+
and it creates only that file's parent directory. `validate` never writes.
|
|
129
|
+
- **Outbound** — nothing. No network access.
|
|
130
|
+
|
|
116
131
|
## Do NOT
|
|
117
132
|
|
|
118
133
|
- Do NOT hand-edit generated CSS — `tokens.json` is the single source.
|
|
@@ -83,6 +83,17 @@ Read `docker-compose.yml` / `compose.yaml` to discover the actual service names.
|
|
|
83
83
|
- Use `make console` for interactive shell access.
|
|
84
84
|
- Use `make console-xdebug` for Xdebug container access.
|
|
85
85
|
|
|
86
|
+
### Tooling detection
|
|
87
|
+
|
|
88
|
+
Which test runner and quality commands exist depends on the project shape.
|
|
89
|
+
Check for `artisan` in the project root before picking one:
|
|
90
|
+
|
|
91
|
+
- **Laravel** (`artisan` present) — `php artisan test`, `vendor/bin/phpstan analyse`, `vendor/bin/rector process`
|
|
92
|
+
- **Plain Composer** (no `artisan`) — `vendor/bin/phpunit`, `vendor/bin/phpstan analyse`, `vendor/bin/rector process`
|
|
93
|
+
|
|
94
|
+
Either way the command runs inside the container:
|
|
95
|
+
`docker compose exec -T <php-service> <command>`.
|
|
96
|
+
|
|
86
97
|
### Image building
|
|
87
98
|
|
|
88
99
|
- Production images use `target: pro` — no dev dependencies.
|
|
@@ -157,6 +157,17 @@ Then add these **Laravel-specific** checks:
|
|
|
157
157
|
- Extract reusable UI pieces into components/partials when it matches project patterns.
|
|
158
158
|
- Escape output by default and use raw output only when safe and intentional.
|
|
159
159
|
|
|
160
|
+
## Translations and language files
|
|
161
|
+
|
|
162
|
+
- **Flat dot-notation keys only** — `'type.daily_report' => 'Daily Report'`.
|
|
163
|
+
Nested arrays (`'type' => ['daily_report' => …]`) are forbidden: they break
|
|
164
|
+
key referencing and make a one-line addition a nested diff.
|
|
165
|
+
- Reference with the helper and the same flat key —
|
|
166
|
+
`__('report.type.daily_report')`, `__('email.report.created.subject', ['number' => $number])`.
|
|
167
|
+
- Every key exists in **every** shipped locale. Adding to `lang/en/` without
|
|
168
|
+
`lang/de/` is a bug, not a TODO — the app ships to both audiences.
|
|
169
|
+
- Never hardcode a user-visible string in PHP.
|
|
170
|
+
|
|
160
171
|
## What NOT to do
|
|
161
172
|
|
|
162
173
|
- Do not put business logic into controllers, models, or Blade templates.
|
|
@@ -299,6 +299,30 @@ carve-out for the tool-specific part.
|
|
|
299
299
|
values the component no longer accepts is stale documentation; keep them beside
|
|
300
300
|
the component and update them in the same change.
|
|
301
301
|
|
|
302
|
+
## Security constraints
|
|
303
|
+
|
|
304
|
+
`scripts/shadcn_add.ts` is the only shipped script, and it is the single
|
|
305
|
+
subprocess-plus-network surface in this suite — treat it accordingly.
|
|
306
|
+
|
|
307
|
+
- **What it may touch** — the project rooted at `--project-root` (default
|
|
308
|
+
`cwd`): it reads `components.json` there and lets the upstream CLI write
|
|
309
|
+
the generated primitives under that root. Nothing outside it.
|
|
310
|
+
- **What it must never do** — run without the exact `npx` command and the
|
|
311
|
+
component list having been shown to the user first, per the gate above.
|
|
312
|
+
Never pass `--overwrite` unprompted; never treat a non-zero exit as
|
|
313
|
+
success; never work around a missing `npx` silently
|
|
314
|
+
([`missing-tool-handling`](../../rules/missing-tool-handling.md)).
|
|
315
|
+
- **Default invocation** — mutating. A bare `shadcn_add <component>`
|
|
316
|
+
spawns `npx shadcn@latest add <component>` and writes into the project.
|
|
317
|
+
`--dry-run` is the read-only path and prints the command it would run;
|
|
318
|
+
`--list` is read-only too. Use `--dry-run` for the proposal step.
|
|
319
|
+
- **Outbound** — yes, and this is the point of the gate: `npx` resolves
|
|
320
|
+
`shadcn@latest` from the public npm registry on every live run, so both
|
|
321
|
+
the code fetched and the components written are chosen upstream, at run
|
|
322
|
+
time, not pinned here. That is the egress leg of the lethal trifecta
|
|
323
|
+
([`lethal-trifecta-guard`](../../rules/lethal-trifecta-guard.md)); the
|
|
324
|
+
human confirmation is what keeps it off an autonomous path.
|
|
325
|
+
|
|
302
326
|
## Do NOT
|
|
303
327
|
|
|
304
328
|
- Do NOT install `shadcn-ui` from npm — primitives are scaffolded.
|
|
@@ -28,8 +28,8 @@ packs:
|
|
|
28
28
|
|
|
29
29
|
Do NOT use when:
|
|
30
30
|
|
|
31
|
-
- The diff is low-risk and no ownership map exists — fall back to
|
|
32
|
-
|
|
31
|
+
- The diff is low-risk and no ownership map exists — fall back to the
|
|
32
|
+
common role vocabulary below.
|
|
33
33
|
- A full PR description is requested — route to
|
|
34
34
|
[`create-pr-description`](../create-pr:description-only/SKILL.md) and let
|
|
35
35
|
it call this skill for the routing block.
|
|
@@ -55,7 +55,7 @@ Check, in order:
|
|
|
55
55
|
Parse each with YAML. Validate `version: 1` is present. If a file is
|
|
56
56
|
malformed, **stop and report the parse error** — never silently fall
|
|
57
57
|
back. If neither file exists, emit the generic role-based fallback
|
|
58
|
-
using
|
|
58
|
+
using the common role vocabulary below.
|
|
59
59
|
|
|
60
60
|
**Also** pull agent-written signals via the shared abstraction (see
|
|
61
61
|
[`memory-access`](../../../docs/guidelines/agent-infra/memory-access.md)):
|
|
@@ -114,12 +114,29 @@ If `ownership-map.yml` has an `updated` field older than 6 months,
|
|
|
114
114
|
include a staleness warning in the output. Still use the data — just
|
|
115
115
|
flag it.
|
|
116
116
|
|
|
117
|
+
## Common role vocabulary
|
|
118
|
+
|
|
119
|
+
The fallback set when no ownership entry matches. Extend it per project, but
|
|
120
|
+
keep these as the shared names — a role nobody else uses routes to nobody.
|
|
121
|
+
|
|
122
|
+
| Role | Typical focus |
|
|
123
|
+
|---|---|
|
|
124
|
+
| `backend` | business logic, validation, side effects, data integrity |
|
|
125
|
+
| `frontend` | UX, accessibility, client-side state, rendering |
|
|
126
|
+
| `security` | authz, secrets, trust boundaries, data exposure |
|
|
127
|
+
| `infra` / `ops` | rollout, migration safety, observability, retries |
|
|
128
|
+
| `database` | schema changes, indexes, query plans, rollback realism |
|
|
129
|
+
| `domain owner` | business invariants, policy intent, edge-case correctness |
|
|
130
|
+
| `qa` | test coverage, regression scenarios, flake risk |
|
|
131
|
+
|
|
132
|
+
Roles, never individuals: a package-shipped artifact names `security`, and the
|
|
133
|
+
consumer's CODEOWNERS or ownership map maps that to a person.
|
|
134
|
+
|
|
117
135
|
## Validation
|
|
118
136
|
|
|
119
137
|
Before returning:
|
|
120
138
|
|
|
121
|
-
1. Every emitted role is either in the common vocabulary
|
|
122
|
-
([`reviewer-awareness`](../../rules/reviewer-awareness.md)) or sourced
|
|
139
|
+
1. Every emitted role is either in the common vocabulary above or sourced
|
|
123
140
|
from an ownership entry — never invented.
|
|
124
141
|
2. Every historical-pattern match cites its `id` and `required_test`
|
|
125
142
|
verbatim.
|
|
@@ -191,7 +208,7 @@ Data source: <"ownership-map.yml + historical-bug-patterns.yml"
|
|
|
191
208
|
|
|
192
209
|
## See also
|
|
193
210
|
|
|
194
|
-
- [`reviewer-awareness`](../../rules/reviewer-awareness.md) —
|
|
211
|
+
- [`reviewer-awareness`](../../rules/reviewer-awareness.md) — the rule that routes here: anchor reviewer choice in paths and risk, never seniority
|
|
195
212
|
- [`review-routing-data-format`](../../../docs/guidelines/agent-infra/review-routing-data-format.md)
|
|
196
213
|
- [`create-pr-description`](../create-pr:description-only/SKILL.md)
|
|
197
214
|
- [`judge-test-coverage`](../judge-test-coverage/SKILL.md) — consumes
|
|
@@ -355,3 +355,26 @@ Good description (trigger-shaped, names domain + symptoms):
|
|
|
355
355
|
Bad description (no trigger, too vague):
|
|
356
356
|
|
|
357
357
|
> "Commit conventions"
|
|
358
|
+
|
|
359
|
+
### Contrastive-example slot (optional, for the rule body)
|
|
360
|
+
|
|
361
|
+
The pair above governs descriptions. A rule whose obligation is easy to agree
|
|
362
|
+
with and hard to apply — what counts as a cheap question, when an interrupt is
|
|
363
|
+
an interrupt, which reply mirrors the user's language — needs the same treatment
|
|
364
|
+
for the **behaviour**, not just the frontmatter.
|
|
365
|
+
|
|
366
|
+
Six live corpora already carry those pairs:
|
|
367
|
+
[`direct-answers-demos`](../../../docs/guidelines/agent-infra/direct-answers-demos.md),
|
|
368
|
+
[`asking-and-brevity-examples`](../../../docs/guidelines/agent-infra/asking-and-brevity-examples.md),
|
|
369
|
+
[`language-and-tone-examples`](../../../docs/guidelines/agent-infra/language-and-tone-examples.md),
|
|
370
|
+
and `autonomy-examples` / `interrupt-examples` / `cheap-question-mechanics` under
|
|
371
|
+
`src/agent-src/contexts/execution/`. Follow one; do not invent a format.
|
|
372
|
+
|
|
373
|
+
The shape they share: the **wrong** version in the form it actually gets
|
|
374
|
+
written, the **right** version, and one line of **why** — the why is what makes
|
|
375
|
+
it a rule rather than a memorised case.
|
|
376
|
+
|
|
377
|
+
Where the pairs go is a size decision, not a taste one. A rule body is capped at
|
|
378
|
+
200 lines hard / 120 soft, so more than two or three pairs belong in a guideline
|
|
379
|
+
or context file the rule points at — same split
|
|
380
|
+
[`skill-writing`](../skill-writing/SKILL.md) § Contrastive-example slot uses.
|
|
@@ -530,7 +530,7 @@ tool skill*, **never** a new skill per pitfall and never a generated grid (see
|
|
|
530
530
|
[`size-enforcement`](../../rules/size-enforcement.md) § Per-tool pitfall
|
|
531
531
|
content).
|
|
532
532
|
|
|
533
|
-
## Rationalizations-to-reject section (
|
|
533
|
+
## Rationalizations-to-reject section (recommended pattern, security-stop-routed skills)
|
|
534
534
|
|
|
535
535
|
A skill routed by `security-sensitive-stop` already carries a forbidden-moves or
|
|
536
536
|
failure-mode list. Those describe **what is wrong**. They do not answer the
|
|
@@ -553,7 +553,7 @@ the skip actually happens.
|
|
|
553
553
|
Keep it to the arguments that have really been made. An invented rationalization
|
|
554
554
|
teaches nothing and dilutes the ones that recur.
|
|
555
555
|
|
|
556
|
-
## Non-negotiable-deliverable section (
|
|
556
|
+
## Non-negotiable-deliverable section (recommended pattern, adjacent-technology clusters)
|
|
557
557
|
|
|
558
558
|
Some skills sit next to a technology that is a *tempting wrong answer* — close
|
|
559
559
|
enough to look interchangeable, different enough that picking it silently loses
|
|
@@ -644,6 +644,84 @@ This duplicates the rules on purpose, and the duplication is the point: the
|
|
|
644
644
|
rules are the enforcement, the section is what survives the artifact leaving
|
|
645
645
|
their reach.
|
|
646
646
|
|
|
647
|
+
## Mechanism-teaching section (optional pattern, skills whose subject has one)
|
|
648
|
+
|
|
649
|
+
A procedure tells the agent what to do in the cases you thought of. A
|
|
650
|
+
**mechanism** tells it why those steps work, which is the only thing that
|
|
651
|
+
transfers to the case you did not. Where a skill's subject has a mechanism worth
|
|
652
|
+
one screen — how the cascade resolves, why the queue drops the message, what the
|
|
653
|
+
scheduler actually orders — state it in a `## How it works` section, ahead of the
|
|
654
|
+
procedure that depends on it.
|
|
655
|
+
|
|
656
|
+
Keep it to one screen and to mechanisms only: no history, no alternatives-considered,
|
|
657
|
+
no restating the procedure in prose. If it takes more than a screen, the skill is
|
|
658
|
+
carrying a guideline's worth of material and should point at one instead.
|
|
659
|
+
|
|
660
|
+
The test for whether it earns its place: name a plausible situation the procedure
|
|
661
|
+
does not cover, and check whether this section is enough to answer it. If the
|
|
662
|
+
answer is still "read the source", the section is decoration.
|
|
663
|
+
|
|
664
|
+
Optional, and it gets no gate: "teaches a mechanism" is a prose judgement, and a
|
|
665
|
+
predicate over prose is the false-positive class this file's other patterns avoid.
|
|
666
|
+
|
|
667
|
+
## Illustrative-not-verbatim marker (optional pattern, reference code)
|
|
668
|
+
|
|
669
|
+
A code block in a skill is read as copy-me by default. When a block is teaching a
|
|
670
|
+
*shape* — a signature to mirror, a structure to follow, pseudocode standing in for
|
|
671
|
+
the real call — say so on the line above it:
|
|
672
|
+
|
|
673
|
+
```
|
|
674
|
+
<!-- illustrative: shape only, not a working snippet -->
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
One line, immediately above the fence, in the skill's own words if you prefer.
|
|
678
|
+
What matters is that the reader can tell shape-teaching code from code that runs,
|
|
679
|
+
because the failure mode is silent: an agent pastes the illustration, it almost
|
|
680
|
+
works, and the debugging starts from the wrong premise.
|
|
681
|
+
|
|
682
|
+
The inverse deserves the same care — a block that IS meant to be run verbatim,
|
|
683
|
+
where a reader might assume otherwise, says so too. See also `### 4. Add
|
|
684
|
+
safe/unsafe example`, which governs a different axis: safe-vs-unsafe, not
|
|
685
|
+
runnable-vs-illustrative.
|
|
686
|
+
|
|
687
|
+
## Headline metric + closing report (optional pattern, optimization skills)
|
|
688
|
+
|
|
689
|
+
A skill whose job is to make something better — smaller, faster, cheaper, quieter
|
|
690
|
+
— has to say **which single number it moves**. Without one, "optimized" is a
|
|
691
|
+
claim nobody can check and every run reports success.
|
|
692
|
+
|
|
693
|
+
So an optimization skill names, up front:
|
|
694
|
+
|
|
695
|
+
1. **The headline metric.** One number, with its unit and how it is measured.
|
|
696
|
+
"Initial-context tokens, measured by `audit-tokens`" — not "context cost".
|
|
697
|
+
2. **The closing report shape.** Before, after, delta, and the command that
|
|
698
|
+
produced both. The same command for both readings, or the delta is not a delta.
|
|
699
|
+
|
|
700
|
+
State what the metric does **not** capture, in one line. An optimization that
|
|
701
|
+
moves the headline number by degrading something it does not measure is the
|
|
702
|
+
failure this pattern exists to make visible, and only the author knows where that
|
|
703
|
+
edge is.
|
|
704
|
+
|
|
705
|
+
## Contrastive-example slot (optional pattern, authoring and behaviour skills)
|
|
706
|
+
|
|
707
|
+
Where a skill's guidance is easy to agree with and hard to apply — tone, phrasing,
|
|
708
|
+
question shape, what counts as evidence — a wrong/right pair does what prose
|
|
709
|
+
cannot: it shows the near-miss. Six live corpora already carry them:
|
|
710
|
+
[`direct-answers-demos`](../../../docs/guidelines/agent-infra/direct-answers-demos.md),
|
|
711
|
+
[`asking-and-brevity-examples`](../../../docs/guidelines/agent-infra/asking-and-brevity-examples.md),
|
|
712
|
+
[`language-and-tone-examples`](../../../docs/guidelines/agent-infra/language-and-tone-examples.md),
|
|
713
|
+
and `autonomy-examples` / `interrupt-examples` / `cheap-question-mechanics` under
|
|
714
|
+
`src/agent-src/contexts/execution/`.
|
|
715
|
+
|
|
716
|
+
Follow one of those rather than inventing a format. The shape they share: the
|
|
717
|
+
**wrong** version first, in the form it actually gets written; the **right**
|
|
718
|
+
version second; and one line of **why** — which is the load-bearing part, because
|
|
719
|
+
a pair without it teaches the specific case and not the rule.
|
|
720
|
+
|
|
721
|
+
Put the corpus in a guideline or context file and point at it from the skill when
|
|
722
|
+
it outgrows a section. A near-miss corpus is reference material read on demand,
|
|
723
|
+
not always-loaded prose.
|
|
724
|
+
|
|
647
725
|
## Do NOT
|
|
648
726
|
|
|
649
727
|
* Write documentation-style, pointer-only, or too-broad skills ("Laravel skill", "Django skill")
|
|
@@ -222,10 +222,12 @@ right line beats five minutes of IDE breakpoints.
|
|
|
222
222
|
|
|
223
223
|
**Known failure signature?** If the symptom has a recognisable shape — a
|
|
224
224
|
tool/agent loop, HTTP 429, `ECONNREFUSED`, `ENOENT`, timeout/hang, OOM, flaky
|
|
225
|
-
test,
|
|
225
|
+
test, works-locally-fails-in-CI, or repeated attempts at a tool that is not
|
|
226
|
+
available — consult the symptom → cause → first-check
|
|
226
227
|
lookup in [`failure-signatures`](../../../docs/guidelines/agent-infra/failure-signatures.md)
|
|
227
|
-
to shortcut Phase 2 (Isolate) with the highest-probability first check.
|
|
228
|
-
|
|
228
|
+
to shortcut Phase 2 (Isolate) with the highest-probability first check. Each row
|
|
229
|
+
carries a stable id you can cite, and a discrimination drill that produces its
|
|
230
|
+
documented symptom. It supplements the loop; it does not replace it.
|
|
229
231
|
|
|
230
232
|
## Condition-based waiting (intermittent bugs)
|
|
231
233
|
|
|
@@ -157,8 +157,32 @@ Risks: <arbitrary values, !important, dark-mode gaps>
|
|
|
157
157
|
|
|
158
158
|
When `DESIGN.md` declares `## Taste Dials`, honour them: Variance → layout-family spread + asymmetry tolerance; Motion → animation budget + reduced-motion posture; Density → spacing scale + information-per-viewport. Absent → follow the design brief's inferred dials.
|
|
159
159
|
|
|
160
|
+
## Security constraints
|
|
161
|
+
|
|
162
|
+
`scripts/tailwind_config_gen.ts` is the only shipped script.
|
|
163
|
+
|
|
164
|
+
- **What it may touch** — exactly one file: `--output PATH`, or
|
|
165
|
+
`tailwind.config.ts` / `.js` in the current working directory when no
|
|
166
|
+
`--output` is given. It reads nothing from the project.
|
|
167
|
+
- **What it must never do** — write anywhere other than that one path,
|
|
168
|
+
reach the network, or spawn a subprocess. It does none of these.
|
|
169
|
+
- **Default invocation** — **mutating**, and stated here because it is a
|
|
170
|
+
real exception rather than a comfortable one: a bare invocation writes
|
|
171
|
+
`tailwind.config.ts` into `cwd`, overwriting an existing config without
|
|
172
|
+
prompting. `--validate-only` is the read-only path — it prints the
|
|
173
|
+
generated config to stdout and writes nothing. Run `--validate-only`
|
|
174
|
+
first, and pass `--output` when the target is not the cwd default.
|
|
175
|
+
This default contradicts `skill-writing`'s "never mutate on a bare
|
|
176
|
+
invocation" line; it is recorded rather than silently tolerated, and
|
|
177
|
+
changing the script's default is a caller-visible behaviour change that
|
|
178
|
+
belongs in its own change, not here.
|
|
179
|
+
- **Outbound** — nothing. No network access.
|
|
180
|
+
|
|
160
181
|
## Do NOT
|
|
161
182
|
|
|
183
|
+
- Do NOT run `tailwind_config_gen` bare in a project that already has a
|
|
184
|
+
`tailwind.config.*` — it overwrites without asking. Use
|
|
185
|
+
`--validate-only` first, then `--output` at the intended path.
|
|
162
186
|
- Do NOT add `!important` to win a specificity fight; restructure
|
|
163
187
|
the cascade or extract the conflicting style.
|
|
164
188
|
- Do NOT introduce a new colour outside `tailwind.config` without
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "9.
|
|
42
|
+
agent_config_version: "9.34.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Copy this file to `.github/ownership-map.yml` (preferred) or
|
|
4
4
|
# `agents/ownership-map.yml` and adapt the entries to your stack.
|
|
5
5
|
# Omitting the file entirely is fine — routing falls back to the
|
|
6
|
-
#
|
|
6
|
+
# common role vocabulary in `skill:review-routing`.
|
|
7
7
|
#
|
|
8
8
|
# First match wins per file. List narrower globs before broader ones.
|
|
9
9
|
|
package/dist/cli/registry.js
CHANGED
|
@@ -28,10 +28,10 @@ export const REGISTRY = [
|
|
|
28
28
|
{ name: 'settings:set', disposition: 'delegate', synopsis: 'Set one A/B-class setting in the global file; C-class keys are refused.' },
|
|
29
29
|
{ name: 'uninstall', disposition: 'delegate', synopsis: 'Remove bridge markers (project) or lockfile entries (global).' },
|
|
30
30
|
{ name: 'prune', disposition: 'delegate', synopsis: 'Remove project bridge markers not declared in installed-tools.lock.' },
|
|
31
|
-
{ name: 'doctor', disposition: 'delegate', synopsis: 'Read-only drift report: manifest ↔ filesystem.' },
|
|
31
|
+
{ name: 'doctor', disposition: 'delegate', synopsis: 'Read-only drift report: manifest ↔ filesystem; --anatomy renders the injection anatomy.' },
|
|
32
32
|
{ name: 'converge', disposition: 'delegate', synopsis: 'Consented cleanup of duplicate install surfaces (surface-matrix driven).' },
|
|
33
33
|
{ name: 'conformance', disposition: 'delegate', synopsis: 'Consumer conformance contract: doctor --ci + installed-and-firing checks.' },
|
|
34
|
-
{ name: 'conformance:behavior', disposition: 'delegate', synopsis: 'Replay local transcripts through the mechanised conformance checks (report, not gate).' },
|
|
34
|
+
{ name: 'conformance:behavior', disposition: 'delegate', synopsis: 'Replay local transcripts through the mechanised conformance checks (report, not gate); --why <id> traces one check.' },
|
|
35
35
|
{ name: 'doctor-shell', disposition: 'native', synopsis: 'Native TS-shell environment probe.' },
|
|
36
36
|
{ name: 'rtk:detect', disposition: 'native', synopsis: 'rtk (Rust Token Killer) presence + identity readout — contract: docs/contracts/rtk-detection.md.' },
|
|
37
37
|
{ name: 'ui:serve', disposition: 'native', synopsis: 'Start the local UI server.' },
|
|
@@ -58,11 +58,11 @@ export const REGISTRY = [
|
|
|
58
58
|
{ name: 'use', disposition: 'delegate', synopsis: 'Switch the active experience/profile (writes profile.id).' },
|
|
59
59
|
{ name: 'sessions:list', disposition: 'delegate', synopsis: 'List live agent sessions on this repository (shared session register).' },
|
|
60
60
|
{ name: 'sessions:claim', disposition: 'delegate', synopsis: 'Claim a roadmap for this session so other sessions skip it; --release clears it.' },
|
|
61
|
-
{ name: 'session:recycle', disposition: 'delegate', synopsis: 'Validate + write the main-session recycle envelope; the successor
|
|
61
|
+
{ name: 'session:recycle', disposition: 'delegate', synopsis: 'Validate + write the main-session recycle envelope (--verify validates only); the successor resumes from it after /clear.' },
|
|
62
62
|
{ name: 'roadmap:progress', disposition: 'delegate', synopsis: 'Regenerate agents/roadmaps-progress.md from open roadmaps.' },
|
|
63
63
|
{ name: 'roadmap:progress-check', disposition: 'delegate', synopsis: 'Fail if agents/roadmaps-progress.md is stale (for CI).' },
|
|
64
64
|
{ name: 'roadmap:archive', disposition: 'delegate', synopsis: 'Archive completed roadmaps (PR-gate sweep).' },
|
|
65
|
-
{ name: 'gates', disposition: 'delegate', synopsis: 'Open decisions that need you, as actions — owner-filtered roadmap blockers; --all, --json.' },
|
|
65
|
+
{ name: 'gates', disposition: 'delegate', synopsis: 'Open decisions that need you, as actions — owner-filtered roadmap blockers; --all, --json, --reply.' },
|
|
66
66
|
{ name: 'capabilities:index', disposition: 'delegate', synopsis: 'Regenerate CAPABILITIES.yaml (the package coverage index); --check for CI.' },
|
|
67
67
|
{ name: 'affected', disposition: 'delegate', synopsis: 'Artefacts related to <artefact> via the discovery relation-graph (BFS).' },
|
|
68
68
|
{ name: 'graph-explain', disposition: 'delegate', synopsis: 'Seed on a <concept>, expand 2 hops over the discovery relation-graph with a node budget.' },
|
package/dist/cli/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,iFAAiF,EAAE;IACtI,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,QAAQ,EAAE,6DAA6D,EAAE;IACpH,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,QAAQ,EAAE,0DAA0D,EAAE;IACjH,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,8EAA8E,EAAE;IACrI,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,4EAA4E,EAAE;IAC3I,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,0EAA0E,EAAE;IACxI,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,mEAAmE,EAAE;IACpI,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,yFAAyF,EAAE;IACtJ,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,yEAAyE,EAAE;IACtI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,+DAA+D,EAAE;IACzH,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,qEAAqE,EAAE;IAC3H,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/shared/settingsClasses.ts
|
|
4
|
+
var SETTINGS_CLASSES = ["A", "B", "C"];
|
|
5
|
+
function isSettingsClass(value) {
|
|
6
|
+
return SETTINGS_CLASSES.includes(value);
|
|
7
|
+
}
|
|
8
|
+
var ROW_RE = /^\|\s*`([^`]+)`\s*\|\s*([^|]*?)\s*\|/;
|
|
9
|
+
function parseSettingsClassRows(markdown) {
|
|
10
|
+
const rows = [];
|
|
11
|
+
const lines = markdown.split("\n");
|
|
12
|
+
for (let i = 0; i < lines.length; i++) {
|
|
13
|
+
const m = ROW_RE.exec(lines[i] ?? "");
|
|
14
|
+
if (m === null) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const key = m[1] ?? "";
|
|
18
|
+
const cls = m[2] ?? "";
|
|
19
|
+
if (!/^[A-Za-z]$/.test(cls)) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
rows.push({ key, cls, line: i + 1 });
|
|
23
|
+
}
|
|
24
|
+
return rows;
|
|
25
|
+
}
|
|
26
|
+
function buildSettingsClassIndex(rows) {
|
|
27
|
+
const index = /* @__PURE__ */ new Map();
|
|
28
|
+
for (const row of rows) {
|
|
29
|
+
if (!isSettingsClass(row.cls) || index.has(row.key)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
index.set(row.key, row.cls);
|
|
33
|
+
}
|
|
34
|
+
return index;
|
|
35
|
+
}
|
|
36
|
+
function getSettingsLeaf(root, dotted) {
|
|
37
|
+
let node = root;
|
|
38
|
+
for (const part of dotted.split(".")) {
|
|
39
|
+
if (typeof node !== "object" || node === null || Array.isArray(node)) {
|
|
40
|
+
return void 0;
|
|
41
|
+
}
|
|
42
|
+
node = node[part];
|
|
43
|
+
}
|
|
44
|
+
return node;
|
|
45
|
+
}
|
|
46
|
+
function classOfPath(index, dotted) {
|
|
47
|
+
const exact = index.get(dotted);
|
|
48
|
+
if (exact !== void 0) {
|
|
49
|
+
return exact;
|
|
50
|
+
}
|
|
51
|
+
const parts = dotted.split(".");
|
|
52
|
+
for (let end = parts.length - 1; end > 0; end--) {
|
|
53
|
+
const ancestor = index.get(parts.slice(0, end).join("."));
|
|
54
|
+
if (ancestor !== void 0) {
|
|
55
|
+
return ancestor;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return void 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
parseSettingsClassRows,
|
|
63
|
+
buildSettingsClassIndex,
|
|
64
|
+
getSettingsLeaf,
|
|
65
|
+
classOfPath
|
|
66
|
+
};
|
|
@@ -449,6 +449,38 @@ function hasBoundaryMarker(block) {
|
|
|
449
449
|
// outside the datamarking while still riding in the same block.
|
|
450
450
|
block.trimEnd().endsWith(ENVELOPE_BOUNDARY_CLOSE);
|
|
451
451
|
}
|
|
452
|
+
var DECISION_REVERSIBILITY_TAGS = ["reversible", "irreversible"];
|
|
453
|
+
function decisionTagErrors(decisions) {
|
|
454
|
+
if (!Array.isArray(decisions)) {
|
|
455
|
+
return [];
|
|
456
|
+
}
|
|
457
|
+
const errors = [];
|
|
458
|
+
for (const line of decisions) {
|
|
459
|
+
if (typeof line !== "string") {
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
const m = /\[([^\]]*)\]\s*$/.exec(line.trimEnd());
|
|
463
|
+
if (m === null) {
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
const inner = (m[1] ?? "").trim();
|
|
467
|
+
const lowered = inner.toLowerCase();
|
|
468
|
+
if (DECISION_REVERSIBILITY_TAGS.includes(lowered)) {
|
|
469
|
+
if (inner !== lowered) {
|
|
470
|
+
errors.push(
|
|
471
|
+
`decisions: reversibility tag must be lower-case \u2014 got \`[${inner}]\`, expected \`[${lowered}]\``
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
if (/^i?rr?ever[a-z]*[^a-z]*$/i.test(lowered)) {
|
|
477
|
+
errors.push(
|
|
478
|
+
`decisions: \`[${inner}]\` is not a reversibility tag \u2014 use exactly ` + DECISION_REVERSIBILITY_TAGS.map((t) => `\`[${t}]\``).join(" or ") + ", or drop the bracket"
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
return errors;
|
|
483
|
+
}
|
|
452
484
|
var RECYCLE_ENVELOPE_KEYS = /* @__PURE__ */ new Set([
|
|
453
485
|
"capsule_version",
|
|
454
486
|
"variant",
|
|
@@ -461,6 +493,7 @@ var RECYCLE_ENVELOPE_KEYS = /* @__PURE__ */ new Set([
|
|
|
461
493
|
"not_carried_forward",
|
|
462
494
|
"decisions",
|
|
463
495
|
"constraints",
|
|
496
|
+
"do_not_touch",
|
|
464
497
|
"open_worker_envelopes",
|
|
465
498
|
"artifact_paths",
|
|
466
499
|
"assumptions",
|
|
@@ -513,7 +546,9 @@ function validateRecycleEnvelope(input) {
|
|
|
513
546
|
checkList(errors, "remaining", e["remaining"], MAX_LINE_CHARS, true);
|
|
514
547
|
checkList(errors, "not_carried_forward", e["not_carried_forward"], MAX_LINE_CHARS, true);
|
|
515
548
|
checkList(errors, "decisions", e["decisions"], MAX_LINE_CHARS, false);
|
|
549
|
+
errors.push(...decisionTagErrors(e["decisions"]));
|
|
516
550
|
checkList(errors, "constraints", e["constraints"], MAX_LINE_CHARS, false);
|
|
551
|
+
checkList(errors, "do_not_touch", e["do_not_touch"], MAX_REF_CHARS, false);
|
|
517
552
|
checkList(errors, "open_worker_envelopes", e["open_worker_envelopes"], MAX_REF_CHARS, false);
|
|
518
553
|
checkList(errors, "artifact_paths", e["artifact_paths"], MAX_REF_CHARS, false);
|
|
519
554
|
checkList(errors, "suggested_skills", e["suggested_skills"], MAX_REF_CHARS, false);
|
|
@@ -3062,7 +3062,7 @@ function ensure_vscode_bridge(project_root, package_type, force) {
|
|
|
3062
3062
|
};
|
|
3063
3063
|
const plugin_path = plugin_paths[package_type] ?? "./plugin/agent-config";
|
|
3064
3064
|
const bridge = { "chat.pluginLocations": { [plugin_path]: true } };
|
|
3065
|
-
merge_json_file(
|
|
3065
|
+
return merge_json_file(
|
|
3066
3066
|
path5.join(project_root, ".vscode", "settings.json"),
|
|
3067
3067
|
bridge,
|
|
3068
3068
|
force,
|
|
@@ -3120,7 +3120,8 @@ function _remove_legacy_augment_trampolines() {
|
|
|
3120
3120
|
fs6.unlinkSync(legacy);
|
|
3121
3121
|
skip(`removed legacy ~/.augment/hooks/${name}`);
|
|
3122
3122
|
}
|
|
3123
|
-
} catch {
|
|
3123
|
+
} catch (err) {
|
|
3124
|
+
warn(`could not remove legacy ${legacy}: ${err instanceof Error ? err.message : String(err)}`);
|
|
3124
3125
|
}
|
|
3125
3126
|
}
|
|
3126
3127
|
}
|
|
@@ -6169,8 +6170,10 @@ function _main_project_install(opts, project_root, parsed_tools, is_first_run) {
|
|
|
6169
6170
|
const tools = parsed_tools;
|
|
6170
6171
|
const merged_keys_by_tool = {};
|
|
6171
6172
|
if (!opts.skip_bridges) {
|
|
6172
|
-
|
|
6173
|
-
|
|
6173
|
+
merged_keys_by_tool["augment"] = [
|
|
6174
|
+
...ensure_vscode_bridge(project_root, package_type, opts.force),
|
|
6175
|
+
...ensure_augment_bridge(project_root, opts.force)
|
|
6176
|
+
];
|
|
6174
6177
|
if (_is_tool_enabled(tools, "claude-code")) {
|
|
6175
6178
|
merged_keys_by_tool["claude-code"] = ensure_claude_bridge(project_root, opts.force);
|
|
6176
6179
|
}
|