@pasko70/pibo 1.4.5 → 1.4.6

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 (36) hide show
  1. package/dist/apps/chat/agent-profiles.js +4 -1
  2. package/dist/apps/chat/agent-store.js +196 -3
  3. package/dist/apps/chat/web-app.js +5 -4
  4. package/dist/apps/chat-ui/assets/{dist-D1Laodgo.js → dist-B6kzRv2_.js} +1 -1
  5. package/dist/apps/chat-ui/assets/{dist-BtF63vik.js → dist-Bns-O5iY.js} +1 -1
  6. package/dist/apps/chat-ui/assets/{dist-85Cc5Hut.js → dist-CVcI9eYD.js} +1 -1
  7. package/dist/apps/chat-ui/assets/{dist-CQXtvBTs.js → dist-CqkKCn6l.js} +1 -1
  8. package/dist/apps/chat-ui/assets/{dist-B8jspmzT.js → dist-D4CEl91a.js} +1 -1
  9. package/dist/apps/chat-ui/assets/{dist-DE8W5WKg.js → dist-D9K0kHT0.js} +1 -1
  10. package/dist/apps/chat-ui/assets/{dist-oLAGkW6G.js → dist-DWA7BIr3.js} +1 -1
  11. package/dist/apps/chat-ui/assets/{dist-DcME5mJj.js → dist-Dj3uUYqF.js} +1 -1
  12. package/dist/apps/chat-ui/assets/{dist-ecTM1pdv.js → dist-DqaKPP5Y.js} +1 -1
  13. package/dist/apps/chat-ui/assets/{dist-BGqK-7Ep.js → dist-DuM9PL5k.js} +1 -1
  14. package/dist/apps/chat-ui/assets/{dist-eG89IJAV.js → dist-DvPgMX-r.js} +1 -1
  15. package/dist/apps/chat-ui/assets/{index-D4uifikB.js → index-Baxj7Erc.js} +6 -5
  16. package/dist/apps/chat-ui/index.html +1 -1
  17. package/dist/apps/chat-vscode-web/assets/{index-CRUSv6iR.js → index-CjOC7zYy.js} +4 -4
  18. package/dist/apps/chat-vscode-web/index.html +1 -1
  19. package/dist/apps/cli-ui/inkMarkdown.js +8 -3
  20. package/dist/apps/cli-ui/inkSyntaxHighlighter.js +166 -0
  21. package/dist/apps/vscode-artifacts/latest.vsix +0 -0
  22. package/dist/apps/vscode-artifacts/{pibo-vscode-ext-1.4.5.vsix → pibo-vscode-ext-1.4.6.vsix} +0 -0
  23. package/dist/cli.js +20 -0
  24. package/dist/mcp/agent-context.js +10 -6
  25. package/dist/mcp/commands/info.js +19 -7
  26. package/dist/mcp/config.js +98 -65
  27. package/dist/plugins/builtin.js +15 -1
  28. package/dist/session-ui/terminalRows.js +56 -2
  29. package/dist/shared/trace-nodes.js +12 -0
  30. package/dist/skills/cli.js +25 -1
  31. package/dist/tools/guides.js +71 -0
  32. package/dist/tools/index.js +7 -3
  33. package/dist/tools/python-runtime.js +2 -2
  34. package/dist/tools/registry.js +25 -1
  35. package/package.json +93 -93
  36. package/skills/builtin/graphify/SKILL.md +52 -0
@@ -1,4 +1,5 @@
1
1
  import { Command } from "commander";
2
+ import { createDefaultPiboPluginRegistry } from "../plugins/builtin.js";
2
3
  import { UserSkillManager } from "../user-skills/manager.js";
3
4
  import { readFileSync } from "node:fs";
4
5
  import { resolve } from "node:path";
