pi-kot 0.1.0

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 (222) hide show
  1. package/README.md +30 -0
  2. package/bin/pi-kot.mjs +125 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/index-UJgsBs6a.js +361 -0
  63. package/dist/client/assets/index-UJgsBs6a.js.map +1 -0
  64. package/dist/client/assets/index-ZuTc_0YY.css +1 -0
  65. package/dist/client/index.html +14 -0
  66. package/dist/server/ask-user-question/envelope.d.ts +11 -0
  67. package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
  68. package/dist/server/ask-user-question/envelope.js +41 -0
  69. package/dist/server/ask-user-question/envelope.js.map +1 -0
  70. package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
  71. package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
  72. package/dist/server/ask-user-question/prompt-strings.js +18 -0
  73. package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
  74. package/dist/server/ask-user-question/registry.d.ts +39 -0
  75. package/dist/server/ask-user-question/registry.d.ts.map +1 -0
  76. package/dist/server/ask-user-question/registry.js +124 -0
  77. package/dist/server/ask-user-question/registry.js.map +1 -0
  78. package/dist/server/ask-user-question/tool.d.ts +4 -0
  79. package/dist/server/ask-user-question/tool.d.ts.map +1 -0
  80. package/dist/server/ask-user-question/tool.js +68 -0
  81. package/dist/server/ask-user-question/tool.js.map +1 -0
  82. package/dist/server/ask-user-question/types.d.ts +50 -0
  83. package/dist/server/ask-user-question/types.d.ts.map +1 -0
  84. package/dist/server/ask-user-question/types.js +7 -0
  85. package/dist/server/ask-user-question/types.js.map +1 -0
  86. package/dist/server/ask-user-question/validate.d.ts +3 -0
  87. package/dist/server/ask-user-question/validate.d.ts.map +1 -0
  88. package/dist/server/ask-user-question/validate.js +67 -0
  89. package/dist/server/ask-user-question/validate.js.map +1 -0
  90. package/dist/server/config-manager.d.ts +47 -0
  91. package/dist/server/config-manager.d.ts.map +1 -0
  92. package/dist/server/config-manager.js +182 -0
  93. package/dist/server/config-manager.js.map +1 -0
  94. package/dist/server/config.d.ts +20 -0
  95. package/dist/server/config.d.ts.map +1 -0
  96. package/dist/server/config.js +58 -0
  97. package/dist/server/config.js.map +1 -0
  98. package/dist/server/extension-manager.d.ts +70 -0
  99. package/dist/server/extension-manager.d.ts.map +1 -0
  100. package/dist/server/extension-manager.js +401 -0
  101. package/dist/server/extension-manager.js.map +1 -0
  102. package/dist/server/extension-ui-bridge.d.ts +35 -0
  103. package/dist/server/extension-ui-bridge.d.ts.map +1 -0
  104. package/dist/server/extension-ui-bridge.js +228 -0
  105. package/dist/server/extension-ui-bridge.js.map +1 -0
  106. package/dist/server/file-manager.d.ts +79 -0
  107. package/dist/server/file-manager.d.ts.map +1 -0
  108. package/dist/server/file-manager.js +526 -0
  109. package/dist/server/file-manager.js.map +1 -0
  110. package/dist/server/file-searcher.d.ts +29 -0
  111. package/dist/server/file-searcher.d.ts.map +1 -0
  112. package/dist/server/file-searcher.js +318 -0
  113. package/dist/server/file-searcher.js.map +1 -0
  114. package/dist/server/git-clone.d.ts +56 -0
  115. package/dist/server/git-clone.d.ts.map +1 -0
  116. package/dist/server/git-clone.js +173 -0
  117. package/dist/server/git-clone.js.map +1 -0
  118. package/dist/server/index.d.ts +22 -0
  119. package/dist/server/index.d.ts.map +1 -0
  120. package/dist/server/index.js +196 -0
  121. package/dist/server/index.js.map +1 -0
  122. package/dist/server/lifecycle-notifications.d.ts +28 -0
  123. package/dist/server/lifecycle-notifications.d.ts.map +1 -0
  124. package/dist/server/lifecycle-notifications.js +38 -0
  125. package/dist/server/lifecycle-notifications.js.map +1 -0
  126. package/dist/server/orchestration/config.d.ts +5 -0
  127. package/dist/server/orchestration/config.d.ts.map +1 -0
  128. package/dist/server/orchestration/config.js +35 -0
  129. package/dist/server/orchestration/config.js.map +1 -0
  130. package/dist/server/orchestration/event-bridge.d.ts +32 -0
  131. package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
  132. package/dist/server/orchestration/event-bridge.js +110 -0
  133. package/dist/server/orchestration/event-bridge.js.map +1 -0
  134. package/dist/server/orchestration/inbox.d.ts +9 -0
  135. package/dist/server/orchestration/inbox.d.ts.map +1 -0
  136. package/dist/server/orchestration/inbox.js +186 -0
  137. package/dist/server/orchestration/inbox.js.map +1 -0
  138. package/dist/server/orchestration/init.d.ts +2 -0
  139. package/dist/server/orchestration/init.d.ts.map +1 -0
  140. package/dist/server/orchestration/init.js +22 -0
  141. package/dist/server/orchestration/init.js.map +1 -0
  142. package/dist/server/orchestration/store.d.ts +33 -0
  143. package/dist/server/orchestration/store.d.ts.map +1 -0
  144. package/dist/server/orchestration/store.js +331 -0
  145. package/dist/server/orchestration/store.js.map +1 -0
  146. package/dist/server/orchestration/tools.d.ts +15 -0
  147. package/dist/server/orchestration/tools.d.ts.map +1 -0
  148. package/dist/server/orchestration/tools.js +621 -0
  149. package/dist/server/orchestration/tools.js.map +1 -0
  150. package/dist/server/orchestration/types.d.ts +68 -0
  151. package/dist/server/orchestration/types.d.ts.map +1 -0
  152. package/dist/server/orchestration/types.js +43 -0
  153. package/dist/server/orchestration/types.js.map +1 -0
  154. package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
  155. package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
  156. package/dist/server/orchestration/worker-lifecycle.js +45 -0
  157. package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
  158. package/dist/server/project-manager.d.ts +25 -0
  159. package/dist/server/project-manager.d.ts.map +1 -0
  160. package/dist/server/project-manager.js +157 -0
  161. package/dist/server/project-manager.js.map +1 -0
  162. package/dist/server/routes/_schemas.d.ts +16 -0
  163. package/dist/server/routes/_schemas.d.ts.map +1 -0
  164. package/dist/server/routes/_schemas.js +12 -0
  165. package/dist/server/routes/_schemas.js.map +1 -0
  166. package/dist/server/routes/ask-user-question.d.ts +3 -0
  167. package/dist/server/routes/ask-user-question.d.ts.map +1 -0
  168. package/dist/server/routes/ask-user-question.js +105 -0
  169. package/dist/server/routes/ask-user-question.js.map +1 -0
  170. package/dist/server/routes/auth.d.ts +7 -0
  171. package/dist/server/routes/auth.d.ts.map +1 -0
  172. package/dist/server/routes/auth.js +126 -0
  173. package/dist/server/routes/auth.js.map +1 -0
  174. package/dist/server/routes/config.d.ts +3 -0
  175. package/dist/server/routes/config.d.ts.map +1 -0
  176. package/dist/server/routes/config.js +203 -0
  177. package/dist/server/routes/config.js.map +1 -0
  178. package/dist/server/routes/control.d.ts +3 -0
  179. package/dist/server/routes/control.d.ts.map +1 -0
  180. package/dist/server/routes/control.js +180 -0
  181. package/dist/server/routes/control.js.map +1 -0
  182. package/dist/server/routes/extension-commands.d.ts +22 -0
  183. package/dist/server/routes/extension-commands.d.ts.map +1 -0
  184. package/dist/server/routes/extension-commands.js +178 -0
  185. package/dist/server/routes/extension-commands.js.map +1 -0
  186. package/dist/server/routes/extensions.d.ts +8 -0
  187. package/dist/server/routes/extensions.d.ts.map +1 -0
  188. package/dist/server/routes/extensions.js +169 -0
  189. package/dist/server/routes/extensions.js.map +1 -0
  190. package/dist/server/routes/files.d.ts +3 -0
  191. package/dist/server/routes/files.d.ts.map +1 -0
  192. package/dist/server/routes/files.js +549 -0
  193. package/dist/server/routes/files.js.map +1 -0
  194. package/dist/server/routes/orchestration.d.ts +3 -0
  195. package/dist/server/routes/orchestration.d.ts.map +1 -0
  196. package/dist/server/routes/orchestration.js +251 -0
  197. package/dist/server/routes/orchestration.js.map +1 -0
  198. package/dist/server/routes/projects.d.ts +3 -0
  199. package/dist/server/routes/projects.d.ts.map +1 -0
  200. package/dist/server/routes/projects.js +412 -0
  201. package/dist/server/routes/projects.js.map +1 -0
  202. package/dist/server/routes/prompt.d.ts +3 -0
  203. package/dist/server/routes/prompt.d.ts.map +1 -0
  204. package/dist/server/routes/prompt.js +192 -0
  205. package/dist/server/routes/prompt.js.map +1 -0
  206. package/dist/server/routes/sessions.d.ts +3 -0
  207. package/dist/server/routes/sessions.d.ts.map +1 -0
  208. package/dist/server/routes/sessions.js +581 -0
  209. package/dist/server/routes/sessions.js.map +1 -0
  210. package/dist/server/routes/stream.d.ts +3 -0
  211. package/dist/server/routes/stream.d.ts.map +1 -0
  212. package/dist/server/routes/stream.js +109 -0
  213. package/dist/server/routes/stream.js.map +1 -0
  214. package/dist/server/session-registry.d.ts +151 -0
  215. package/dist/server/session-registry.d.ts.map +1 -0
  216. package/dist/server/session-registry.js +655 -0
  217. package/dist/server/session-registry.js.map +1 -0
  218. package/dist/server/sse-bridge.d.ts +31 -0
  219. package/dist/server/sse-bridge.d.ts.map +1 -0
  220. package/dist/server/sse-bridge.js +126 -0
  221. package/dist/server/sse-bridge.js.map +1 -0
  222. package/package.json +69 -0
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Extension Command Routes — invoke registered extension commands
3
+ * (`/rewind`, etc.) through the extension runner's command system, with
4
+ * `ctx.ui` bridged to the browser GUI via SSE events + REST callbacks.
5
+ *
6
+ * This is the generic mechanism: any extension that registers a command
7
+ * with `pi.registerCommand()` automatically becomes available through
8
+ * the web GUI without pi-kot-specific integration code.
9
+ *
10
+ * Flow:
11
+ * 1. GUI sends `POST /sessions/:id/command { command: "rewind" }`
12
+ * 2. Server looks up the command in the extension runner
13
+ * 3. Server installs a bridge `ExtensionUIContext` that sends
14
+ * `extension_ui_select` / `extension_ui_confirm` / etc. over SSE
15
+ * 4. Extension calls `ctx.ui.select()` → bridge creates a pending
16
+ * promise, sends SSE event → GUI renders selector → user responds
17
+ * via `POST /extension-ui/respond` → promise resolves
18
+ * 5. Extension completes → `extension_ui_done` SSE event sent
19
+ */
20
+ import { getSession } from "../session-registry.js";
21
+ import { createBridgeUIContext, resolveExtensionUIRequest, cancelAllPendingRequests, } from "../extension-ui-bridge.js";
22
+ import { buildSnapshot } from "../sse-bridge.js";
23
+ export const extensionCommandRoutes = async (fastify) => {
24
+ // ── POST /sessions/:id/command — invoke an extension command ─────
25
+ fastify.post("/sessions/:id/command", {
26
+ schema: {
27
+ description: "Invoke a registered extension command (e.g. /rewind). " +
28
+ "Returns 202 immediately. The command's interactive steps " +
29
+ "(select, confirm, input, notify) are bridged to the GUI " +
30
+ "via SSE events. The command completes asynchronously and " +
31
+ "a final `extension_ui_done` event is sent over SSE.",
32
+ tags: ["extensions"],
33
+ params: {
34
+ type: "object",
35
+ required: ["id"],
36
+ properties: { id: { type: "string" } },
37
+ },
38
+ body: {
39
+ type: "object",
40
+ required: ["command"],
41
+ properties: {
42
+ command: { type: "string" },
43
+ args: { type: "string" },
44
+ },
45
+ },
46
+ response: {
47
+ 202: {
48
+ type: "object",
49
+ properties: { accepted: { type: "boolean" } },
50
+ },
51
+ 400: {
52
+ type: "object",
53
+ properties: { error: { type: "string" } },
54
+ },
55
+ 404: {
56
+ type: "object",
57
+ properties: { error: { type: "string" } },
58
+ },
59
+ },
60
+ },
61
+ }, async (req, reply) => {
62
+ const sessionId = req.params.id;
63
+ const { command: commandName, args = "" } = req.body;
64
+ const live = getSession(sessionId);
65
+ if (live === undefined) {
66
+ return reply.code(404).send({ error: "session_not_found" });
67
+ }
68
+ const runner = live.session.extensionRunner;
69
+ const cmd = runner.getCommand(commandName);
70
+ if (cmd === undefined) {
71
+ return reply.code(404).send({ error: `command_not_found: ${commandName}` });
72
+ }
73
+ // Accept immediately — command runs async
74
+ await reply.code(202).send({ accepted: true });
75
+ // Install the UI bridge and run the command in the background
76
+ const originalUI = runner.getUIContext();
77
+ const bridge = createBridgeUIContext(live.clients, sessionId);
78
+ runner.setUIContext(bridge);
79
+ // Helper to send a done/fail event over SSE
80
+ const sendDone = (result) => {
81
+ for (const client of live.clients) {
82
+ try {
83
+ client.send({
84
+ type: "extension_ui_done",
85
+ sessionId,
86
+ command: commandName,
87
+ ...result,
88
+ });
89
+ }
90
+ catch {
91
+ live.clients.delete(client);
92
+ }
93
+ }
94
+ };
95
+ // Run the command in background, restore original UI context after
96
+ (async () => {
97
+ try {
98
+ const ctx = runner.createCommandContext();
99
+ req.log.info({ sessionId, commandName }, "Running extension command");
100
+ await cmd.handler(args, ctx);
101
+ sendDone({ status: "ok" });
102
+ // Emit a snapshot so the UI refreshes messages after tree navigation
103
+ try {
104
+ const snapshot = buildSnapshot(live);
105
+ for (const client of live.clients) {
106
+ client.send(snapshot);
107
+ }
108
+ }
109
+ catch {
110
+ // best-effort
111
+ }
112
+ }
113
+ catch (err) {
114
+ const msg = err instanceof Error ? err.message : String(err);
115
+ // Notify the GUI about the failure
116
+ for (const client of live.clients) {
117
+ try {
118
+ client.send({
119
+ type: "extension_ui_notify",
120
+ sessionId,
121
+ message: `Command "${commandName}" failed: ${msg}`,
122
+ notificationType: "error",
123
+ });
124
+ }
125
+ catch {
126
+ live.clients.delete(client);
127
+ }
128
+ }
129
+ sendDone({ status: "error", message: msg });
130
+ }
131
+ finally {
132
+ runner.setUIContext(originalUI);
133
+ cancelAllPendingRequests();
134
+ }
135
+ })();
136
+ });
137
+ // ── POST /sessions/:id/extension-ui/respond — respond to a bridge interaction ──
138
+ fastify.post("/sessions/:id/extension-ui/respond", {
139
+ schema: {
140
+ description: "Respond to a pending extension UI interaction (select, confirm, input). " +
141
+ "The `requestId` comes from the `extension_ui_*` SSE event. " +
142
+ "The `value` type depends on the interaction: string for select/input, " +
143
+ "boolean for confirm.",
144
+ tags: ["extensions"],
145
+ params: {
146
+ type: "object",
147
+ required: ["id"],
148
+ properties: { id: { type: "string" } },
149
+ },
150
+ body: {
151
+ type: "object",
152
+ required: ["requestId", "value"],
153
+ properties: {
154
+ requestId: { type: "string" },
155
+ value: { type: ["string", "boolean", "number"] },
156
+ },
157
+ },
158
+ response: {
159
+ 200: {
160
+ type: "object",
161
+ properties: { resolved: { type: "boolean" } },
162
+ },
163
+ 404: {
164
+ type: "object",
165
+ properties: { error: { type: "string" } },
166
+ },
167
+ },
168
+ },
169
+ }, async (req, reply) => {
170
+ const { requestId, value } = req.body;
171
+ const resolved = resolveExtensionUIRequest(requestId, value);
172
+ if (!resolved) {
173
+ return reply.code(404).send({ error: "request_not_found_or_expired" });
174
+ }
175
+ return { resolved: true };
176
+ });
177
+ };
178
+ //# sourceMappingURL=extension-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-commands.js","sourceRoot":"","sources":["../../src/routes/extension-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Routes for extension discovery and install.
3
+ * GET /extensions — list detected + recommended extensions
4
+ * POST /extensions/install — install a recommended extension
5
+ */
6
+ import { type FastifyPluginAsync } from "fastify";
7
+ export declare const extensionRoutes: FastifyPluginAsync;
8
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../../src/routes/extensions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAmBlD,eAAO,MAAM,eAAe,EAAE,kBAuK7B,CAAC"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Routes for extension discovery and install.
3
+ * GET /extensions — list detected + recommended extensions
4
+ * POST /extensions/install — install a recommended extension
5
+ */
6
+ import { discoverExtensions, installExtension, uninstallExtension, } from "../extension-manager.js";
7
+ // ── Schemas ─────────────────────────────────────────────────────────
8
+ const errorSchema = {
9
+ type: "object",
10
+ required: ["error"],
11
+ properties: { error: { type: "string" } },
12
+ };
13
+ const autoError = { "4xx": errorSchema, "5xx": errorSchema };
14
+ // ── Plugin ──────────────────────────────────────────────────────────
15
+ export const extensionRoutes = async (fastify) => {
16
+ // ── GET /api/v1/extensions ──────────────────────────────────────────
17
+ fastify.get("/extensions", {
18
+ config: { public: true },
19
+ schema: {
20
+ description: "List all detected and recommended extensions",
21
+ tags: ["extensions"],
22
+ response: {
23
+ 200: {
24
+ type: "object",
25
+ required: ["detected", "recommended", "agents"],
26
+ properties: {
27
+ detected: {
28
+ type: "array",
29
+ items: {
30
+ type: "object",
31
+ properties: {
32
+ name: { type: "string" },
33
+ source: { type: "string" },
34
+ description: { type: "string" },
35
+ version: { type: "string" },
36
+ agentTypes: { type: "array", items: { type: "string" } },
37
+ package: { type: "string" },
38
+ enablesFeatures: {
39
+ type: "array",
40
+ items: { type: "string" },
41
+ },
42
+ },
43
+ },
44
+ },
45
+ recommended: {
46
+ type: "array",
47
+ items: {
48
+ type: "object",
49
+ properties: {
50
+ id: { type: "string" },
51
+ name: { type: "string" },
52
+ description: { type: "string" },
53
+ package: { type: "string" },
54
+ category: { type: "string" },
55
+ installed: { type: "boolean" },
56
+ verified: { type: "boolean" },
57
+ providesAgentTypes: {
58
+ type: "array",
59
+ items: { type: "string" },
60
+ },
61
+ enablesFeatures: {
62
+ type: "array",
63
+ items: { type: "string" },
64
+ },
65
+ icon: { type: "string" },
66
+ },
67
+ },
68
+ },
69
+ agents: {
70
+ type: "array",
71
+ items: {
72
+ type: "object",
73
+ properties: {
74
+ name: { type: "string" },
75
+ description: { type: "string" },
76
+ model: { type: "string" },
77
+ tools: { type: "array", items: { type: "string" } },
78
+ source: { type: "string" },
79
+ },
80
+ },
81
+ },
82
+ },
83
+ },
84
+ ...autoError,
85
+ },
86
+ },
87
+ }, async (_req, reply) => {
88
+ try {
89
+ const result = await discoverExtensions();
90
+ return reply.send(result);
91
+ }
92
+ catch (err) {
93
+ const message = err instanceof Error ? err.message : String(err);
94
+ _req.log.error(err, "Failed to discover extensions");
95
+ return reply.status(500).send({ error: message });
96
+ }
97
+ });
98
+ // ── POST /api/v1/extensions/install ─────────────────────────────────
99
+ fastify.post("/extensions/install", {
100
+ schema: {
101
+ description: "Install a pi extension package",
102
+ tags: ["extensions"],
103
+ body: {
104
+ type: "object",
105
+ required: ["package"],
106
+ properties: {
107
+ package: { type: "string", description: "Package name (npm: prefix or bare)" },
108
+ },
109
+ },
110
+ response: {
111
+ 200: {
112
+ type: "object",
113
+ properties: {
114
+ success: { type: "boolean" },
115
+ error: { type: "string" },
116
+ },
117
+ },
118
+ ...autoError,
119
+ },
120
+ },
121
+ }, async (req, reply) => {
122
+ try {
123
+ const { package: pkg } = req.body;
124
+ const result = await installExtension(pkg);
125
+ return reply.send(result);
126
+ }
127
+ catch (err) {
128
+ const message = err instanceof Error ? err.message : String(err);
129
+ req.log.error(err, "Failed to install extension");
130
+ return reply.status(500).send({ error: message });
131
+ }
132
+ });
133
+ // ── POST /api/v1/extensions/uninstall ────────────────────────────────
134
+ fastify.post("/extensions/uninstall", {
135
+ schema: {
136
+ description: "Uninstall a pi extension package",
137
+ tags: ["extensions"],
138
+ body: {
139
+ type: "object",
140
+ required: ["package"],
141
+ properties: {
142
+ package: { type: "string", description: "Package name (npm: prefix or bare)" },
143
+ },
144
+ },
145
+ response: {
146
+ 200: {
147
+ type: "object",
148
+ properties: {
149
+ success: { type: "boolean" },
150
+ error: { type: "string" },
151
+ },
152
+ },
153
+ ...autoError,
154
+ },
155
+ },
156
+ }, async (req, reply) => {
157
+ try {
158
+ const { package: pkg } = req.body;
159
+ const result = await uninstallExtension(pkg);
160
+ return reply.send(result);
161
+ }
162
+ catch (err) {
163
+ const message = err instanceof Error ? err.message : String(err);
164
+ req.log.error(err, "Failed to uninstall extension");
165
+ return reply.status(500).send({ error: message });
166
+ }
167
+ });
168
+ };
169
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../src/routes/extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FastifyPluginAsync } from "fastify";
2
+ export declare const fileRoutes: FastifyPluginAsync;
3
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,SAAS,CAAC;AA0HhE,eAAO,MAAM,UAAU,EAAE,kBA4fxB,CAAC"}