@theruansilva/omp-web 2.0.0 → 2.2.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 (206) hide show
  1. package/dist/cli.js +83 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/client/assets/CodeViewer-DEVekDfo.js +4 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  6. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  12. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  21. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  27. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  30. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  33. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  36. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  45. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  48. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  54. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  59. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  62. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  63. package/dist/client/assets/{TerminalPanel-B9-LUv7E.js → TerminalPanel-CLZRR8T3.js} +8 -8
  64. package/dist/client/assets/{UnifiedDiffViewer-BUqme4se.js → UnifiedDiffViewer-DkUYn4xn.js} +2 -2
  65. package/dist/client/assets/_basePickBy-vr4256UX.js +1 -0
  66. package/dist/client/assets/_baseUniq-CHc60b6y.js +1 -0
  67. package/dist/client/assets/abnfDiagram-O67JEVCF-CN3HoUk0.js +1 -0
  68. package/dist/client/assets/arc-DfCyV39Y.js +1 -0
  69. package/dist/client/assets/architectureDiagram-NJMV4G6O-B18ZPEpX.js +36 -0
  70. package/dist/client/assets/blockDiagram-BEXU5L5S-DauyTopu.js +140 -0
  71. package/dist/client/assets/c4Diagram-YGBWAQC7-BzItBhD8.js +38 -0
  72. package/dist/client/assets/channel-BeMMNdGw.js +1 -0
  73. package/dist/client/assets/chunk-2Q5K7J3B-CTeOQu6b.js +1 -0
  74. package/dist/client/assets/chunk-3FUC2YCW-OWYL0CxB.js +2 -0
  75. package/dist/client/assets/chunk-5VM5RSS4-BPto9x5-.js +15 -0
  76. package/dist/client/assets/chunk-GTNCS2PH-DqPy7R2d.js +88 -0
  77. package/dist/client/assets/chunk-GWA4HPMP-C4N-dUua.js +1 -0
  78. package/dist/client/assets/chunk-JWPE2WC7-C4b1ijjH.js +1 -0
  79. package/dist/client/assets/chunk-NETBCI7D-Ds_9Juid.js +1 -0
  80. package/dist/client/assets/chunk-WEXAMYUT-DC9hisqc.js +1 -0
  81. package/dist/client/assets/chunk-XXDRQBXY-DZnUPupk.js +1 -0
  82. package/dist/client/assets/classDiagram-v2-NBCMYWYE-CDSg6Hoa.js +217 -0
  83. package/dist/client/assets/cose-bilkent-JH36ORCC-B4ISJxq4.js +1 -0
  84. package/dist/client/assets/cynefin-OW5HDTMX-Dk9BE-CS.js +166 -0
  85. package/dist/client/assets/cynefinDiagram-VND7K2PF-D4LOjD3M.js +62 -0
  86. package/dist/client/assets/cytoscape.esm-BB4DxJjf.js +321 -0
  87. package/dist/client/assets/dagre-6A5THRUB-BdboVbbt.js +4 -0
  88. package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
  89. package/dist/client/assets/diagram-22UHCM2B-D_zb_SLQ.js +200 -0
  90. package/dist/client/assets/diagram-3UASUU5V-D5rEpDmK.js +24 -0
  91. package/dist/client/assets/diagram-ATOU4E4O-BdTFXxOS.js +3 -0
  92. package/dist/client/assets/diagram-CDSNMT55-B8gtHdg9.js +30 -0
  93. package/dist/client/assets/diagram-MLGK6HIB-C-NGINWH.js +24 -0
  94. package/dist/client/assets/diagram-MPIPVDR6-D3_T-c5C.js +41 -0
  95. package/dist/client/assets/ebnfDiagram-ZINNZB2B-BIASbt52.js +1 -0
  96. package/dist/client/assets/elk-276RUBZZ-CuNF0hHg.js +27 -0
  97. package/dist/client/assets/erDiagram-OPXOYQCR-Cmi_qmGj.js +99 -0
  98. package/dist/client/assets/flowDiagram-KWPJA3E3-DP-SrXc2.js +213 -0
  99. package/dist/client/assets/ganttDiagram-FUAMR5RP-olLEnoMM.js +292 -0
  100. package/dist/client/assets/gitGraphDiagram-X574FWY7-uPZ9lEq1.js +106 -0
  101. package/dist/client/assets/graph-C2De1HlQ.js +1 -0
  102. package/dist/client/assets/index-D-PvDSJs.js +5657 -0
  103. package/dist/client/assets/{index-DGBYb2j9.css → index-DSGiUJZL.css} +1 -1
  104. package/dist/client/assets/infoDiagram-VRGFBTTK-D0Q5E5gc.js +2 -0
  105. package/dist/client/assets/init-Gi6I4Gst.js +1 -0
  106. package/dist/client/assets/ishikawaDiagram-OU5B5YK6-C21L3hk6.js +70 -0
  107. package/dist/client/assets/journeyDiagram-ZHPQQLJL-C9o5XEso.js +139 -0
  108. package/dist/client/assets/kanban-definition-PNTS6WVX-BioH9OyY.js +89 -0
  109. package/dist/client/assets/katex-HP8lGamR.js +257 -0
  110. package/dist/client/assets/linear-BwJ7-DLx.js +1 -0
  111. package/dist/client/assets/mindmap-definition-NLK3R4M7-ogoKSGSi.js +96 -0
  112. package/dist/client/assets/ordinal-Cboi1Yqb.js +1 -0
  113. package/dist/client/assets/pegDiagram-GJSIUBJH-Ck2_wE3g.js +1 -0
  114. package/dist/client/assets/pieDiagram-5QR66LMP-C5wm07EA.js +39 -0
  115. package/dist/client/assets/quadrantDiagram-O4NWA36T-UKQ2brr3.js +7 -0
  116. package/dist/client/assets/railroadDiagram-XR7U4H2S-BgY4ABv4.js +1 -0
  117. package/dist/client/assets/requirementDiagram-PLB6GJNP-B50WsncI.js +84 -0
  118. package/dist/client/assets/sankeyDiagram-IPEJSGJF-BHtyWxOk.js +40 -0
  119. package/dist/client/assets/sequenceDiagram-PO4LG4MO-D_kxHIBS.js +169 -0
  120. package/dist/client/assets/sizeCapture-INFHLROL-MzN60-aT.js +1 -0
  121. package/dist/client/assets/stateDiagram-v2-GCMORJYK-CBiPlAo0.js +291 -0
  122. package/dist/client/assets/swimlanes-2SLR337P-BCdsVfp-.js +1 -0
  123. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-Da17CLQY.js +8 -0
  124. package/dist/client/assets/timeline-definition-EJHVYXUP-BemXf1bb.js +120 -0
  125. package/dist/client/assets/usecaseDiagram-POWQR4AR-Vqj4Zp6V.js +370 -0
  126. package/dist/client/assets/vendor-editor-core-BG7M-EQ-.js +10 -0
  127. package/dist/client/assets/vendor-editor-languages-pDmyn-oC.js +26 -0
  128. package/dist/client/assets/vennDiagram-UO4OBE2U-2mimeV2G.js +34 -0
  129. package/dist/client/assets/wardleyDiagram-VNRHLVJA-Bg2MjtpE.js +78 -0
  130. package/dist/client/assets/xychartDiagram-PMCCYNJV-7_nvdM0t.js +7 -0
  131. package/dist/client/index.html +4 -4
  132. package/dist/omp-web-plugins/mcps/mcpsLogic.js +78 -0
  133. package/dist/omp-web-plugins/mcps/mcpsPanelElement.js +417 -0
  134. package/dist/omp-web-plugins/mcps/omp-web-plugin.js +45 -0
  135. package/dist/omp-web-plugins/mcps/package.json +9 -0
  136. package/dist/omp-web-plugins/mcps/types.js +2 -0
  137. package/dist/plugin-api.d.ts +1 -0
  138. package/dist/server/app.js +24 -1
  139. package/dist/server/app.js.map +1 -1
  140. package/dist/server/index.js +0 -0
  141. package/dist/server/machines/machineService.js +3 -0
  142. package/dist/server/machines/machineService.js.map +1 -1
  143. package/dist/server/mcpRoutes.js +73 -0
  144. package/dist/server/mcpRoutes.js.map +1 -0
  145. package/dist/server/push/PushNotificationService.js +16 -3
  146. package/dist/server/push/PushNotificationService.js.map +1 -1
  147. package/dist/server/security.js +172 -0
  148. package/dist/server/security.js.map +1 -0
  149. package/dist/server/sessiond/sessionProxyRoutes.js +11 -5
  150. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -1
  151. package/dist/server/sessiond.js +28 -1
  152. package/dist/server/sessiond.js.map +1 -1
  153. package/dist/server/sessions/piAgentSession.js +2 -1
  154. package/dist/server/sessions/piAgentSession.js.map +1 -1
  155. package/dist/server/sessions/piSessionService.js +168 -16
  156. package/dist/server/sessions/piSessionService.js.map +1 -1
  157. package/dist/server/sessions/schedulePrompt/scheduler.js +17 -13
  158. package/dist/server/sessions/schedulePrompt/scheduler.js.map +1 -1
  159. package/dist/server/sessions/schedulePrompt/tool.js +13 -1
  160. package/dist/server/sessions/schedulePrompt/tool.js.map +1 -1
  161. package/dist/server/sessions/sessionEventMapper.js +36 -2
  162. package/dist/server/sessions/sessionEventMapper.js.map +1 -1
  163. package/dist/server/sessions/sessionRoutes.js +3 -0
  164. package/dist/server/sessions/sessionRoutes.js.map +1 -1
  165. package/dist/server/workspaceExplorerRoutes.js +16 -9
  166. package/dist/server/workspaceExplorerRoutes.js.map +1 -1
  167. package/dist/server/workspaces/fileContentService.js +9 -4
  168. package/dist/server/workspaces/fileContentService.js.map +1 -1
  169. package/dist/server/workspaces/imagePreviewService.js +63 -13
  170. package/dist/server/workspaces/imagePreviewService.js.map +1 -1
  171. package/dist/shared/apiTypes.d.ts +16 -1
  172. package/dist/shared/federatedRoutes.js +2 -0
  173. package/dist/shared/federatedRoutes.js.map +1 -1
  174. package/package.json +4 -1
  175. package/dist/client/assets/CodeViewer-CJNBz-Ox.js +0 -4
  176. package/dist/client/assets/index-uWm_YNRB.js +0 -4427
  177. package/dist/client/assets/vendor-editor-core-D9EJm1dE.js +0 -10
  178. package/dist/client/assets/vendor-editor-languages-N6dcxgRO.js +0 -26
  179. package/dist/client-react/assets/index-BQ6zLLfz.js +0 -51
  180. package/dist/client-react/assets/index-Befs78HG.css +0 -1
  181. package/dist/client-react/index.html +0 -16
  182. package/dist/docker/piWebDockerCommandPlan.js +0 -211
  183. package/dist/docker/piWebDockerCommandPlan.js.map +0 -1
  184. package/dist/pi-web-plugins/info/package.json +0 -9
  185. package/dist/pi-web-plugins/info/pi-web-plugin.js +0 -51
  186. package/dist/pi-web-plugins/schedule-prompts/package.json +0 -9
  187. package/dist/pi-web-plugins/schedule-prompts/pi-web-plugin.js +0 -43
  188. package/dist/pi-web-plugins/schedule-prompts/schedulePromptsPanelElement.js +0 -226
  189. package/dist/pi-web-plugins/schedule-prompts/types.js +0 -2
  190. package/dist/pi-web-plugins/updates/package.json +0 -9
  191. package/dist/pi-web-plugins/updates/pi-web-plugin.js +0 -173
  192. package/dist/pi-web-plugins/updates/updatesLogic.js +0 -97
  193. package/dist/piWebVersionReport.js +0 -225
  194. package/dist/piWebVersionReport.js.map +0 -1
  195. package/dist/server/diagnostics/nodePtySpawnHelper.js +0 -130
  196. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +0 -1
  197. package/dist/server/piWebPluginService.js +0 -283
  198. package/dist/server/piWebPluginService.js.map +0 -1
  199. package/dist/server/piWebStatus.js +0 -602
  200. package/dist/server/piWebStatus.js.map +0 -1
  201. package/dist/server/piWebStatusCache.js +0 -32
  202. package/dist/server/piWebStatusCache.js.map +0 -1
  203. package/dist/server/workspaces/projectPiWebConfig.js +0 -61
  204. package/dist/server/workspaces/projectPiWebConfig.js.map +0 -1
  205. package/dist/shared/piWebStatusParsing.js +0 -102
  206. package/dist/shared/piWebStatusParsing.js.map +0 -1