@@ -9,7 +10,30 @@ function printJson(value) {
9
10
  export async function runSkillsCli(argv) {
10
11
  const manager = new UserSkillManager(os.homedir());
11
12
  const program = new Command();
12
- program.name("pibo skills").description("Manage Pibo user skills (not built-in or plugin skills)");
13
+ program
14
+ .name("pibo skills")
15
+ .description("Manage Pibo user skills and inspect the built-in/plugin skill catalog")
16
+ .addHelpText("after", "\nBuilt-in/plugin skills are selected by agent profiles. Run `pibo skills catalog` to list them.\n");
17
+ program
18
+ .command("catalog")
19
+ .description("List built-in and plugin skills available to profiles")
20
+ .option("--json", "Print JSON")
21
+ .action((options) => {
22
+ const registry = createDefaultPiboPluginRegistry();
23
+ const skills = registry.getCapabilityCatalog().skills.filter((skill) => skill.kind !== "user");
24
+ if (options.json) {
25
+ printJson(skills);
26
+ return;
27
+ }
28
+ if (skills.length === 0) {
29
+ console.log("No built-in or plugin skills registered.");
30
+ return;
31
+ }
32
+ console.log("NAME\tKIND\tPATH");
33
+ for (const skill of skills) {
34
+ console.log(`${skill.name}\t${skill.kind ?? "plugin"}\t${skill.path}`);
35
+ }
36
+ });
13
37
  program
14
38
  .command("list")
15
39
  .description("List user skills managed by this CLI")
@@ -379,6 +379,77 @@ If \`browser-use --connect\` cannot find Chrome, ask the user whether they want
379
379
  14. If Chrome fails to start with a "SingletonLock" error, the wrapper auto-detects and terminates stale Chrome processes holding the lock. Retry your command.
380
380
  `,
381
381
  };
382
+ export const GRAPHIFY_GUIDE = {
383
+ name: 'graphify',
384
+ description: 'Generate codebase knowledge graphs with the Graphify CLI.',
385
+ content: `---
386
+ name: graphify
387
+ description: Generates interactive codebase knowledge graphs and markdown reports from a workspace folder.
388
+ allowed-tools: Bash(graphify:*)
389
+ ---
390
+
391
+ # Codebase Visualization with Graphify
392
+
393
+ Graphify turns a folder into derived artifacts under \`graphify-out/\`:
394
+
395
+ - \`graphify-out/graph.html\` — an interactive clickable graph;
396
+ - \`graphify-out/graph.json\` — machine-readable graph data;
397
+ - \`graphify-out/GRAPH_REPORT.md\` — a markdown summary with key concepts and suggested questions.
398
+
399
+ Use it when a user asks to graph, map, visualize, or quickly understand a repo/workspace shape.
400
+
401
+ ## Prerequisites
402
+
403
+ Install and apply the Pibo tool environment:
404
+
405
+ \`\`\`bash
406
+ pibo tools install graphify
407
+ eval "$(pibo tools env graphify)"
408
+ graphify --help
409
+ \`\`\`
410
+
411
+ Inside the Pibo source repo, use \`npm run --silent dev -- tools ...\` while testing local changes:
412
+
413
+ \`\`\`bash
414
+ npm run --silent dev -- tools install graphify
415
+ eval "$(npm run --silent dev -- tools env graphify)"
416
+ \`\`\`
417
+
418
+ The installer uses the PyPI package \`graphifyy\` and runs \`graphify install --platform pi\` so the CLI is ready for Pi/Pibo workflows.
419
+
420
+ ## Core Workflow
421
+
422
+ 1. Choose the workspace path. Prefer the active Pibo Room or session workspace boundary when known.
423
+ 2. Run Graphify from that folder or pass the target path explicitly. With \`graphifyy==0.9.x\`, \`graphify .\` writes extraction output under \`graphify-out/\`.
424
+ 3. For a code-only workspace without an LLM key, run \`graphify cluster-only . --no-label\` after extraction to produce the HTML graph and markdown report.
425
+ 4. Put generated artifacts in an ignored room/session artifact directory when possible; do not commit them unless the user explicitly asks.
426
+ 5. Read \`graphify-out/GRAPH_REPORT.md\` first, then open \`graphify-out/graph.html\` when an interactive view is useful.
427
+
428
+ \`\`\`bash
429
+ cd /path/to/workspace
430
+ graphify .
431
+ graphify cluster-only . --no-label
432
+ ls graphify-out/graph.html graphify-out/graph.json graphify-out/GRAPH_REPORT.md
433
+ \`\`\`
434
+
435
+ ## Pibo Usage Notes
436
+
437
+ - For Room-bound work, graph the Room workspace rather than the agent harness checkout unless the user asks otherwise.
438
+ - If generating inside a Git repo, check \`git status --short\` before and after so graph artifacts are not accidentally included in unrelated commits.
439
+ - Code-only extraction can run without an LLM API key. Including docs, README files, papers, images, or semantic-labeling steps may require a configured Graphify backend/API key; if no key is available, graph a code-only subdirectory or skip semantic labels with \`cluster-only . --no-label\`.
440
+ - For large monorepos, start with a subdirectory such as \`src/\`, a code package, or a docs folder only when the needed LLM backend is configured.
441
+ - Treat graph output as derived data. Recompute on demand when the branch or workspace changes.
442
+
443
+ ## Next Commands
444
+
445
+ \`\`\`bash
446
+ pibo tools show graphify
447
+ pibo tools guide graphify graphify
448
+ pibo tools path graphify
449
+ pibo tools doctor graphify
450
+ \`\`\`
451
+ `,
452
+ };
382
453
  export const REMOTE_BROWSER_GUIDE = {
383
454
  name: 'remote-browser',
384
455
  description: 'Browser automation workflow for sandboxed or remote agents.',
@@ -166,9 +166,13 @@ function printEnv(name) {
166
166
  return;
167
167
  }
168
168
  const binDir = status.executablePath.replace(/\/[^/]+$/, '');
169
- const wrapperPath = entry.name === 'agent-browser' ? ensureAgentBrowserWrapper(status) : ensureBrowserUseWrapper(status);
170
- const wrapperBinDir = wrapperPath ? wrapperPath.replace(/\/[^/]+$/, '') : `${status.homeDir}/bin`;
171
- console.log(`export PATH="${wrapperBinDir}:${binDir}:$PATH"`);
169
+ const wrapperPath = entry.name === 'browser-use'
170
+ ? ensureBrowserUseWrapper(status)
171
+ : entry.name === 'agent-browser'
172
+ ? ensureAgentBrowserWrapper(status)
173
+ : undefined;
174
+ const envBinDirs = wrapperPath ? `${wrapperPath.replace(/\/[^/]+$/, '')}:${binDir}` : binDir;
175
+ console.log(`export PATH="${envBinDirs}:$PATH"`);
172
176
  if (entry.runtime.homeEnvVar)
173
177
  console.log(`export ${entry.runtime.homeEnvVar}="${status.homeDir}"`);
174
178
  if (desktop.display)
@@ -123,8 +123,8 @@ export async function printToolPythonRuntimeDoctor(name, spec) {
123
123
  if (name === 'browser-use' && process.platform === 'linux' && !hasDesktopDisplay(detectDesktopEnv())) {
124
124
  printLinuxVirtualDisplayHint(' ');
125
125
  }
126
- if (existsSync(paths.executablePath)) {
127
- const doctor = await runBuffered(paths.executablePath, ['doctor'], getToolPythonRuntimeEnv(paths, spec));
126
+ if (existsSync(paths.executablePath) && spec.doctorArgs?.length) {
127
+ const doctor = await runBuffered(paths.executablePath, spec.doctorArgs, getToolPythonRuntimeEnv(paths, spec));
128
128
  console.log(` tool doctor: ${doctor.ok ? 'ok' : 'failed'}`);
129
129
  if (doctor.output) {
130
130
  console.log(doctor.output.split('\n').map((line) => ` ${line}`).join('\n'));
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import { ensureAgentBrowserWrapper } from './agent-browser-wrapper.js';
3
3
  import { detectDesktopEnv, hasDesktopDisplay, printDesktopEnvStatus, printLinuxVirtualDisplayHint } from './desktop-env.js';
4
- import { AGENT_BROWSER_GUIDE, BROWSER_USE_GUIDE, RALPH_GUIDE, REMOTE_BROWSER_GUIDE } from './guides.js';
4
+ import { AGENT_BROWSER_GUIDE, BROWSER_USE_GUIDE, GRAPHIFY_GUIDE, RALPH_GUIDE, REMOTE_BROWSER_GUIDE } from './guides.js';
5
5
  import { ensureLinuxVirtualDisplay } from './linux-virtual-display.js';
6
6
  import { getToolNpmRuntimePaths, installToolNpmRuntime, printToolNpmRuntimeDoctor, removeToolNpmRuntime, } from './npm-runtime.js';
7
7
  import { getToolPythonRuntimePaths, installToolPythonRuntime, runInheritedCommand, printToolPythonRuntimeDoctor, removeToolPythonRuntime, } from './python-runtime.js';
@@ -16,6 +16,7 @@ const REGISTRY = [
16
16
  executableName: 'browser-use',
17
17
  pythonVersion: '3.12',
18
18
  homeEnvVar: 'BROWSER_USE_HOME',
19
+ doctorArgs: ['doctor'],
19
20
  },
20
21
  guides: [BROWSER_USE_GUIDE, REMOTE_BROWSER_GUIDE],
21
22
  notes: [
@@ -59,6 +60,29 @@ const REGISTRY = [
59
60
  'Discover details with `npm run dev -- tools show agent-browser` and `npm run dev -- tools guide agent-browser agent-browser`.',
60
61
  ].join('\n'),
61
62
  },
63
+ {
64
+ name: 'graphify',
65
+ description: 'Codebase visualization CLI that generates interactive knowledge graphs and reports.',
66
+ runtime: {
67
+ packageName: 'graphifyy',
68
+ executableName: 'graphify',
69
+ pythonVersion: '3.12',
70
+ postInstallArgs: ['install', '--platform', 'pi'],
71
+ },
72
+ guides: [GRAPHIFY_GUIDE],
73
+ notes: [
74
+ 'Installed on demand into an isolated Python virtual environment from the graphifyy package.',
75
+ 'The installer runs graphify install --platform pi after package installation so Graphify is ready for Pi/Pibo workflows.',
76
+ 'Graphify writes generated graph artifacts under graphify-out/; prefer an ignored room/session artifact directory unless the user explicitly wants repo files.',
77
+ 'Guides are available through pibo tools guide and are not loaded into pibo profiles automatically.',
78
+ ],
79
+ agentContextSnippet: [
80
+ 'Codebase visualization CLI for graphify-out/graph.html, graph.json, and GRAPH_REPORT.md.',
81
+ 'Start with `eval "$(npm run --silent dev -- tools env graphify)"`.',
82
+ 'No LLM key: run `graphify .` on code, then `graphify cluster-only . --no-label`.',
83
+ 'Guide: `npm run dev -- tools guide graphify graphify`.',
84
+ ].join('\n'),
85
+ },
62
86
  {
63
87
  name: 'ralph',
64
88
  description: 'Pibo-native continuous agent job runner for implementation and debugging loops.',
package/package.json CHANGED
@@ -1,93 +1,93 @@
1
- {
2
- "name": "@pasko70/pibo",
3
- "version": "1.4.5",
4
- "type": "module",
5
- "imports": {
6
- "vscode": "./src/apps/chat-vscode/extension/src/vscode-shim.js"
7
- },
8
- "description": "Minimal TypeScript wrapper around Pi Coding Agent.",
9
- "files": [
10
- "dist",
11
- "context",
12
- "skills/builtin/**",
13
- "docs/ops/**",
14
- "README.md",
15
- "src/mcp/LICENSE.mcp-cli"
16
- ],
17
- "bin": {
18
- "pibo": "dist/bin/pibo.js",
19
- "rg": "dist/bin/rg.js"
20
- },
21
- "engines": {
22
- "node": ">=24"
23
- },
24
- "scripts": {
25
- "dev": "tsx src/bin/pibo.ts",
26
- "profile": "tsx src/bin/pibo.ts profile",
27
- "tui": "tsx src/bin/pibo.ts tui",
28
- "tui:routed": "tsx src/bin/pibo.ts tui:routed",
29
- "tui:gateway": "tsx src/bin/pibo.ts tui gateway-producer",
30
- "gateway": "tsx src/bin/pibo.ts gateway",
31
- "gateway:web": "npm run web-ui:build && tsx src/bin/pibo.ts gateway:web",
32
- "client": "tsx src/bin/pibo.ts client",
33
- "chat-ui:build": "vite build --config src/apps/chat-ui/vite.config.ts",
34
- "chat-ui:typecheck": "tsc -p src/apps/chat-ui/tsconfig.json --noEmit",
35
- "context-files-ui:build": "vite build --config src/apps/context-files-ui/vite.config.ts",
36
- "context-files-ui:typecheck": "tsc -p src/apps/context-files-ui/tsconfig.json --noEmit",
37
- "web-ui:build": "npm run chat-ui:build && npm run context-files-ui:build",
38
- "vscode:typecheck": "tsc -p src/apps/chat-vscode/extension/tsconfig.json --noEmit && tsc -p src/apps/chat-vscode/extension/webview/tsconfig.json --noEmit",
39
- "vscode:webview:build": "vite build --config src/apps/chat-vscode/extension/webview/vite.config.ts",
40
- "vscode:extension:build": "esbuild src/apps/chat-vscode/extension/src/extension.ts --bundle --platform=node --target=node24 --format=cjs --outfile=src/apps/chat-vscode/dist/extension/extension.cjs --external:vscode --sourcemap=inline",
41
- "vscode:package": "node scripts/vscode-package.mjs",
42
- "release": "node scripts/release.mjs",
43
- "release:github": "node scripts/create-github-release.mjs",
44
- "build": "tsc -p tsconfig.json && npm run web-ui:build && npm run vscode:webview:build && node scripts/ensure-bin-executable.mjs",
45
- "start": "node dist/bin/pibo.js",
46
- "test": "npm run build && node --test test/*.test.mjs test/chat-vscode/*.test.mjs",
47
- "check:product-vocab": "node scripts/legacy-product-vocabulary-gate.mjs",
48
- "validate:ink-web-derived": "node scripts/ink-cli-web-derived-parity-validate.mjs",
49
- "compute:limited-worker-smoke": "node scripts/compute-limited-worker-smoke.mjs",
50
- "typecheck": "tsc -p tsconfig.json --noEmit && npm run chat-ui:typecheck && npm run context-files-ui:typecheck && npm run vscode:typecheck",
51
- "clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\"",
52
- "prepack": "npm run build"
53
- },
54
- "dependencies": {
55
- "@mariozechner/pi-ai": "^0.73.1",
56
- "@mariozechner/pi-coding-agent": "^0.73.1",
57
- "@mdxeditor/editor": "^3.55.0",
58
- "@modelcontextprotocol/sdk": "^1.29.0",
59
- "@tailwindcss/vite": "^4.2.4",
60
- "@tanstack/react-query": "^5.100.7",
61
- "@tanstack/react-router": "^1.168.25",
62
- "@tanstack/react-start": "^1.167.50",
63
- "@uiw/react-json-view": "^2.0.0-alpha.41",
64
- "@vscode/ripgrep": "^1.18.0",
65
- "@xyflow/react": "12.10.2",
66
- "better-auth": "^1.6.9",
67
- "commander": "^14.0.3",
68
- "ink": "^7.0.3",
69
- "lexical": "^0.35.0",
70
- "lucide-react": "^0.545.0",
71
- "prismjs": "^1.30.0",
72
- "react": "^19.2.5",
73
- "react-dom": "^19.2.5",
74
- "react-markdown": "^10.1.0",
75
- "react-virtuoso": "^4.18.6",
76
- "remark-gfm": "^4.0.1",
77
- "tailwindcss": "^4.2.4"
78
- },
79
- "devDependencies": {
80
- "@tanstack/router-plugin": "^1.167.28",
81
- "@types/node": "^25.6.0",
82
- "@types/prismjs": "^1.26.6",
83
- "@types/react": "^19.2.14",
84
- "@types/react-dom": "^19.2.3",
85
- "@vitejs/plugin-react": "^6.0.1",
86
- "@vscode/vsce": "^3.6.0",
87
- "esbuild": "^0.27.7",
88
- "tsx": "^4.21.0",
89
- "typescript": "^6.0.3",
90
- "vite": "^8.0.10",
91
- "vite-tsconfig-paths": "^5.1.4"
92
- }
93
- }
1
+ {
2
+ "name": "@pasko70/pibo",
3
+ "version": "1.4.6",
4
+ "type": "module",
5
+ "imports": {
6
+ "vscode": "./src/apps/chat-vscode/extension/src/vscode-shim.js"
7
+ },
8
+ "description": "Minimal TypeScript wrapper around Pi Coding Agent.",
9
+ "files": [
10
+ "dist",
11
+ "context",
12
+ "skills/builtin/**",
13
+ "docs/ops/**",
14
+ "README.md",
15
+ "src/mcp/LICENSE.mcp-cli"
16
+ ],
17
+ "bin": {
18
+ "pibo": "dist/bin/pibo.js",
19
+ "rg": "dist/bin/rg.js"
20
+ },
21
+ "engines": {
22
+ "node": ">=24"
23
+ },
24
+ "scripts": {
25
+ "dev": "tsx src/bin/pibo.ts",
26
+ "profile": "tsx src/bin/pibo.ts profile",
27
+ "tui": "tsx src/bin/pibo.ts tui",
28
+ "tui:routed": "tsx src/bin/pibo.ts tui:routed",
29
+ "tui:gateway": "tsx src/bin/pibo.ts tui gateway-producer",
30
+ "gateway": "tsx src/bin/pibo.ts gateway",
31
+ "gateway:web": "npm run web-ui:build && tsx src/bin/pibo.ts gateway:web",
32
+ "client": "tsx src/bin/pibo.ts client",
33
+ "chat-ui:build": "vite build --config src/apps/chat-ui/vite.config.ts",
34
+ "chat-ui:typecheck": "tsc -p src/apps/chat-ui/tsconfig.json --noEmit",
35
+ "context-files-ui:build": "vite build --config src/apps/context-files-ui/vite.config.ts",
36
+ "context-files-ui:typecheck": "tsc -p src/apps/context-files-ui/tsconfig.json --noEmit",
37
+ "web-ui:build": "npm run chat-ui:build && npm run context-files-ui:build",
38
+ "vscode:typecheck": "tsc -p src/apps/chat-vscode/extension/tsconfig.json --noEmit && tsc -p src/apps/chat-vscode/extension/webview/tsconfig.json --noEmit",
39
+ "vscode:webview:build": "vite build --config src/apps/chat-vscode/extension/webview/vite.config.ts",
40
+ "vscode:extension:build": "esbuild src/apps/chat-vscode/extension/src/extension.ts --bundle --platform=node --target=node24 --format=cjs --outfile=src/apps/chat-vscode/dist/extension/extension.cjs --external:vscode --sourcemap=inline",
41
+ "vscode:package": "node scripts/vscode-package.mjs",
42
+ "release": "node scripts/release.mjs",
43
+ "release:github": "node scripts/create-github-release.mjs",
44
+ "build": "tsc -p tsconfig.json && npm run web-ui:build && npm run vscode:webview:build && node scripts/ensure-bin-executable.mjs",
45
+ "start": "node dist/bin/pibo.js",
46
+ "test": "npm run build && node --test test/*.test.mjs test/chat-vscode/*.test.mjs",
47
+ "check:product-vocab": "node scripts/legacy-product-vocabulary-gate.mjs",
48
+ "validate:ink-web-derived": "node scripts/ink-cli-web-derived-parity-validate.mjs",
49
+ "compute:limited-worker-smoke": "node scripts/compute-limited-worker-smoke.mjs",
50
+ "typecheck": "tsc -p tsconfig.json --noEmit && npm run chat-ui:typecheck && npm run context-files-ui:typecheck && npm run vscode:typecheck",
51
+ "clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true })\"",
52
+ "prepack": "npm run build"
53
+ },
54
+ "dependencies": {
55
+ "@mariozechner/pi-ai": "^0.73.1",
56
+ "@mariozechner/pi-coding-agent": "^0.73.1",
57
+ "@mdxeditor/editor": "^3.55.0",
58
+ "@modelcontextprotocol/sdk": "^1.29.0",
59
+ "@tailwindcss/vite": "^4.2.4",
60
+ "@tanstack/react-query": "^5.100.7",
61
+ "@tanstack/react-router": "^1.168.25",
62
+ "@tanstack/react-start": "^1.167.50",
63
+ "@uiw/react-json-view": "^2.0.0-alpha.41",
64
+ "@vscode/ripgrep": "^1.18.0",
65
+ "@xyflow/react": "12.10.2",
66
+ "better-auth": "^1.6.9",
67
+ "commander": "^14.0.3",
68
+ "ink": "^7.0.3",
69
+ "lexical": "^0.35.0",
70
+ "lucide-react": "^0.545.0",
71
+ "prismjs": "^1.30.0",
72
+ "react": "^19.2.5",
73
+ "react-dom": "^19.2.5",
74
+ "react-markdown": "^10.1.0",
75
+ "react-virtuoso": "^4.18.6",
76
+ "remark-gfm": "^4.0.1",
77
+ "tailwindcss": "^4.2.4"
78
+ },
79
+ "devDependencies": {
80
+ "@tanstack/router-plugin": "^1.167.28",
81
+ "@types/node": "^25.6.0",
82
+ "@types/prismjs": "^1.26.6",
83
+ "@types/react": "^19.2.14",
84
+ "@types/react-dom": "^19.2.3",
85
+ "@vitejs/plugin-react": "^6.0.1",
86
+ "@vscode/vsce": "^3.6.0",
87
+ "esbuild": "^0.27.7",
88
+ "tsx": "^4.21.0",
89
+ "typescript": "^6.0.3",
90
+ "vite": "^8.0.10",
91
+ "vite-tsconfig-paths": "^5.1.4"
92
+ }
93
+ }
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: graphify
3
+ description: Use this skill when a user asks to graph, map, or visualize a codebase/workspace with Graphify and inspect the generated graphify-out/graph.html, graphify-out/graph.json, or graphify-out/GRAPH_REPORT.md artifacts.
4
+ ---
5
+
6
+ # Graphify Codebase Visualization
7
+
8
+ Use Graphify to turn a workspace folder into an interactive knowledge graph and report. Prefer this skill for requests like "graph this repo", "visualize this codebase", "map the workspace", or "show me the project structure as a graph".
9
+
10
+ ## Prerequisites
11
+
12
+ Graphify is exposed as a curated Pibo CLI tool:
13
+
14
+ ```bash
15
+ pibo tools show graphify
16
+ pibo tools install graphify
17
+ eval "$(pibo tools env graphify)"
18
+ ```
19
+
20
+ Inside the Pibo source repo while testing local changes, use:
21
+
22
+ ```bash
23
+ npm run --silent dev -- tools show graphify
24
+ npm run --silent dev -- tools install graphify
25
+ eval "$(npm run --silent dev -- tools env graphify)"
26
+ ```
27
+
28
+ The Pibo installer uses the PyPI package `graphifyy` and runs `graphify install --platform pi` after installing the CLI.
29
+
30
+ ## Workflow
31
+
32
+ 1. Identify the workspace path from the active Pibo Room/session context or from the user's request.
33
+ 2. Confirm the path is inside the intended workspace boundary before graphing.
34
+ 3. Prefer an ignored artifact directory for generated files when possible. If you generate in the repo root, check `git status --short` before and after.
35
+ 4. Run Graphify on the selected folder. With `graphifyy==0.9.x`, `graphify .` writes extraction output under `graphify-out/`.
36
+ 5. If you need an HTML graph and markdown report from a code-only extraction without an LLM key, run `graphify cluster-only . --no-label` after `graphify .`.
37
+ 6. Read `graphify-out/GRAPH_REPORT.md` first for the summary, then open `graphify-out/graph.html` when the user wants an interactive view.
38
+
39
+ ```bash
40
+ cd /path/to/workspace
41
+ graphify .
42
+ graphify cluster-only . --no-label
43
+ ls graphify-out/graph.html graphify-out/graph.json graphify-out/GRAPH_REPORT.md
44
+ ```
45
+
46
+ ## Operating rules
47
+
48
+ - Treat `graphify-out/graph.html`, `graphify-out/graph.json`, and `graphify-out/GRAPH_REPORT.md` as derived artifacts unless the user explicitly wants them committed.
49
+ - Code-only extraction can run without an LLM API key. Including docs, README files, papers, images, or semantic-labeling steps may require a configured Graphify backend/API key; if no key is available, graph a code-only subdirectory or skip semantic labels with `cluster-only . --no-label`.
50
+ - For large monorepos, start with a focused subdirectory such as `src/`, a code package, or a docs folder only when the needed LLM backend is configured.
51
+ - Re-run Graphify on demand after branch or workspace changes; do not assume an old graph is current.
52
+ - If Graphify is unavailable, report the missing install and suggest `pibo tools install graphify` rather than hand-writing a replacement graph.