renma 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/README.md +210 -749
  3. package/architecture.md +523 -0
  4. package/design.md +458 -0
  5. package/dist/cli-help.d.ts +7 -5
  6. package/dist/cli-help.d.ts.map +1 -1
  7. package/dist/cli-help.js +23 -9
  8. package/dist/cli-help.js.map +1 -1
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +139 -40
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/catalog.d.ts.map +1 -1
  13. package/dist/commands/catalog.js +4 -3
  14. package/dist/commands/catalog.js.map +1 -1
  15. package/dist/commands/graph.d.ts.map +1 -1
  16. package/dist/commands/graph.js +7 -12
  17. package/dist/commands/graph.js.map +1 -1
  18. package/dist/commands/readiness.d.ts.map +1 -1
  19. package/dist/commands/readiness.js +7 -6
  20. package/dist/commands/readiness.js.map +1 -1
  21. package/dist/commands/scaffold.d.ts.map +1 -1
  22. package/dist/commands/scaffold.js +14 -2
  23. package/dist/commands/scaffold.js.map +1 -1
  24. package/dist/commands/suggest-metadata.d.ts.map +1 -1
  25. package/dist/commands/suggest-metadata.js +54 -8
  26. package/dist/commands/suggest-metadata.js.map +1 -1
  27. package/dist/commands/suggest-semantic-split.js +3 -3
  28. package/dist/commands/suggest-semantic-split.js.map +1 -1
  29. package/dist/dependency-resolution.d.ts +6 -0
  30. package/dist/dependency-resolution.d.ts.map +1 -0
  31. package/dist/dependency-resolution.js +11 -0
  32. package/dist/dependency-resolution.js.map +1 -0
  33. package/dist/discovery.d.ts +28 -0
  34. package/dist/discovery.d.ts.map +1 -1
  35. package/dist/discovery.js +70 -15
  36. package/dist/discovery.js.map +1 -1
  37. package/dist/repository-paths.d.ts +13 -0
  38. package/dist/repository-paths.d.ts.map +1 -1
  39. package/dist/repository-paths.js +60 -2
  40. package/dist/repository-paths.js.map +1 -1
  41. package/dist/rules.d.ts.map +1 -1
  42. package/dist/rules.js +64 -85
  43. package/dist/rules.js.map +1 -1
  44. package/dist/trust-graph.d.ts.map +1 -1
  45. package/dist/trust-graph.js +7 -11
  46. package/dist/trust-graph.js.map +1 -1
  47. package/dist/types.d.ts +1 -1
  48. package/dist/types.d.ts.map +1 -1
  49. package/docs/README.md +55 -0
  50. package/docs/advanced-skill-authoring.md +140 -0
  51. package/docs/agent-skills-compatibility.md +500 -0
  52. package/docs/authoring-guide.md +324 -0
  53. package/docs/context-conflict-diagnostics.md +32 -0
  54. package/docs/context-language-diagnostics.md +99 -0
  55. package/docs/context-lens.md +253 -0
  56. package/docs/context-lifecycle-diagnostics.md +55 -0
  57. package/docs/diagnostics.md +373 -0
  58. package/docs/metadata-budget.md +14 -0
  59. package/docs/repository-context-bom.md +113 -0
  60. package/docs/security-policy.md +338 -0
  61. package/docs/user-manual.md +813 -0
  62. package/examples/context-lens/README.md +101 -0
  63. package/examples/context-lens/contexts/testing/boundary-value-analysis.md +23 -0
  64. package/examples/context-lens/lenses/testing/spec-review-boundary-values.md +29 -0
  65. package/examples/context-lens/lenses/testing/test-design-boundary-values.md +29 -0
  66. package/examples/context-lens/skills/testing/spec-review/SKILL.md +49 -0
  67. package/examples/context-repo/README.md +149 -0
  68. package/examples/context-repo/contexts/domain/payment/idempotency.md +20 -0
  69. package/examples/context-repo/contexts/testing/boundary-value-analysis.md +19 -0
  70. package/examples/context-repo/contexts/testing/negative-testing.md +19 -0
  71. package/examples/context-repo/lenses/testing/spec-review-boundary-values.md +35 -0
  72. package/examples/context-repo/renma.config.json +12 -0
  73. package/examples/context-repo/skills/testing/spec-review/SKILL.md +66 -0
  74. package/examples/context-repo/tools/appium/README.md +14 -0
  75. package/examples/github-actions/renma-ci-report.yml +36 -0
  76. package/examples/interactive-placeholder/README.md +104 -0
  77. package/examples/interactive-placeholder/assets/template.txt +1 -0
  78. package/examples/interactive-placeholder/renma.config.json +6 -0
  79. package/examples/interactive-placeholder/skills/replace-placeholder/SKILL.md +54 -0
  80. package/examples/interactive-placeholder/tools/README.md +48 -0
  81. package/examples/interactive-placeholder/tools/placeholder-demo.mjs +99 -0
  82. package/package.json +8 -1
  83. package/plan-discovery.md +740 -0
  84. package/plan.md +150 -0
  85. package/scripts/verify-package.mjs +97 -0
