@aipper/aiws 0.0.49 → 0.0.51

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.
@@ -0,0 +1,583 @@
1
+ /**
2
+ * Pi user-level plugins doctor (TOOLING-002L / PB-010 / pi-plugin-doctor).
3
+ * Pure classify + format; I/O helpers injectable for tests.
4
+ */
5
+ import fs from "node:fs/promises";
6
+ import os from "node:os";
7
+ import path from "node:path";
8
+ import { createRequire } from "node:module";
9
+ import { fileURLToPath } from "node:url";
10
+ import { runCommand } from "../exec.js";
11
+ import { pathExists, readText } from "../fs.js";
12
+ export const DEFAULT_MANIFEST = {
13
+ version: 1,
14
+ scope: "user",
15
+ source_protocol: "npm:",
16
+ install_template: "pi install npm:{package}{versionSuffix}",
17
+ required: [
18
+ {
19
+ id: "@tintinweb/pi-subagents",
20
+ package: "@tintinweb/pi-subagents",
21
+ version: "0.14.2",
22
+ tier: "required",
23
+ reason: "Single approved Pi subagent runtime for AIWS force policy",
24
+ },
25
+ ],
26
+ recommended_a: [
27
+ { id: "pi-extension-settings", package: "pi-extension-settings", tier: "recommended_a" },
28
+ { id: "pi-powerbar", package: "pi-powerbar", tier: "recommended_a" },
29
+ { id: "pi-lsp", package: "pi-lsp", tier: "recommended_a" },
30
+ { id: "pi-hashline-edit-pro", package: "pi-hashline-edit-pro", tier: "recommended_a" },
31
+ { id: "rpiv-todo", package: "rpiv-todo", tier: "recommended_a" },
32
+ { id: "rpiv-ask-user-question", package: "rpiv-ask-user-question", tier: "recommended_a" },
33
+ { id: "pi-btw", package: "pi-btw", tier: "recommended_a" },
34
+ { id: "pi-caffeinate", package: "pi-caffeinate", tier: "recommended_a" },
35
+ { id: "pi-workspace-history", package: "pi-workspace-history", tier: "recommended_a" },
36
+ ],
37
+ recommended_b: [
38
+ { id: "pi-mcp-adapter", package: "pi-mcp-adapter", tier: "recommended_b" },
39
+ { id: "pi-fff", package: "pi-fff", tier: "recommended_b" },
40
+ { id: "pi-slopchop", package: "pi-slopchop", tier: "recommended_b" },
41
+ { id: "plan-mode", package: "plan-mode", tier: "recommended_b" },
42
+ { id: "pi-cache-optimizer", package: "pi-cache-optimizer", tier: "recommended_b" },
43
+ { id: "pi-rtk-optimizer", package: "pi-rtk-optimizer", tier: "recommended_b" },
44
+ { id: "pi-agent-browser-native", package: "pi-agent-browser-native", tier: "recommended_b" },
45
+ { id: "pi-add-dir", package: "pi-add-dir", tier: "recommended_b" },
46
+ { id: "pi-observational-memory", package: "pi-observational-memory", tier: "recommended_b", reason: "Long-session ledger compaction; optional QoL" },
47
+ ],
48
+ forbidden: [
49
+ {
50
+ id: "@narumitw/pi-subagents",
51
+ package: "@narumitw/pi-subagents",
52
+ severity: "conflict",
53
+ reason: "Second subagent runtime; exclusive with @tintinweb/pi-subagents",
54
+ },
55
+ {
56
+ id: "pi-subagents",
57
+ package: "pi-subagents",
58
+ severity: "conflict",
59
+ reason: "Unscoped/third-party subagents package; exclusive with @tintinweb/pi-subagents",
60
+ },
61
+ {
62
+ id: "@narumitw/pi-goal",
63
+ package: "@narumitw/pi-goal",
64
+ severity: "forbidden",
65
+ reason: "Dual goal orchestrator vs aiws goal",
66
+ },
67
+ {
68
+ id: "pi-autoresearch",
69
+ package: "pi-autoresearch",
70
+ severity: "forbidden",
71
+ reason: "Long main-write research loops under AIWS governance",
72
+ },
73
+ ],
74
+ };
75
+ /** Normalize package name for set membership (lowercase, strip version suffix). */
76
+ export function normalizePackageName(raw) {
77
+ let s = raw.trim().replace(/^npm:/i, "");
78
+ // strip trailing @version for unscoped; keep scope for @scope/name@version
79
+ if (s.startsWith("@")) {
80
+ const at = s.lastIndexOf("@");
81
+ if (at > 0)
82
+ s = s.slice(0, at);
83
+ }
84
+ else {
85
+ const at = s.indexOf("@");
86
+ if (at > 0)
87
+ s = s.slice(0, at);
88
+ }
89
+ return s.toLowerCase();
90
+ }
91
+ export function installCommandFor(plugin, template) {
92
+ const t = template || DEFAULT_MANIFEST.install_template;
93
+ const versionSuffix = plugin.version ? `@${plugin.version}` : "";
94
+ return t.replace("{package}", plugin.package).replace("{versionSuffix}", versionSuffix);
95
+ }
96
+ const PARSE_SKIP_TOKENS = new Set([
97
+ "installed",
98
+ "packages",
99
+ "package",
100
+ "name",
101
+ "version",
102
+ "user",
103
+ "project",
104
+ "global",
105
+ "local",
106
+ "https",
107
+ "http",
108
+ "git",
109
+ "github",
110
+ "com",
111
+ "npm",
112
+ ]);
113
+ /**
114
+ * Loose parse of `pi list` / package listing text.
115
+ * Accepts lines like:
116
+ * - @tintinweb/pi-subagents@0.14.2
117
+ * - npm:@tintinweb/pi-subagents@0.14.2
118
+ * - pi-powerbar 0.1.0
119
+ * - "name": "@tintinweb/pi-subagents"
120
+ * Skips URLs, filesystem paths, and section headers ("User packages:").
121
+ */
122
+ export function parseInstalledFromText(text) {
123
+ const out = new Map();
124
+ const lines = text.split(/\r?\n/);
125
+ for (const line of lines) {
126
+ const trimmed = line.trim();
127
+ if (!trimmed || trimmed.startsWith("#"))
128
+ continue;
129
+ // git/http install lines: last path segment may be a package id
130
+ const gitUrl = trimmed.match(/^https?:\/\/[^\s]+\/([^/\s]+?)(?:\.git)?\/?\s*$/i);
131
+ if (gitUrl?.[1]) {
132
+ const name = normalizePackageName(gitUrl[1]);
133
+ if (name && !PARSE_SKIP_TOKENS.has(name) && (name.includes("-") || name.includes("_"))) {
134
+ out.set(name, { name, raw: trimmed });
135
+ }
136
+ continue;
137
+ }
138
+ if (/^https?:\/\//i.test(trimmed))
139
+ continue;
140
+ if (/^\/|^[A-Za-z]:[\\/]/.test(trimmed))
141
+ continue;
142
+ if (/packages?\s*:/i.test(trimmed) && !trimmed.includes("@") && !/^npm:/i.test(trimmed))
143
+ continue;
144
+ // JSON-ish "name": "pkg"
145
+ const jsonName = trimmed.match(/"name"\s*:\s*"(@?[^"]+)"/i);
146
+ if (jsonName?.[1]) {
147
+ const name = normalizePackageName(jsonName[1]);
148
+ if (name && !PARSE_SKIP_TOKENS.has(name))
149
+ out.set(name, { name, raw: trimmed });
150
+ continue;
151
+ }
152
+ // npm:pkg@version or pkg@version
153
+ const npmPref = trimmed.replace(/^npm:/i, "").trim();
154
+ const scoped = npmPref.match(/^(@[^/\s]+\/[^@\s]+)(?:@([^\s]+))?/);
155
+ if (scoped?.[1]) {
156
+ const name = normalizePackageName(scoped[1]);
157
+ out.set(name, { name, version: scoped[2], raw: trimmed });
158
+ continue;
159
+ }
160
+ const unscoped = npmPref.match(/^([a-z0-9][a-z0-9._-]{1,})(?:@([^\s]+))?$/i);
161
+ if (unscoped?.[1]) {
162
+ const name = normalizePackageName(unscoped[1]);
163
+ if (PARSE_SKIP_TOKENS.has(name))
164
+ continue;
165
+ if (!name.includes("-") && !name.includes("_") && name.length < 4)
166
+ continue;
167
+ out.set(name, { name, version: unscoped[2], raw: trimmed });
168
+ }
169
+ }
170
+ return Array.from(out.values());
171
+ }
172
+ export function parseInstalledFromSettings(settingsJson) {
173
+ const out = new Map();
174
+ if (!settingsJson || typeof settingsJson !== "object")
175
+ return [];
176
+ const obj = settingsJson;
177
+ const candidates = [];
178
+ for (const key of ["packages", "plugins", "extensions", "installed"]) {
179
+ if (key in obj)
180
+ candidates.push(obj[key]);
181
+ }
182
+ const addName = (raw, version) => {
183
+ const name = normalizePackageName(raw);
184
+ if (!name)
185
+ return;
186
+ out.set(name, { name, version, raw });
187
+ };
188
+ for (const c of candidates) {
189
+ if (Array.isArray(c)) {
190
+ for (const item of c) {
191
+ if (typeof item === "string")
192
+ addName(item);
193
+ else if (item && typeof item === "object") {
194
+ const rec = item;
195
+ const n = String(rec.name || rec.package || rec.id || "").trim();
196
+ if (n)
197
+ addName(n, rec.version != null ? String(rec.version) : undefined);
198
+ }
199
+ }
200
+ }
201
+ else if (c && typeof c === "object") {
202
+ for (const [k, v] of Object.entries(c)) {
203
+ if (typeof v === "string")
204
+ addName(k.includes("/") || k.startsWith("@") ? k : k, v);
205
+ else if (v && typeof v === "object") {
206
+ const rec = v;
207
+ const n = String(rec.name || rec.package || k).trim();
208
+ addName(n, rec.version != null ? String(rec.version) : undefined);
209
+ }
210
+ else
211
+ addName(k);
212
+ }
213
+ }
214
+ }
215
+ return Array.from(out.values());
216
+ }
217
+ function installedSet(installed) {
218
+ return new Set(installed.map((p) => normalizePackageName(p.name)));
219
+ }
220
+ function isPresent(set, pkg) {
221
+ return set.has(normalizePackageName(pkg));
222
+ }
223
+ /**
224
+ * Classify installed packages against manifest.
225
+ * Special case: forbidden id `pi-subagents` means unscoped only — do not match `@tintinweb/pi-subagents`.
226
+ */
227
+ export function classifyPiPlugins(input) {
228
+ const { manifest, installed, piCliAvailable, detectSource } = input;
229
+ const set = installedSet(installed);
230
+ const names = Array.from(set).sort();
231
+ const missingRequired = [];
232
+ const okRequired = [];
233
+ for (const p of manifest.required || []) {
234
+ if (isPresent(set, p.package)) {
235
+ okRequired.push({
236
+ package: p.package,
237
+ version: p.version,
238
+ tier: "required",
239
+ kind: "ok_required",
240
+ reason: p.reason,
241
+ });
242
+ }
243
+ else {
244
+ missingRequired.push({
245
+ package: p.package,
246
+ version: p.version,
247
+ tier: "required",
248
+ kind: "missing_required",
249
+ installCmd: installCommandFor(p, manifest.install_template),
250
+ reason: p.reason,
251
+ });
252
+ }
253
+ }
254
+ const missingRecommendedA = [];
255
+ for (const p of manifest.recommended_a || []) {
256
+ if (!isPresent(set, p.package)) {
257
+ missingRecommendedA.push({
258
+ package: p.package,
259
+ version: p.version,
260
+ tier: "recommended_a",
261
+ kind: "missing_recommended",
262
+ installCmd: installCommandFor(p, manifest.install_template),
263
+ });
264
+ }
265
+ }
266
+ const missingRecommendedB = [];
267
+ for (const p of manifest.recommended_b || []) {
268
+ if (!isPresent(set, p.package)) {
269
+ missingRecommendedB.push({
270
+ package: p.package,
271
+ version: p.version,
272
+ tier: "recommended_b",
273
+ kind: "missing_recommended",
274
+ installCmd: installCommandFor(p, manifest.install_template),
275
+ });
276
+ }
277
+ }
278
+ const conflicts = [];
279
+ const forbiddenPresent = [];
280
+ for (const p of manifest.forbidden || []) {
281
+ const present = isForbiddenPresent(set, p.package);
282
+ if (!present)
283
+ continue;
284
+ const severity = p.severity === "forbidden" ? "forbidden" : "conflict";
285
+ const finding = {
286
+ package: p.package,
287
+ tier: "forbidden",
288
+ kind: severity === "forbidden" ? "forbidden_present" : "conflict",
289
+ reason: p.reason,
290
+ };
291
+ if (severity === "forbidden")
292
+ forbiddenPresent.push(finding);
293
+ else
294
+ conflicts.push(finding);
295
+ }
296
+ const hasBlockers = missingRequired.length > 0 || conflicts.length > 0 || forbiddenPresent.length > 0;
297
+ const ok = missingRequired.length === 0 && conflicts.length === 0 && forbiddenPresent.length === 0;
298
+ // doctor CLI: non-zero if missing required or conflicts/forbidden; pi missing alone is warn (exit 0) unless required also missing
299
+ let exitCode = 0;
300
+ if (hasBlockers)
301
+ exitCode = 1;
302
+ else if (!piCliAvailable && detectSource === "none")
303
+ exitCode = 0; // graceful
304
+ return {
305
+ piCliAvailable,
306
+ detectSource,
307
+ installedNames: names,
308
+ missingRequired,
309
+ missingRecommendedA,
310
+ missingRecommendedB,
311
+ conflicts,
312
+ forbiddenPresent,
313
+ okRequired,
314
+ ok,
315
+ exitCode,
316
+ };
317
+ }
318
+ /**
319
+ * Unscoped `pi-subagents` must not match `@tintinweb/pi-subagents`.
320
+ * Presence of unscoped name alone is enough for conflict (even if tintinweb also installed).
321
+ */
322
+ export function isForbiddenPresent(set, forbiddenPackage) {
323
+ const n = normalizePackageName(forbiddenPackage);
324
+ if (n === "pi-subagents") {
325
+ return set.has("pi-subagents");
326
+ }
327
+ return set.has(n);
328
+ }
329
+ export function formatDoctorReport(report, opts) {
330
+ const lines = [];
331
+ lines.push(opts?.header ?? "aiws doctor: Pi user-level plugins");
332
+ lines.push(`detect: ${report.detectSource}${report.piCliAvailable ? " (pi cli ok)" : " (pi cli missing or unused)"}`);
333
+ lines.push(`installed: ${report.installedNames.length ? report.installedNames.join(", ") : "(none detected)"}`);
334
+ lines.push("");
335
+ if (!report.piCliAvailable && report.detectSource === "none") {
336
+ lines.push("warn: `pi` CLI not found and no ~/.pi/agent settings packages detected.");
337
+ lines.push(formatPiCliInstallHints());
338
+ lines.push("");
339
+ }
340
+ if (report.missingRequired.length) {
341
+ lines.push("## missing required");
342
+ for (const f of report.missingRequired) {
343
+ lines.push(`- ${f.package}${f.version ? `@${f.version}` : ""}${f.reason ? ` — ${f.reason}` : ""}`);
344
+ if (f.installCmd)
345
+ lines.push(` ${f.installCmd}`);
346
+ }
347
+ lines.push("");
348
+ }
349
+ else {
350
+ lines.push("## required: ok");
351
+ for (const f of report.okRequired) {
352
+ lines.push(`- ${f.package}${f.version ? ` (pin ${f.version})` : ""}`);
353
+ }
354
+ lines.push("");
355
+ }
356
+ if (report.conflicts.length) {
357
+ lines.push("## conflicts (remove or disable; keep only @tintinweb/pi-subagents)");
358
+ for (const f of report.conflicts) {
359
+ lines.push(`- ${f.package}${f.reason ? ` — ${f.reason}` : ""}`);
360
+ }
361
+ lines.push("");
362
+ }
363
+ if (report.forbiddenPresent.length) {
364
+ lines.push("## forbidden present (AIWS governance recommends removing)");
365
+ for (const f of report.forbiddenPresent) {
366
+ lines.push(`- ${f.package}${f.reason ? ` — ${f.reason}` : ""}`);
367
+ }
368
+ lines.push("");
369
+ }
370
+ if (report.missingRecommendedA.length) {
371
+ lines.push("## missing recommended (tier A) — optional");
372
+ for (const f of report.missingRecommendedA.slice(0, 20)) {
373
+ lines.push(`- ${f.installCmd || f.package}`);
374
+ }
375
+ lines.push("");
376
+ }
377
+ if (report.missingRecommendedB.length) {
378
+ lines.push("## missing recommended (tier B) — on demand");
379
+ for (const f of report.missingRecommendedB.slice(0, 20)) {
380
+ lines.push(`- ${f.installCmd || f.package}`);
381
+ }
382
+ lines.push("");
383
+ }
384
+ lines.push(report.ok
385
+ ? "status: ok (required present, no conflicts)"
386
+ : "status: action needed (see missing required / conflicts)");
387
+ lines.push("note: default is detect+prompt only; use `aiws doctor --install-pi-plugins` to install required (user scope).");
388
+ return lines.join("\n");
389
+ }
390
+ export async function loadManifestFromSpec() {
391
+ try {
392
+ const require = createRequire(import.meta.url);
393
+ let rootDir = null;
394
+ try {
395
+ const pkgJsonPath = require.resolve("@aipper/aiws-spec/package.json");
396
+ rootDir = path.dirname(pkgJsonPath);
397
+ }
398
+ catch {
399
+ const here = fileURLToPath(import.meta.url);
400
+ rootDir = path.resolve(path.dirname(here), "../../../spec");
401
+ }
402
+ const jsonPath = path.join(rootDir, "docs", "pi-plugins-manifest.json");
403
+ if (await pathExists(jsonPath)) {
404
+ const data = JSON.parse(await readText(jsonPath));
405
+ return normalizeManifest(data);
406
+ }
407
+ }
408
+ catch {
409
+ // fall through
410
+ }
411
+ return DEFAULT_MANIFEST;
412
+ }
413
+ export function normalizeManifest(data) {
414
+ const base = DEFAULT_MANIFEST;
415
+ if (!data || typeof data !== "object")
416
+ return base;
417
+ return {
418
+ version: typeof data.version === "number" ? data.version : base.version,
419
+ scope: String(data.scope || base.scope),
420
+ source_protocol: String(data.source_protocol || base.source_protocol),
421
+ install_template: String(data.install_template || base.install_template),
422
+ required: Array.isArray(data.required) ? data.required : base.required,
423
+ recommended_a: Array.isArray(data.recommended_a) ? data.recommended_a : base.recommended_a,
424
+ recommended_b: Array.isArray(data.recommended_b) ? data.recommended_b : base.recommended_b,
425
+ forbidden: Array.isArray(data.forbidden) ? data.forbidden : base.forbidden,
426
+ };
427
+ }
428
+ export async function detectInstalledPackages(opts) {
429
+ const home = opts?.homeDir ?? os.homedir();
430
+ const runPiList = opts?.runPiList ??
431
+ (async () => {
432
+ try {
433
+ const r = await runCommand("pi", ["list"]);
434
+ if (r.code === 0 || r.stdout.trim()) {
435
+ return { ok: true, text: `${r.stdout}\n${r.stderr}` };
436
+ }
437
+ return { ok: false, text: `${r.stdout}\n${r.stderr}` };
438
+ }
439
+ catch {
440
+ return { ok: false, text: "" };
441
+ }
442
+ });
443
+ const pi = await runPiList();
444
+ if (pi.ok && pi.text.trim()) {
445
+ const installed = parseInstalledFromText(pi.text);
446
+ if (installed.length > 0) {
447
+ return { installed, piCliAvailable: true, detectSource: "pi_list" };
448
+ }
449
+ // pi exists but empty list
450
+ return { installed: [], piCliAvailable: true, detectSource: "pi_list" };
451
+ }
452
+ // settings fallback
453
+ const settingsPath = path.join(home, ".pi", "agent", "settings.json");
454
+ try {
455
+ if (await pathExists(settingsPath)) {
456
+ const json = JSON.parse(await readText(settingsPath));
457
+ const installed = parseInstalledFromSettings(json);
458
+ // also scan packages dir names
459
+ const pkgDir = path.join(home, ".pi", "agent", "packages");
460
+ if (await pathExists(pkgDir)) {
461
+ const ents = await fs.readdir(pkgDir).catch(() => []);
462
+ for (const e of ents) {
463
+ const name = normalizePackageName(e.replace(/@/g, "/").replace(/^npm_/, ""));
464
+ // directory names are messy; also try reading package.json name
465
+ const pj = path.join(pkgDir, e, "package.json");
466
+ if (await pathExists(pj)) {
467
+ try {
468
+ const meta = JSON.parse(await readText(pj));
469
+ if (meta?.name) {
470
+ installed.push({ name: normalizePackageName(String(meta.name)), version: meta.version ? String(meta.version) : undefined });
471
+ }
472
+ }
473
+ catch {
474
+ if (name)
475
+ installed.push({ name });
476
+ }
477
+ }
478
+ }
479
+ }
480
+ const dedup = new Map(installed.map((p) => [normalizePackageName(p.name), p]));
481
+ return {
482
+ installed: Array.from(dedup.values()),
483
+ piCliAvailable: false,
484
+ detectSource: "settings",
485
+ };
486
+ }
487
+ }
488
+ catch {
489
+ // ignore
490
+ }
491
+ return { installed: [], piCliAvailable: false, detectSource: "none" };
492
+ }
493
+ export async function runPiPluginsDoctor(opts) {
494
+ const manifest = opts?.manifest ?? (await loadManifestFromSpec());
495
+ let installed = opts?.installed;
496
+ let piCliAvailable = true;
497
+ let detectSource = "injected";
498
+ if (!installed) {
499
+ const det = await detectInstalledPackages({ homeDir: opts?.homeDir, runPiList: opts?.runPiList });
500
+ installed = det.installed;
501
+ piCliAvailable = det.piCliAvailable;
502
+ detectSource = det.detectSource;
503
+ }
504
+ const report = classifyPiPlugins({
505
+ manifest,
506
+ installed,
507
+ piCliAvailable,
508
+ detectSource,
509
+ });
510
+ return { report, text: formatDoctorReport(report) };
511
+ }
512
+ /** Official Pi agent package (global CLI `pi`). Not auto-installed by AIWS. */
513
+ export const PI_CODING_AGENT_PACKAGE = "@mariozechner/pi-coding-agent";
514
+ /** Copy-paste install hints when `pi` is missing (detect only; never run by default). */
515
+ export function formatPiCliInstallHints() {
516
+ return [
517
+ "Pi agent CLI (`pi`) not found on PATH.",
518
+ "Install Pi first, then re-run with --install-pi-plugins:",
519
+ ` npm i -g ${PI_CODING_AGENT_PACKAGE}`,
520
+ ` pnpm add -g ${PI_CODING_AGENT_PACKAGE}`,
521
+ "Then: pi install npm:@tintinweb/pi-subagents@0.14.2",
522
+ ].join("\n");
523
+ }
524
+ /**
525
+ * Detect whether Pi CLI is runnable. Inject `probe` for tests.
526
+ * Default: `pi --version` (or empty argv that succeeds on some builds).
527
+ */
528
+ export async function checkPiCliAvailable(opts) {
529
+ const probe = opts?.probe ??
530
+ (async () => {
531
+ try {
532
+ const r = await runCommand("pi", ["--version"]);
533
+ if (r.code === 0)
534
+ return { ok: true };
535
+ // some builds may not support --version; try bare help
536
+ const h = await runCommand("pi", ["--help"]);
537
+ return { ok: h.code === 0 || Boolean(h.stdout?.trim() || h.stderr?.trim()) };
538
+ }
539
+ catch {
540
+ return { ok: false };
541
+ }
542
+ });
543
+ const r = await probe();
544
+ return Boolean(r.ok);
545
+ }
546
+ /**
547
+ * Install required packages only (user scope). Never silent from callers without explicit flag.
548
+ * Hard gate: if `pi` is not available, do not call `pi install`; return piCliMissing + hints.
549
+ */
550
+ export async function installRequiredPiPlugins(opts) {
551
+ const checkPi = opts?.checkPi ?? (() => checkPiCliAvailable());
552
+ const piOk = await checkPi();
553
+ if (!piOk) {
554
+ return {
555
+ attempted: [],
556
+ results: [],
557
+ piCliMissing: true,
558
+ message: formatPiCliInstallHints(),
559
+ };
560
+ }
561
+ const manifest = opts?.manifest ?? (await loadManifestFromSpec());
562
+ const runInstall = opts?.runInstall ??
563
+ (async (args) => {
564
+ try {
565
+ return await runCommand("pi", args);
566
+ }
567
+ catch (e) {
568
+ return { code: 1, stdout: "", stderr: e instanceof Error ? e.message : String(e) };
569
+ }
570
+ });
571
+ const attempted = [];
572
+ const results = [];
573
+ for (const p of manifest.required || []) {
574
+ const versionSuffix = p.version ? `@${p.version}` : "";
575
+ const npmSpec = `npm:${p.package}${versionSuffix}`;
576
+ const cmd = `pi install ${npmSpec}`;
577
+ attempted.push(cmd);
578
+ const r = await runInstall(["install", npmSpec]);
579
+ results.push({ cmd, code: r.code, stderr: r.stderr });
580
+ }
581
+ return { attempted, results, piCliMissing: false };
582
+ }
583
+ //# sourceMappingURL=pi-plugins-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-plugins-doctor.js","sourceRoot":"","sources":["../../src/lib/pi-plugins-doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};