@@ -0,0 +1,417 @@
1
+ // Generated from omp-web-plugins/mcps/mcpsPanelElement.ts. Do not edit directly.
2
+ import { countActiveServers, countFailedServers, formatCommandOrUrl, formatTransport, isServerEnabled, parseMcpConfigFile, PROJECT_MCP_FILES, toggleServerInConfig, } from "./mcpsLogic.js";
3
+ export const mcpsPanelTagName = "omp-web-mcps-panel";
4
+ const panelCache = new Map();
5
+ export function defineMcpsPanelElement() {
6
+ if (!customElements.get(mcpsPanelTagName)) {
7
+ customElements.define(mcpsPanelTagName, OmpWebMcpsPanel);
8
+ }
9
+ }
10
+ export function mcpsBadge(context) {
11
+ const cached = panelCache.get(cacheKeyForContext(context));
12
+ if (cached === undefined || "kind" in cached)
13
+ return undefined;
14
+ const count = countActiveServers(cached);
15
+ return count > 0 ? String(count) : undefined;
16
+ }
17
+ class OmpWebMcpsPanel extends HTMLElement {
18
+ contextValue;
19
+ root;
20
+ pollTimer;
21
+ currentKey;
22
+ isChecking = false;
23
+ constructor() {
24
+ super();
25
+ this.root = this.attachShadow({ mode: "open" });
26
+ }
27
+ set context(value) {
28
+ const prevKey = this.currentKey;
29
+ const newKey = value ? cacheKeyForContext(value) : undefined;
30
+ this.contextValue = value;
31
+ this.currentKey = newKey;
32
+ if (value && newKey !== prevKey) {
33
+ void this.loadServers(value);
34
+ }
35
+ else {
36
+ this.render();
37
+ }
38
+ }
39
+ connectedCallback() {
40
+ this.render();
41
+ this.pollTimer = setInterval(() => {
42
+ if (this.contextValue)
43
+ void this.loadServers(this.contextValue, false);
44
+ }, 60000);
45
+ }
46
+ disconnectedCallback() {
47
+ if (this.pollTimer !== undefined) {
48
+ clearInterval(this.pollTimer);
49
+ this.pollTimer = undefined;
50
+ }
51
+ }
52
+ async loadServers(context, forceCheck = false) {
53
+ const key = cacheKeyForContext(context);
54
+ if (this.isChecking)
55
+ return;
56
+ let projectFile;
57
+ let projectServers = {};
58
+ for (const fileName of PROJECT_MCP_FILES) {
59
+ try {
60
+ const response = await context.files.readFile(fileName);
61
+ const content = typeof response.content === "string"
62
+ ? response.content
63
+ : new TextDecoder().decode(response.content);
64
+ const parsed = parseMcpConfigFile(content);
65
+ if (parsed.mcpServers !== undefined) {
66
+ projectFile = fileName;
67
+ projectServers = parsed.mcpServers;
68
+ break;
69
+ }
70
+ }
71
+ catch {
72
+ // Continue checking next candidate file
73
+ }
74
+ }
75
+ let globalPath;
76
+ let globalServers = {};
77
+ try {
78
+ const response = await context.apiFetch("/mcps");
79
+ if (response.ok) {
80
+ const data = (await response.json());
81
+ if (data.servers) {
82
+ globalServers = data.servers;
83
+ globalPath = data.path;
84
+ }
85
+ }
86
+ }
87
+ catch {
88
+ // Ignore network errors fetching global servers
89
+ }
90
+ const cached = panelCache.get(key);
91
+ const prevCheckResults = cached && !("kind" in cached) ? cached.checkResults : undefined;
92
+ const shouldCheck = forceCheck || prevCheckResults === undefined;
93
+ const state = {
94
+ projectFile,
95
+ projectServers,
96
+ globalPath,
97
+ globalServers,
98
+ checkResults: prevCheckResults,
99
+ isChecking: shouldCheck,
100
+ lastLoaded: new Date().toISOString(),
101
+ };
102
+ panelCache.set(key, state);
103
+ this.render();
104
+ if (!shouldCheck)
105
+ return;
106
+ // Probe server connection status
107
+ const allServers = {};
108
+ for (const [name, config] of Object.entries(projectServers)) {
109
+ if (isServerEnabled(config))
110
+ allServers[name] = config;
111
+ }
112
+ for (const [name, config] of Object.entries(globalServers)) {
113
+ if (isServerEnabled(config))
114
+ allServers[name] = config;
115
+ }
116
+ if (Object.keys(allServers).length > 0) {
117
+ this.isChecking = true;
118
+ try {
119
+ const checkRes = await context.apiFetch("/mcps/check", {
120
+ method: "POST",
121
+ headers: { "content-type": "application/json" },
122
+ body: JSON.stringify({ servers: allServers }),
123
+ });
124
+ if (checkRes.ok) {
125
+ const checkData = (await checkRes.json());
126
+ state.checkResults = checkData.results;
127
+ }
128
+ }
129
+ catch {
130
+ // Ignore check probe errors
131
+ }
132
+ finally {
133
+ this.isChecking = false;
134
+ }
135
+ }
136
+ state.isChecking = false;
137
+ panelCache.set(key, state);
138
+ this.render();
139
+ }
140
+ render() {
141
+ const context = this.contextValue;
142
+ if (context === undefined) {
143
+ this.root.innerHTML = `${panelStyles()}<section class="empty">Select a workspace.</section>`;
144
+ return;
145
+ }
146
+ const key = cacheKeyForContext(context);
147
+ const cached = panelCache.get(key);
148
+ const state = cached ?? { kind: "loading" };
149
+ const isLoading = "kind" in state && state.kind === "loading";
150
+ let activeCount = 0;
151
+ let failedCount = 0;
152
+ if (!("kind" in state)) {
153
+ activeCount = countActiveServers(state);
154
+ failedCount = countFailedServers(state);
155
+ }
156
+ this.root.innerHTML = `
157
+ ${panelStyles()}
158
+ <section class="toolbar">
159
+ <div class="toolbar-title">
160
+ <strong>MCP Servers</strong>
161
+ ${!isLoading ? `
162
+ <span class="badge ${activeCount > 0 ? "active" : ""}">
163
+ ${activeCount} active
164
+ ${failedCount > 0 ? `<span class="badge-failed">· ${failedCount} failed</span>` : ""}
165
+ </span>
166
+ ` : ""}
167
+ </div>
168
+ <button class="secondary" data-refresh ${isLoading || this.isChecking ? "disabled" : ""}>Refresh</button>
169
+ </section>
170
+ <section class="viewer">
171
+ ${this.renderContent(state)}
172
+ </section>
173
+ `;
174
+ this.attachEventListeners(context, state);
175
+ }
176
+ renderContent(state) {
177
+ if ("kind" in state) {
178
+ if (state.kind === "loading") {
179
+ return `<p class="muted">Loading MCP configuration…</p>`;
180
+ }
181
+ return `<div class="status error">${escapeHtml(state.message)}</div>`;
182
+ }
183
+ const hasProjectServers = Object.keys(state.projectServers).length > 0;
184
+ let html = "";
185
+ // Project Section
186
+ html += `
187
+ <section class="server-group">
188
+ <div class="group-header">
189
+ <span class="group-title">Workspace Servers</span>
190
+ ${state.projectFile !== undefined ? `<span class="group-path">${escapeHtml(state.projectFile)}</span>` : ""}
191
+ </div>
192
+ `;
193
+ if (hasProjectServers) {
194
+ html += `<div class="servers-list">`;
195
+ for (const [name, config] of Object.entries(state.projectServers)) {
196
+ html += this.renderServerRow(name, config, "project", state);
197
+ }
198
+ html += `</div>`;
199
+ }
200
+ else if (state.projectFile !== undefined) {
201
+ html += `<p class="muted"><code>${escapeHtml(state.projectFile)}</code> exists but defines no servers.</p>`;
202
+ }
203
+ else {
204
+ html += `
205
+ <div class="no-file-box">
206
+ <p class="muted">No project MCP configuration found (.mcp.json).</p>
207
+ <button data-create-project-file class="secondary">+ Create .mcp.json</button>
208
+ </div>
209
+ `;
210
+ }
211
+ html += `</section>`;
212
+ // Global Section
213
+ const hasGlobalServers = Object.keys(state.globalServers).length > 0;
214
+ html += `
215
+ <section class="server-group">
216
+ <div class="group-header">
217
+ <span class="group-title">Global Servers</span>
218
+ ${state.globalPath !== undefined ? `<span class="group-path">${escapeHtml(state.globalPath)}</span>` : ""}
219
+ </div>
220
+ `;
221
+ if (hasGlobalServers) {
222
+ html += `<div class="servers-list">`;
223
+ for (const [name, config] of Object.entries(state.globalServers)) {
224
+ html += this.renderServerRow(name, config, "global", state);
225
+ }
226
+ html += `</div>`;
227
+ }
228
+ else {
229
+ html += `<p class="muted">No global MCP servers configured.</p>`;
230
+ }
231
+ html += `</section>`;
232
+ // Quick Command Shortcuts
233
+ html += `
234
+ <section class="shortcuts-group">
235
+ <span class="group-title">Oh My Pi Commands</span>
236
+ <div class="shortcut-buttons">
237
+ <button data-prompt="/mcp list" class="secondary">/mcp list</button>
238
+ <button data-prompt="/mcp reload" class="secondary">/mcp reload</button>
239
+ <button data-prompt="/mcp add " class="secondary">+ /mcp add</button>
240
+ </div>
241
+ </section>
242
+ `;
243
+ return html;
244
+ }
245
+ renderServerRow(name, config, scope, state) {
246
+ const enabled = isServerEnabled(config);
247
+ const transport = formatTransport(config);
248
+ const target = formatCommandOrUrl(config);
249
+ const check = state.checkResults?.[name];
250
+ const isChecking = state.isChecking === true && enabled && check === undefined;
251
+ let statusDotClass = enabled ? "active" : "disabled";
252
+ let statusText = enabled ? "Active" : "Disabled";
253
+ let statusTextClass = enabled ? "" : "disabled";
254
+ if (!enabled) {
255
+ statusDotClass = "disabled";
256
+ statusText = "Disabled";
257
+ statusTextClass = "disabled";
258
+ }
259
+ else if (isChecking) {
260
+ statusDotClass = "checking";
261
+ statusText = "Connecting…";
262
+ statusTextClass = "checking";
263
+ }
264
+ else if (check?.status === "connected") {
265
+ statusDotClass = "connected";
266
+ statusText = check.serverInfo?.version ? `Connected (v${check.serverInfo.version})` : "Connected";
267
+ statusTextClass = "connected";
268
+ }
269
+ else if (check?.status === "failed") {
270
+ statusDotClass = "failed";
271
+ statusText = "Connection failed";
272
+ statusTextClass = "failed";
273
+ }
274
+ return `
275
+ <article class="server-row ${enabled ? "enabled" : "disabled"} ${check?.status === "failed" ? "server-failed" : ""}">
276
+ <div class="server-main">
277
+ <div class="server-header">
278
+ <span class="status-dot ${statusDotClass}"></span>
279
+ <strong class="server-name">${escapeHtml(name)}</strong>
280
+ <span class="tag transport">${escapeHtml(transport)}</span>
281
+ <span class="status-text ${statusTextClass}">${escapeHtml(statusText)}</span>
282
+ </div>
283
+ ${target !== "" ? `<div class="server-target"><code>${escapeHtml(target)}</code></div>` : ""}
284
+ ${config.description !== undefined ? `<div class="server-desc">${escapeHtml(config.description)}</div>` : ""}
285
+ ${check?.status === "failed" && check.error ? `
286
+ <div class="server-error-banner">
287
+ <span class="error-icon">⚠️</span>
288
+ <span class="error-msg">${escapeHtml(check.error)}</span>
289
+ </div>
290
+ ` : ""}
291
+ </div>
292
+ <div class="server-actions">
293
+ ${scope === "project" ? `
294
+ <button
295
+ data-toggle-server="${escapeAttr(name)}"
296
+ class="${enabled ? "secondary" : "accent"}"
297
+ >
298
+ ${enabled ? "Disable" : "Enable"}
299
+ </button>
300
+ ` : `
301
+ <span class="badge-readonly">Global</span>
302
+ `}
303
+ </div>
304
+ </article>
305
+ `;
306
+ }
307
+ attachEventListeners(context, state) {
308
+ this.root.querySelector("button[data-refresh]")?.addEventListener("click", () => {
309
+ void this.loadServers(context, true);
310
+ });
311
+ this.root.querySelector("button[data-create-project-file]")?.addEventListener("click", async () => {
312
+ const initial = {
313
+ $schema: "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/src/config/mcp-schema.json",
314
+ mcpServers: {},
315
+ };
316
+ await context.files.writeFile(".mcp.json", JSON.stringify(initial, null, 2) + "\n");
317
+ void this.loadServers(context, true);
318
+ });
319
+ this.root.querySelectorAll("button[data-toggle-server]").forEach((btn) => {
320
+ btn.addEventListener("click", async () => {
321
+ const serverName = btn.getAttribute("data-toggle-server");
322
+ if (!serverName || "kind" in state || !state.projectFile)
323
+ return;
324
+ try {
325
+ const res = await context.files.readFile(state.projectFile);
326
+ const currentContent = typeof res.content === "string"
327
+ ? res.content
328
+ : new TextDecoder().decode(res.content);
329
+ const updatedContent = toggleServerInConfig(currentContent, serverName);
330
+ await context.files.writeFile(state.projectFile, updatedContent);
331
+ void this.loadServers(context, true);
332
+ }
333
+ catch (err) {
334
+ console.error("Failed to toggle MCP server in configuration:", err);
335
+ }
336
+ });
337
+ });
338
+ this.root.querySelectorAll("button[data-prompt]").forEach((btn) => {
339
+ btn.addEventListener("click", () => {
340
+ const promptText = btn.getAttribute("data-prompt");
341
+ if (promptText) {
342
+ context.prompt.insertText(promptText);
343
+ }
344
+ });
345
+ });
346
+ }
347
+ }
348
+ function cacheKeyForContext(context) {
349
+ return `${context.machine.id}:${context.workspace.projectId}:${context.workspace.id}`;
350
+ }
351
+ function escapeHtml(value) {
352
+ return String(value).replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
353
+ }
354
+ function escapeAttr(value) {
355
+ return escapeHtml(value).replaceAll('"', "&quot;");
356
+ }
357
+ function panelStyles() {
358
+ return `
359
+ <style>
360
+ :host { display: contents; }
361
+ .toolbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--pi-border-muted); }
362
+ .toolbar-title { display: flex; align-items: center; gap: 8px; }
363
+ .viewer { box-sizing: border-box; min-height: 0; overflow: auto; padding: 12px; display: flex; flex-direction: column; gap: 16px; }
364
+ .server-group { display: flex; flex-direction: column; gap: 8px; }
365
+ .group-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
366
+ .group-title { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--pi-muted); }
367
+ .group-path { font-size: 11px; color: var(--pi-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
368
+ .servers-list { display: grid; gap: 8px; }
369
+ .server-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; border: 1px solid var(--pi-border); border-radius: 8px; background: var(--pi-surface); padding: 10px 12px; }
370
+ .server-row.disabled { opacity: 0.65; }
371
+ .server-row.server-failed { border-color: rgba(239, 68, 68, 0.4); background: rgba(239, 68, 68, 0.04); }
372
+ .server-main { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
373
+ .server-header { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
374
+ .server-name { font-size: 13px; color: var(--pi-text); }
375
+ .status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--pi-muted); flex-shrink: 0; }
376
+ .status-dot.active { background: #22c55e; }
377
+ .status-dot.connected { background: #22c55e; }
378
+ .status-dot.checking { background: #eab308; animation: pulse 1.5s infinite; }
379
+ .status-dot.failed { background: #ef4444; }
380
+ .status-dot.disabled { background: var(--pi-muted); opacity: 0.5; }
381
+ .status-text { font-size: 11px; color: var(--pi-muted); }
382
+ .status-text.connected { color: #22c55e; }
383
+ .status-text.checking { color: #eab308; }
384
+ .status-text.failed { color: #ef4444; font-weight: 500; }
385
+ .status-text.disabled { color: var(--pi-muted); opacity: 0.7; }
386
+ .tag { font-size: 10px; padding: 1px 5px; border-radius: 4px; border: 1px solid var(--pi-border-muted); color: var(--pi-muted); font-family: ui-monospace, monospace; }
387
+ .tag.transport { color: var(--pi-accent); border-color: var(--pi-accent-border); }
388
+ .server-target { font-size: 11px; color: var(--pi-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
389
+ .server-target code { border: none; background: transparent; padding: 0; color: inherit; }
390
+ .server-desc { font-size: 11px; color: var(--pi-muted); }
391
+ .server-error-banner { display: flex; align-items: flex-start; gap: 6px; margin-top: 6px; padding: 6px 10px; border-radius: 6px; background: rgba(239, 68, 68, 0.08); border: 1px solid rgba(239, 68, 68, 0.25); font-size: 11px; color: #f87171; line-height: 1.4; word-break: break-word; }
392
+ .error-icon { flex-shrink: 0; font-size: 12px; line-height: 1; }
393
+ .error-msg { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
394
+ .server-actions { display: flex; align-items: center; gap: 6px; }
395
+ .badge { font-size: 11px; padding: 2px 7px; border-radius: 10px; background: var(--pi-surface); border: 1px solid var(--pi-border); color: var(--pi-muted); }
396
+ .badge.active { border-color: #22c55e44; color: #22c55e; }
397
+ .badge-failed { color: #ef4444; font-weight: 600; }
398
+ .badge-readonly { font-size: 11px; padding: 2px 7px; border-radius: 6px; background: var(--pi-border-muted); color: var(--pi-muted); }
399
+ .no-file-box { display: flex; flex-direction: column; gap: 8px; padding: 12px; border: 1px dashed var(--pi-border); border-radius: 8px; background: var(--pi-surface); align-items: flex-start; }
400
+ .shortcuts-group { display: flex; flex-direction: column; gap: 8px; padding-top: 8px; border-top: 1px solid var(--pi-border-muted); }
401
+ .shortcut-buttons { display: flex; flex-wrap: wrap; gap: 6px; }
402
+ button { border: 1px solid var(--pi-accent-border); border-radius: 6px; background: var(--pi-accent); color: var(--pi-bg); cursor: pointer; padding: 5px 9px; font: inherit; font-size: 12px; }
403
+ button.secondary { border-color: var(--pi-border); background: var(--pi-surface); color: var(--pi-text); }
404
+ button.accent { border-color: var(--pi-accent-border); background: var(--pi-accent); color: var(--pi-bg); }
405
+ button:disabled { cursor: wait; opacity: 0.65; }
406
+ .muted { color: var(--pi-muted); font-size: 12px; margin: 0; }
407
+ .status { border: 1px solid var(--pi-border); border-radius: 8px; padding: 10px; color: var(--pi-muted); font-size: 12px; }
408
+ .status.error { border-color: var(--pi-danger); color: var(--pi-danger); }
409
+ .empty { padding: 16px; color: var(--pi-muted); font-size: 12px; }
410
+ code { border: 1px solid var(--pi-border-muted); border-radius: 4px; background: var(--pi-bg); color: var(--pi-text-secondary); font: 11px ui-monospace, SFMono-Regular, Menlo, monospace; padding: 1px 4px; }
411
+ @keyframes pulse {
412
+ 0%, 100% { opacity: 1; transform: scale(1); }
413
+ 50% { opacity: 0.4; transform: scale(0.85); }
414
+ }
415
+ </style>
416
+ `;
417
+ }
@@ -0,0 +1,45 @@
1
+ // Generated from omp-web-plugins/mcps/omp-web-plugin.ts. Do not edit directly.
2
+ import { defineMcpsPanelElement, mcpsBadge } from "./mcpsPanelElement.js";
3
+ const plugin = {
4
+ apiVersion: 1,
5
+ name: "MCP Servers",
6
+ activate: ({ pluginId, html, svg }) => {
7
+ defineMcpsPanelElement();
8
+ return {
9
+ contributions: {
10
+ actions: [
11
+ {
12
+ id: "workspace.open-mcps",
13
+ title: "Open MCP Servers",
14
+ description: "Open the MCP Servers panel.",
15
+ group: "Workspace",
16
+ enabled: (context) => context.state.selectedWorkspace !== undefined,
17
+ run: (context) => {
18
+ if (context.state.selectedWorkspace === undefined)
19
+ return;
20
+ context.selectWorkspaceTool(`${pluginId}:workspace.mcps`);
21
+ },
22
+ },
23
+ ],
24
+ workspacePanels: [
25
+ {
26
+ id: "workspace.mcps",
27
+ title: "MCPs",
28
+ icon: svg `
29
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
30
+ <rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect>
31
+ <rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect>
32
+ <line x1="6" y1="6" x2="6.01" y2="6"></line>
33
+ <line x1="6" y1="18" x2="6.01" y2="18"></line>
34
+ </svg>
35
+ `,
36
+ order: 55,
37
+ badge: (context) => mcpsBadge(context),
38
+ render: (context) => html `<omp-web-mcps-panel .context=${context}></omp-web-mcps-panel>`,
39
+ },
40
+ ],
41
+ },
42
+ };
43
+ },
44
+ };
45
+ export default plugin;
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "@omp-web/mcps-plugin",
3
+ "private": true,
4
+ "ompWeb": {
5
+ "plugins": [
6
+ { "id": "mcps", "module": "omp-web-plugin.js" }
7
+ ]
8
+ }
9
+ }
@@ -0,0 +1,2 @@
1
+ // Generated from omp-web-plugins/mcps/types.ts. Do not edit directly.
2
+ export {};
@@ -120,6 +120,7 @@ export interface WorkspaceContext {
120
120
  state?: PluginRuntimeState;
121
121
  files: WorkspaceFiles;
122
122
  host: WorkspaceHost;
123
+ apiFetch(path: string, init?: RequestInit): Promise<Response>;
123
124
  }
