renma 0.1.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/LICENSE +21 -0
- package/README.md +350 -0
- package/dist/catalog.d.ts +8 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +140 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +301 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/catalog.d.ts +24 -0
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/commands/catalog.js +88 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/graph.d.ts +45 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +344 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/inspect.d.ts +36 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +143 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/ownership.d.ts +50 -0
- package/dist/commands/ownership.d.ts.map +1 -0
- package/dist/commands/ownership.js +154 -0
- package/dist/commands/ownership.js.map +1 -0
- package/dist/commands/readiness.d.ts +64 -0
- package/dist/commands/readiness.d.ts.map +1 -0
- package/dist/commands/readiness.js +614 -0
- package/dist/commands/readiness.js.map +1 -0
- package/dist/commands/scan.d.ts +4 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +12 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/suggest-semantic-split.d.ts +8 -0
- package/dist/commands/suggest-semantic-split.d.ts.map +1 -0
- package/dist/commands/suggest-semantic-split.js +215 -0
- package/dist/commands/suggest-semantic-split.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +184 -0
- package/dist/config.js.map +1 -0
- package/dist/discovery.d.ts +7 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +122 -0
- package/dist/discovery.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown.d.ts +4 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +77 -0
- package/dist/markdown.js.map +1 -0
- package/dist/metadata.d.ts +8 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +61 -0
- package/dist/metadata.js.map +1 -0
- package/dist/model.d.ts +56 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +2 -0
- package/dist/model.js.map +1 -0
- package/dist/report.d.ts +6 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +39 -0
- package/dist/report.js.map +1 -0
- package/dist/rule-engine.d.ts +16 -0
- package/dist/rule-engine.d.ts.map +1 -0
- package/dist/rule-engine.js +10 -0
- package/dist/rule-engine.js.map +1 -0
- package/dist/rules.d.ts +7 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +1413 -0
- package/dist/rules.js.map +1 -0
- package/dist/scanner.d.ts +5 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +104 -0
- package/dist/scanner.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
- package/scripts/split-reference.mjs +172 -0
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
import { graph } from "./graph.js";
|
|
2
|
+
import { scan } from "../scanner.js";
|
|
3
|
+
const MARKDOWN_FINDINGS_LIMIT = 50;
|
|
4
|
+
const WORKFLOW_CLARITY_FINDING_IDS = new Set([
|
|
5
|
+
"QUAL-MISSING-DESCRIPTION",
|
|
6
|
+
"QUAL-SHORT-DESCRIPTION",
|
|
7
|
+
"QUAL-MISSING-NEGATIVE-ROUTING",
|
|
8
|
+
"QUAL-MISSING-ROUTING-CLARITY",
|
|
9
|
+
"QUAL-MISSING-EXAMPLES",
|
|
10
|
+
"QUAL-MISSING-PREFLIGHT",
|
|
11
|
+
"QUAL-MISSING-VERIFICATION",
|
|
12
|
+
"QUAL-LOW-HEADING-DENSITY",
|
|
13
|
+
]);
|
|
14
|
+
const WORKFLOW_REQUIRED_INPUTS_FINDING_IDS = new Set([
|
|
15
|
+
"QUAL-MISSING-REQUIRED-INPUTS",
|
|
16
|
+
]);
|
|
17
|
+
const WORKFLOW_COMPLETION_CRITERIA_FINDING_IDS = new Set([
|
|
18
|
+
"QUAL-MISSING-COMPLETION-CRITERIA",
|
|
19
|
+
]);
|
|
20
|
+
export async function runReadinessCommand(targetPath, options) {
|
|
21
|
+
const report = await readiness(targetPath, options.overrides ?? {});
|
|
22
|
+
process.stdout.write(formatReadiness(report, options.format));
|
|
23
|
+
return report.level === "ready" ? 0 : 1;
|
|
24
|
+
}
|
|
25
|
+
export async function readiness(targetPath, overrides = {}) {
|
|
26
|
+
const [graphReport, scanResult] = await Promise.all([
|
|
27
|
+
graph(targetPath, overrides),
|
|
28
|
+
scan(targetPath, overrides),
|
|
29
|
+
]);
|
|
30
|
+
return buildReadinessReport(graphReport, scanResult.findings, scanResult.diagnostics);
|
|
31
|
+
}
|
|
32
|
+
export function buildReadinessReport(graphReport, findings = [], diagnostics = graphReport.diagnostics ?? []) {
|
|
33
|
+
const diagnosticCounts = countDiagnostics(diagnostics);
|
|
34
|
+
const totalAssets = graphReport.nodes.length;
|
|
35
|
+
const ownedAssets = graphReport.nodes.filter((node) => hasOwner(node.owner)).length;
|
|
36
|
+
const unownedAssets = totalAssets - ownedAssets;
|
|
37
|
+
const ownershipCoveragePercent = percentage(ownedAssets, totalAssets);
|
|
38
|
+
const unresolvedEdges = graphReport.edges.filter((edge) => !edge.resolved);
|
|
39
|
+
const unresolvedBlockingEdges = unresolvedEdges.filter((edge) => edge.kind !== "optional");
|
|
40
|
+
const resolvedEdges = graphReport.edges.length - unresolvedEdges.length;
|
|
41
|
+
const graphResolutionPercent = percentage(resolvedEdges, graphReport.edges.length);
|
|
42
|
+
const lifecycleAssets = graphReport.nodes.filter((node) => node.status === "deprecated" || node.status === "archived");
|
|
43
|
+
/**
|
|
44
|
+
* Workflow checks are static entrypoint-readiness checks.
|
|
45
|
+
* Keep required context strict, optional context advisory, and avoid runtime
|
|
46
|
+
* context selection or prompt/package assembly in this report.
|
|
47
|
+
*/
|
|
48
|
+
const checks = [
|
|
49
|
+
diagnosticsCheck(diagnosticCounts.error, diagnostics),
|
|
50
|
+
ownershipCheck(unownedAssets, totalAssets, graphReport.nodes),
|
|
51
|
+
graphEdgesCheck(unresolvedBlockingEdges),
|
|
52
|
+
workflowContextClosureCheck(graphReport),
|
|
53
|
+
workflowOptionalContextCheck(graphReport),
|
|
54
|
+
workflowClarityCheck(findings),
|
|
55
|
+
workflowRequiredInputsCheck(findings),
|
|
56
|
+
workflowCompletionCriteriaCheck(findings),
|
|
57
|
+
lifecycleCheck(lifecycleAssets),
|
|
58
|
+
minimumInventoryCheck(totalAssets),
|
|
59
|
+
findingCheck("layout.skills_thin", "Thin skill entrypoints", findings, ["LAYOUT-SKILL-NOT-THIN", "LAYOUT-SKILL-EXECUTABLE-COMMAND"], "warn", "All skill entrypoints are thin routers."),
|
|
60
|
+
findingCheck("layout.disallowed_skill_assets", "Disallowed skill-local assets", findings, ["LAYOUT-DISALLOWED-SKILL-ASSET"], "fail", "No canonical references, profiles, examples, or scripts live under skills/**."),
|
|
61
|
+
findingCheck("layout.context_root", "Canonical context root", findings, ["LAYOUT-CONTEXT-LEGACY-ROOT", "LAYOUT-CONTEXT-REFERENCE-NON_CANONICAL"], "warn", "Context assets and declared context paths use canonical roots."),
|
|
62
|
+
findingCheck("layout.helper_root", "Canonical helper root", findings, ["LAYOUT-HELPER-NON_TOOLS"], "fail", "Helper assets live under tools/**."),
|
|
63
|
+
findingCheck("paths.helper_commands", "Helper command paths", findings, [
|
|
64
|
+
"PATH-HELPER-COMMAND-SKILL-SCRIPTS",
|
|
65
|
+
"PATH-HELPER-COMMAND-NON_TOOLS",
|
|
66
|
+
"PATH-HELPER-COMMAND-UNRESOLVED",
|
|
67
|
+
], "fail", "Markdown helper commands resolve to tools/**."),
|
|
68
|
+
findingCheck("docs.layout_consistency", "Layout documentation consistency", findings, ["DOCS-LAYOUT-INCONSISTENT"], "warn", "Repository docs describe the strict three-root layout."),
|
|
69
|
+
];
|
|
70
|
+
const ownershipPenalty = totalAssets === 0 ? 0 : Math.round((unownedAssets / totalAssets) * 20);
|
|
71
|
+
const layoutPenalty = layoutReadinessPenalty(checks);
|
|
72
|
+
const hasWorkflowClarityWarning = checks.some((check) => check.id === "workflow.clarity" && check.status === "warn");
|
|
73
|
+
const hasWorkflowOptionalContextWarning = checks.some((check) => check.id === "workflow.optional_context" && check.status === "warn");
|
|
74
|
+
const hasWorkflowRequiredInputsWarning = checks.some((check) => check.id === "workflow.required_inputs" && check.status === "warn");
|
|
75
|
+
const hasWorkflowCompletionCriteriaWarning = checks.some((check) => check.id === "workflow.completion_criteria" && check.status === "warn");
|
|
76
|
+
const workflowClarityPenalty = hasWorkflowClarityWarning ? 15 : 0;
|
|
77
|
+
const workflowOptionalContextPenalty = hasWorkflowOptionalContextWarning
|
|
78
|
+
? 5
|
|
79
|
+
: 0;
|
|
80
|
+
const workflowRequiredInputsPenalty = hasWorkflowRequiredInputsWarning
|
|
81
|
+
? 10
|
|
82
|
+
: 0;
|
|
83
|
+
const workflowCompletionCriteriaPenalty = hasWorkflowCompletionCriteriaWarning
|
|
84
|
+
? 15
|
|
85
|
+
: 0;
|
|
86
|
+
const score = Math.max(0, 100 -
|
|
87
|
+
(diagnosticCounts.error > 0 ? 40 : 0) -
|
|
88
|
+
(unresolvedBlockingEdges.length > 0 ? 30 : 0) -
|
|
89
|
+
ownershipPenalty -
|
|
90
|
+
(totalAssets === 0 ? 10 : 0) -
|
|
91
|
+
(lifecycleAssets.length > 0 ? 5 : 0) -
|
|
92
|
+
layoutPenalty -
|
|
93
|
+
workflowClarityPenalty -
|
|
94
|
+
workflowOptionalContextPenalty -
|
|
95
|
+
workflowRequiredInputsPenalty -
|
|
96
|
+
workflowCompletionCriteriaPenalty);
|
|
97
|
+
const hasFailingCheck = checks.some((check) => check.status === "fail");
|
|
98
|
+
const level = readinessLevel(score, hasFailingCheck);
|
|
99
|
+
const workflow = workflowSummary(graphReport, checks);
|
|
100
|
+
return {
|
|
101
|
+
root: graphReport.root,
|
|
102
|
+
...(graphReport.configPath ? { configPath: graphReport.configPath } : {}),
|
|
103
|
+
scannedFileCount: graphReport.scannedFileCount,
|
|
104
|
+
score,
|
|
105
|
+
level,
|
|
106
|
+
summary: {
|
|
107
|
+
totalAssets,
|
|
108
|
+
ownedAssets,
|
|
109
|
+
unownedAssets,
|
|
110
|
+
ownershipCoveragePercent,
|
|
111
|
+
nodeCount: graphReport.nodeCount,
|
|
112
|
+
edgeCount: graphReport.edgeCount,
|
|
113
|
+
resolvedEdges,
|
|
114
|
+
unresolvedEdges: unresolvedEdges.length,
|
|
115
|
+
graphResolutionPercent,
|
|
116
|
+
diagnosticCounts,
|
|
117
|
+
workflow,
|
|
118
|
+
},
|
|
119
|
+
checks,
|
|
120
|
+
...(diagnostics.length > 0 ? { diagnostics } : {}),
|
|
121
|
+
...(findings.length > 0 ? { findings } : {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export function formatReadinessJson(report) {
|
|
125
|
+
return `${JSON.stringify(report, null, 2)}\n`;
|
|
126
|
+
}
|
|
127
|
+
function workflowReadinessSummaryLine(report) {
|
|
128
|
+
const workflow = report.summary.workflow;
|
|
129
|
+
return `- Workflow readiness: ${workflow.readinessPercent}% (${workflow.pass}/${workflow.checks} workflow checks passing)`;
|
|
130
|
+
}
|
|
131
|
+
function graphResolutionSummaryLine(report) {
|
|
132
|
+
return `- Graph resolution: ${report.summary.graphResolutionPercent}% (${report.summary.resolvedEdges}/${report.summary.edgeCount} edges resolved)`;
|
|
133
|
+
}
|
|
134
|
+
function ownershipSummaryLine(report) {
|
|
135
|
+
return `- Ownership coverage: ${report.summary.ownershipCoveragePercent}% (${report.summary.ownedAssets}/${report.summary.totalAssets} assets owned)`;
|
|
136
|
+
}
|
|
137
|
+
export function formatReadinessMarkdown(report) {
|
|
138
|
+
const lines = [
|
|
139
|
+
"# Agent Readiness",
|
|
140
|
+
"",
|
|
141
|
+
`- Root: ${report.root}`,
|
|
142
|
+
...(report.configPath ? [`- Config: ${report.configPath}`] : []),
|
|
143
|
+
`- Level: ${report.level}`,
|
|
144
|
+
`- Score: ${report.score}`,
|
|
145
|
+
workflowReadinessSummaryLine(report),
|
|
146
|
+
graphResolutionSummaryLine(report),
|
|
147
|
+
ownershipSummaryLine(report),
|
|
148
|
+
"",
|
|
149
|
+
"| Metric | Value |",
|
|
150
|
+
"| --- | ---: |",
|
|
151
|
+
`| Total assets | ${report.summary.totalAssets} |`,
|
|
152
|
+
`| Owned assets | ${report.summary.ownedAssets} |`,
|
|
153
|
+
`| Unowned assets | ${report.summary.unownedAssets} |`,
|
|
154
|
+
`| Ownership coverage | ${report.summary.ownershipCoveragePercent}% |`,
|
|
155
|
+
`| Graph nodes | ${report.summary.nodeCount} |`,
|
|
156
|
+
`| Graph edges | ${report.summary.edgeCount} |`,
|
|
157
|
+
`| Resolved edges | ${report.summary.resolvedEdges} |`,
|
|
158
|
+
`| Unresolved edges | ${report.summary.unresolvedEdges} |`,
|
|
159
|
+
`| Graph resolution | ${report.summary.graphResolutionPercent}% |`,
|
|
160
|
+
`| Diagnostic errors | ${report.summary.diagnosticCounts.error} |`,
|
|
161
|
+
`| Diagnostic warnings | ${report.summary.diagnosticCounts.warning} |`,
|
|
162
|
+
`| Diagnostic info | ${report.summary.diagnosticCounts.info} |`,
|
|
163
|
+
"",
|
|
164
|
+
"## Workflow Readiness",
|
|
165
|
+
"",
|
|
166
|
+
"| Metric | Value |",
|
|
167
|
+
"| --- | ---: |",
|
|
168
|
+
`| Skill entrypoints | ${report.summary.workflow.skillEntrypoints} |`,
|
|
169
|
+
`| Workflow checks | ${report.summary.workflow.checks} |`,
|
|
170
|
+
`| Passed workflow checks | ${report.summary.workflow.pass} |`,
|
|
171
|
+
`| Warning workflow checks | ${report.summary.workflow.warn} |`,
|
|
172
|
+
`| Failing workflow checks | ${report.summary.workflow.fail} |`,
|
|
173
|
+
`| Workflow readiness | ${report.summary.workflow.readinessPercent}% |`,
|
|
174
|
+
"",
|
|
175
|
+
"| Check | Status | Severity | Summary |",
|
|
176
|
+
"| --- | --- | --- | --- |",
|
|
177
|
+
...report.checks.map((check) => `| ${check.id} | ${check.status} | ${check.severity} | ${escapeTableCell(check.summary)} |`),
|
|
178
|
+
];
|
|
179
|
+
if (report.diagnostics && report.diagnostics.length > 0) {
|
|
180
|
+
lines.push("", "## Diagnostics", "");
|
|
181
|
+
lines.push(...report.diagnostics.map((diagnostic) => {
|
|
182
|
+
const path = diagnostic.path ? `${diagnostic.path}: ` : "";
|
|
183
|
+
return `- ${diagnostic.severity}: ${path}${diagnostic.message}`;
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
if (report.findings?.length) {
|
|
187
|
+
lines.push("", "## Findings", "");
|
|
188
|
+
const displayedFindings = report.findings.slice(0, MARKDOWN_FINDINGS_LIMIT);
|
|
189
|
+
for (const finding of displayedFindings) {
|
|
190
|
+
lines.push(`- ${formatMarkdownFinding(finding)}`);
|
|
191
|
+
lines.push(` - Remediation: ${finding.remediation}`);
|
|
192
|
+
if (finding.llmHint)
|
|
193
|
+
lines.push(` - LLM hint: ${finding.llmHint}`);
|
|
194
|
+
}
|
|
195
|
+
const omittedCount = report.findings.length - displayedFindings.length;
|
|
196
|
+
if (omittedCount > 0) {
|
|
197
|
+
lines.push(`... ${omittedCount} more findings omitted from markdown output. Use --json for the full report.`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return `${lines.join("\n")}\n`;
|
|
201
|
+
}
|
|
202
|
+
export function formatReadiness(report, format) {
|
|
203
|
+
return format === "json"
|
|
204
|
+
? formatReadinessJson(report)
|
|
205
|
+
: formatReadinessMarkdown(report);
|
|
206
|
+
}
|
|
207
|
+
function formatMarkdownFinding(finding) {
|
|
208
|
+
const { path, startLine, endLine } = finding.evidence;
|
|
209
|
+
const location = startLine === endLine
|
|
210
|
+
? `${path}:${startLine}`
|
|
211
|
+
: `${path}:${startLine}-${endLine}`;
|
|
212
|
+
return `${finding.id} [${finding.severity}/${finding.category}] ${location}`;
|
|
213
|
+
}
|
|
214
|
+
function diagnosticsCheck(errorCount, diagnostics) {
|
|
215
|
+
if (errorCount === 0) {
|
|
216
|
+
return {
|
|
217
|
+
id: "diagnostics.errors",
|
|
218
|
+
title: "Diagnostic errors",
|
|
219
|
+
status: "pass",
|
|
220
|
+
severity: "info",
|
|
221
|
+
summary: "No error diagnostics were reported.",
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
id: "diagnostics.errors",
|
|
226
|
+
title: "Diagnostic errors",
|
|
227
|
+
status: "fail",
|
|
228
|
+
severity: "error",
|
|
229
|
+
summary: `${errorCount} error diagnostic${errorCount === 1 ? "" : "s"} reported.`,
|
|
230
|
+
evidence: diagnostics
|
|
231
|
+
.filter((diagnostic) => diagnostic.severity === "error")
|
|
232
|
+
.map((diagnostic) => ({
|
|
233
|
+
...(diagnostic.path ? { path: diagnostic.path } : {}),
|
|
234
|
+
message: diagnostic.message,
|
|
235
|
+
})),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
function ownershipCheck(unownedAssets, totalAssets, nodes) {
|
|
239
|
+
if (unownedAssets === 0) {
|
|
240
|
+
return {
|
|
241
|
+
id: "ownership.coverage",
|
|
242
|
+
title: "Ownership coverage",
|
|
243
|
+
status: "pass",
|
|
244
|
+
severity: "info",
|
|
245
|
+
summary: totalAssets === 0
|
|
246
|
+
? "No assets were cataloged."
|
|
247
|
+
: "All cataloged assets declare an owner.",
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
id: "ownership.coverage",
|
|
252
|
+
title: "Ownership coverage",
|
|
253
|
+
status: "warn",
|
|
254
|
+
severity: "warning",
|
|
255
|
+
summary: `${unownedAssets} of ${totalAssets} cataloged assets do not declare an owner.`,
|
|
256
|
+
evidence: nodes
|
|
257
|
+
.filter((node) => !hasOwner(node.owner))
|
|
258
|
+
.map((node) => ({
|
|
259
|
+
id: node.id,
|
|
260
|
+
path: node.sourcePath,
|
|
261
|
+
message: "Missing owner metadata.",
|
|
262
|
+
})),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function graphEdgesCheck(unresolvedEdges) {
|
|
266
|
+
if (unresolvedEdges.length === 0) {
|
|
267
|
+
return {
|
|
268
|
+
id: "graph.unresolved_edges",
|
|
269
|
+
title: "Unresolved graph edges",
|
|
270
|
+
status: "pass",
|
|
271
|
+
severity: "info",
|
|
272
|
+
summary: "All declared graph edges resolve.",
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
id: "graph.unresolved_edges",
|
|
277
|
+
title: "Unresolved graph edges",
|
|
278
|
+
status: "fail",
|
|
279
|
+
severity: "error",
|
|
280
|
+
summary: `${unresolvedEdges.length} declared graph edge${unresolvedEdges.length === 1 ? "" : "s"} could not be resolved.`,
|
|
281
|
+
evidence: unresolvedEdges.map((edge) => ({
|
|
282
|
+
id: edge.from,
|
|
283
|
+
path: edge.sourcePath,
|
|
284
|
+
message: `${edge.kind} reference "${edge.to}" does not resolve.`,
|
|
285
|
+
})),
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
function workflowContextClosureCheck(graphReport) {
|
|
289
|
+
const skills = graphReport.nodes.filter((node) => node.kind === "skill");
|
|
290
|
+
if (skills.length === 0) {
|
|
291
|
+
return {
|
|
292
|
+
id: "workflow.context_closure",
|
|
293
|
+
title: "Workflow context closure",
|
|
294
|
+
status: "pass",
|
|
295
|
+
severity: "info",
|
|
296
|
+
summary: "No skill workflow entrypoints were cataloged.",
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
const nodesById = new Map(graphReport.nodes.map((node) => [node.id, node]));
|
|
300
|
+
const nodesByPath = new Map(graphReport.nodes.map((node) => [
|
|
301
|
+
normalizeGraphPath(node.sourcePath),
|
|
302
|
+
node,
|
|
303
|
+
]));
|
|
304
|
+
const requiredEdges = graphReport.edges.filter((edge) => edge.kind === "requires" && nodesById.get(edge.from)?.kind === "skill");
|
|
305
|
+
const problems = requiredEdges.flatMap((edge) => {
|
|
306
|
+
const target = edge.resolved
|
|
307
|
+
? resolveWorkflowContextTarget(edge, nodesById, nodesByPath)
|
|
308
|
+
: undefined;
|
|
309
|
+
if (target === undefined) {
|
|
310
|
+
return [
|
|
311
|
+
{
|
|
312
|
+
id: edge.from,
|
|
313
|
+
path: edge.sourcePath,
|
|
314
|
+
message: `Required context reference "${edge.to}" does not resolve.`,
|
|
315
|
+
},
|
|
316
|
+
];
|
|
317
|
+
}
|
|
318
|
+
if (target.status === "deprecated" || target.status === "archived") {
|
|
319
|
+
return [
|
|
320
|
+
{
|
|
321
|
+
id: edge.from,
|
|
322
|
+
path: edge.sourcePath,
|
|
323
|
+
message: `Required context "${edge.to}" resolves to ${target.status} asset ${target.sourcePath}.`,
|
|
324
|
+
},
|
|
325
|
+
];
|
|
326
|
+
}
|
|
327
|
+
return [];
|
|
328
|
+
});
|
|
329
|
+
if (problems.length === 0) {
|
|
330
|
+
return {
|
|
331
|
+
id: "workflow.context_closure",
|
|
332
|
+
title: "Workflow context closure",
|
|
333
|
+
status: "pass",
|
|
334
|
+
severity: "info",
|
|
335
|
+
summary: "All skill required context references resolve to usable assets.",
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
id: "workflow.context_closure",
|
|
340
|
+
title: "Workflow context closure",
|
|
341
|
+
status: "fail",
|
|
342
|
+
severity: "error",
|
|
343
|
+
summary: `${problems.length} required workflow context reference${problems.length === 1 ? "" : "s"} did not close.`,
|
|
344
|
+
evidence: problems,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
function workflowOptionalContextCheck(graphReport) {
|
|
348
|
+
const nodesById = new Map(graphReport.nodes.map((node) => [node.id, node]));
|
|
349
|
+
const optionalEdges = graphReport.edges.filter((edge) => edge.kind === "optional" && nodesById.get(edge.from)?.kind === "skill");
|
|
350
|
+
if (optionalEdges.length === 0) {
|
|
351
|
+
return {
|
|
352
|
+
id: "workflow.optional_context",
|
|
353
|
+
title: "Workflow optional context",
|
|
354
|
+
status: "pass",
|
|
355
|
+
severity: "info",
|
|
356
|
+
summary: "No optional workflow context references were declared.",
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
const nodesByPath = new Map(graphReport.nodes.map((node) => [
|
|
360
|
+
normalizeGraphPath(node.sourcePath),
|
|
361
|
+
node,
|
|
362
|
+
]));
|
|
363
|
+
const problems = optionalEdges.flatMap((edge) => {
|
|
364
|
+
const target = edge.resolved
|
|
365
|
+
? resolveWorkflowContextTarget(edge, nodesById, nodesByPath)
|
|
366
|
+
: undefined;
|
|
367
|
+
if (target === undefined) {
|
|
368
|
+
return [
|
|
369
|
+
{
|
|
370
|
+
id: edge.from,
|
|
371
|
+
path: edge.sourcePath,
|
|
372
|
+
message: `Optional context reference "${edge.to}" does not resolve.`,
|
|
373
|
+
},
|
|
374
|
+
];
|
|
375
|
+
}
|
|
376
|
+
if (target.status === "deprecated" || target.status === "archived") {
|
|
377
|
+
return [
|
|
378
|
+
{
|
|
379
|
+
id: edge.from,
|
|
380
|
+
path: edge.sourcePath,
|
|
381
|
+
message: `Optional context "${edge.to}" resolves to ${target.status} asset ${target.sourcePath}.`,
|
|
382
|
+
},
|
|
383
|
+
];
|
|
384
|
+
}
|
|
385
|
+
return [];
|
|
386
|
+
});
|
|
387
|
+
if (problems.length === 0) {
|
|
388
|
+
return {
|
|
389
|
+
id: "workflow.optional_context",
|
|
390
|
+
title: "Workflow optional context",
|
|
391
|
+
status: "pass",
|
|
392
|
+
severity: "info",
|
|
393
|
+
summary: "All declared optional workflow context references are usable.",
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
return {
|
|
397
|
+
id: "workflow.optional_context",
|
|
398
|
+
title: "Workflow optional context",
|
|
399
|
+
status: "warn",
|
|
400
|
+
severity: "warning",
|
|
401
|
+
summary: `${problems.length} optional workflow context reference(s) need attention.`,
|
|
402
|
+
evidence: problems,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
function resolveWorkflowContextTarget(edge, nodesById, nodesByPath) {
|
|
406
|
+
if (edge.targetId !== undefined) {
|
|
407
|
+
const byTargetId = nodesById.get(edge.targetId);
|
|
408
|
+
if (byTargetId !== undefined)
|
|
409
|
+
return byTargetId;
|
|
410
|
+
}
|
|
411
|
+
if (edge.targetPath !== undefined) {
|
|
412
|
+
const byTargetPath = nodesByPath.get(normalizeGraphPath(edge.targetPath));
|
|
413
|
+
if (byTargetPath !== undefined)
|
|
414
|
+
return byTargetPath;
|
|
415
|
+
}
|
|
416
|
+
return nodesById.get(edge.to) ?? nodesByPath.get(normalizeGraphPath(edge.to));
|
|
417
|
+
}
|
|
418
|
+
function workflowClarityCheck(findings) {
|
|
419
|
+
const matched = findings.filter((finding) => WORKFLOW_CLARITY_FINDING_IDS.has(finding.id) &&
|
|
420
|
+
isSkillEntrypointPath(finding.evidence.path));
|
|
421
|
+
if (matched.length === 0) {
|
|
422
|
+
return {
|
|
423
|
+
id: "workflow.clarity",
|
|
424
|
+
title: "Workflow clarity",
|
|
425
|
+
status: "pass",
|
|
426
|
+
severity: "info",
|
|
427
|
+
summary: "All skill workflow entrypoints include static routing clarity.",
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
return {
|
|
431
|
+
id: "workflow.clarity",
|
|
432
|
+
title: "Workflow clarity",
|
|
433
|
+
status: "warn",
|
|
434
|
+
severity: "warning",
|
|
435
|
+
summary: `${matched.length} workflow clarity finding${matched.length === 1 ? "" : "s"} matched skill entrypoints.`,
|
|
436
|
+
evidence: matched.map((finding) => ({
|
|
437
|
+
id: finding.id,
|
|
438
|
+
path: finding.evidence.path,
|
|
439
|
+
message: finding.remediation,
|
|
440
|
+
})),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
function workflowRequiredInputsCheck(findings) {
|
|
444
|
+
const matched = findings.filter((finding) => WORKFLOW_REQUIRED_INPUTS_FINDING_IDS.has(finding.id) &&
|
|
445
|
+
isSkillEntrypointPath(finding.evidence.path));
|
|
446
|
+
if (matched.length === 0) {
|
|
447
|
+
return {
|
|
448
|
+
id: "workflow.required_inputs",
|
|
449
|
+
title: "Workflow required inputs",
|
|
450
|
+
status: "pass",
|
|
451
|
+
severity: "info",
|
|
452
|
+
summary: "All skill workflow entrypoints document required inputs or prerequisites.",
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
return {
|
|
456
|
+
id: "workflow.required_inputs",
|
|
457
|
+
title: "Workflow required inputs",
|
|
458
|
+
status: "warn",
|
|
459
|
+
severity: "warning",
|
|
460
|
+
summary: `${matched.length} workflow required-input finding${matched.length === 1 ? "" : "s"} matched skill entrypoints.`,
|
|
461
|
+
evidence: matched.map((finding) => ({
|
|
462
|
+
id: finding.id,
|
|
463
|
+
path: finding.evidence.path,
|
|
464
|
+
message: finding.remediation,
|
|
465
|
+
})),
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
function workflowCompletionCriteriaCheck(findings) {
|
|
469
|
+
const matched = findings.filter((finding) => WORKFLOW_COMPLETION_CRITERIA_FINDING_IDS.has(finding.id) &&
|
|
470
|
+
isSkillEntrypointPath(finding.evidence.path));
|
|
471
|
+
if (matched.length === 0) {
|
|
472
|
+
return {
|
|
473
|
+
id: "workflow.completion_criteria",
|
|
474
|
+
title: "Workflow completion criteria",
|
|
475
|
+
status: "pass",
|
|
476
|
+
severity: "info",
|
|
477
|
+
summary: "All skill workflow entrypoints document completion criteria.",
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
return {
|
|
481
|
+
id: "workflow.completion_criteria",
|
|
482
|
+
title: "Workflow completion criteria",
|
|
483
|
+
status: "warn",
|
|
484
|
+
severity: "warning",
|
|
485
|
+
summary: `${matched.length} workflow completion-criteria finding${matched.length === 1 ? "" : "s"} matched skill entrypoints.`,
|
|
486
|
+
evidence: matched.map((finding) => ({
|
|
487
|
+
id: finding.id,
|
|
488
|
+
path: finding.evidence.path,
|
|
489
|
+
message: finding.remediation,
|
|
490
|
+
})),
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
function lifecycleCheck(nodes) {
|
|
494
|
+
if (nodes.length === 0) {
|
|
495
|
+
return {
|
|
496
|
+
id: "assets.lifecycle",
|
|
497
|
+
title: "Asset lifecycle",
|
|
498
|
+
status: "pass",
|
|
499
|
+
severity: "info",
|
|
500
|
+
summary: "No deprecated or archived assets were cataloged.",
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
return {
|
|
504
|
+
id: "assets.lifecycle",
|
|
505
|
+
title: "Asset lifecycle",
|
|
506
|
+
status: "warn",
|
|
507
|
+
severity: "warning",
|
|
508
|
+
summary: `${nodes.length} deprecated or archived asset${nodes.length === 1 ? "" : "s"} cataloged.`,
|
|
509
|
+
evidence: nodes.map((node) => ({
|
|
510
|
+
id: node.id,
|
|
511
|
+
path: node.sourcePath,
|
|
512
|
+
message: `Asset status is ${node.status}.`,
|
|
513
|
+
})),
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
function minimumInventoryCheck(totalAssets) {
|
|
517
|
+
if (totalAssets > 0) {
|
|
518
|
+
return {
|
|
519
|
+
id: "assets.minimum_inventory",
|
|
520
|
+
title: "Minimum inventory",
|
|
521
|
+
status: "pass",
|
|
522
|
+
severity: "info",
|
|
523
|
+
summary: `${totalAssets} cataloged asset${totalAssets === 1 ? "" : "s"} found.`,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
return {
|
|
527
|
+
id: "assets.minimum_inventory",
|
|
528
|
+
title: "Minimum inventory",
|
|
529
|
+
status: "fail",
|
|
530
|
+
severity: "error",
|
|
531
|
+
summary: "No cataloged assets were found.",
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
function findingCheck(id, title, findings, findingIds, failingStatus, passSummary) {
|
|
535
|
+
const matched = findings.filter((finding) => findingIds.includes(finding.id));
|
|
536
|
+
if (matched.length === 0) {
|
|
537
|
+
return {
|
|
538
|
+
id,
|
|
539
|
+
title,
|
|
540
|
+
status: "pass",
|
|
541
|
+
severity: "info",
|
|
542
|
+
summary: passSummary,
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
return {
|
|
546
|
+
id,
|
|
547
|
+
title,
|
|
548
|
+
status: failingStatus,
|
|
549
|
+
severity: failingStatus === "fail" ? "error" : "warning",
|
|
550
|
+
summary: `${matched.length} strict layout finding${matched.length === 1 ? "" : "s"} matched this check.`,
|
|
551
|
+
evidence: matched.map((finding) => ({
|
|
552
|
+
id: finding.id,
|
|
553
|
+
path: finding.evidence.path,
|
|
554
|
+
message: finding.remediation,
|
|
555
|
+
})),
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
function layoutReadinessPenalty(checks) {
|
|
559
|
+
return checks.reduce((penalty, check) => {
|
|
560
|
+
if (!check.id.startsWith("layout.") && check.id !== "paths.helper_commands")
|
|
561
|
+
return penalty;
|
|
562
|
+
if (check.status === "fail")
|
|
563
|
+
return penalty + 15;
|
|
564
|
+
if (check.status === "warn")
|
|
565
|
+
return penalty + 5;
|
|
566
|
+
return penalty;
|
|
567
|
+
}, 0);
|
|
568
|
+
}
|
|
569
|
+
function workflowSummary(graphReport, checks) {
|
|
570
|
+
const workflowChecks = checks.filter((check) => check.id.startsWith("workflow."));
|
|
571
|
+
const pass = workflowChecks.filter((check) => check.status === "pass").length;
|
|
572
|
+
const warn = workflowChecks.filter((check) => check.status === "warn").length;
|
|
573
|
+
const fail = workflowChecks.filter((check) => check.status === "fail").length;
|
|
574
|
+
return {
|
|
575
|
+
skillEntrypoints: graphReport.nodes.filter((node) => node.kind === "skill")
|
|
576
|
+
.length,
|
|
577
|
+
checks: workflowChecks.length,
|
|
578
|
+
pass,
|
|
579
|
+
warn,
|
|
580
|
+
fail,
|
|
581
|
+
readinessPercent: percentage(pass, workflowChecks.length),
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
function countDiagnostics(diagnostics) {
|
|
585
|
+
return diagnostics.reduce((counts, diagnostic) => ({
|
|
586
|
+
...counts,
|
|
587
|
+
[diagnostic.severity]: counts[diagnostic.severity] + 1,
|
|
588
|
+
}), { error: 0, warning: 0, info: 0 });
|
|
589
|
+
}
|
|
590
|
+
function readinessLevel(score, hasFailingCheck) {
|
|
591
|
+
if (score >= 90 && !hasFailingCheck)
|
|
592
|
+
return "ready";
|
|
593
|
+
if (score < 60 || hasFailingCheck)
|
|
594
|
+
return "not_ready";
|
|
595
|
+
return "needs_attention";
|
|
596
|
+
}
|
|
597
|
+
function percentage(numerator, denominator) {
|
|
598
|
+
if (denominator === 0)
|
|
599
|
+
return 100;
|
|
600
|
+
return Math.round((numerator / denominator) * 100);
|
|
601
|
+
}
|
|
602
|
+
function hasOwner(owner) {
|
|
603
|
+
return owner !== undefined && owner.trim().length > 0;
|
|
604
|
+
}
|
|
605
|
+
function isSkillEntrypointPath(path) {
|
|
606
|
+
return /^skills\/[^/]+\/SKILL\.md$/.test(normalizeGraphPath(path));
|
|
607
|
+
}
|
|
608
|
+
function normalizeGraphPath(path) {
|
|
609
|
+
return path.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
610
|
+
}
|
|
611
|
+
function escapeTableCell(value) {
|
|
612
|
+
return value.replaceAll("|", "\\|").replace(/\s+/g, " ");
|
|
613
|
+
}
|
|
614
|
+
//# sourceMappingURL=readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src/commands/readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ConfigOverrides } from "../config.js";
|
|
2
|
+
/** Execute the scan command, write its report to stdout, and return an exit code. */
|
|
3
|
+
export declare function runScanCommand(target: string, overrides: ConfigOverrides): Promise<number>;
|
|
4
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,qFAAqF;AACrF,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,MAAM,CAAC,CAWjB"}
|