pi-forge 0.0.0 → 1.1.4

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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -4
  3. package/bin/pi-forge.mjs +37 -0
  4. package/dist/client/assets/CodeMirrorEditor-BqaaP1EE.js +34 -0
  5. package/dist/client/assets/CodeMirrorEditor-BqaaP1EE.js.map +1 -0
  6. package/dist/client/assets/index-B-529kgJ.css +32 -0
  7. package/dist/client/assets/index-BzKzxXFs.js +392 -0
  8. package/dist/client/assets/index-BzKzxXFs.js.map +1 -0
  9. package/dist/client/assets/workbox-window.prod.es5-BBnX5xw4.js +3 -0
  10. package/dist/client/assets/workbox-window.prod.es5-BBnX5xw4.js.map +1 -0
  11. package/dist/client/icons/icon-192.png +0 -0
  12. package/dist/client/icons/icon-512.png +0 -0
  13. package/dist/client/icons/icon-maskable-512.png +0 -0
  14. package/dist/client/icons/icon.svg +9 -0
  15. package/dist/client/index.html +24 -0
  16. package/dist/client/manifest.webmanifest +1 -0
  17. package/dist/client/offline.html +142 -0
  18. package/dist/client/sw.js +3 -0
  19. package/dist/client/sw.js.map +1 -0
  20. package/dist/client/workbox-6d7155ed.js +3 -0
  21. package/dist/client/workbox-6d7155ed.js.map +1 -0
  22. package/dist/server/agent-resource-loader.js +126 -0
  23. package/dist/server/agent-resource-loader.js.map +1 -0
  24. package/dist/server/attachment-converters.js +96 -0
  25. package/dist/server/attachment-converters.js.map +1 -0
  26. package/dist/server/auth.js +209 -0
  27. package/dist/server/auth.js.map +1 -0
  28. package/dist/server/compaction-history.js +106 -0
  29. package/dist/server/compaction-history.js.map +1 -0
  30. package/dist/server/concurrency.js +49 -0
  31. package/dist/server/concurrency.js.map +1 -0
  32. package/dist/server/config-export.js +220 -0
  33. package/dist/server/config-export.js.map +1 -0
  34. package/dist/server/config-manager.js +528 -0
  35. package/dist/server/config-manager.js.map +1 -0
  36. package/dist/server/config.js +326 -0
  37. package/dist/server/config.js.map +1 -0
  38. package/dist/server/conversion-worker.mjs +90 -0
  39. package/dist/server/diagnostics.js +137 -0
  40. package/dist/server/diagnostics.js.map +1 -0
  41. package/dist/server/extensions-discovery.js +147 -0
  42. package/dist/server/extensions-discovery.js.map +1 -0
  43. package/dist/server/file-manager.js +734 -0
  44. package/dist/server/file-manager.js.map +1 -0
  45. package/dist/server/file-references.js +215 -0
  46. package/dist/server/file-references.js.map +1 -0
  47. package/dist/server/file-searcher.js +385 -0
  48. package/dist/server/file-searcher.js.map +1 -0
  49. package/dist/server/git-runner.js +684 -0
  50. package/dist/server/git-runner.js.map +1 -0
  51. package/dist/server/index.js +468 -0
  52. package/dist/server/index.js.map +1 -0
  53. package/dist/server/mcp/config.js +133 -0
  54. package/dist/server/mcp/config.js.map +1 -0
  55. package/dist/server/mcp/manager.js +351 -0
  56. package/dist/server/mcp/manager.js.map +1 -0
  57. package/dist/server/mcp/tool-bridge.js +173 -0
  58. package/dist/server/mcp/tool-bridge.js.map +1 -0
  59. package/dist/server/project-manager.js +301 -0
  60. package/dist/server/project-manager.js.map +1 -0
  61. package/dist/server/pty-manager.js +354 -0
  62. package/dist/server/pty-manager.js.map +1 -0
  63. package/dist/server/routes/_schemas.js +73 -0
  64. package/dist/server/routes/_schemas.js.map +1 -0
  65. package/dist/server/routes/auth.js +164 -0
  66. package/dist/server/routes/auth.js.map +1 -0
  67. package/dist/server/routes/config.js +1163 -0
  68. package/dist/server/routes/config.js.map +1 -0
  69. package/dist/server/routes/control.js +464 -0
  70. package/dist/server/routes/control.js.map +1 -0
  71. package/dist/server/routes/exec.js +217 -0
  72. package/dist/server/routes/exec.js.map +1 -0
  73. package/dist/server/routes/files.js +847 -0
  74. package/dist/server/routes/files.js.map +1 -0
  75. package/dist/server/routes/git.js +837 -0
  76. package/dist/server/routes/git.js.map +1 -0
  77. package/dist/server/routes/health.js +97 -0
  78. package/dist/server/routes/health.js.map +1 -0
  79. package/dist/server/routes/mcp.js +300 -0
  80. package/dist/server/routes/mcp.js.map +1 -0
  81. package/dist/server/routes/projects.js +259 -0
  82. package/dist/server/routes/projects.js.map +1 -0
  83. package/dist/server/routes/prompt.js +496 -0
  84. package/dist/server/routes/prompt.js.map +1 -0
  85. package/dist/server/routes/sessions.js +783 -0
  86. package/dist/server/routes/sessions.js.map +1 -0
  87. package/dist/server/routes/stream.js +69 -0
  88. package/dist/server/routes/stream.js.map +1 -0
  89. package/dist/server/routes/terminal.js +335 -0
  90. package/dist/server/routes/terminal.js.map +1 -0
  91. package/dist/server/session-registry.js +1197 -0
  92. package/dist/server/session-registry.js.map +1 -0
  93. package/dist/server/skill-overrides.js +151 -0
  94. package/dist/server/skill-overrides.js.map +1 -0
  95. package/dist/server/skills-export.js +257 -0
  96. package/dist/server/skills-export.js.map +1 -0
  97. package/dist/server/sse-bridge.js +220 -0
  98. package/dist/server/sse-bridge.js.map +1 -0
  99. package/dist/server/tool-overrides.js +277 -0
  100. package/dist/server/tool-overrides.js.map +1 -0
  101. package/dist/server/turn-diff-builder.js +280 -0
  102. package/dist/server/turn-diff-builder.js.map +1 -0
  103. package/package.json +53 -12
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Surface pi PACKAGE contributions (extension-registered tools +
3
+ * skills) to the pi-forge layer.
4
+ *
5
+ * Background: pi keeps two separate concepts. **Packages** are the
6
+ * install unit (npm or git, persisted in `settings.json#packages[]`,
7
+ * managed by `DefaultPackageManager`). A package can contribute any
8
+ * of `extensions`, `skills`, `prompts`, `themes` declared in its
9
+ * `package.json#pi` manifest. **Extensions** are the JS/TS modules
10
+ * that programmatically register tools at session start. So a single
11
+ * package (e.g. pi-subagents) can register tools via its extension
12
+ * entry AND ship a `skills/` dir AND ship `prompts/` — all flowing
13
+ * through the same package install.
14
+ *
15
+ * Pi's own `DefaultResourceLoader.reload()` does:
16
+ *
17
+ * const packageManager = new DefaultPackageManager({ cwd, agentDir, settingsManager });
18
+ * const resolved = await packageManager.resolve();
19
+ * // resolved.extensions, resolved.skills, etc. are ResolvedResource[]
20
+ * // with .path, .enabled, .metadata.source
21
+ *
22
+ * We mirror that. The PackageManager handles every install location —
23
+ * `~/.pi/agent/packages/<name>/` for npm-installed-via-pi, project
24
+ * `.pi/packages/`, plus any directory installs the user did manually.
25
+ * No hardcoded path scan.
26
+ *
27
+ * After the package manager hands us the enabled paths:
28
+ * - Extension paths get passed as `configuredPaths` to
29
+ * `discoverAndLoadExtensions(...)` so we can enumerate the tool
30
+ * names each extension registers.
31
+ * - Skill paths feed into `loadSkills(skillPaths: [...])` for
32
+ * enumeration in Settings → Skills.
33
+ *
34
+ * The `metadata.source` field on each ResolvedResource is the
35
+ * user-visible package name ("pi-subagents", "git+https://…"). We
36
+ * surface it as `packageSource` so the Settings UI can group tools
37
+ * + skills by package instead of by extension entry path.
38
+ */
39
+ import { discoverAndLoadExtensions, DefaultPackageManager, SettingsManager, } from "@mariozechner/pi-coding-agent";
40
+ import { config } from "./config.js";
41
+ /**
42
+ * Resolve package-contributed resources visible to a session in `cwd`.
43
+ *
44
+ * Used by:
45
+ * - `session-registry.buildToolsAllowlist` to union package-extension
46
+ * tool names into the allowlist passed to `createAgentSession`
47
+ * - `routes/config.ts` `GET /config/tools` to list package-contributed
48
+ * tools in the Settings → Tools tab (grouped by package)
49
+ * - `config-manager.listSkills` to feed package skill paths into
50
+ * `loadSkills` so they show up in Settings → Skills
51
+ *
52
+ * Failures inside individual packages or extensions surface as
53
+ * `errors[]` rather than throwing. A single broken package must not
54
+ * block session creation or settings rendering.
55
+ */
56
+ export async function discoverExtensionResources(cwd) {
57
+ const errors = [];
58
+ let extensionPathToPackage;
59
+ let skillEntries;
60
+ try {
61
+ const settingsManager = SettingsManager.create(cwd, config.piConfigDir);
62
+ // Some SDK paths reload settings on construction; defensively
63
+ // call reload here so we read the on-disk packages list fresh
64
+ // (matches DefaultResourceLoader.reload() ordering).
65
+ await settingsManager.reload?.();
66
+ const packageManager = new DefaultPackageManager({
67
+ cwd,
68
+ agentDir: config.piConfigDir,
69
+ settingsManager,
70
+ });
71
+ const resolved = await packageManager.resolve();
72
+ // Filter to enabled paths AND keep their source attribution. A
73
+ // resource without a metadata.source we can't attribute is
74
+ // dropped — better silently absent than rendered as "unknown".
75
+ extensionPathToPackage = new Map();
76
+ for (const r of resolved.extensions) {
77
+ if (!r.enabled)
78
+ continue;
79
+ const src = r.metadata.source;
80
+ if (typeof src !== "string" || src.length === 0)
81
+ continue;
82
+ extensionPathToPackage.set(r.path, src);
83
+ }
84
+ skillEntries = [];
85
+ for (const r of resolved.skills) {
86
+ if (!r.enabled)
87
+ continue;
88
+ // Only forward PACKAGE-origin skills. The PackageManager also
89
+ // surfaces auto-discovered top-level skills (the bare global
90
+ // skill dir, project .pi/skills, etc.) with `origin:
91
+ // "top-level"` — those are already loaded by the
92
+ // `includeDefaults: true` path in `loadSkills`, so passing
93
+ // them through too would double-count every default skill.
94
+ if (r.metadata.origin !== "package")
95
+ continue;
96
+ const src = r.metadata.source;
97
+ if (typeof src !== "string" || src.length === 0)
98
+ continue;
99
+ skillEntries.push({ packageSource: src, skillPath: r.path });
100
+ }
101
+ }
102
+ catch (err) {
103
+ errors.push({
104
+ path: "<package-manager>",
105
+ error: err instanceof Error ? err.message : String(err),
106
+ });
107
+ return { tools: [], skillPaths: [], errors };
108
+ }
109
+ // Now load each extension to enumerate its registered tools.
110
+ // discoverAndLoadExtensions accepts our resolved extension paths
111
+ // via the third (configuredPaths) arg — it'll still also scan the
112
+ // legacy `cwd/.pi/extensions/` and `agentDir/extensions/` dirs,
113
+ // which is fine for backward compat with hand-dropped extensions.
114
+ const tools = [];
115
+ if (extensionPathToPackage.size === 0) {
116
+ return { tools, skillPaths: skillEntries, errors };
117
+ }
118
+ let loaded;
119
+ try {
120
+ loaded = await discoverAndLoadExtensions(Array.from(extensionPathToPackage.keys()), cwd, config.piConfigDir);
121
+ }
122
+ catch (err) {
123
+ errors.push({
124
+ path: "<discoverAndLoadExtensions>",
125
+ error: err instanceof Error ? err.message : String(err),
126
+ });
127
+ return { tools, skillPaths: skillEntries, errors };
128
+ }
129
+ for (const e of loaded.errors) {
130
+ errors.push({ path: e.path, error: e.error });
131
+ }
132
+ for (const ext of loaded.extensions) {
133
+ const pkgSource = extensionPathToPackage.get(ext.path) ?? extensionPathToPackage.get(ext.resolvedPath);
134
+ if (pkgSource === undefined)
135
+ continue; // Not from a package we resolved (legacy dir scan); skip.
136
+ for (const [, registered] of ext.tools) {
137
+ const def = registered.definition;
138
+ const info = { name: def.name, packageSource: pkgSource };
139
+ if (typeof def.description === "string" && def.description.length > 0) {
140
+ info.description = def.description;
141
+ }
142
+ tools.push(info);
143
+ }
144
+ }
145
+ return { tools, skillPaths: skillEntries, errors };
146
+ }
147
+ //# sourceMappingURL=extensions-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions-discovery.js","sourceRoot":"","sources":["../src/extensions-discovery.ts"],"names":[],"mappings":"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"}