124
125
  export interface WorkspaceTerminalCommandInput {
125
126
  title: string;
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { Hono } from "hono";
5
+ import { createSecurityMiddleware } from "./security.js";
5
6
  import { createBunWebSocket } from "hono/bun";
6
7
  import { serveStatic } from "hono/bun";
7
8
  import { ProjectStore } from "./storage/projectStore.js";
@@ -30,6 +31,7 @@ import { registerMachineProxyRoutes } from "./machines/machineProxyRoutes.js";
30
31
  import { proxyMachinePluginAsset, registerMachinePluginProxyRoutes } from "./machines/machinePluginProxyRoutes.js";
31
32
  import { PushNotificationService } from "./push/PushNotificationService.js";
32
33
  import { registerPushRoutes } from "./push/pushRoutes.js";
34
+ import { registerMcpRoutes } from "./mcpRoutes.js";
33
35
  function registerLocalProjectRoutes(app, projects, workspaces, prefix, options = {}) {
34
36
  app.get(`${prefix}/projects`, async (c) => c.json(await projects.list()));
35
37
  app.post(`${prefix}/projects`, async (c) => {
@@ -105,12 +107,31 @@ function registerLocalFileSuggestionRoutes(app, projects, workspaces, prefix, op
105
107
  }
106
108
  export async function buildApp(deps = {}) {
107
109
  const app = new Hono();
110
+ const configService = deps.config ?? createFileOmpWebConfigService();
111
+ const effectiveConfig = (await configService.read()).effectiveConfig;
112
+ let cachedAllowedHosts = effectiveConfig.allowedHosts;
113
+ let lastCheck = 0;
114
+ const getAllowedHosts = async () => {
115
+ const now = Date.now();
116
+ if (now - lastCheck < 1000)
117
+ return cachedAllowedHosts;
118
+ lastCheck = now;
119
+ try {
120
+ cachedAllowedHosts = (await configService.read()).effectiveConfig.allowedHosts;
121
+ }
122
+ catch {
123
+ // keep cached
124
+ }
125
+ return cachedAllowedHosts;
126
+ };
127
+ app.use("*", createSecurityMiddleware({
128
+ allowedHosts: getAllowedHosts,
129
+ }));
108
130
  const { upgradeWebSocket, websocket } = createBunWebSocket();
109
131
  const projects = deps.projects ?? new ProjectService(new ProjectStore());
110
132
  const workspaces = deps.workspaces ?? new WorkspaceService();
111
133
  const ompWebPlugins = deps.ompWebPlugins ?? new OmpWebPluginService();
112
134
  const piPackages = deps.piPackages ?? createDefaultPiPackageService();
113
- const configService = deps.config ?? createFileOmpWebConfigService();
114
135
  const sessionDaemon = deps.sessionDaemon ?? new SessionDaemonClient();
115
136
  const ompWebStatusCache = createOmpWebStatusCache(() => getOmpWebStatus(sessionDaemon), {
116
137
  onError: (error) => { console.warn("failed to refresh PI WEB status cache", error); },
@@ -157,6 +178,8 @@ export async function buildApp(deps = {}) {
157
178
  registerWorkspaceDeletionRoutes(app, projects, workspaces, sessionDaemon, "/api/machines/local");
158
179
  registerLocalFileSuggestionRoutes(app, projects, workspaces, "/api", { config: configService });
159
180
  registerLocalFileSuggestionRoutes(app, projects, workspaces, "/api/machines/local", { config: configService });
181
+ registerMcpRoutes(app, "/api");
182
+ registerMcpRoutes(app, "/api/machines/local");
160
183
  registerMachineProxyRoutes(app, machines, upgradeWebSocket);
161
184
  const pushService = new PushNotificationService((msg) => { console.warn("[push]", msg); });
162
185
  registerPushRoutes(app, pushService);
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
File without changes
@@ -3,6 +3,7 @@ import { getOmpWebRuntime } from "../ompWebStatus.js";
3
3
  import { DEFAULT_REMOTE_HEALTH_TIMEOUT_MS, RemoteMachineClient, validateConfiguredMachineHeaders } from "./machineClient.js";
4
4
  import { MachineStore } from "./machineStore.js";
5
5
  import { errorMessage, isRecord } from "../utils.js";
6
+ import { isPrivateOrReservedHost } from "../security.js";
6
7
  const LOCAL_MACHINE_TIMESTAMP = "1970-01-01T00:00:00.000Z";
7
8
  const DEFAULT_HEALTH_CACHE_TTL_MS = 5_000;
8
9
  export class MachineService {
@@ -178,6 +179,8 @@ function validateBaseUrl(value) {
178
179
  throw new Error("Machine baseUrl must not include credentials");
179
180
  if (url.search !== "" || url.hash !== "")
180
181
  throw new Error("Machine baseUrl must not include query or hash");
182
+ if (isPrivateOrReservedHost(url.hostname))
183
+ throw new Error("Machine baseUrl must not use a private, loopback, or cloud metadata host");
181
184
  return url.href.replace(/\/$/u, "");
182
185
  }
183
186
  function optionalSecrets(input) {