@devflow-tools/cli 0.16.8 → 0.16.9

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 (37) hide show
  1. package/dist/commands/doctor.d.ts.map +1 -1
  2. package/dist/commands/doctor.js +59 -2
  3. package/dist/commands/doctor.js.map +1 -1
  4. package/dist/commands/mcp.d.ts +10 -0
  5. package/dist/commands/mcp.d.ts.map +1 -0
  6. package/dist/commands/mcp.js +33 -0
  7. package/dist/commands/mcp.js.map +1 -0
  8. package/dist/commands/plugin/install.d.ts.map +1 -1
  9. package/dist/commands/plugin/install.js +6 -7
  10. package/dist/commands/plugin/install.js.map +1 -1
  11. package/dist/commands/plugin/uninstall.d.ts.map +1 -1
  12. package/dist/commands/plugin/uninstall.js +6 -7
  13. package/dist/commands/plugin/uninstall.js.map +1 -1
  14. package/dist/commands/plugin-guide.d.ts.map +1 -1
  15. package/dist/commands/plugin-guide.js +8 -5
  16. package/dist/commands/plugin-guide.js.map +1 -1
  17. package/dist/commands/skill-health.d.ts +21 -0
  18. package/dist/commands/skill-health.d.ts.map +1 -0
  19. package/dist/commands/skill-health.js +106 -0
  20. package/dist/commands/skill-health.js.map +1 -0
  21. package/dist/commands/skill.d.ts.map +1 -1
  22. package/dist/commands/skill.js +101 -29
  23. package/dist/commands/skill.js.map +1 -1
  24. package/dist/index.js +32 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/plugin-registry.d.ts.map +1 -1
  27. package/dist/lib/plugin-registry.js +3 -10
  28. package/dist/lib/plugin-registry.js.map +1 -1
  29. package/dist/plugin-files/.claude-plugin/plugin.json +1 -1
  30. package/dist/plugin-files/dist/command-registry.json +116 -20
  31. package/dist/plugin-files/dist/hooks/hook-client.js +6 -6
  32. package/dist/plugin-files/dist/hooks/hook-daemon.js +9 -9
  33. package/dist/plugin-files/dist/hooks/post-tool-use.js +3 -3
  34. package/dist/plugin-files/dist/hooks/pre-tool-use.js +2 -2
  35. package/dist/plugin-files/dist/hooks/user-prompt-submit.js +2 -2
  36. package/dist/plugin-files/package.json +7 -7
  37. package/package.json +27 -27
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,10 @@ import { basename, dirname, extname, isAbsolute, join, relative, resolve, sep }
6
6
  import { spawnSync } from "node:child_process";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import chalk from "chalk";
9
- import { DOCTOR_SCHEMA_VERSION } from "@devflow-tools/sdk";
9
+ import { DOCTOR_SCHEMA_VERSION, checkMcpHealth, loadPluginsWithDiagnostics, readMcpInventory, redactMcpInventory, } from "@devflow-tools/sdk";
10
10
  import { resolveActivePlugin, scanClaudeSkillShadowing } from "../lib/plugin-setup.js";
11
11
  import { serverStatus } from "./server.js";
12
+ import { inspectSkillHealth } from "./skill-health.js";
12
13
  import { getGlobalDevFlowDbPath } from "@devflow-tools/database";
13
14
  function getProjectHash(rootPath) {
14
15
  return createHash("sha256").update(rootPath).digest("hex").slice(0, 16);
@@ -43,6 +44,58 @@ function sectionStatus(metrics) {
43
44
  }
44
45
  return "green";
45
46
  }
47
+ async function checkRuntimeControlPlane(project, dependencies) {
48
+ const home = dependencies.homePath ?? homedir();
49
+ const metrics = [];
50
+ const loaded = await loadPluginsWithDiagnostics({ projectRoot: project, homeDir: home });
51
+ const failedPlugins = loaded.diagnostics.filter((diagnostic) => diagnostic.status === "failed");
52
+ metrics.push({
53
+ key: "plugin_runtime",
54
+ value: loaded.diagnostics,
55
+ target: "configured plugins loadable with diagnostics",
56
+ ok: failedPlugins.length === 0,
57
+ severity: "warning",
58
+ });
59
+ const inventory = redactMcpInventory(readMcpInventory(project, home));
60
+ metrics.push({
61
+ key: "mcp_inventory",
62
+ value: { servers: inventory.servers.length, duplicates: inventory.duplicates.length, unreadable: inventory.unreadable.length },
63
+ target: { duplicates: 0, unreadable: 0 },
64
+ ok: inventory.unreadable.length === 0,
65
+ severity: inventory.unreadable.length > 0 ? "error" : "info",
66
+ });
67
+ metrics.push({
68
+ key: "mcp_configuration_drift",
69
+ value: inventory.duplicates.filter((entry) => entry.fingerprints.length > 1).map((entry) => entry.name),
70
+ target: [],
71
+ ok: inventory.duplicates.every((entry) => entry.fingerprints.length === 1),
72
+ severity: "warning",
73
+ });
74
+ const health = await checkMcpHealth(inventory, home);
75
+ const unhealthy = health.records.filter((record) => record.status === "unhealthy");
76
+ metrics.push({
77
+ key: "mcp_health",
78
+ value: health.records,
79
+ target: "no unhealthy enabled servers",
80
+ ok: unhealthy.length === 0,
81
+ severity: "warning",
82
+ });
83
+ const activePlugin = dependencies.activePluginRoot ?? resolveActivePlugin(home, {
84
+ installedPluginsPath: dependencies.installedPluginsPath,
85
+ pluginCachePath: dependencies.pluginCachePath,
86
+ }).root;
87
+ if (activePlugin) {
88
+ const skills = inspectSkillHealth(activePlugin);
89
+ metrics.push({
90
+ key: "skill_health",
91
+ value: { root: skills.pluginRoot, skills: skills.skills, commands: skills.commands, issues: skills.issues },
92
+ target: "valid and fully bound installed skills",
93
+ ok: skills.healthy,
94
+ severity: "warning",
95
+ });
96
+ }
97
+ return { name: "Contract", status: sectionStatus(metrics), metrics };
98
+ }
46
99
  function canonicalizeProject(project) {
47
100
  const absolute = resolve(project);
48
101
  try {
@@ -4165,6 +4218,10 @@ async function checkUiReachability(dependencies) {
4165
4218
  export async function runStructuredDoctor(options = {}, dependencies = {}) {
4166
4219
  const requestedProject = options.project ?? process.cwd();
4167
4220
  const canonical = canonicalizeProject(requestedProject);
4221
+ const contract = checkContract(dependencies);
4222
+ const runtimeControlPlane = await checkRuntimeControlPlane(canonical.path, dependencies);
4223
+ contract.metrics.push(...runtimeControlPlane.metrics);
4224
+ contract.status = sectionStatus(contract.metrics);
4168
4225
  const sections = [
4169
4226
  checkIsolation(requestedProject, dependencies),
4170
4227
  checkDistill(canonical.path, dependencies),
@@ -4174,7 +4231,7 @@ export async function runStructuredDoctor(options = {}, dependencies = {}) {
4174
4231
  checkInjection(canonical.path, dependencies),
4175
4232
  checkMemoryQuality(canonical.path, dependencies),
4176
4233
  checkKnowledgeQuality(canonical.path, dependencies),
4177
- checkContract(dependencies),
4234
+ contract,
4178
4235
  checkDeadcode(dependencies),
4179
4236
  checkBenchmark(dependencies),
4180
4237
  checkDataFace(dependencies),