@openclaw/plugin-inspector 0.1.0 → 0.1.1
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/CHANGELOG.md +6 -0
- package/README.md +6 -104
- package/package.json +3 -2
- package/src/advanced.js +186 -0
- package/src/api.js +85 -0
- package/src/cli.js +6 -23
- package/src/index.js +8 -184
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
<img src="docs/plugin-inspector-banner.jpg" alt="openclaw plugin inspector banner"/>
|
|
2
|
+
|
|
3
|
+
# 💊 OpenClaw Plugin Inspector
|
|
2
4
|
|
|
3
5
|
`plugin-inspector` is the reusable OpenClaw plugin compatibility inspector. It
|
|
4
6
|
wraps the static inspection, registration capture, and report model prototyped
|
|
5
7
|
in crabpot into an npm-publishable package.
|
|
6
8
|
|
|
7
|
-
No npm package has been published yet.
|
|
8
|
-
|
|
9
9
|
## Install
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Install it as a dev dependency in a plugin repo:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npm install --save-dev
|
|
15
|
-
npx plugin-inspector check --no-openclaw
|
|
14
|
+
npm install --save-dev @openclaw/plugin-inspector
|
|
16
15
|
```
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
dependency and run it from the plugin root:
|
|
17
|
+
Then run it from the plugin root:
|
|
20
18
|
|
|
21
19
|
```bash
|
|
22
|
-
npm install --save-dev @openclaw/plugin-inspector
|
|
23
20
|
npx @openclaw/plugin-inspector check
|
|
24
21
|
```
|
|
25
22
|
|
|
@@ -143,101 +140,6 @@ jobs:
|
|
|
143
140
|
path: reports/plugin-inspector-*
|
|
144
141
|
```
|
|
145
142
|
|
|
146
|
-
## API
|
|
147
|
-
|
|
148
|
-
```js
|
|
149
|
-
import {
|
|
150
|
-
buildCiSummary,
|
|
151
|
-
buildCiPolicyReport,
|
|
152
|
-
buildColdImportReadiness,
|
|
153
|
-
buildContractCapture,
|
|
154
|
-
buildExecutionResultsReport,
|
|
155
|
-
buildImportLoopProfile,
|
|
156
|
-
buildPlatformProbes,
|
|
157
|
-
buildProfileDiff,
|
|
158
|
-
buildRefDiff,
|
|
159
|
-
buildRuntimeProfile,
|
|
160
|
-
buildRuntimeCaptureReport,
|
|
161
|
-
buildWorkspacePlan,
|
|
162
|
-
createCaptureApi,
|
|
163
|
-
inspectFixtureSet,
|
|
164
|
-
loadInspectorConfig,
|
|
165
|
-
readOpenClawTargetSurface,
|
|
166
|
-
renderCiPolicyMarkdown,
|
|
167
|
-
renderColdImportReadinessMarkdown,
|
|
168
|
-
renderContractCaptureMarkdown,
|
|
169
|
-
renderExecutionResultsMarkdown,
|
|
170
|
-
renderImportLoopProfileMarkdown,
|
|
171
|
-
renderPlatformProbesMarkdown,
|
|
172
|
-
renderProfileDiffMarkdown,
|
|
173
|
-
renderRefDiffMarkdown,
|
|
174
|
-
renderRuntimeProfileMarkdown,
|
|
175
|
-
renderRuntimeCaptureMarkdown,
|
|
176
|
-
renderWorkspacePlanMarkdown,
|
|
177
|
-
renderMarkdownReport,
|
|
178
|
-
validateCiPolicyReport,
|
|
179
|
-
validateContractCoverage,
|
|
180
|
-
writeCiSummary,
|
|
181
|
-
writeCiPolicyReport,
|
|
182
|
-
writeColdImportReadiness,
|
|
183
|
-
writeContractCapture,
|
|
184
|
-
writeExecutionResultsReport,
|
|
185
|
-
writeImportLoopProfile,
|
|
186
|
-
writePlatformProbes,
|
|
187
|
-
writeProfileDiff,
|
|
188
|
-
writeRefDiff,
|
|
189
|
-
writeRuntimeProfile,
|
|
190
|
-
writeRuntimeCaptureReport,
|
|
191
|
-
writeWorkspacePlan,
|
|
192
|
-
writeReport,
|
|
193
|
-
} from "@openclaw/plugin-inspector";
|
|
194
|
-
|
|
195
|
-
const config = await loadInspectorConfig("crabpot.config.json");
|
|
196
|
-
const report = await inspectFixtureSet(config);
|
|
197
|
-
await writeReport(report, { outDir: "reports" });
|
|
198
|
-
|
|
199
|
-
const summary = await buildCiSummary({ reportsDir: "reports" });
|
|
200
|
-
await writeCiSummary(summary);
|
|
201
|
-
|
|
202
|
-
const policyReport = buildCiPolicyReport({ policy, compatibilityReport: report });
|
|
203
|
-
await writeCiPolicyReport(policyReport);
|
|
204
|
-
|
|
205
|
-
const capture = buildContractCapture({ report });
|
|
206
|
-
await writeContractCapture(capture);
|
|
207
|
-
const coverageErrors = validateContractCoverage(report);
|
|
208
|
-
|
|
209
|
-
const readiness = buildColdImportReadiness({ report });
|
|
210
|
-
await writeColdImportReadiness(readiness);
|
|
211
|
-
|
|
212
|
-
const target = await readOpenClawTargetSurface({ manifest: config });
|
|
213
|
-
|
|
214
|
-
const workspacePlan = await buildWorkspacePlan({ report, readiness });
|
|
215
|
-
await writeWorkspacePlan(workspacePlan);
|
|
216
|
-
|
|
217
|
-
const platformProbes = buildPlatformProbes({ plan: workspacePlan });
|
|
218
|
-
await writePlatformProbes(platformProbes);
|
|
219
|
-
|
|
220
|
-
const executionResults = await buildExecutionResultsReport({ resultsDir: ".plugin-inspector/results" });
|
|
221
|
-
await writeExecutionResultsReport(executionResults);
|
|
222
|
-
|
|
223
|
-
const importLoop = await buildImportLoopProfile({ entrypoint: "dist/index.js", runs: 3 });
|
|
224
|
-
await writeImportLoopProfile(importLoop);
|
|
225
|
-
|
|
226
|
-
const runtimeProfile = await buildRuntimeProfile({
|
|
227
|
-
commands: [{ id: "node-boot", label: "Node boot", category: "baseline", args: ["-e", "0"] }],
|
|
228
|
-
});
|
|
229
|
-
await writeRuntimeProfile(runtimeProfile);
|
|
230
|
-
|
|
231
|
-
const runtimeCapture = await buildRuntimeCaptureReport({ report, rootDir: process.cwd() });
|
|
232
|
-
await writeRuntimeCaptureReport(runtimeCapture);
|
|
233
|
-
|
|
234
|
-
const refDiff = await buildRefDiff({ baseReport, headReport });
|
|
235
|
-
await writeRefDiff(refDiff);
|
|
236
|
-
|
|
237
|
-
const profileDiff = await buildProfileDiff({ current, baseline, policy });
|
|
238
|
-
await writeProfileDiff(profileDiff);
|
|
239
|
-
```
|
|
240
|
-
|
|
241
143
|
## Scope
|
|
242
144
|
|
|
243
145
|
Default inspection is offline and credential-free. It reads manifests, package
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/plugin-inspector",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Offline compatibility inspector for OpenClaw plugins.",
|
|
6
6
|
"type": "module",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"exports": {
|
|
24
24
|
".": "./src/index.js",
|
|
25
|
+
"./advanced": "./src/advanced.js",
|
|
25
26
|
"./capture-api": "./src/capture-api.js",
|
|
26
27
|
"./ci-policy": "./src/ci-policy.js",
|
|
27
28
|
"./cold-import-readiness": "./src/cold-import-readiness.js",
|
|
@@ -45,7 +46,7 @@
|
|
|
45
46
|
"LICENSE"
|
|
46
47
|
],
|
|
47
48
|
"scripts": {
|
|
48
|
-
"check": "npm test && npm pack --dry-run
|
|
49
|
+
"check": "npm test && npm pack --dry-run",
|
|
49
50
|
"release:local": "npm run check",
|
|
50
51
|
"test": "node --test test/*.test.js"
|
|
51
52
|
},
|
package/src/advanced.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
export {
|
|
2
|
+
escapeMarkdownTableCell,
|
|
3
|
+
renderArtifactContent,
|
|
4
|
+
renderMarkdownTable,
|
|
5
|
+
renderPaddedMarkdownTable,
|
|
6
|
+
writeArtifacts,
|
|
7
|
+
writeJsonMarkdownArtifacts,
|
|
8
|
+
} from "./artifacts.js";
|
|
9
|
+
export {
|
|
10
|
+
normalizeRepoPath,
|
|
11
|
+
posixJoin,
|
|
12
|
+
resolveFromRoot,
|
|
13
|
+
resolveRequiredFromRoot,
|
|
14
|
+
slugForArtifact,
|
|
15
|
+
toRepoPath,
|
|
16
|
+
} from "./path-utils.js";
|
|
17
|
+
export { readJsonFile, readOptionalJsonFile } from "./json-file.js";
|
|
18
|
+
export { assertRunCount, percentile } from "./stats.js";
|
|
19
|
+
export { createCaptureApi } from "./capture-api.js";
|
|
20
|
+
export {
|
|
21
|
+
buildCiPolicyReport,
|
|
22
|
+
defaultCiPolicyReportOptions,
|
|
23
|
+
renderCiPolicyMarkdown,
|
|
24
|
+
validateCiPolicy,
|
|
25
|
+
validateCiPolicyReport,
|
|
26
|
+
writeCiPolicyReport,
|
|
27
|
+
} from "./ci-policy.js";
|
|
28
|
+
export {
|
|
29
|
+
buildCiSummary,
|
|
30
|
+
defaultCiReportPaths,
|
|
31
|
+
deriveCiStatus,
|
|
32
|
+
readCiReports,
|
|
33
|
+
renderCiSummaryMarkdown,
|
|
34
|
+
writeCiSummary,
|
|
35
|
+
} from "./ci-summary.js";
|
|
36
|
+
export {
|
|
37
|
+
buildContractProbes,
|
|
38
|
+
contractProbeRules,
|
|
39
|
+
probePriority,
|
|
40
|
+
} from "./contract-probes.js";
|
|
41
|
+
export {
|
|
42
|
+
buildContractCapture,
|
|
43
|
+
defaultHookAssertions,
|
|
44
|
+
defaultHookContexts,
|
|
45
|
+
defaultHookEvents,
|
|
46
|
+
defaultRegistrationArguments,
|
|
47
|
+
defaultRegistrationAssertions,
|
|
48
|
+
renderContractCaptureMarkdown,
|
|
49
|
+
validateContractCapture,
|
|
50
|
+
writeContractCapture,
|
|
51
|
+
} from "./contract-capture.js";
|
|
52
|
+
export {
|
|
53
|
+
renderCompatibilityIssuesReport,
|
|
54
|
+
renderCompatibilityMarkdownReport,
|
|
55
|
+
} from "./compatibility-report.js";
|
|
56
|
+
export {
|
|
57
|
+
knownIssueClasses,
|
|
58
|
+
validateContractCoverage,
|
|
59
|
+
} from "./contract-coverage.js";
|
|
60
|
+
export {
|
|
61
|
+
buildColdImportReadiness,
|
|
62
|
+
renderColdImportReadinessMarkdown,
|
|
63
|
+
validateColdImportReadiness,
|
|
64
|
+
writeColdImportReadiness,
|
|
65
|
+
} from "./cold-import-readiness.js";
|
|
66
|
+
export {
|
|
67
|
+
buildIssues,
|
|
68
|
+
classifyIssueFinding,
|
|
69
|
+
deprecatedCompatRecords,
|
|
70
|
+
issueId,
|
|
71
|
+
issueMetadata,
|
|
72
|
+
issueMetadataByCode,
|
|
73
|
+
knownIssueCodes,
|
|
74
|
+
summarizeIssueClasses,
|
|
75
|
+
} from "./issues.js";
|
|
76
|
+
export {
|
|
77
|
+
buildExecutionResultsReport,
|
|
78
|
+
defaultExecutionResultsOptions,
|
|
79
|
+
renderExecutionResultsMarkdown,
|
|
80
|
+
writeExecutionResultsReport,
|
|
81
|
+
} from "./execution-results.js";
|
|
82
|
+
export {
|
|
83
|
+
buildCompatibilityFixtureReport,
|
|
84
|
+
classifyCompatibilityFixture,
|
|
85
|
+
classifyPackageContracts,
|
|
86
|
+
classifyTargetOpenClawCoverage,
|
|
87
|
+
readPackageSummaries,
|
|
88
|
+
readPluginManifests,
|
|
89
|
+
summarizePackage,
|
|
90
|
+
} from "./fixture-summary.js";
|
|
91
|
+
export {
|
|
92
|
+
buildImportLoopProfile,
|
|
93
|
+
defaultImportLoopProfileOptions,
|
|
94
|
+
renderImportLoopProfileMarkdown,
|
|
95
|
+
validateImportLoopProfile,
|
|
96
|
+
writeImportLoopProfile,
|
|
97
|
+
} from "./import-loop-profile.js";
|
|
98
|
+
export {
|
|
99
|
+
defaultOpenClawCheckoutPaths,
|
|
100
|
+
openClawTargetPathCandidates,
|
|
101
|
+
parseCompatRecordEntries,
|
|
102
|
+
parseExportedStringArray,
|
|
103
|
+
parsePluginSdkExports,
|
|
104
|
+
parseTypeFields,
|
|
105
|
+
readOpenClawTargetSurface,
|
|
106
|
+
} from "./openclaw-target.js";
|
|
107
|
+
export {
|
|
108
|
+
captureEntrypoint,
|
|
109
|
+
captureEntrypointWithMockSdk,
|
|
110
|
+
inspectCompatibilityFixtureSet,
|
|
111
|
+
inspectFixtureSet,
|
|
112
|
+
inspectPlugin,
|
|
113
|
+
inspectSourceText,
|
|
114
|
+
} from "./inspector.js";
|
|
115
|
+
export {
|
|
116
|
+
defaultPluginRootConfigFiles,
|
|
117
|
+
fixtureCheckoutPath,
|
|
118
|
+
fixtureSourceRoot,
|
|
119
|
+
loadInspectorConfig,
|
|
120
|
+
loadPluginRootConfig,
|
|
121
|
+
normalizeInspectorConfig,
|
|
122
|
+
normalizePluginRootConfig,
|
|
123
|
+
validateInspectorConfig,
|
|
124
|
+
} from "./config.js";
|
|
125
|
+
export {
|
|
126
|
+
buildPlatformProbes,
|
|
127
|
+
defaultPlatformTargets,
|
|
128
|
+
renderPlatformProbesMarkdown,
|
|
129
|
+
validatePlatformProbes,
|
|
130
|
+
writePlatformProbes,
|
|
131
|
+
} from "./platform-probes.js";
|
|
132
|
+
export {
|
|
133
|
+
buildProfileDiff,
|
|
134
|
+
defaultProfileDiffOptions,
|
|
135
|
+
renderProfileDiffMarkdown,
|
|
136
|
+
validateProfileDiff,
|
|
137
|
+
writeProfileDiff,
|
|
138
|
+
} from "./profile-diff.js";
|
|
139
|
+
export {
|
|
140
|
+
buildRefDiff,
|
|
141
|
+
defaultRefDiffDimensions,
|
|
142
|
+
defaultRefDiffOptions,
|
|
143
|
+
renderRefDiffMarkdown,
|
|
144
|
+
validateRefDiff,
|
|
145
|
+
writeRefDiff,
|
|
146
|
+
} from "./ref-diff.js";
|
|
147
|
+
export {
|
|
148
|
+
buildCompatibilityReport,
|
|
149
|
+
classifyCompatRecordCoverage,
|
|
150
|
+
renderMarkdownReport,
|
|
151
|
+
renderTextSummary,
|
|
152
|
+
writeCompatibilityReport,
|
|
153
|
+
writeReport,
|
|
154
|
+
} from "./report.js";
|
|
155
|
+
export {
|
|
156
|
+
buildRuntimeProfile,
|
|
157
|
+
defaultRuntimeProfileCommands,
|
|
158
|
+
defaultRuntimeProfileOptions,
|
|
159
|
+
renderRuntimeProfileMarkdown,
|
|
160
|
+
validateRuntimeProfile,
|
|
161
|
+
writeRuntimeProfile,
|
|
162
|
+
} from "./runtime-profile.js";
|
|
163
|
+
export {
|
|
164
|
+
buildRuntimeCaptureReport,
|
|
165
|
+
renderRuntimeCaptureMarkdown,
|
|
166
|
+
writeRuntimeCaptureReport,
|
|
167
|
+
} from "./runtime-capture-report.js";
|
|
168
|
+
export { createMockSdkPackage } from "./sdk-mock.js";
|
|
169
|
+
export {
|
|
170
|
+
buildSyntheticProbePlan,
|
|
171
|
+
defaultSyntheticHookContexts,
|
|
172
|
+
defaultSyntheticHookEvents,
|
|
173
|
+
defaultSyntheticRegistrationArguments,
|
|
174
|
+
renderSyntheticProbeMarkdown,
|
|
175
|
+
runCapturedSyntheticProbes,
|
|
176
|
+
syntheticRegistrationExecutionProfiles,
|
|
177
|
+
validateSyntheticProbePlan,
|
|
178
|
+
writeSyntheticProbePlan,
|
|
179
|
+
} from "./synthetic-probes.js";
|
|
180
|
+
export {
|
|
181
|
+
buildWorkspacePlan,
|
|
182
|
+
defaultWorkspacePlanOptions,
|
|
183
|
+
renderWorkspacePlanMarkdown,
|
|
184
|
+
validateWorkspacePlan,
|
|
185
|
+
writeWorkspacePlan,
|
|
186
|
+
} from "./workspace-plan.js";
|
package/src/api.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { createCaptureApi } from "./capture-api.js";
|
|
3
|
+
import { loadInspectorConfig, loadPluginRootConfig } from "./config.js";
|
|
4
|
+
import { captureEntrypoint } from "./inspector.js";
|
|
5
|
+
import { renderTextSummary, writeCompatibilityReport } from "./report.js";
|
|
6
|
+
import { buildRuntimeCaptureReport, writeRuntimeCaptureReport } from "./runtime-capture-report.js";
|
|
7
|
+
import { inspectCompatibilityFixtureSet, inspectFixtureSet } from "./inspector.js";
|
|
8
|
+
|
|
9
|
+
export async function loadPluginConfig(options = {}) {
|
|
10
|
+
if (options.config) {
|
|
11
|
+
return options.config;
|
|
12
|
+
}
|
|
13
|
+
const cwd = options.pluginRoot ?? options.cwd;
|
|
14
|
+
if (options.configPath) {
|
|
15
|
+
return options.fixtureSet === true
|
|
16
|
+
? loadInspectorConfig(options.configPath, { cwd })
|
|
17
|
+
: loadPluginRootConfig(options.configPath, { cwd });
|
|
18
|
+
}
|
|
19
|
+
return loadPluginRootConfig(null, { cwd });
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export async function inspectPluginRoot(options = {}) {
|
|
23
|
+
const config = await loadPluginConfig(options);
|
|
24
|
+
return inspectCompatibilityFixtureSet(config, {
|
|
25
|
+
generatedAt: options.generatedAt,
|
|
26
|
+
openclawPath: options.openclawPath,
|
|
27
|
+
targetOpenClaw: options.targetOpenClaw,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function inspectFixtureSetConfig(options = {}) {
|
|
32
|
+
const config = options.config ?? (await loadInspectorConfig(options.configPath, { cwd: options.cwd }));
|
|
33
|
+
return inspectFixtureSet(config, { generatedAt: options.generatedAt });
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export async function writePluginReports(report, options = {}) {
|
|
37
|
+
return writeCompatibilityReport(report, {
|
|
38
|
+
basename: options.basename,
|
|
39
|
+
check: options.check,
|
|
40
|
+
cwd: options.cwd ?? options.pluginRoot,
|
|
41
|
+
issuesBasename: options.issuesBasename,
|
|
42
|
+
outDir: options.outDir,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export async function runPluginCheck(options = {}) {
|
|
47
|
+
const outDir = options.outDir ?? "reports";
|
|
48
|
+
const report = await inspectPluginRoot(options);
|
|
49
|
+
const paths = await writePluginReports(report, { ...options, outDir });
|
|
50
|
+
const result = { report, paths };
|
|
51
|
+
|
|
52
|
+
if (options.capture === true) {
|
|
53
|
+
if (process.env.PLUGIN_INSPECTOR_EXECUTE_ISOLATED !== "1") {
|
|
54
|
+
throw new Error("runtime capture imports plugin code; rerun with PLUGIN_INSPECTOR_EXECUTE_ISOLATED=1 in an isolated workspace");
|
|
55
|
+
}
|
|
56
|
+
const config = await loadPluginConfig(options);
|
|
57
|
+
const runtimeCapture = await buildRuntimeCaptureReport({
|
|
58
|
+
mockSdk: options.mockSdk ?? true,
|
|
59
|
+
report,
|
|
60
|
+
rootDir: config.rootDir,
|
|
61
|
+
});
|
|
62
|
+
const outputRoot = options.cwd ?? options.pluginRoot ?? process.cwd();
|
|
63
|
+
const runtimeCapturePaths = await writeRuntimeCaptureReport(runtimeCapture, {
|
|
64
|
+
jsonPath: path.resolve(outputRoot, outDir, "plugin-inspector-runtime-capture.json"),
|
|
65
|
+
markdownPath: path.resolve(outputRoot, outDir, "plugin-inspector-runtime-capture.md"),
|
|
66
|
+
});
|
|
67
|
+
result.runtimeCapture = runtimeCapture;
|
|
68
|
+
result.runtimeCapturePaths = runtimeCapturePaths;
|
|
69
|
+
if (runtimeCapture.summary.failedCount > 0) {
|
|
70
|
+
throw new Error(`plugin-inspector runtime capture failed for ${runtimeCapture.summary.failedCount} entrypoints`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (options.failOnBreakages === true && report.status !== "pass") {
|
|
75
|
+
throw new Error(`plugin-inspector found ${report.summary.breakageCount} breakages`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export async function capturePluginEntrypoint(entrypoint, options = {}) {
|
|
82
|
+
return captureEntrypoint(entrypoint, options);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { createCaptureApi, renderTextSummary };
|
package/src/cli.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
renderTextSummary,
|
|
4
|
+
runPluginCheck,
|
|
5
|
+
} from "./index.js";
|
|
6
|
+
import {
|
|
4
7
|
captureEntrypoint,
|
|
5
|
-
inspectCompatibilityFixtureSet,
|
|
6
8
|
inspectFixtureSet,
|
|
7
9
|
loadInspectorConfig,
|
|
8
|
-
loadPluginRootConfig,
|
|
9
|
-
renderTextSummary,
|
|
10
10
|
writeArtifacts,
|
|
11
|
-
writeCompatibilityReport,
|
|
12
11
|
writeReport,
|
|
13
|
-
|
|
14
|
-
} from "./index.js";
|
|
12
|
+
} from "./advanced.js";
|
|
15
13
|
|
|
16
14
|
const args = process.argv.slice(2);
|
|
17
15
|
const command = args[0]?.startsWith("-") ? "check" : (args[0] ?? "check");
|
|
@@ -40,22 +38,7 @@ async function runCheck(commandArgs) {
|
|
|
40
38
|
const openclawPath = commandArgs.includes("--no-openclaw") ? false : readFlag(commandArgs, "--openclaw");
|
|
41
39
|
const json = commandArgs.includes("--json");
|
|
42
40
|
const capture = commandArgs.includes("--capture");
|
|
43
|
-
const
|
|
44
|
-
const report = await inspectCompatibilityFixtureSet(config, { openclawPath });
|
|
45
|
-
await writeCompatibilityReport(report, { outDir });
|
|
46
|
-
if (capture) {
|
|
47
|
-
if (process.env.PLUGIN_INSPECTOR_EXECUTE_ISOLATED !== "1") {
|
|
48
|
-
throw new Error("check --capture imports plugin code; rerun with PLUGIN_INSPECTOR_EXECUTE_ISOLATED=1 in an isolated workspace");
|
|
49
|
-
}
|
|
50
|
-
const captureReport = await buildRuntimeCaptureReport({ report, rootDir: config.rootDir, mockSdk: true });
|
|
51
|
-
await writeRuntimeCaptureReport(captureReport, {
|
|
52
|
-
jsonPath: `${outDir}/plugin-inspector-runtime-capture.json`,
|
|
53
|
-
markdownPath: `${outDir}/plugin-inspector-runtime-capture.md`,
|
|
54
|
-
});
|
|
55
|
-
if (captureReport.summary.failedCount > 0) {
|
|
56
|
-
throw new Error(`plugin-inspector runtime capture failed for ${captureReport.summary.failedCount} entrypoints`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
41
|
+
const { report } = await runPluginCheck({ configPath, outDir, openclawPath, capture });
|
|
59
42
|
|
|
60
43
|
if (json) {
|
|
61
44
|
console.log(JSON.stringify(report, null, 2));
|
package/src/index.js
CHANGED
|
@@ -1,186 +1,10 @@
|
|
|
1
1
|
export {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
writeJsonMarkdownArtifacts,
|
|
8
|
-
} from "./artifacts.js";
|
|
9
|
-
export {
|
|
10
|
-
normalizeRepoPath,
|
|
11
|
-
posixJoin,
|
|
12
|
-
resolveFromRoot,
|
|
13
|
-
resolveRequiredFromRoot,
|
|
14
|
-
slugForArtifact,
|
|
15
|
-
toRepoPath,
|
|
16
|
-
} from "./path-utils.js";
|
|
17
|
-
export { readJsonFile, readOptionalJsonFile } from "./json-file.js";
|
|
18
|
-
export { assertRunCount, percentile } from "./stats.js";
|
|
19
|
-
export { createCaptureApi } from "./capture-api.js";
|
|
20
|
-
export {
|
|
21
|
-
buildCiPolicyReport,
|
|
22
|
-
defaultCiPolicyReportOptions,
|
|
23
|
-
renderCiPolicyMarkdown,
|
|
24
|
-
validateCiPolicy,
|
|
25
|
-
validateCiPolicyReport,
|
|
26
|
-
writeCiPolicyReport,
|
|
27
|
-
} from "./ci-policy.js";
|
|
28
|
-
export {
|
|
29
|
-
buildCiSummary,
|
|
30
|
-
defaultCiReportPaths,
|
|
31
|
-
deriveCiStatus,
|
|
32
|
-
readCiReports,
|
|
33
|
-
renderCiSummaryMarkdown,
|
|
34
|
-
writeCiSummary,
|
|
35
|
-
} from "./ci-summary.js";
|
|
36
|
-
export {
|
|
37
|
-
buildContractProbes,
|
|
38
|
-
contractProbeRules,
|
|
39
|
-
probePriority,
|
|
40
|
-
} from "./contract-probes.js";
|
|
41
|
-
export {
|
|
42
|
-
buildContractCapture,
|
|
43
|
-
defaultHookAssertions,
|
|
44
|
-
defaultHookContexts,
|
|
45
|
-
defaultHookEvents,
|
|
46
|
-
defaultRegistrationArguments,
|
|
47
|
-
defaultRegistrationAssertions,
|
|
48
|
-
renderContractCaptureMarkdown,
|
|
49
|
-
validateContractCapture,
|
|
50
|
-
writeContractCapture,
|
|
51
|
-
} from "./contract-capture.js";
|
|
52
|
-
export {
|
|
53
|
-
renderCompatibilityIssuesReport,
|
|
54
|
-
renderCompatibilityMarkdownReport,
|
|
55
|
-
} from "./compatibility-report.js";
|
|
56
|
-
export {
|
|
57
|
-
knownIssueClasses,
|
|
58
|
-
validateContractCoverage,
|
|
59
|
-
} from "./contract-coverage.js";
|
|
60
|
-
export {
|
|
61
|
-
buildColdImportReadiness,
|
|
62
|
-
renderColdImportReadinessMarkdown,
|
|
63
|
-
validateColdImportReadiness,
|
|
64
|
-
writeColdImportReadiness,
|
|
65
|
-
} from "./cold-import-readiness.js";
|
|
66
|
-
export {
|
|
67
|
-
buildIssues,
|
|
68
|
-
classifyIssueFinding,
|
|
69
|
-
deprecatedCompatRecords,
|
|
70
|
-
issueId,
|
|
71
|
-
issueMetadata,
|
|
72
|
-
issueMetadataByCode,
|
|
73
|
-
knownIssueCodes,
|
|
74
|
-
summarizeIssueClasses,
|
|
75
|
-
} from "./issues.js";
|
|
76
|
-
export {
|
|
77
|
-
buildExecutionResultsReport,
|
|
78
|
-
defaultExecutionResultsOptions,
|
|
79
|
-
renderExecutionResultsMarkdown,
|
|
80
|
-
writeExecutionResultsReport,
|
|
81
|
-
} from "./execution-results.js";
|
|
82
|
-
export {
|
|
83
|
-
buildCompatibilityFixtureReport,
|
|
84
|
-
classifyCompatibilityFixture,
|
|
85
|
-
classifyPackageContracts,
|
|
86
|
-
classifyTargetOpenClawCoverage,
|
|
87
|
-
readPackageSummaries,
|
|
88
|
-
readPluginManifests,
|
|
89
|
-
summarizePackage,
|
|
90
|
-
} from "./fixture-summary.js";
|
|
91
|
-
export {
|
|
92
|
-
buildImportLoopProfile,
|
|
93
|
-
defaultImportLoopProfileOptions,
|
|
94
|
-
renderImportLoopProfileMarkdown,
|
|
95
|
-
validateImportLoopProfile,
|
|
96
|
-
writeImportLoopProfile,
|
|
97
|
-
} from "./import-loop-profile.js";
|
|
98
|
-
export {
|
|
99
|
-
defaultOpenClawCheckoutPaths,
|
|
100
|
-
openClawTargetPathCandidates,
|
|
101
|
-
parseCompatRecordEntries,
|
|
102
|
-
parseExportedStringArray,
|
|
103
|
-
parsePluginSdkExports,
|
|
104
|
-
parseTypeFields,
|
|
105
|
-
readOpenClawTargetSurface,
|
|
106
|
-
} from "./openclaw-target.js";
|
|
107
|
-
export {
|
|
108
|
-
captureEntrypoint,
|
|
109
|
-
captureEntrypointWithMockSdk,
|
|
110
|
-
inspectCompatibilityFixtureSet,
|
|
111
|
-
inspectFixtureSet,
|
|
112
|
-
inspectPlugin,
|
|
113
|
-
inspectSourceText,
|
|
114
|
-
} from "./inspector.js";
|
|
115
|
-
export {
|
|
116
|
-
defaultPluginRootConfigFiles,
|
|
117
|
-
fixtureCheckoutPath,
|
|
118
|
-
fixtureSourceRoot,
|
|
119
|
-
loadInspectorConfig,
|
|
120
|
-
loadPluginRootConfig,
|
|
121
|
-
normalizeInspectorConfig,
|
|
122
|
-
normalizePluginRootConfig,
|
|
123
|
-
validateInspectorConfig,
|
|
124
|
-
} from "./config.js";
|
|
125
|
-
export {
|
|
126
|
-
buildPlatformProbes,
|
|
127
|
-
defaultPlatformTargets,
|
|
128
|
-
renderPlatformProbesMarkdown,
|
|
129
|
-
validatePlatformProbes,
|
|
130
|
-
writePlatformProbes,
|
|
131
|
-
} from "./platform-probes.js";
|
|
132
|
-
export {
|
|
133
|
-
buildProfileDiff,
|
|
134
|
-
defaultProfileDiffOptions,
|
|
135
|
-
renderProfileDiffMarkdown,
|
|
136
|
-
validateProfileDiff,
|
|
137
|
-
writeProfileDiff,
|
|
138
|
-
} from "./profile-diff.js";
|
|
139
|
-
export {
|
|
140
|
-
buildRefDiff,
|
|
141
|
-
defaultRefDiffDimensions,
|
|
142
|
-
defaultRefDiffOptions,
|
|
143
|
-
renderRefDiffMarkdown,
|
|
144
|
-
validateRefDiff,
|
|
145
|
-
writeRefDiff,
|
|
146
|
-
} from "./ref-diff.js";
|
|
147
|
-
export {
|
|
148
|
-
buildCompatibilityReport,
|
|
149
|
-
classifyCompatRecordCoverage,
|
|
150
|
-
renderMarkdownReport,
|
|
2
|
+
capturePluginEntrypoint,
|
|
3
|
+
createCaptureApi,
|
|
4
|
+
inspectFixtureSetConfig,
|
|
5
|
+
inspectPluginRoot,
|
|
6
|
+
loadPluginConfig,
|
|
151
7
|
renderTextSummary,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
} from "./
|
|
155
|
-
export {
|
|
156
|
-
buildRuntimeProfile,
|
|
157
|
-
defaultRuntimeProfileCommands,
|
|
158
|
-
defaultRuntimeProfileOptions,
|
|
159
|
-
renderRuntimeProfileMarkdown,
|
|
160
|
-
validateRuntimeProfile,
|
|
161
|
-
writeRuntimeProfile,
|
|
162
|
-
} from "./runtime-profile.js";
|
|
163
|
-
export {
|
|
164
|
-
buildRuntimeCaptureReport,
|
|
165
|
-
renderRuntimeCaptureMarkdown,
|
|
166
|
-
writeRuntimeCaptureReport,
|
|
167
|
-
} from "./runtime-capture-report.js";
|
|
168
|
-
export { createMockSdkPackage } from "./sdk-mock.js";
|
|
169
|
-
export {
|
|
170
|
-
buildSyntheticProbePlan,
|
|
171
|
-
defaultSyntheticHookContexts,
|
|
172
|
-
defaultSyntheticHookEvents,
|
|
173
|
-
defaultSyntheticRegistrationArguments,
|
|
174
|
-
renderSyntheticProbeMarkdown,
|
|
175
|
-
runCapturedSyntheticProbes,
|
|
176
|
-
syntheticRegistrationExecutionProfiles,
|
|
177
|
-
validateSyntheticProbePlan,
|
|
178
|
-
writeSyntheticProbePlan,
|
|
179
|
-
} from "./synthetic-probes.js";
|
|
180
|
-
export {
|
|
181
|
-
buildWorkspacePlan,
|
|
182
|
-
defaultWorkspacePlanOptions,
|
|
183
|
-
renderWorkspacePlanMarkdown,
|
|
184
|
-
validateWorkspacePlan,
|
|
185
|
-
writeWorkspacePlan,
|
|
186
|
-
} from "./workspace-plan.js";
|
|
8
|
+
runPluginCheck,
|
|
9
|
+
writePluginReports,
|
|
10
|
+
} from "./api.js";
|