craftar 0.8.3 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -3
- package/dist/cli.js +1 -1
- package/dist/emitters/agents-md.js +63 -5
- package/dist/emitters/agents-md.js.map +1 -1
- package/dist/emitters/kiro.js +80 -13
- package/dist/emitters/kiro.js.map +1 -1
- package/dist/emitters/shared.js +280 -0
- package/dist/emitters/shared.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -187,9 +187,9 @@ Sections layer the same way, weakest → strongest: the body's default → the p
|
|
|
187
187
|
**claude-code** — emits `.claude/rules|agents|commands|skills|scripts|hooks` and `.mcp.json` verbatim from the Forge (frontmatter kept byte-for-byte). Each MCP server is written exactly as the Forge holds it, undeclared keys included, in its own key order. Existing files keep their line endings and BOM; new files are LF without a BOM. Steering is Kiro-only (its `targets` default to `[kiro]`); one aimed at `claude-code` explicitly (`targets: "*"` or a list naming it) is skipped with a warning.
|
|
188
188
|
|
|
189
189
|
**kiro** — reproduces, then extends, the hand-written `sync-steering.ps1` script it replaces:
|
|
190
|
-
steering = `inclusion` frontmatter + `GENERATED` banner + rule body, with `.claude/rules/` rewritten to `.kiro/steering
|
|
190
|
+
steering = `inclusion` frontmatter + `GENERATED` banner + rule body, with `.claude/rules/` rewritten to `.kiro/steering/` — except a reference to a rule kiro does not write, which follows that rule: kept as `.claude/rules/<x>.md` when `claude-code` writes it, `AGENTS.md (rule: <x>)` when only `AGENTS.md` holds it, otherwise `<x> (rule not in this workspace)` with a warning; an unknown name is still rewritten and is reported. Files are UTF-8 without BOM, CRLF. The same applies to agent prompts and descriptions, command bodies and descriptions, and skill text files; a `steering` ingredient is emitted as written. On top of what the script did, it also generates `.kiro/agents/*.json` (tools mapped to Kiro names, `resources` bound to the agent's stack rule + `repo-discovery`, or `**/*.md` for generic agents), `.kiro/steering/commands/*.md`, `.kiro/skills/*/SKILL.md` and `.kiro/settings/mcp.json`. `.kiro/settings/mcp.json` receives each MCP server exactly as the Forge holds it, in its own key order — including keys Kiro may not use (`type` always went through). The banner text is a parameter (`kiro.banner`) so existing workspaces can adopt without a rewrite. Scripts and hooks have no Kiro equivalent: they are skipped with a warning.
|
|
191
191
|
|
|
192
|
-
**agents-md** — one `AGENTS.md` with the always-on rules concatenated and the scoped rules after them — each listed at the file a target of the workspace writes for it (`.claude/rules/<name>.md` when `claude-code` writes it, else `.kiro/steering/<name>.md` when `kiro` does), or, when no target writes it, embedded in full under a `> Scoped rule — <scope>` line, for tools that read the open standard (Codex, Cursor, Warp, Copilot, Kimi…). Every other ingredient type aimed at `agents-md` — including through the default `targets: "*"` — has no `AGENTS.md` equivalent: it is skipped with a warning — one line per type, naming every skipped ingredient. The file keeps the line endings and BOM of the one it replaces; a new one is LF without a BOM.
|
|
192
|
+
**agents-md** — one `AGENTS.md` with the always-on rules concatenated and the scoped rules after them — each listed at the file a target of the workspace writes for it (`.claude/rules/<name>.md` when `claude-code` writes it, else `.kiro/steering/<name>.md` when `kiro` does), or, when no target writes it, embedded in full under a `> Scoped rule — <scope>` line, for tools that read the open standard (Codex, Cursor, Warp, Copilot, Kimi…). A `.claude/rules/<x>.md` reference inside a body follows the rule it names: it is kept when `claude-code` writes that rule, becomes `.kiro/steering/<x>.md` when only `kiro` writes that file (from the rule or from a `steering` ingredient of that name), becomes `AGENTS.md (rule: <x>)` when the rule's text is in this file, and otherwise becomes `<x> (rule not in this workspace)` with a warning (an unknown name is left as written when `claude-code` is a target); without `claude-code`, the warning also names references to other `.claude/` files, which are left as written. Every other ingredient type aimed at `agents-md` — including through the default `targets: "*"` — has no `AGENTS.md` equivalent: it is skipped with a warning — one line per type, naming every skipped ingredient. The file keeps the line endings and BOM of the one it replaces; a new one is LF without a BOM.
|
|
193
193
|
|
|
194
194
|
Conversion of hooks/subagents to other tools is out of scope here: the plan is to delegate that to [rulesync](https://github.com/dyoshikawa/rulesync) rather than reimplement it.
|
|
195
195
|
|
|
@@ -241,6 +241,26 @@ Next: `craftar init` from a profile; profile-driven integrations (PM tool → MC
|
|
|
241
241
|
|
|
242
242
|
## Upgrading
|
|
243
243
|
|
|
244
|
+
### to 0.8.5
|
|
245
|
+
|
|
246
|
+
- **The kiro target stops turning a reference to a rule it does not write into a `.kiro/steering/` path that does not exist.** Only files under `.kiro/` change; no other generated file and no lock field.
|
|
247
|
+
- **No byte change:** a workspace in which every rule a kiro text cites is one kiro writes, and whose hand-written commands cite no `.claude/rules/` path in their `description`. Every workspace `craftar import` produced is in this case. A cited unknown name now adds a warning.
|
|
248
|
+
- **A cited rule kiro does not write:** the reference goes back to `.claude/rules/<x>.md` when `claude-code` writes the rule, becomes `AGENTS.md (rule: <x>)` when only `AGENTS.md` holds it, or else `<x> (rule not in this workspace)`.
|
|
249
|
+
- **A command written by hand in the Forge (no raw frontmatter):** its `description` is now resolved like its body, and that includes the directory rewrite.
|
|
250
|
+
- **At most one `kiro:` warning about rule references per plan.** It names every reference reworded to "rule not in this workspace", and every unknown name, which is still rewritten to `.kiro/steering/`. It never changes an exit code.
|
|
251
|
+
- An affected workspace shows those `.kiro/` files as `update`, and `craftar sync --check` exits 1 until it syncs.
|
|
252
|
+
- An agent's `resources` do not change.
|
|
253
|
+
|
|
254
|
+
### to 0.8.4
|
|
255
|
+
|
|
256
|
+
- **A `.claude/rules/<x>.md` reference inside a rule body that goes into `AGENTS.md` is resolved by the rule it names.** Only `AGENTS.md` changes; no other generated file and no lock field.
|
|
257
|
+
- **No change, no warning:** a workspace whose cited rules are all written by `claude-code` — every workspace `craftar import` produced — and one whose bodies cite no `.claude/rules/` path and, without `claude-code`, no other `.claude/` path either. Without `claude-code`, a body citing other `.claude/` files keeps its bytes but gets the warning.
|
|
258
|
+
- **No `claude-code`:** each reference moves. It becomes `.kiro/steering/<x>.md` (kiro writes it), `AGENTS.md (rule: <x>)` (its text is in the file) or `<x> (rule not in this workspace)`.
|
|
259
|
+
- **With `claude-code`:** only a reference to a rule `claude-code` does not write, or to a `steering` ingredient `kiro` writes, moves. An unknown name is left as written.
|
|
260
|
+
- **At most one warning per `AGENTS.md`** names every reference turned into `<x> (rule not in this workspace)` (a reference made to point at `.kiro/steering/` or into `AGENTS.md` is not reported). Without `claude-code`, it also names references to other `.claude/` files (agents, commands, skills, scripts, hooks), which are left as written. It repeats on every run until the body, the cited rule's `targets` or the workspace's targets change, and it never changes an exit code.
|
|
261
|
+
- An affected workspace shows `AGENTS.md` as `update`, and `craftar sync --check` exits 1 until it syncs.
|
|
262
|
+
- The kiro emitter still rewrites every `.claude/rules/` to `.kiro/steering/`; 0.8.5 addresses it in part — see *to 0.8.5*.
|
|
263
|
+
|
|
244
264
|
### to 0.8.3
|
|
245
265
|
|
|
246
266
|
- **`AGENTS.md` lists a scoped rule (`fileMatch`, `manual`, `auto`) only at a file a target of the workspace really writes, and embeds it when none does.** Only `AGENTS.md` changes; no other generated file and no lock field.
|
|
@@ -249,7 +269,7 @@ Next: `craftar init` from a profile; profile-driven integrations (PM tool → MC
|
|
|
249
269
|
- With `agents-md` alone, each scoped line becomes the embedded rule, and the file grows.
|
|
250
270
|
- A scoped rule whose own `targets` exclude `claude-code` moves to `.kiro/steering/`, or is embedded when no file-writing target of the workspace admits it.
|
|
251
271
|
- An affected workspace shows `AGENTS.md` as `update`, and `craftar sync --check` exits 1 until it syncs. To keep a scoped rule's text out of `AGENTS.md`, take `agents-md` out of that rule's `targets`.
|
|
252
|
-
- References to `.claude/rules/…` inside a rule body are emitted as the Forge holds them. In a workspace without `claude-code` such a reference points at no file; a later release addresses it.
|
|
272
|
+
- References to `.claude/rules/…` inside a rule body are emitted as the Forge holds them. In a workspace without `claude-code` such a reference points at no file; a later release (0.8.4) addresses it.
|
|
253
273
|
|
|
254
274
|
### to 0.8.2
|
|
255
275
|
|
package/dist/cli.js
CHANGED
|
@@ -18,7 +18,7 @@ import { HUNK_CLASSES, UnifyPlanSchema } from "./schema/index.js";
|
|
|
18
18
|
process.stdout.on("error", (e) => { if (e.code === "EPIPE")
|
|
19
19
|
process.exit(0); });
|
|
20
20
|
const program = new Command();
|
|
21
|
-
program.name("craftar").description("Craft, sync and convert AI-coding workspace harnesses.").version("0.8.
|
|
21
|
+
program.name("craftar").description("Craft, sync and convert AI-coding workspace harnesses.").version("0.8.5");
|
|
22
22
|
/* ---------------------------------------------------------------- import */
|
|
23
23
|
program
|
|
24
24
|
.command("import")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { appliesTo, outName, ruleFile, textFile } from "./shared.js";
|
|
1
|
+
import { appliesTo, buildRuleLookup, outName, resolveRuleRefs, ruleFile, ruleWriter, textFile } from "./shared.js";
|
|
2
2
|
/**
|
|
3
3
|
* AGENTS.md target (open standard read by Codex, Cursor, Warp, Copilot, Kiro, Kimi…).
|
|
4
4
|
* Concatenates the `always` rules into one file. Scoped rules (`fileMatch`, `manual`, `auto`)
|
|
@@ -23,6 +23,8 @@ export const agentsMd = {
|
|
|
23
23
|
const rules = aimed.filter((i) => i.meta.type === "rule");
|
|
24
24
|
if (!rules.length)
|
|
25
25
|
return [];
|
|
26
|
+
// Build the lookup once per AGENTS.md, not once per body (spec 15 §4.2)
|
|
27
|
+
const lookup = buildRuleLookup(ctx.resolution.ingredients);
|
|
26
28
|
const parts = [
|
|
27
29
|
"<!-- GENERATED by craftar from the Forge. Edit the rule ingredients, not this file. -->",
|
|
28
30
|
"",
|
|
@@ -34,27 +36,38 @@ export const agentsMd = {
|
|
|
34
36
|
];
|
|
35
37
|
const pathLines = [];
|
|
36
38
|
const embedded = [];
|
|
39
|
+
// Collect reports in AGENTS.md order: always-on first, then embedded (spec 15 §4.5)
|
|
40
|
+
const alwaysReports = [];
|
|
41
|
+
const embeddedReports = [];
|
|
37
42
|
for (const ing of rules) {
|
|
38
43
|
if (ing.meta.type !== "rule")
|
|
39
44
|
continue;
|
|
40
|
-
const
|
|
45
|
+
const rawBody = await ctx.text(ing, ing.meta.file);
|
|
41
46
|
if (ing.meta.inclusion === "always") {
|
|
47
|
+
// Resolve references, then trim trailing newlines (spec 15: after ctx.text, before the trim)
|
|
48
|
+
const { text: resolved, report } = resolveRuleRefs(rawBody, ing.ref, lookup, ctx.resolution.targets);
|
|
49
|
+
alwaysReports.push(report);
|
|
50
|
+
const body = resolved.replace(/\n+$/, "");
|
|
42
51
|
parts.push(`<!-- rule: ${outName(ing.meta)} -->`, body, "");
|
|
43
52
|
}
|
|
44
53
|
else {
|
|
45
54
|
// Spec 14 §4.1: decide which target writes this rule file
|
|
46
|
-
const
|
|
55
|
+
const writer = ruleWriter(ctx.resolution.targets, ing.meta.targets);
|
|
47
56
|
const scopeText = ing.meta.inclusion === "fileMatch"
|
|
48
57
|
? `applies to \`${[ing.meta.fileMatchPattern].flat().join("`, `")}\``
|
|
49
58
|
: ing.meta.inclusion;
|
|
50
|
-
if (
|
|
59
|
+
if (writer === "claude-code") {
|
|
51
60
|
pathLines.push(`- \`${ruleFile("claude-code", ing.meta)}\` — ${scopeText}`);
|
|
52
61
|
}
|
|
53
|
-
else if (
|
|
62
|
+
else if (writer === "kiro") {
|
|
54
63
|
pathLines.push(`- \`${ruleFile("kiro", ing.meta)}\` — ${scopeText}`);
|
|
55
64
|
}
|
|
56
65
|
else {
|
|
57
66
|
// State C: no target writes the rule file; embed it
|
|
67
|
+
// Resolve references in embedded bodies too (spec 15 §4, after ctx.text, before trim)
|
|
68
|
+
const { text: resolved, report } = resolveRuleRefs(rawBody, ing.ref, lookup, ctx.resolution.targets);
|
|
69
|
+
embeddedReports.push(report);
|
|
70
|
+
const body = resolved.replace(/\n+$/, "");
|
|
58
71
|
embedded.push(`<!-- rule: ${outName(ing.meta)} -->`, `> Scoped rule — ${scopeText}`, "", body, "");
|
|
59
72
|
}
|
|
60
73
|
}
|
|
@@ -65,7 +78,52 @@ export const agentsMd = {
|
|
|
65
78
|
parts.push("");
|
|
66
79
|
parts.push(...embedded);
|
|
67
80
|
}
|
|
81
|
+
// Emit the warning per spec 15 §4.5: at most one ctx.warn for AGENTS.md
|
|
82
|
+
// Reports in AGENTS.md order: always-on first, then embedded
|
|
83
|
+
emitRefWarning(ctx.warn, [...alwaysReports, ...embeddedReports]);
|
|
68
84
|
return [await textFile(ctx, "AGENTS.md", parts.join("\n"), "agents-md", "rule/*")];
|
|
69
85
|
},
|
|
70
86
|
};
|
|
87
|
+
/**
|
|
88
|
+
* Emit the spec 15 §4.5 warning: one line with reworded rule references and/or dead .claude/ paths.
|
|
89
|
+
* Deduplicates entries by (reference, citing) and (path, citing).
|
|
90
|
+
*/
|
|
91
|
+
function emitRefWarning(warn, reports) {
|
|
92
|
+
// Backstop only: each report covers one body, and resolveRuleRefs already dedups by (reference, citing ingredient).
|
|
93
|
+
const rewordedSet = new Map();
|
|
94
|
+
for (const r of reports) {
|
|
95
|
+
for (const e of r.reworded) {
|
|
96
|
+
const key = `${e.ref}|${e.citing}`;
|
|
97
|
+
if (!rewordedSet.has(key))
|
|
98
|
+
rewordedSet.set(key, e);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Collect and deduplicate other paths by (path, citing)
|
|
102
|
+
const othersSet = new Map();
|
|
103
|
+
for (const r of reports) {
|
|
104
|
+
for (const e of r.others) {
|
|
105
|
+
const key = `${e.path}|${e.citing}`;
|
|
106
|
+
if (!othersSet.has(key))
|
|
107
|
+
othersSet.set(key, e);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const reworded = [...rewordedSet.values()];
|
|
111
|
+
const others = [...othersSet.values()];
|
|
112
|
+
if (!reworded.length && !others.length)
|
|
113
|
+
return;
|
|
114
|
+
const formatReworded = (entries) => entries.map((e) => `${e.ref} (in ${e.citing}; ${e.kind})`).join(", ");
|
|
115
|
+
const formatOthers = (entries) => entries.map((e) => `${e.path} (in ${e.citing})`).join(", ");
|
|
116
|
+
let msg = "";
|
|
117
|
+
if (reworded.length) {
|
|
118
|
+
msg = `agents-md: ${reworded.length} reference(s) to rule files this workspace does not have — reworded in AGENTS.md: ${formatReworded(reworded)}`;
|
|
119
|
+
if (others.length) {
|
|
120
|
+
msg += `; ${others.length} reference(s) to other .claude/ files it does not have — left as written: ${formatOthers(others)}`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (others.length) {
|
|
124
|
+
msg = `agents-md: ${others.length} reference(s) to .claude/ files this workspace does not have — left as written: ${formatOthers(others)}`;
|
|
125
|
+
}
|
|
126
|
+
if (msg)
|
|
127
|
+
warn(msg);
|
|
128
|
+
}
|
|
71
129
|
//# sourceMappingURL=agents-md.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/emitters/agents-md.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/emitters/agents-md.ts"],"names":[],"mappings":"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"}
|
package/dist/emitters/kiro.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { toCrlf } from "../core/text.js";
|
|
2
2
|
import { serializeFrontmatter } from "../core/frontmatter.js";
|
|
3
3
|
import { listFiles } from "../core/forge.js";
|
|
4
|
-
import { appliesTo, mcpServers, outName, ruleFile } from "./shared.js";
|
|
4
|
+
import { appliesTo, buildRuleLookup, mcpServers, outName, resolveRuleRefs, ruleFile, RULE_NAME_CHARS, UNKNOWN_NAME_KIND } from "./shared.js";
|
|
5
5
|
/** Files kiro copies as text, through `ctx.text` (substituted); anything else is copied as raw bytes. */
|
|
6
6
|
export const KIRO_TEXT_EXT = /\.(md|txt|json|ya?ml)$/i;
|
|
7
7
|
/**
|
|
8
8
|
* Kiro target. Reproduces, then extends, the behaviour of the hand-written
|
|
9
9
|
* `.claude/scripts/sync-steering.ps1` this target was extracted from:
|
|
10
10
|
* - steering = frontmatter(inclusion) + GENERATED banner + rule body
|
|
11
|
-
* - `.claude/rules/` references are
|
|
11
|
+
* - `.claude/rules/` references are resolved: kiro-written rules → `.kiro/steering/`,
|
|
12
|
+
* claude-code-written rules → unchanged, agents-md-only rules → `AGENTS.md`,
|
|
13
|
+
* dead rules → `<x> (rule not in this workspace)`, unknown → `.kiro/steering/` with a warning (spec 17)
|
|
12
14
|
* - UTF-8 without BOM, CRLF (the exact shape Kiro already consumes)
|
|
13
15
|
* and additionally generates what the script never did: agents JSON, commands and skills.
|
|
14
16
|
*/
|
|
@@ -20,13 +22,22 @@ export const kiro = {
|
|
|
20
22
|
const banner = String(ctx.resolution.params["kiro.banner"] ?? "<!-- GENERATED from {{source}} by craftar -- do not edit. -->");
|
|
21
23
|
const ruleNames = new Set(ctx.resolution.ingredients.filter((i) => i.meta.type === "rule").map((i) => outName(i.meta)));
|
|
22
24
|
const scopedRules = ctx.resolution.ingredients.filter((i) => i.meta.type === "rule" && i.meta.inclusion === "fileMatch").map((i) => outName(i.meta));
|
|
25
|
+
const targets = ctx.resolution.targets;
|
|
26
|
+
const lookup = buildRuleLookup(ctx.resolution.ingredients);
|
|
27
|
+
// Collect reports for the warning (spec 17 §4.5)
|
|
28
|
+
const reports = [];
|
|
29
|
+
const resolve = (text, citing) => {
|
|
30
|
+
const { text: resolved, report } = resolveRuleRefs(text, citing, lookup, targets, "kiro");
|
|
31
|
+
reports.push(report);
|
|
32
|
+
return resolved;
|
|
33
|
+
};
|
|
23
34
|
for (const ing of ctx.resolution.ingredients) {
|
|
24
35
|
if (!appliesTo(ing.meta.targets, t))
|
|
25
36
|
continue;
|
|
26
37
|
const m = ing.meta;
|
|
27
38
|
switch (m.type) {
|
|
28
39
|
case "rule": {
|
|
29
|
-
const body =
|
|
40
|
+
const body = resolve(await ctx.text(ing, m.file), ing.ref);
|
|
30
41
|
const fm = m.inclusion === "fileMatch"
|
|
31
42
|
? `---\ninclusion: fileMatch\nfileMatchPattern: ${JSON.stringify(Array.isArray(m.fileMatchPattern) ? m.fileMatchPattern.join(",") : m.fileMatchPattern ?? "**")}\n---\n\n`
|
|
32
43
|
: `---\ninclusion: ${m.inclusion}\n---\n\n`;
|
|
@@ -35,32 +46,42 @@ export const kiro = {
|
|
|
35
46
|
break;
|
|
36
47
|
}
|
|
37
48
|
case "steering":
|
|
49
|
+
// Steering bodies are emitted as written (spec 17 §2)
|
|
38
50
|
out.push(crlf(`.kiro/steering/${outName(m)}.md`, await ctx.text(ing, m.file), ing.ref));
|
|
39
51
|
break;
|
|
40
52
|
case "agent": {
|
|
41
|
-
|
|
42
|
-
const description =
|
|
53
|
+
// Resolve description first, then body (spec 17 §4.5 order: description before prompt)
|
|
54
|
+
const description = resolve(m.description ?? "", ing.ref);
|
|
55
|
+
// Read the body once and derive both versions from it
|
|
56
|
+
const rawBody = await ctx.text(ing, m.file);
|
|
57
|
+
const body = resolve(rawBody, ing.ref);
|
|
43
58
|
const tools = mapTools(m.tools, ctx);
|
|
44
|
-
|
|
59
|
+
// agentResources reads the blanket-rewritten text, not the resolved text (spec 17 §4.6)
|
|
60
|
+
const resources = m.resources ?? agentResources(outName(m), rewrite(m.description ?? "") + "\n" + rewrite(rawBody), ruleNames, scopedRules);
|
|
45
61
|
const json = JSON.stringify({ name: outName(m), description, prompt: body.replace(/^\n+/, "").replace(/\n+$/, ""), tools, allowedTools: tools, resources }, null, 2) + "\n";
|
|
46
62
|
out.push(crlf(`.kiro/agents/${outName(m)}.json`, json, ing.ref));
|
|
47
63
|
break;
|
|
48
64
|
}
|
|
49
65
|
case "command": {
|
|
50
|
-
|
|
51
|
-
|
|
66
|
+
// Resolve description and raw frontmatter first, then body (spec 17 §4.5 order: frontmatter before body)
|
|
67
|
+
// When frontmatterRaw is set, the description field is unused (serializeFrontmatter ignores it),
|
|
68
|
+
// so we skip resolving it to avoid spurious reports.
|
|
69
|
+
const resolvedDescription = !m.frontmatterRaw && m.description !== undefined ? resolve(m.description, ing.ref) : undefined;
|
|
70
|
+
const resolvedFm = m.frontmatterRaw ? resolve(m.frontmatterRaw, ing.ref) : null;
|
|
71
|
+
const body = resolve(await ctx.text(ing, m.file), ing.ref);
|
|
72
|
+
const doc = serializeFrontmatter({ description: resolvedDescription, "argument-hint": m.argumentHint, "allowed-tools": m.allowedTools }, body, { raw: resolvedFm });
|
|
52
73
|
out.push(crlf(`.kiro/steering/commands/${outName(m)}.md`, `---\ninclusion: manual\n---\n\n` + doc, ing.ref));
|
|
53
74
|
break;
|
|
54
75
|
}
|
|
55
76
|
case "skill": {
|
|
56
77
|
if (m.layout === "file") {
|
|
57
|
-
out.push(crlf(`.kiro/skills/${outName(m)}/SKILL.md`,
|
|
78
|
+
out.push(crlf(`.kiro/skills/${outName(m)}/SKILL.md`, resolve(await ctx.text(ing, "SKILL.md"), ing.ref), ing.ref));
|
|
58
79
|
}
|
|
59
80
|
else {
|
|
60
81
|
for (const f of await listFiles(ing.dir)) {
|
|
61
82
|
if (f === "ingredient.yaml")
|
|
62
83
|
continue;
|
|
63
|
-
out.push(await copy(ctx, ing, f, `.kiro/skills/${outName(m)}/${f}
|
|
84
|
+
out.push(await copy(ctx, ing, f, `.kiro/skills/${outName(m)}/${f}`, resolve));
|
|
64
85
|
}
|
|
65
86
|
}
|
|
66
87
|
break;
|
|
@@ -74,6 +95,8 @@ export const kiro = {
|
|
|
74
95
|
break;
|
|
75
96
|
}
|
|
76
97
|
}
|
|
98
|
+
// Emit one warning for all dead and unknown references (spec 17 §4.5)
|
|
99
|
+
emitKiroWarning(ctx, reports);
|
|
77
100
|
const servers = mcpServers(ctx, t, ".kiro/settings/mcp.json");
|
|
78
101
|
if (Object.keys(servers).length) {
|
|
79
102
|
out.push(crlf(".kiro/settings/mcp.json", JSON.stringify({ mcpServers: servers }, null, 2) + "\n", "mcp/*"));
|
|
@@ -81,15 +104,59 @@ export const kiro = {
|
|
|
81
104
|
return out;
|
|
82
105
|
},
|
|
83
106
|
};
|
|
107
|
+
/** Emit the kiro warning for dead and unknown references (spec 17 §4.5). */
|
|
108
|
+
function emitKiroWarning(ctx, reports) {
|
|
109
|
+
// Collect entries: D (has kind with "reaches no target") and unknown (empty kind)
|
|
110
|
+
const dead = [];
|
|
111
|
+
const unknown = [];
|
|
112
|
+
const seenDead = new Set();
|
|
113
|
+
const seenUnknown = new Set();
|
|
114
|
+
for (const report of reports) {
|
|
115
|
+
for (const e of report.reworded) {
|
|
116
|
+
const key = `${e.ref}|${e.citing}`;
|
|
117
|
+
if (e.kind !== UNKNOWN_NAME_KIND) {
|
|
118
|
+
// D: has a kind string (e.g. "rule/x reaches no target here")
|
|
119
|
+
if (!seenDead.has(key)) {
|
|
120
|
+
seenDead.add(key);
|
|
121
|
+
dead.push(e);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// unknown: empty kind string (UNKNOWN_NAME_KIND)
|
|
126
|
+
if (!seenUnknown.has(key)) {
|
|
127
|
+
seenUnknown.add(key);
|
|
128
|
+
unknown.push({ ref: e.ref, citing: e.citing });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (dead.length === 0 && unknown.length === 0)
|
|
134
|
+
return;
|
|
135
|
+
const parts = [];
|
|
136
|
+
if (dead.length > 0) {
|
|
137
|
+
const entries = dead.map((e) => `${e.ref} (in ${e.citing}; ${e.kind})`).join(", ");
|
|
138
|
+
parts.push(`${dead.length} reference(s) to rule files this workspace does not have — reworded: ${entries}`);
|
|
139
|
+
}
|
|
140
|
+
if (unknown.length > 0) {
|
|
141
|
+
const entries = unknown.map((e) => `${e.ref} (in ${e.citing})`).join(", ");
|
|
142
|
+
if (dead.length > 0) {
|
|
143
|
+
parts.push(`${unknown.length} reference(s) to names that are no rule or steering here — rewritten to .kiro/steering/ as before: ${entries}`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
parts.push(`${unknown.length} reference(s) to names that are no rule or steering of this workspace — rewritten to .kiro/steering/ as before: ${entries}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
ctx.warn(`kiro: ${parts.join("; ")}`);
|
|
150
|
+
}
|
|
84
151
|
export function rewrite(text) {
|
|
85
152
|
return text.replace(/\.claude\/rules\//g, ".kiro/steering/");
|
|
86
153
|
}
|
|
87
154
|
function crlf(path, text, ingredient) {
|
|
88
155
|
return { path, content: Buffer.from(toCrlf(text), "utf8"), target: "kiro", ingredient };
|
|
89
156
|
}
|
|
90
|
-
async function copy(ctx, ing, file, relPath) {
|
|
157
|
+
async function copy(ctx, ing, file, relPath, resolve) {
|
|
91
158
|
if (KIRO_TEXT_EXT.test(file))
|
|
92
|
-
return crlf(relPath,
|
|
159
|
+
return crlf(relPath, resolve(await ctx.text(ing, file), ing.ref), ing.ref);
|
|
93
160
|
return { path: relPath, content: await ctx.bytes(ing, file), target: "kiro", ingredient: ing.ref };
|
|
94
161
|
}
|
|
95
162
|
const TOOL_MAP = {
|
|
@@ -142,7 +209,7 @@ export function agentResources(agentName, text, known, scoped) {
|
|
|
142
209
|
/** Rule names referenced as `.claude/rules/<name>.md` or `.kiro/steering/<name>.md`, in order of first appearance. */
|
|
143
210
|
export function referencedRules(text, known) {
|
|
144
211
|
const out = [];
|
|
145
|
-
for (const m of text.matchAll(
|
|
212
|
+
for (const m of text.matchAll(new RegExp(`\\.(?:claude\\/rules|kiro\\/steering)\\/([${RULE_NAME_CHARS}]+)\\.md`, "g"))) {
|
|
146
213
|
const name = m[1];
|
|
147
214
|
if (known.has(name) && !out.includes(name))
|
|
148
215
|
out.push(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../src/emitters/kiro.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../src/emitters/kiro.ts"],"names":[],"mappings":"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"}
|
package/dist/emitters/shared.js
CHANGED
|
@@ -2,6 +2,286 @@ import { detectEol, hasBom, withEol } from "../core/text.js";
|
|
|
2
2
|
export function appliesTo(targets, target) {
|
|
3
3
|
return targets === "*" || targets.includes(target);
|
|
4
4
|
}
|
|
5
|
+
/** The characters of a rule name in a `.claude/rules/<name>.md` reference (spec 15 §4.1). */
|
|
6
|
+
export const RULE_NAME_CHARS = "A-Za-z0-9._-";
|
|
7
|
+
/**
|
|
8
|
+
* The target that writes a rule's own file in this workspace, `claude-code` first, else `kiro`, else none
|
|
9
|
+
* (spec 14 §4.1): a workspace target the rule's `targets` admit.
|
|
10
|
+
*/
|
|
11
|
+
export function ruleWriter(targets, ruleTargets) {
|
|
12
|
+
if (targets.includes("claude-code") && appliesTo(ruleTargets, "claude-code"))
|
|
13
|
+
return "claude-code";
|
|
14
|
+
if (targets.includes("kiro") && appliesTo(ruleTargets, "kiro"))
|
|
15
|
+
return "kiro";
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
/** The kind string for an unknown name (no rule or steering with that name). */
|
|
19
|
+
export const UNKNOWN_NAME_KIND = "";
|
|
20
|
+
/** Build the lookup maps for rule reference resolution, once per AGENTS.md. */
|
|
21
|
+
export function buildRuleLookup(ingredients) {
|
|
22
|
+
const rulesByName = new Map();
|
|
23
|
+
const steeringsByName = new Map();
|
|
24
|
+
for (const ing of ingredients) {
|
|
25
|
+
const name = outName(ing.meta);
|
|
26
|
+
if (ing.meta.type === "rule")
|
|
27
|
+
rulesByName.set(name, ing);
|
|
28
|
+
else if (ing.meta.type === "steering")
|
|
29
|
+
steeringsByName.set(name, ing);
|
|
30
|
+
}
|
|
31
|
+
return { rulesByName, steeringsByName };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Resolve `.claude/rules/<x>.md` references in a body (spec 15 §4.1–§4.3, spec 17 §4.2–§4.3).
|
|
35
|
+
* Mode "agents-md" (default) is for AGENTS.md; mode "kiro" is for kiro files.
|
|
36
|
+
* Returns the transformed text and a report of what was reworded or found dead.
|
|
37
|
+
*/
|
|
38
|
+
export function resolveRuleRefs(body, citing, lookup, targets, mode = "agents-md") {
|
|
39
|
+
const report = { reworded: [], others: [] };
|
|
40
|
+
const hasCc = targets.includes("claude-code");
|
|
41
|
+
const hasKiro = targets.includes("kiro");
|
|
42
|
+
const hasMd = targets.includes("agents-md");
|
|
43
|
+
const { rulesByName, steeringsByName } = lookup;
|
|
44
|
+
const ruleState = (name) => {
|
|
45
|
+
const rule = rulesByName.get(name);
|
|
46
|
+
if (mode === "kiro") {
|
|
47
|
+
// K1: kiro writes it — a rule or steering that admits kiro (spec 17 §4.2)
|
|
48
|
+
if (rule && hasKiro && appliesTo(rule.meta.targets, "kiro"))
|
|
49
|
+
return "K1";
|
|
50
|
+
const steering = steeringsByName.get(name);
|
|
51
|
+
if (steering && hasKiro && appliesTo(steering.meta.targets, "kiro"))
|
|
52
|
+
return "K1";
|
|
53
|
+
// K2: a rule and claude-code writes it
|
|
54
|
+
if (rule && hasCc && appliesTo(rule.meta.targets, "claude-code"))
|
|
55
|
+
return "K2";
|
|
56
|
+
// K3: a rule aimed at agents-md, and agents-md is a workspace target
|
|
57
|
+
if (rule && hasMd && appliesTo(rule.meta.targets, "agents-md"))
|
|
58
|
+
return "K3";
|
|
59
|
+
// D: any other rule
|
|
60
|
+
if (rule)
|
|
61
|
+
return "D";
|
|
62
|
+
// unknown: anything else
|
|
63
|
+
return "unknown";
|
|
64
|
+
}
|
|
65
|
+
// agents-md mode (spec 15 §4.2)
|
|
66
|
+
if (rule) {
|
|
67
|
+
const writer = ruleWriter(targets, rule.meta.targets);
|
|
68
|
+
if (writer === "claude-code")
|
|
69
|
+
return "A";
|
|
70
|
+
if (writer === "kiro")
|
|
71
|
+
return "B";
|
|
72
|
+
}
|
|
73
|
+
// B (steering): kiro writes a steering with this name — checked before C/D (spec 15 §4.2)
|
|
74
|
+
const steering = steeringsByName.get(name);
|
|
75
|
+
if (steering && hasKiro && appliesTo(steering.meta.targets, "kiro"))
|
|
76
|
+
return "B";
|
|
77
|
+
if (rule) {
|
|
78
|
+
if (appliesTo(rule.meta.targets, "agents-md"))
|
|
79
|
+
return "C";
|
|
80
|
+
return "D";
|
|
81
|
+
}
|
|
82
|
+
return "unknown";
|
|
83
|
+
};
|
|
84
|
+
// Right boundary: not followed by letter, digit, `_`, `-`, or `.` followed by one of those (spec 15 §4.1)
|
|
85
|
+
// NOTE: The right boundary class is NOT the same as RULE_NAME_CHARS (which includes `.` for names).
|
|
86
|
+
const rightBoundary = (after) => {
|
|
87
|
+
if (!after)
|
|
88
|
+
return true;
|
|
89
|
+
const c = after[0];
|
|
90
|
+
if (/[A-Za-z0-9_-]/.test(c))
|
|
91
|
+
return false;
|
|
92
|
+
if (c === "." && after.length > 1 && /[A-Za-z0-9_-]/.test(after[1]))
|
|
93
|
+
return false;
|
|
94
|
+
return true;
|
|
95
|
+
};
|
|
96
|
+
// Blanket rewrite for kiro mode: .claude/rules/ → .kiro/steering/
|
|
97
|
+
const kiroRewrite = (s) => s.replace(/\.claude\/rules\//g, ".kiro/steering/");
|
|
98
|
+
const matches = [];
|
|
99
|
+
// Link pattern: [text](.claude/rules/<name>.md) or [text](.claude/rules/<name>.md#frag)
|
|
100
|
+
const linkPattern = new RegExp(`\\[([^\\]]+)\\]\\(\\.claude\\/rules\\/([${RULE_NAME_CHARS}]+)\\.md(#[^)]*)?\\)`, "g");
|
|
101
|
+
let linkMatch;
|
|
102
|
+
while ((linkMatch = linkPattern.exec(body)) !== null) {
|
|
103
|
+
const [match, text, name, frag] = linkMatch;
|
|
104
|
+
const offset = linkMatch.index;
|
|
105
|
+
const state = ruleState(name);
|
|
106
|
+
const rule = rulesByName.get(name);
|
|
107
|
+
let replacement;
|
|
108
|
+
let reworded;
|
|
109
|
+
if (mode === "kiro") {
|
|
110
|
+
// Kiro mode (spec 17 §4.3)
|
|
111
|
+
switch (state) {
|
|
112
|
+
case "K1":
|
|
113
|
+
// Fragment gets the blanket rewrite too (spec 17 §4.3)
|
|
114
|
+
replacement = `[${kiroRewrite(text)}](${ruleFile("kiro", { name })}${kiroRewrite(frag ?? "")})`;
|
|
115
|
+
break;
|
|
116
|
+
case "K2":
|
|
117
|
+
// unchanged — exempt from directory rewrite; keep original text exactly
|
|
118
|
+
replacement = match;
|
|
119
|
+
break;
|
|
120
|
+
case "K3":
|
|
121
|
+
replacement = `[${kiroRewrite(text)}](AGENTS.md)`; // fragment dropped
|
|
122
|
+
break;
|
|
123
|
+
case "D":
|
|
124
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: `${rule.ref} reaches no target here` };
|
|
125
|
+
replacement = `${kiroRewrite(text)} (${name}, rule not in this workspace)`;
|
|
126
|
+
break;
|
|
127
|
+
case "unknown":
|
|
128
|
+
// Unknown name gets blanket rewrite and is reported (no kind string)
|
|
129
|
+
// Fragment gets the blanket rewrite too (spec 17 §4.3)
|
|
130
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: UNKNOWN_NAME_KIND };
|
|
131
|
+
replacement = `[${kiroRewrite(text)}](${ruleFile("kiro", { name })}${kiroRewrite(frag ?? "")})`;
|
|
132
|
+
break;
|
|
133
|
+
default:
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// agents-md mode (spec 15 §4.3)
|
|
139
|
+
switch (state) {
|
|
140
|
+
case "A":
|
|
141
|
+
continue;
|
|
142
|
+
case "B":
|
|
143
|
+
replacement = `[${text}](${ruleFile("kiro", { name })}${frag ?? ""})`;
|
|
144
|
+
break;
|
|
145
|
+
case "C":
|
|
146
|
+
replacement = `[${text}](AGENTS.md)`;
|
|
147
|
+
break;
|
|
148
|
+
case "D":
|
|
149
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: `${rule.ref} reaches no target here` };
|
|
150
|
+
replacement = `${text} (${name}, rule not in this workspace)`;
|
|
151
|
+
break;
|
|
152
|
+
case "unknown":
|
|
153
|
+
if (hasCc)
|
|
154
|
+
continue;
|
|
155
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: "no such rule" };
|
|
156
|
+
replacement = `${text} (${name}, rule not in this workspace)`;
|
|
157
|
+
break;
|
|
158
|
+
default:
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
matches.push({ offset, length: match.length, replacement, reworded });
|
|
163
|
+
}
|
|
164
|
+
// Token pattern: .claude/rules/<name>.md (not in a link) with left boundary
|
|
165
|
+
const tokenPattern = new RegExp(`(^|[^/${RULE_NAME_CHARS}])(\\.claude\\/rules\\/([${RULE_NAME_CHARS}]+)\\.md)`, "g");
|
|
166
|
+
let tokenMatch;
|
|
167
|
+
while ((tokenMatch = tokenPattern.exec(body)) !== null) {
|
|
168
|
+
const [match, before, token, name] = tokenMatch;
|
|
169
|
+
// The offset of the actual token, not the left boundary; used for overlap checks and ordering
|
|
170
|
+
const offset = tokenMatch.index + before.length;
|
|
171
|
+
const fullOffset = tokenMatch.index + match.length;
|
|
172
|
+
const after = body.slice(fullOffset);
|
|
173
|
+
if (!rightBoundary(after))
|
|
174
|
+
continue;
|
|
175
|
+
// Skip if this offset overlaps with a link match (link pattern already captured it)
|
|
176
|
+
if (matches.some((m) => offset >= m.offset && offset < m.offset + m.length))
|
|
177
|
+
continue;
|
|
178
|
+
const state = ruleState(name);
|
|
179
|
+
const rule = rulesByName.get(name);
|
|
180
|
+
let replacement;
|
|
181
|
+
let reworded;
|
|
182
|
+
if (mode === "kiro") {
|
|
183
|
+
// Kiro mode (spec 17 §4.3)
|
|
184
|
+
switch (state) {
|
|
185
|
+
case "K1":
|
|
186
|
+
replacement = ruleFile("kiro", { name });
|
|
187
|
+
break;
|
|
188
|
+
case "K2":
|
|
189
|
+
// unchanged — exempt from directory rewrite; keep original text exactly
|
|
190
|
+
replacement = token;
|
|
191
|
+
break;
|
|
192
|
+
case "K3":
|
|
193
|
+
replacement = `AGENTS.md (rule: ${name})`;
|
|
194
|
+
break;
|
|
195
|
+
case "D":
|
|
196
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: `${rule.ref} reaches no target here` };
|
|
197
|
+
replacement = `${name} (rule not in this workspace)`;
|
|
198
|
+
break;
|
|
199
|
+
case "unknown":
|
|
200
|
+
// Unknown name gets blanket rewrite and is reported (no kind string)
|
|
201
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: UNKNOWN_NAME_KIND };
|
|
202
|
+
replacement = ruleFile("kiro", { name });
|
|
203
|
+
break;
|
|
204
|
+
default:
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// agents-md mode (spec 15 §4.3)
|
|
210
|
+
switch (state) {
|
|
211
|
+
case "A":
|
|
212
|
+
continue;
|
|
213
|
+
case "B":
|
|
214
|
+
replacement = ruleFile("kiro", { name });
|
|
215
|
+
break;
|
|
216
|
+
case "C":
|
|
217
|
+
replacement = `AGENTS.md (rule: ${name})`;
|
|
218
|
+
break;
|
|
219
|
+
case "D":
|
|
220
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: `${rule.ref} reaches no target here` };
|
|
221
|
+
replacement = `${name} (rule not in this workspace)`;
|
|
222
|
+
break;
|
|
223
|
+
case "unknown":
|
|
224
|
+
if (hasCc)
|
|
225
|
+
continue;
|
|
226
|
+
reworded = { ref: `.claude/rules/${name}.md`, kind: "no such rule" };
|
|
227
|
+
replacement = `${name} (rule not in this workspace)`;
|
|
228
|
+
break;
|
|
229
|
+
default:
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
matches.push({ offset, length: token.length, replacement, reworded });
|
|
234
|
+
}
|
|
235
|
+
// Sort by offset for correct warning order
|
|
236
|
+
matches.sort((a, b) => a.offset - b.offset);
|
|
237
|
+
// Collect reworded entries with their original offsets for sorting (spec 15 §4.5)
|
|
238
|
+
const rewordedWithOffset = [];
|
|
239
|
+
for (const m of matches) {
|
|
240
|
+
if (m.reworded) {
|
|
241
|
+
rewordedWithOffset.push({ offset: m.offset, ref: m.reworded.ref, citing, kind: m.reworded.kind });
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Build the result segment by segment: gaps get the blanket rewrite in kiro mode
|
|
245
|
+
let result = "";
|
|
246
|
+
let lastEnd = 0;
|
|
247
|
+
for (const m of matches) {
|
|
248
|
+
const gap = body.slice(lastEnd, m.offset);
|
|
249
|
+
result += mode === "kiro" ? kiroRewrite(gap) : gap;
|
|
250
|
+
result += m.replacement;
|
|
251
|
+
lastEnd = m.offset + m.length;
|
|
252
|
+
}
|
|
253
|
+
const tail = body.slice(lastEnd);
|
|
254
|
+
result += mode === "kiro" ? kiroRewrite(tail) : tail;
|
|
255
|
+
// Sort by offset and deduplicate by (ref, citing), keeping first occurrence (spec 15 §4.5)
|
|
256
|
+
rewordedWithOffset.sort((a, b) => a.offset - b.offset);
|
|
257
|
+
const seen = new Set();
|
|
258
|
+
for (const e of rewordedWithOffset) {
|
|
259
|
+
const key = `${e.ref}|${e.citing}`;
|
|
260
|
+
if (!seen.has(key)) {
|
|
261
|
+
seen.add(key);
|
|
262
|
+
report.reworded.push({ ref: e.ref, citing: e.citing, kind: e.kind });
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Collect other .claude/ paths only in agents-md mode (spec 15 §4.5) — not in kiro mode (spec 17 §2)
|
|
266
|
+
if (mode === "agents-md" && !hasCc) {
|
|
267
|
+
const otherDirs = ["agents", "commands", "skills", "scripts", "hooks"];
|
|
268
|
+
// The path class adds `/` for subdirectories; in `[.../-]` the `/` goes before `-` to avoid a range error.
|
|
269
|
+
const otherPattern = new RegExp(`(^|[^/${RULE_NAME_CHARS}])\\.claude\\/(${otherDirs.join("|")})\\/([A-Za-z0-9._/-]+)`, "g");
|
|
270
|
+
let otherMatch;
|
|
271
|
+
while ((otherMatch = otherPattern.exec(result)) !== null) {
|
|
272
|
+
// Trim trailing `.` or `/` from the path, and skip if empty after trimming
|
|
273
|
+
let path = otherMatch[3].replace(/[./]+$/, "");
|
|
274
|
+
if (!path)
|
|
275
|
+
continue;
|
|
276
|
+
const fullPath = `.claude/${otherMatch[2]}/${path}`;
|
|
277
|
+
// Deduplicate by (path, citing)
|
|
278
|
+
if (!report.others.some((o) => o.path === fullPath && o.citing === citing)) {
|
|
279
|
+
report.others.push({ path: fullPath, citing });
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return { text: result, report };
|
|
284
|
+
}
|
|
5
285
|
const UTF8_BOM = Buffer.from([0xef, 0xbb, 0xbf]);
|
|
6
286
|
/** Text file that keeps the EOL and the BOM of the file it replaces (LF, no BOM when new). */
|
|
7
287
|
export async function textFile(ctx, relPath, text, target, ingredient) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/emitters/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAY,MAAM,iBAAiB,CAAC;AAGvE,MAAM,UAAU,SAAS,CAAC,OAAuB,EAAE,MAAc;IAC/D,OAAO,OAAO,KAAK,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEjD,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAgB,EAAE,OAAe,EAAE,IAAY,EAAE,MAA6B,EAAE,UAAkB;IAC/H,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,GAAG,GAAQ,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACxD,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,OAAO,CAAC,CAAgC;IACtD,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;AACxB,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,QAAQ,CAAC,MAA8B,EAAE,CAAgC;IACvF,OAAO,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,iBAAiB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACzG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAgB,EAAE,MAAc,EAAE,IAAY;IACvE,8FAA8F;IAC9F,MAAM,OAAO,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7D,gGAAgG;IAChG,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;YAAE,SAAS;QAC9E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,2CAA2C,GAAG,UAAU,IAAI,KAAK,IAAI,QAAQ,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;QAChI,6FAA6F;QAC7F,6FAA6F;QAC7F,6FAA6F;QAC7F,gDAAgD;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/emitters/shared.ts"],"names":[],"mappings":"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"}
|