package/dist/discovery.js CHANGED
@@ -2,7 +2,7 @@ import { glob, lstat, readFile, stat } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  const SKILL_LIKE_FILE_OUTSIDE_SKILLS_DIR_CODE = "LAYOUT-SKILL-LIKE-FILE-OUTSIDE-SKILLS-DIR";
4
4
  const SKILL_ENTRYPOINT_UNDER_RESERVED_SUPPORT_DIR_CODE = "LAYOUT-SKILL-ENTRYPOINT-UNDER-RESERVED-SUPPORT-DIR";
5
- const RESERVED_SKILL_SUPPORT_DIRS = [
5
+ export const RESERVED_SKILL_SUPPORT_DIRS = [
6
6
  "assets",
7
7
  "examples",
8
8
  "profiles",
@@ -22,8 +22,8 @@ const SKILL_LIKE_FILE_GLOBS = [
22
22
  ];
23
23
  const SKILL_LIKE_FILE_LLM_HINT = "No action is required unless this file is intended to be a Renma skill. If it is intended to be a skill, move it under skills/** or .agents/skills/**.";
24
24
  const SKILL_ENTRYPOINT_UNDER_RESERVED_SUPPORT_DIR_LLM_HINT = "Do not move or rename this file only to reduce diagnostics. Rename the skill directory only if this file is intended to define a Renma skill. For example, use `skills/example-review/SKILL.md` instead of `skills/examples/SKILL.md`.";
25
- /** Classify a repository-relative Skill entrypoint only at an explicit root. */
26
- export function classifyRepositorySkillEntrypointPath(relativePath) {
25
+ /** Classify canonical, historical, and reserved support paths at explicit Skill roots. */
26
+ export function classifyRepositorySkillPath(relativePath) {
27
27
  const currentPath = normalizeRepositoryRelativePath(relativePath);
28
28
  if (!currentPath)
29
29
  return undefined;
@@ -31,7 +31,57 @@ export function classifyRepositorySkillEntrypointPath(relativePath) {
31
31
  const rootEndIndex = repositorySkillRootEndIndex(segments);
32
32
  if (rootEndIndex === undefined)
33
33
  return undefined;
34
- return classifySkillEntrypointAtRoot(currentPath, segments, rootEndIndex);
34
+ const root = repositorySkillRoot(segments);
35
+ const localSegments = segments.slice(rootEndIndex);
36
+ const supportIndex = localSegments.findIndex(isReservedSkillSupportDirectory);
37
+ if (supportIndex >= 0) {
38
+ const supportDirectory = localSegments[supportIndex];
39
+ if (supportIndex === 0) {
40
+ return { kind: "reserved-root", currentPath, root, supportDirectory };
41
+ }
42
+ const skillSegments = localSegments.slice(0, supportIndex);
43
+ const skillName = skillSegments.at(-1);
44
+ if (!skillName)
45
+ return undefined;
46
+ const skillDirectory = [
47
+ ...segments.slice(0, rootEndIndex),
48
+ ...skillSegments,
49
+ ].join("/");
50
+ return {
51
+ kind: "support",
52
+ currentPath,
53
+ root,
54
+ skillDirectory,
55
+ skillName,
56
+ domainPath: skillSegments.slice(0, -1),
57
+ relativeToSkillDirectory: localSegments.slice(supportIndex).join("/"),
58
+ supportDirectory,
59
+ };
60
+ }
61
+ const entrypoint = classifySkillEntrypointAtRoot(currentPath, segments, rootEndIndex);
62
+ if (!entrypoint)
63
+ return undefined;
64
+ const skillDirectory = path.posix.dirname(entrypoint.targetPath);
65
+ const skillDirectorySegments = skillDirectory.split("/").filter(Boolean);
66
+ const skillSegments = skillDirectorySegments.slice(rootEndIndex);
67
+ const skillName = skillSegments.at(-1);
68
+ if (!skillName)
69
+ return undefined;
70
+ return {
71
+ kind: "entrypoint",
72
+ currentPath,
73
+ root,
74
+ skillDirectory,
75
+ skillName,
76
+ domainPath: skillSegments.slice(0, -1),
77
+ relativeToSkillDirectory: path.posix.relative(skillDirectory, currentPath),
78
+ entrypoint,
79
+ };
80
+ }
81
+ /** Classify a repository-relative Skill entrypoint only at an explicit root. */
82
+ export function classifyRepositorySkillEntrypointPath(relativePath) {
83
+ const classified = classifyRepositorySkillPath(relativePath);
84
+ return classified?.kind === "entrypoint" ? classified.entrypoint : undefined;
35
85
  }
36
86
  /** Classify an absolute Skill path only when it contains one unambiguous root. */
37
87
  export function classifyAbsoluteSkillEntrypointPath(absolutePath) {
@@ -82,7 +132,7 @@ function classifySkillEntrypointAtRoot(currentPath, segments, rootEndIndex) {
82
132
  const basename = path.posix.basename(currentPath);
83
133
  const directory = path.posix.dirname(currentPath);
84
134
  const localDirectories = segments.slice(rootEndIndex, -1);
85
- if (localDirectories.some((segment) => RESERVED_SKILL_SUPPORT_DIRS.includes(segment))) {
135
+ if (localDirectories.some(isReservedSkillSupportDirectory)) {
86
136
  return undefined;
87
137
  }
88
138
  if (basename === "SKILL.md" || basename === "skill.md") {
@@ -208,7 +258,11 @@ function classify(relativePath) {
208
258
  return "unknown";
209
259
  }
210
260
  function classifyExplicitSkillSupportPath(relativePath) {
211
- switch (skillSupportPathSegment(relativePath)) {
261
+ const classified = classifyRepositorySkillPath(relativePath);
262
+ const supportDirectory = classified?.kind === "support" || classified?.kind === "reserved-root"
263
+ ? classified.supportDirectory
264
+ : undefined;
265
+ switch (supportDirectory) {
212
266
  case "assets":
213
267
  return "unknown";
214
268
  case "profiles":
@@ -293,15 +347,16 @@ function isExplicitSkillsPath(relativePath) {
293
347
  return normalizeRepositoryRelativePath(relativePath) !== undefined;
294
348
  }
295
349
  function skillSupportPathSegment(relativePath) {
296
- const normalized = normalizeRepositoryRelativePath(relativePath);
297
- if (!normalized)
298
- return undefined;
299
- const segments = normalized.split("/").filter(Boolean);
300
- const rootEndIndex = repositorySkillRootEndIndex(segments);
301
- if (rootEndIndex === undefined)
302
- return undefined;
303
- const skillLocalSegments = segments.slice(rootEndIndex, -1);
304
- return skillLocalSegments.find((segment) => RESERVED_SKILL_SUPPORT_DIRS.includes(segment));
350
+ const classified = classifyRepositorySkillPath(relativePath);
351
+ return classified?.kind === "support" || classified?.kind === "reserved-root"
352
+ ? classified.supportDirectory
353
+ : undefined;
354
+ }
355
+ function isReservedSkillSupportDirectory(segment) {
356
+ return RESERVED_SKILL_SUPPORT_DIRS.includes(segment);
357
+ }
358
+ function repositorySkillRoot(segments) {
359
+ return segments[0] === "skills" ? "skills" : ".agents/skills";
305
360
  }
306
361
  function repositorySkillRootEndIndex(segments) {
307
362
  if (segments[0] === "skills")
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,19 @@
1
1
  import type { Catalog } from "./model.js";
2
2
  import type { Artifact, ParsedDocument } from "./types.js";
3
+ export type HelperScriptPathResolution = {
4
+ kind: "candidate";
5
+ path: string;
6
+ source: "repository-root" | "skill-relative";
7
+ } | {
8
+ kind: "unsafe";
9
+ path: string;
10
+ } | {
11
+ kind: "unscoped";
12
+ path: string;
13
+ };
3
14
  /** Collect immutable repository-relative path existence evidence for rules. */
4
15
  export declare function collectRepositoryPaths(root: string, artifacts: Artifact[], documents: ParsedDocument[], catalog: Catalog): Promise<ReadonlySet<string>>;
5
16
  export declare function helperScriptPath(command: string): string | undefined;
17
+ /** Resolve a helper command path without escaping an unambiguous owning Skill. */
18
+ export declare function resolveHelperScriptPath(sourcePath: string, scriptPath: string): HelperScriptPathResolution;
6
19
  //# sourceMappingURL=repository-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-paths.d.ts","sourceRoot":"","sources":["../src/repository-paths.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3D,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,QAAQ,EAAE,EACrB,SAAS,EAAE,cAAc,EAAE,EAC3B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAa9B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpE"}
1
+ {"version":3,"file":"repository-paths.d.ts","sourceRoot":"","sources":["../src/repository-paths.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,0BAA0B,GAClC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,GAAG,gBAAgB,CAAC;CAC9C,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,QAAQ,EAAE,EACrB,SAAS,EAAE,cAAc,EAAE,EAC3B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAa9B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYpE;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAgC5B"}
@@ -1,5 +1,6 @@
1
1
  import { access } from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import { classifyRepositorySkillPath } from "./discovery.js";
3
4
  /** Collect immutable repository-relative path existence evidence for rules. */
4
5
  export async function collectRepositoryPaths(root, artifacts, documents, catalog) {
5
6
  const paths = new Set(artifacts
@@ -15,7 +16,46 @@ export async function collectRepositoryPaths(root, artifacts, documents, catalog
15
16
  }
16
17
  export function helperScriptPath(command) {
17
18
  const parts = command.split(/\s+/).slice(1);
18
- return parts.find((part) => /(?:^|\/)scripts\/.+\.(?:mjs|js|cjs|sh|bash|py)$/.test(part));
19
+ const target = parts.find((part) => !part.startsWith("-"));
20
+ if (!target)
21
+ return undefined;
22
+ const hasSupportedExtension = /\.(?:mjs|js|cjs|sh|bash|py)$/.test(target);
23
+ if (!hasSupportedExtension)
24
+ return undefined;
25
+ const startsAtSupportedRoot = /^(?:(?:\.\.?\/)+)?(?:scripts|tools)\//.test(target);
26
+ const isExplicitSkillScript = /(?:^|\/)scripts\//.test(target);
27
+ return startsAtSupportedRoot || isExplicitSkillScript ? target : undefined;
28
+ }
29
+ /** Resolve a helper command path without escaping an unambiguous owning Skill. */
30
+ export function resolveHelperScriptPath(sourcePath, scriptPath) {
31
+ const rawPath = scriptPath.replace(/\\/g, "/");
32
+ const sourceSkill = owningSkillPath(sourcePath);
33
+ const isSkillRelative = /^(?:\.\/)?scripts\//.test(rawPath);
34
+ const hasTraversal = rawPath.split("/").includes("..");
35
+ if (isSkillRelative) {
36
+ if (!sourceSkill)
37
+ return { kind: "unscoped", path: rawPath };
38
+ if (hasTraversal)
39
+ return { kind: "unsafe", path: rawPath };
40
+ const relativePath = rawPath.replace(/^\.\//, "");
41
+ const candidate = normalizeRepositoryPath(path.posix.join(sourceSkill.skillDirectory, relativePath));
42
+ if (!candidate || !isWithinSkill(candidate, sourceSkill.skillDirectory)) {
43
+ return { kind: "unsafe", path: rawPath };
44
+ }
45
+ return { kind: "candidate", path: candidate, source: "skill-relative" };
46
+ }
47
+ if (hasTraversal) {
48
+ return sourceSkill
49
+ ? { kind: "unsafe", path: rawPath }
50
+ : { kind: "unscoped", path: rawPath };
51
+ }
52
+ const candidate = normalizeRepositoryPath(rawPath);
53
+ if (!candidate) {
54
+ return sourceSkill
55
+ ? { kind: "unsafe", path: rawPath }
56
+ : { kind: "unscoped", path: rawPath };
57
+ }
58
+ return { kind: "candidate", path: candidate, source: "repository-root" };
19
59
  }
20
60
  function repositoryPathCandidates(documents, catalog) {
21
61
  return [
@@ -33,9 +73,27 @@ function helperCommandPathCandidates(documents) {
33
73
  .map((line) => line.trim())
34
74
  .filter((command) => /^(node|bash|sh|python|python3)\s+/.test(command))
35
75
  .map(helperScriptPath)
36
- .map((candidate) => candidate ? normalizeRepositoryPath(candidate) : undefined)
76
+ .map((candidate) => {
77
+ if (!candidate)
78
+ return undefined;
79
+ const resolution = resolveHelperScriptPath(document.artifact.path, candidate);
80
+ return resolution.kind === "candidate" ? resolution.path : undefined;
81
+ })
37
82
  .filter((candidate) => candidate !== undefined)));
38
83
  }
84
+ function owningSkillPath(sourcePath) {
85
+ const classified = classifyRepositorySkillPath(sourcePath);
86
+ if (classified?.kind === "support")
87
+ return classified;
88
+ if (classified?.kind === "entrypoint" &&
89
+ classified.entrypoint.kind === "canonical") {
90
+ return classified;
91
+ }
92
+ return undefined;
93
+ }
94
+ function isWithinSkill(candidate, skillDirectory) {
95
+ return (candidate === skillDirectory || candidate.startsWith(`${skillDirectory}/`));
96
+ }
39
97
  function normalizeRepositoryPath(value) {
40
98
  const normalized = value.replace(/\\/g, "/").replace(/^\.\//, "");
41
99
  if (!normalized ||
@@ -1 +1 @@
1
- {"version":3,"file":"repository-paths.js","sourceRoot":"","sources":["../src/repository-paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-paths.js","sourceRoot":"","sources":["../src/repository-paths.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,YAAY,CAAC;AAWpE,OAAO,KAAK,EAEV,OAAO,EAEP,cAAc,EACd,UAAU,EACV,QAAQ,EACT,MAAM,YAAY,CAAC;AAcpB,UAAU,WAAW;IACnB,cAAc,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACvC;AA+HD,8EAA8E;AAC9E,wBAAgB,QAAQ,CACtB,SAAS,EAAE,cAAc,EAAE,EAC3B,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,EAAE,CAeX;AAmmBD,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAQ3E"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../src/rules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAA4B,MAAM,YAAY,CAAC;AAmBpE,OAAO,KAAK,EAEV,OAAO,EAEP,cAAc,EACd,UAAU,EACV,QAAQ,EACT,MAAM,YAAY,CAAC;AAcpB,UAAU,WAAW;IACnB,cAAc,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACvC;AA+HD,8EAA8E;AAC9E,wBAAgB,QAAQ,CACtB,SAAS,EAAE,cAAc,EAAE,EAC3B,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,EAAE,CAeX;AAkmBD,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAQ3E"}
package/dist/rules.js CHANGED
@@ -2,7 +2,8 @@ import path from "node:path";
2
2
  import { resolvedAgentSkillDescription } from "./agent-skills.js";
3
3
  import { addDaysIsoDate, isIsoDate, parseDayDuration, todayIsoDate, } from "./freshness.js";
4
4
  import { DIAGNOSTIC_IDS } from "./diagnostic-ids.js";
5
- import { helperScriptPath } from "./repository-paths.js";
5
+ import { classifyRepositorySkillEntrypointPath, classifyRepositorySkillPath, normalizeRepositoryRelativePath, } from "./discovery.js";
6
+ import { helperScriptPath, resolveHelperScriptPath, } from "./repository-paths.js";
6
7
  import { parseAssetMetadata } from "./metadata.js";
7
8
  import { runRuleRegistry } from "./rule-engine.js";
8
9
  const SECRET_PATTERN = /\b(?:password|passwd|token|api[_-]?key|secret|credential|private[_-]?key)\b\s*[:=]\s*["']?([A-Za-z0-9_./+=-]{8,})/i;
@@ -133,7 +134,7 @@ function rulesForEvaluationDate(evaluationDate, repositoryPaths) {
133
134
  return [
134
135
  {
135
136
  id: "strict-layout-policy",
136
- run: (context) => strictLayoutPolicyFindings(context.documents, context.config, context.catalog, repositoryPaths),
137
+ run: (context) => strictLayoutPolicyFindings(context.documents, context.catalog, repositoryPaths),
137
138
  },
138
139
  {
139
140
  id: "security",
@@ -808,7 +809,10 @@ function reusableContextCandidateFinding(document, tokenCount) {
808
809
  function supportSharedContextCandidateFindings(document) {
809
810
  if (document.artifact.kind !== "reference")
810
811
  return [];
811
- if (!/^skills\/[^/]+\/references\/.+\.md$/u.test(document.artifact.path)) {
812
+ const skillPath = classifyRepositorySkillPath(document.artifact.path);
813
+ if (skillPath?.kind !== "support" ||
814
+ skillPath.supportDirectory !== "references" ||
815
+ !document.artifact.path.endsWith(".md")) {
812
816
  return [];
813
817
  }
814
818
  const tokenCount = approximateTokenCount(document.artifact.content);
@@ -1061,8 +1065,11 @@ function skillReferencesSupersededAssetFindings(documents) {
1061
1065
  });
1062
1066
  }
1063
1067
  function isSkillLocalReference(document) {
1068
+ const skillPath = classifyRepositorySkillPath(document.artifact.path);
1064
1069
  return (document.artifact.kind === "reference" &&
1065
- /^skills\/[^/]+\/references\/.+\.md$/u.test(document.artifact.path));
1070
+ skillPath?.kind === "support" &&
1071
+ skillPath.supportDirectory === "references" &&
1072
+ document.artifact.path.endsWith(".md"));
1066
1073
  }
1067
1074
  function sharedContextTargets(document) {
1068
1075
  const operationalMetadata = parseAssetMetadata(document).metadata;
@@ -1072,10 +1079,10 @@ function sharedContextTargets(document) {
1072
1079
  ].filter((target, index, targets) => /^contexts?\//u.test(target) && targets.indexOf(target) === index);
1073
1080
  }
1074
1081
  function parentSkillPath(referencePath) {
1075
- const segments = referencePath.split("/");
1076
- if (segments.length < 4 || segments[0] !== "skills")
1077
- return undefined;
1078
- return `skills/${segments[1]}/SKILL.md`;
1082
+ const skillPath = classifyRepositorySkillPath(referencePath);
1083
+ return skillPath?.kind === "support"
1084
+ ? `${skillPath.skillDirectory}/SKILL.md`
1085
+ : undefined;
1079
1086
  }
1080
1087
  function skillReferenceLine(skill, referencePath) {
1081
1088
  const skillDir = path.posix.dirname(skill.artifact.path);
@@ -1347,14 +1354,13 @@ function matchingLineFindings(document, matcher) {
1347
1354
  ];
1348
1355
  });
1349
1356
  }
1350
- function strictLayoutPolicyFindings(documents, config, catalog, repositoryPaths) {
1357
+ function strictLayoutPolicyFindings(documents, catalog, repositoryPaths) {
1351
1358
  const findings = [];
1352
1359
  const paths = repositoryPaths ??
1353
1360
  new Set(documents.map((document) => document.artifact.path));
1354
1361
  for (const document of documents) {
1355
- findings.push(...disallowedSkillAssetFindings(document, config));
1356
1362
  findings.push(...thinSkillLayoutFindings(document));
1357
- findings.push(...helperCommandFindings(document, paths, config));
1363
+ findings.push(...helperCommandFindings(document, paths));
1358
1364
  findings.push(...layoutConsistencyFindings(document));
1359
1365
  findings.push(...contextRootFindings(document));
1360
1366
  findings.push(...helperRootFindings(document));
@@ -1364,34 +1370,9 @@ function strictLayoutPolicyFindings(documents, config, catalog, repositoryPaths)
1364
1370
  }
1365
1371
  return findings;
1366
1372
  }
1367
- function disallowedSkillAssetFindings(document, config) {
1368
- const match = document.artifact.path.match(/^skills\/([^/]+)\/(references|profiles|examples|scripts)\/(.+)$/);
1369
- if (!match)
1370
- return [];
1371
- const [, skillName = "", assetRoot = "", rest = ""] = match;
1372
- const target = canonicalSkillAssetTarget(config, skillName, assetRoot, rest);
1373
- return [
1374
- documentFinding(document, DIAGNOSTIC_IDS.LAYOUT_DISALLOWED_SKILL_ASSET, `Disallowed skill-local ${assetRoot} asset`, "structure", assetRoot === "scripts" ? "medium" : "low", `Move this file to \`${target}\` and update every repo-local reference to the new canonical path.`, {
1375
- whyItMatters: "Strict layout keeps skills as thin entrypoints, shared context under contexts/, and executable helpers under tools/ so agents can migrate repositories deterministically.",
1376
- verificationSteps: [
1377
- `Move ${document.artifact.path} to ${target}.`,
1378
- "Run renma scan and renma readiness again.",
1379
- ],
1380
- llmHint: `Move ${document.artifact.path} to ${target}, then rewrite references from the old path to the new path. Do not leave a compatibility shim unless another Renma finding requires it.`,
1381
- }),
1382
- ];
1383
- }
1384
- function canonicalSkillAssetTarget(config, skillName, assetRoot, rest) {
1385
- const workflow = canonicalWorkflowName(config, skillName);
1386
- if (assetRoot === "scripts")
1387
- return helperAssetPath(config, workflow, `scripts/${rest}`);
1388
- return contextAssetPath(config, workflow, `${assetRoot}/${rest}`);
1389
- }
1390
- function canonicalWorkflowName(config, skillName) {
1391
- return config.layout.workflowAliases[skillName] ?? skillName;
1392
- }
1393
1373
  function thinSkillLayoutFindings(document) {
1394
- if (!isCanonicalSkillEntrypoint(document.artifact.path))
1374
+ if (classifyRepositorySkillEntrypointPath(document.artifact.path)?.kind !==
1375
+ "canonical")
1395
1376
  return [];
1396
1377
  const findings = [];
1397
1378
  const wordCount = words(document.artifact.content).length;
@@ -1402,7 +1383,7 @@ function thinSkillLayoutFindings(document) {
1402
1383
  if (wordCount > 450 ||
1403
1384
  procedureSignals.some((pattern) => pattern.test(document.artifact.content))) {
1404
1385
  findings.push(documentFinding(document, DIAGNOSTIC_IDS.LAYOUT_SKILL_NOT_THIN, "Skill entrypoint contains procedure content", "structure", wordCount > 700 ? "medium" : "low", "Move reusable procedure content into contexts/** and keep SKILL.md as a concise router that points to the required context assets.", {
1405
- whyItMatters: "Strict layout expects skills/*/SKILL.md to route agents, not own canonical references, profiles, examples, scripts, or detailed procedures.",
1386
+ whyItMatters: "Canonical Skill entrypoints should route agents instead of owning reusable knowledge, helper implementations, or detailed procedures.",
1406
1387
  verificationSteps: [
1407
1388
  "Confirm SKILL.md contains routing guidance and required context references only.",
1408
1389
  "Run renma readiness and check layout.skills_thin.",
@@ -1412,32 +1393,40 @@ function thinSkillLayoutFindings(document) {
1412
1393
  }
1413
1394
  const command = firstExecutableCommand(document);
1414
1395
  if (command) {
1415
- findings.push(findingAt(document, DIAGNOSTIC_IDS.LAYOUT_SKILL_EXECUTABLE_COMMAND, "Skill entrypoint contains executable command", "structure", "low", command.line, command.command, "Move executable setup commands into contexts/** procedures or tools/** helper documentation, and keep SKILL.md as a router.", {
1416
- whyItMatters: "Executable setup commands in SKILL.md make the entrypoint procedural and harder to migrate to the strict three-root layout.",
1396
+ findings.push(findingAt(document, DIAGNOSTIC_IDS.LAYOUT_SKILL_EXECUTABLE_COMMAND, "Skill entrypoint contains executable command", "structure", "low", command.line, command.command, "Move executable command detail into Skill-local references or governed contexts/** procedures, and keep SKILL.md as a router.", {
1397
+ whyItMatters: "Executable setup commands in SKILL.md make the entrypoint procedural instead of a concise routing layer.",
1417
1398
  verificationSteps: [
1418
1399
  "Move the command guidance to a context/reference/procedure.",
1419
- "If the command invokes a helper script, ensure it points under tools/**.",
1400
+ "If the command invokes a helper script, ensure it resolves to local scripts/** in the owning Skill or a shared tools/** helper.",
1420
1401
  ],
1421
1402
  }));
1422
1403
  }
1423
1404
  return findings;
1424
1405
  }
1425
- function helperCommandFindings(document, paths, config) {
1406
+ function helperCommandFindings(document, paths) {
1426
1407
  const findings = [];
1427
1408
  for (const command of executableCommands(document)) {
1428
- const scriptPath = helperScriptPath(command.command);
1429
- if (!scriptPath)
1409
+ const commandPath = helperScriptPath(command.command);
1410
+ if (!commandPath)
1430
1411
  continue;
1431
- if (/^skills\/[^/]+\/scripts\//.test(scriptPath)) {
1432
- findings.push(findingAt(document, DIAGNOSTIC_IDS.PATH_HELPER_COMMAND_SKILL_SCRIPTS, "Helper command points to skill-local scripts", "structure", "medium", command.line, command.command, `Move the helper script to \`${canonicalHelperTarget(config, scriptPath)}\` and update this command to use the tools/** path.`, {
1433
- whyItMatters: "Strict layout keeps executable helper assets under tools/**, not under skills/**.",
1434
- verificationSteps: [
1435
- `Confirm ${canonicalHelperTarget(config, scriptPath)} exists.`,
1436
- "Run renma scan and renma readiness again.",
1437
- ],
1412
+ const resolution = resolveHelperScriptPath(document.artifact.path, commandPath);
1413
+ if (resolution.kind === "unscoped")
1414
+ continue;
1415
+ if (resolution.kind === "unsafe") {
1416
+ findings.push(unresolvedHelperCommandFinding(document, command, commandPath, {
1417
+ details: { unsafePath: true },
1438
1418
  }));
1439
1419
  continue;
1440
1420
  }
1421
+ const scriptPath = resolution.path;
1422
+ const skillPath = classifyRepositorySkillPath(scriptPath);
1423
+ if (skillPath?.kind === "support" &&
1424
+ skillPath.supportDirectory === "scripts") {
1425
+ if (!paths.has(scriptPath)) {
1426
+ findings.push(unresolvedHelperCommandFinding(document, command, scriptPath));
1427
+ }
1428
+ continue;
1429
+ }
1441
1430
  if (scriptPath.includes("/scripts/") && !scriptPath.startsWith("tools/")) {
1442
1431
  findings.push(findingAt(document, DIAGNOSTIC_IDS.PATH_HELPER_COMMAND_NON_TOOLS, "Helper command does not use tools root", "structure", "low", command.line, command.command, "Update helper script commands to reference scripts under tools/**.", {
1443
1432
  whyItMatters: "Helper commands should resolve to non-context helper assets in tools/** so contexts remain LLM-readable guidance.",
@@ -1445,9 +1434,7 @@ function helperCommandFindings(document, paths, config) {
1445
1434
  continue;
1446
1435
  }
1447
1436
  if (scriptPath.startsWith("tools/") && !paths.has(scriptPath)) {
1448
- findings.push(findingAt(document, DIAGNOSTIC_IDS.PATH_HELPER_COMMAND_UNRESOLVED, "Helper command target does not resolve", "structure", "medium", command.line, command.command, `Create \`${scriptPath}\` or update this command to the correct tools/** helper path.`, {
1449
- whyItMatters: "Agents need helper commands in markdown procedures to resolve deterministically before running them.",
1450
- }));
1437
+ findings.push(unresolvedHelperCommandFinding(document, command, scriptPath));
1451
1438
  }
1452
1439
  }
1453
1440
  return findings;
@@ -1467,10 +1454,6 @@ function layoutConsistencyFindings(document) {
1467
1454
  pattern: /Each skill includes a self-improvement prompt/i,
1468
1455
  message: "Describe self-improvement prompts as loaded context/reference/procedure workflow prompts instead of SKILL.md-only content.",
1469
1456
  },
1470
- {
1471
- pattern: /skills\/[^/\s`]+\/(?:references|profiles|examples|scripts)\//,
1472
- message: "Update docs to point to canonical contexts/** assets or tools/** helper scripts instead of skill-local support directories.",
1473
- },
1474
1457
  {
1475
1458
  pattern: /\]\(contexts\/tools\//,
1476
1459
  message: "Use backtick repo-root paths for contexts/tools/... references instead of file-relative Markdown links.",
@@ -1481,10 +1464,10 @@ function layoutConsistencyFindings(document) {
1481
1464
  if (!match)
1482
1465
  continue;
1483
1466
  const line = lineForOffset(text, match.index ?? 0);
1484
- findings.push(findingAt(document, DIAGNOSTIC_IDS.DOCS_LAYOUT_INCONSISTENT, "Repository docs describe a non-canonical layout", "maintenance", "low", line, lineText(document, line), stale.message, {
1485
- whyItMatters: "README.md and AGENTS.md should teach agents the same strict three-root layout that Renma enforces.",
1467
+ findings.push(findingAt(document, DIAGNOSTIC_IDS.DOCS_LAYOUT_INCONSISTENT, "Repository docs contradict the supported layout", "maintenance", "low", line, lineText(document, line), stale.message, {
1468
+ whyItMatters: "README.md and AGENTS.md should describe the current repository model without treating valid Skill-local support as stale.",
1486
1469
  verificationSteps: [
1487
- "Update README.md and AGENTS.md to mention skills/, contexts/, and tools/ canonical roots.",
1470
+ "Confirm docs distinguish canonical Skill roots and valid local support from governed contexts/** assets and shared tools/** helpers.",
1488
1471
  "Run renma scan again.",
1489
1472
  ],
1490
1473
  }));
@@ -1502,6 +1485,11 @@ function contextRootFindings(document) {
1502
1485
  return [];
1503
1486
  }
1504
1487
  function helperRootFindings(document) {
1488
+ const skillPath = classifyRepositorySkillPath(document.artifact.path);
1489
+ if (skillPath?.kind === "support" &&
1490
+ skillPath.supportDirectory === "scripts") {
1491
+ return [];
1492
+ }
1505
1493
  if (document.artifact.path.includes("/scripts/") &&
1506
1494
  !document.artifact.path.startsWith("tools/")) {
1507
1495
  return [
@@ -1522,7 +1510,7 @@ function declaredDependencyLayoutFindings(catalog, paths) {
1522
1510
  continue;
1523
1511
  }
1524
1512
  if (target.startsWith("contexts/") ||
1525
- target.startsWith("skills/") ||
1513
+ normalizeRepositoryRelativePath(target) !== undefined ||
1526
1514
  target.startsWith("tools/")) {
1527
1515
  continue;
1528
1516
  }
@@ -1536,7 +1524,7 @@ function declaredDependencyLayoutFindings(catalog, paths) {
1536
1524
  severity: "low",
1537
1525
  confidence: "medium",
1538
1526
  evidence: metadataFindingEvidence(source.sourcePath, target),
1539
- whyItMatters: "Declared context references should resolve through canonical contexts/**, skills/**, or tools/** repo paths.",
1527
+ whyItMatters: "Declared context references should resolve through canonical contexts/**, skills/**, .agents/skills/**, or tools/** repository paths.",
1540
1528
  remediation: "Rewrite declared required or optional context dependency values to canonical repo-root paths without changing the Skill's operational metadata format.",
1541
1529
  verificationSteps: ["Run renma graph and confirm all edges resolve."],
1542
1530
  details: {
@@ -1561,27 +1549,18 @@ function executableCommands(document) {
1561
1549
  function firstExecutableCommand(document) {
1562
1550
  return executableCommands(document)[0];
1563
1551
  }
1564
- function canonicalHelperTarget(config, scriptPath) {
1565
- const parts = scriptPath.split("/");
1566
- const skillName = parts[1] ?? "unknown";
1567
- const rest = parts.slice(3).join("/");
1568
- const workflow = canonicalWorkflowName(config, skillName);
1569
- return helperAssetPath(config, workflow, `scripts/${rest}`);
1570
- }
1571
- function contextAssetPath(config, workflow, rest) {
1572
- const namespace = config.layout.toolNamespace;
1573
- if (namespace)
1574
- return `contexts/tools/${namespace}/${workflow}/${rest}`;
1575
- return `contexts/${workflow}/${rest}`;
1576
- }
1577
- function helperAssetPath(config, workflow, rest) {
1578
- const namespace = config.layout.toolNamespace;
1579
- if (namespace)
1580
- return `tools/${namespace}/${workflow}/${rest}`;
1581
- return `tools/${workflow}/${rest}`;
1582
- }
1583
- function isCanonicalSkillEntrypoint(pathValue) {
1584
- return /^skills\/[^/]+\/SKILL\.md$/.test(pathValue);
1552
+ function unresolvedHelperCommandFinding(document, command, scriptPath, details = {}) {
1553
+ const unsafePath = details.details?.unsafePath === true;
1554
+ return findingAt(document, DIAGNOSTIC_IDS.PATH_HELPER_COMMAND_UNRESOLVED, "Helper command target does not resolve", "structure", "medium", command.line, command.command, unsafePath
1555
+ ? "Update this command to a path inside the owning Skill's scripts/** directory or to a repository-root tools/** helper; do not escape the Skill with `..`."
1556
+ : `Create \`${scriptPath}\` or update this command to the correct local helper path.`, {
1557
+ whyItMatters: "Agents need shared tools/** helpers and Skill-local scripts to resolve deterministically before running them.",
1558
+ verificationSteps: [
1559
+ "Confirm the command resolves to an existing tools/** helper or to scripts/** inside its owning Skill.",
1560
+ "Run renma readiness and check paths.helper_commands.",
1561
+ ],
1562
+ ...details,
1563
+ });
1585
1564
  }
1586
1565
  function findingAt(document, id, title, category, severity, line, snippet, remediation, details = {}) {
1587
1566
  return {