@hcu-lab.me/mcp-device 1.0.9 → 1.0.12

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 (506) hide show
  1. package/PRIVACY.md +21 -0
  2. package/README.md +58 -3
  3. package/SECURITY.md +67 -0
  4. package/config/revoked-approvals.json +1 -0
  5. package/control-plane/config/mcp-servers.example.toml +52 -0
  6. package/control-plane/config/mcp-servers.toml +52 -0
  7. package/control-plane/contracts/device-public-contract-v1.json +733 -0
  8. package/control-plane/scripts/GATEWAY-LICENSE.txt +7 -0
  9. package/control-plane/scripts/account-http.mjs +220 -0
  10. package/control-plane/scripts/account-store.mjs +368 -0
  11. package/control-plane/scripts/admin.mjs +68 -0
  12. package/control-plane/scripts/auth-session.mjs +411 -0
  13. package/control-plane/scripts/authenticated-mcp-wrapper.mjs +1281 -0
  14. package/control-plane/scripts/benchmark-command.mjs +9 -0
  15. package/control-plane/scripts/benchmark-mcp-catalog.mjs +174 -0
  16. package/control-plane/scripts/catalog-budget.mjs +87 -0
  17. package/control-plane/scripts/check-device-public-contract.mjs +20 -0
  18. package/control-plane/scripts/custom-tools/index.mjs +221 -0
  19. package/control-plane/scripts/custom-tools/path-utils.mjs +117 -0
  20. package/control-plane/scripts/custom-tools/response-utils.mjs +34 -0
  21. package/control-plane/scripts/dashboard-http.mjs +598 -0
  22. package/control-plane/scripts/device-access-policy.mjs +205 -0
  23. package/control-plane/scripts/device-admin.mjs +43 -0
  24. package/control-plane/scripts/device-audit.mjs +63 -0
  25. package/control-plane/scripts/device-broker.mjs +1461 -0
  26. package/control-plane/scripts/device-execution-tool-definitions.mjs +217 -0
  27. package/control-plane/scripts/device-inventory.mjs +128 -0
  28. package/control-plane/scripts/device-pairing-http.mjs +109 -0
  29. package/control-plane/scripts/device-pairing-store.mjs +245 -0
  30. package/control-plane/scripts/device-public-contract.mjs +165 -0
  31. package/control-plane/scripts/device-release.mjs +95 -0
  32. package/control-plane/scripts/device-secure-transport.mjs +128 -0
  33. package/control-plane/scripts/device-store.mjs +283 -0
  34. package/control-plane/scripts/device-usage.mjs +657 -0
  35. package/control-plane/scripts/embedded-device.mjs +149 -0
  36. package/control-plane/scripts/enduser-ui.mjs +45 -0
  37. package/control-plane/scripts/external-tool-broker.mjs +179 -0
  38. package/control-plane/scripts/oauth-authorization-server.mjs +589 -0
  39. package/control-plane/scripts/operator-dashboard-http.mjs +81 -0
  40. package/control-plane/scripts/project-inspection.mjs +227 -0
  41. package/control-plane/scripts/projects/project-id.mjs +69 -0
  42. package/control-plane/scripts/projects/trusted-roots-projects.mjs +375 -0
  43. package/control-plane/scripts/prompts/index.mjs +60 -0
  44. package/control-plane/scripts/remote-process-sessions.mjs +78 -0
  45. package/control-plane/scripts/remote-tool-result.mjs +9 -0
  46. package/control-plane/scripts/resources/index.mjs +166 -0
  47. package/control-plane/scripts/runtime-profile.mjs +54 -0
  48. package/control-plane/scripts/shell-tool-descriptor.mjs +17 -0
  49. package/control-plane/scripts/skill-source-safety.mjs +46 -0
  50. package/control-plane/scripts/skills/README.md +70 -0
  51. package/control-plane/scripts/skills/_upstream_licenses/anthropic-THIRD_PARTY_NOTICES.md +405 -0
  52. package/control-plane/scripts/skills/_upstream_licenses/hallmark-LICENSE.txt +21 -0
  53. package/control-plane/scripts/skills/_upstream_licenses/ponytail-LICENSE.txt +21 -0
  54. package/control-plane/scripts/skills/_upstream_licenses/stitch-skills-LICENSE.txt +201 -0
  55. package/control-plane/scripts/skills/_upstream_licenses/superpowers-LICENSE.txt +21 -0
  56. package/control-plane/scripts/skills/algorithmic-art/LICENSE.txt +202 -0
  57. package/control-plane/scripts/skills/algorithmic-art/SKILL.md +405 -0
  58. package/control-plane/scripts/skills/algorithmic-art/templates/generator_template.js +223 -0
  59. package/control-plane/scripts/skills/algorithmic-art/templates/viewer.html +599 -0
  60. package/control-plane/scripts/skills/brainstorming/SKILL.md +285 -0
  61. package/control-plane/scripts/skills/brainstorming/scripts/frame-template.html +213 -0
  62. package/control-plane/scripts/skills/brainstorming/scripts/helper.js +167 -0
  63. package/control-plane/scripts/skills/brainstorming/scripts/server.cjs +723 -0
  64. package/control-plane/scripts/skills/brainstorming/scripts/start-server.sh +209 -0
  65. package/control-plane/scripts/skills/brainstorming/scripts/stop-server.sh +120 -0
  66. package/control-plane/scripts/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  67. package/control-plane/scripts/skills/brainstorming/visual-companion.md +299 -0
  68. package/control-plane/scripts/skills/brand-guidelines/LICENSE.txt +202 -0
  69. package/control-plane/scripts/skills/brand-guidelines/SKILL.md +73 -0
  70. package/control-plane/scripts/skills/claude-api/LICENSE.txt +202 -0
  71. package/control-plane/scripts/skills/claude-api/SKILL.md +570 -0
  72. package/control-plane/scripts/skills/claude-api/csharp/claude-api/README.md +362 -0
  73. package/control-plane/scripts/skills/claude-api/csharp/claude-api/batches.md +14 -0
  74. package/control-plane/scripts/skills/claude-api/csharp/claude-api/files-api.md +25 -0
  75. package/control-plane/scripts/skills/claude-api/csharp/claude-api/streaming.md +28 -0
  76. package/control-plane/scripts/skills/claude-api/csharp/claude-api/tool-use.md +164 -0
  77. package/control-plane/scripts/skills/claude-api/curl/examples.md +256 -0
  78. package/control-plane/scripts/skills/claude-api/curl/managed-agents.md +371 -0
  79. package/control-plane/scripts/skills/claude-api/go/claude-api/README.md +188 -0
  80. package/control-plane/scripts/skills/claude-api/go/claude-api/files-api.md +23 -0
  81. package/control-plane/scripts/skills/claude-api/go/claude-api/streaming.md +43 -0
  82. package/control-plane/scripts/skills/claude-api/go/claude-api/tool-use.md +220 -0
  83. package/control-plane/scripts/skills/claude-api/go/managed-agents/README.md +564 -0
  84. package/control-plane/scripts/skills/claude-api/java/claude-api/README.md +238 -0
  85. package/control-plane/scripts/skills/claude-api/java/claude-api/files-api.md +27 -0
  86. package/control-plane/scripts/skills/claude-api/java/claude-api/streaming.md +24 -0
  87. package/control-plane/scripts/skills/claude-api/java/claude-api/tool-use.md +228 -0
  88. package/control-plane/scripts/skills/claude-api/java/managed-agents/README.md +443 -0
  89. package/control-plane/scripts/skills/claude-api/php/claude-api/README.md +174 -0
  90. package/control-plane/scripts/skills/claude-api/php/claude-api/batches.md +15 -0
  91. package/control-plane/scripts/skills/claude-api/php/claude-api/files-api.md +13 -0
  92. package/control-plane/scripts/skills/claude-api/php/claude-api/streaming.md +27 -0
  93. package/control-plane/scripts/skills/claude-api/php/claude-api/tool-use.md +253 -0
  94. package/control-plane/scripts/skills/claude-api/php/managed-agents/README.md +443 -0
  95. package/control-plane/scripts/skills/claude-api/python/claude-api/README.md +565 -0
  96. package/control-plane/scripts/skills/claude-api/python/claude-api/batches.md +198 -0
  97. package/control-plane/scripts/skills/claude-api/python/claude-api/files-api.md +170 -0
  98. package/control-plane/scripts/skills/claude-api/python/claude-api/sdk-upgrade.md +286 -0
  99. package/control-plane/scripts/skills/claude-api/python/claude-api/streaming.md +179 -0
  100. package/control-plane/scripts/skills/claude-api/python/claude-api/tool-use.md +627 -0
  101. package/control-plane/scripts/skills/claude-api/python/managed-agents/README.md +335 -0
  102. package/control-plane/scripts/skills/claude-api/ruby/claude-api/README.md +134 -0
  103. package/control-plane/scripts/skills/claude-api/ruby/claude-api/streaming.md +16 -0
  104. package/control-plane/scripts/skills/claude-api/ruby/claude-api/tool-use.md +41 -0
  105. package/control-plane/scripts/skills/claude-api/ruby/managed-agents/README.md +394 -0
  106. package/control-plane/scripts/skills/claude-api/shared/admin-api.md +179 -0
  107. package/control-plane/scripts/skills/claude-api/shared/agent-design.md +101 -0
  108. package/control-plane/scripts/skills/claude-api/shared/anthropic-cli.md +269 -0
  109. package/control-plane/scripts/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
  110. package/control-plane/scripts/skills/claude-api/shared/cost-optimization.md +233 -0
  111. package/control-plane/scripts/skills/claude-api/shared/error-codes.md +262 -0
  112. package/control-plane/scripts/skills/claude-api/shared/live-sources.md +166 -0
  113. package/control-plane/scripts/skills/claude-api/shared/managed-agents-api-reference.md +455 -0
  114. package/control-plane/scripts/skills/claude-api/shared/managed-agents-client-patterns.md +220 -0
  115. package/control-plane/scripts/skills/claude-api/shared/managed-agents-core.md +359 -0
  116. package/control-plane/scripts/skills/claude-api/shared/managed-agents-environments.md +226 -0
  117. package/control-plane/scripts/skills/claude-api/shared/managed-agents-events.md +290 -0
  118. package/control-plane/scripts/skills/claude-api/shared/managed-agents-memory.md +201 -0
  119. package/control-plane/scripts/skills/claude-api/shared/managed-agents-multiagent.md +260 -0
  120. package/control-plane/scripts/skills/claude-api/shared/managed-agents-onboarding.md +82 -0
  121. package/control-plane/scripts/skills/claude-api/shared/managed-agents-outcomes.md +108 -0
  122. package/control-plane/scripts/skills/claude-api/shared/managed-agents-overview.md +77 -0
  123. package/control-plane/scripts/skills/claude-api/shared/managed-agents-scheduled-deployments.md +156 -0
  124. package/control-plane/scripts/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +282 -0
  125. package/control-plane/scripts/skills/claude-api/shared/managed-agents-tools.md +504 -0
  126. package/control-plane/scripts/skills/claude-api/shared/managed-agents-webhooks.md +143 -0
  127. package/control-plane/scripts/skills/claude-api/shared/model-migration.md +1872 -0
  128. package/control-plane/scripts/skills/claude-api/shared/models.md +142 -0
  129. package/control-plane/scripts/skills/claude-api/shared/platform-availability.md +52 -0
  130. package/control-plane/scripts/skills/claude-api/shared/prompt-audit.md +223 -0
  131. package/control-plane/scripts/skills/claude-api/shared/prompt-caching.md +292 -0
  132. package/control-plane/scripts/skills/claude-api/shared/token-counting.md +56 -0
  133. package/control-plane/scripts/skills/claude-api/shared/tool-use-concepts.md +526 -0
  134. package/control-plane/scripts/skills/claude-api/typescript/claude-api/README.md +405 -0
  135. package/control-plane/scripts/skills/claude-api/typescript/claude-api/batches.md +106 -0
  136. package/control-plane/scripts/skills/claude-api/typescript/claude-api/files-api.md +98 -0
  137. package/control-plane/scripts/skills/claude-api/typescript/claude-api/streaming.md +178 -0
  138. package/control-plane/scripts/skills/claude-api/typescript/claude-api/tool-use.md +586 -0
  139. package/control-plane/scripts/skills/claude-api/typescript/managed-agents/README.md +359 -0
  140. package/control-plane/scripts/skills/dispatching-parallel-agents/SKILL.md +167 -0
  141. package/control-plane/scripts/skills/enhance-prompt/README.md +34 -0
  142. package/control-plane/scripts/skills/enhance-prompt/SKILL.md +204 -0
  143. package/control-plane/scripts/skills/enhance-prompt/references/KEYWORDS.md +114 -0
  144. package/control-plane/scripts/skills/executing-plans/SKILL.md +371 -0
  145. package/control-plane/scripts/skills/executing-plans/scripts/task-done +52 -0
  146. package/control-plane/scripts/skills/executing-plans/scripts/task-start +28 -0
  147. package/control-plane/scripts/skills/extract-design-md/SKILL.md +358 -0
  148. package/control-plane/scripts/skills/extract-design-md/examples/DESIGN.md +210 -0
  149. package/control-plane/scripts/skills/extract-design-md/references/angular.md +122 -0
  150. package/control-plane/scripts/skills/extract-design-md/references/plain-css.md +161 -0
  151. package/control-plane/scripts/skills/extract-design-md/references/react-tailwind.md +157 -0
  152. package/control-plane/scripts/skills/extract-design-md/references/svelte.md +101 -0
  153. package/control-plane/scripts/skills/extract-design-md/references/vue.md +107 -0
  154. package/control-plane/scripts/skills/finishing-a-development-branch/SKILL.md +225 -0
  155. package/control-plane/scripts/skills/frontend-design/LICENSE.txt +177 -0
  156. package/control-plane/scripts/skills/frontend-design/SKILL.md +71 -0
  157. package/control-plane/scripts/skills/hallmark/SKILL.md +558 -0
  158. package/control-plane/scripts/skills/hallmark/references/anti-patterns.md +418 -0
  159. package/control-plane/scripts/skills/hallmark/references/assets.md +406 -0
  160. package/control-plane/scripts/skills/hallmark/references/color.md +95 -0
  161. package/control-plane/scripts/skills/hallmark/references/component-cookbook.md +263 -0
  162. package/control-plane/scripts/skills/hallmark/references/components/c1-outlined-chip.md +12 -0
  163. package/control-plane/scripts/skills/hallmark/references/components/c2-inline-form-as-cta.md +16 -0
  164. package/control-plane/scripts/skills/hallmark/references/components/c3-typographic-link.md +8 -0
  165. package/control-plane/scripts/skills/hallmark/references/components/c4-sticky-bottom-bar.md +16 -0
  166. package/control-plane/scripts/skills/hallmark/references/components/f1-bento-grid.md +20 -0
  167. package/control-plane/scripts/skills/hallmark/references/components/f2-sticky-scroll-stack.md +20 -0
  168. package/control-plane/scripts/skills/hallmark/references/components/f3-tabular-spec-sheet.md +11 -0
  169. package/control-plane/scripts/skills/hallmark/references/components/f4-step-sequence.md +11 -0
  170. package/control-plane/scripts/skills/hallmark/references/components/f5-annotated-screenshot.md +11 -0
  171. package/control-plane/scripts/skills/hallmark/references/components/f6-product-card-grid.md +41 -0
  172. package/control-plane/scripts/skills/hallmark/references/components/ft1-mast-headed.md +13 -0
  173. package/control-plane/scripts/skills/hallmark/references/components/ft2-inline-rule-single-line.md +10 -0
  174. package/control-plane/scripts/skills/hallmark/references/components/ft3-index-style-category-list.md +12 -0
  175. package/control-plane/scripts/skills/hallmark/references/components/ft4-dense-typographic.md +10 -0
  176. package/control-plane/scripts/skills/hallmark/references/components/ft5-statement.md +21 -0
  177. package/control-plane/scripts/skills/hallmark/references/components/ft6-letter-close.md +19 -0
  178. package/control-plane/scripts/skills/hallmark/references/components/ft7-newsletter-first.md +27 -0
  179. package/control-plane/scripts/skills/hallmark/references/components/ft8-marquee-scroll.md +25 -0
  180. package/control-plane/scripts/skills/hallmark/references/components/h1-marquee.md +15 -0
  181. package/control-plane/scripts/skills/hallmark/references/components/h2-split-diptych.md +15 -0
  182. package/control-plane/scripts/skills/hallmark/references/components/h3-quote-led.md +11 -0
  183. package/control-plane/scripts/skills/hallmark/references/components/h4-stat-led.md +14 -0
  184. package/control-plane/scripts/skills/hallmark/references/components/h5-letter-hero.md +11 -0
  185. package/control-plane/scripts/skills/hallmark/references/components/h6-photographic-fold.md +16 -0
  186. package/control-plane/scripts/skills/hallmark/references/components/h7-demo-video-clipped-by-viewport-edge.md +27 -0
  187. package/control-plane/scripts/skills/hallmark/references/components/h8-mockup-split-browser-framed.md +23 -0
  188. package/control-plane/scripts/skills/hallmark/references/components/h9-custom-illustration-centerpiece.md +27 -0
  189. package/control-plane/scripts/skills/hallmark/references/components/n1-wordmark-2-links.md +12 -0
  190. package/control-plane/scripts/skills/hallmark/references/components/n10-floating-on-scroll-morph.md +19 -0
  191. package/control-plane/scripts/skills/hallmark/references/components/n11-mega-menu.md +40 -0
  192. package/control-plane/scripts/skills/hallmark/references/components/n12-banner-retract.md +34 -0
  193. package/control-plane/scripts/skills/hallmark/references/components/n13-inline-cmdk-pill.md +39 -0
  194. package/control-plane/scripts/skills/hallmark/references/components/n1b-saas-three-section.md +35 -0
  195. package/control-plane/scripts/skills/hallmark/references/components/n2-floating-chip.md +14 -0
  196. package/control-plane/scripts/skills/hallmark/references/components/n3-side-rail.md +14 -0
  197. package/control-plane/scripts/skills/hallmark/references/components/n4-hidden-behind-k.md +9 -0
  198. package/control-plane/scripts/skills/hallmark/references/components/n5-floating-pill.md +28 -0
  199. package/control-plane/scripts/skills/hallmark/references/components/n6-newspaper-masthead.md +24 -0
  200. package/control-plane/scripts/skills/hallmark/references/components/n7-brutal-slab.md +22 -0
  201. package/control-plane/scripts/skills/hallmark/references/components/n8-terminal-command.md +21 -0
  202. package/control-plane/scripts/skills/hallmark/references/components/n9-edge-aligned-minimal.md +17 -0
  203. package/control-plane/scripts/skills/hallmark/references/components/s1-left-margin-numbered.md +15 -0
  204. package/control-plane/scripts/skills/hallmark/references/components/s2-hanging.md +13 -0
  205. package/control-plane/scripts/skills/hallmark/references/components/s3-sticky-pinned.md +19 -0
  206. package/control-plane/scripts/skills/hallmark/references/components/s4-inline-no-break.md +11 -0
  207. package/control-plane/scripts/skills/hallmark/references/components/s5-bottom-anchored.md +13 -0
  208. package/control-plane/scripts/skills/hallmark/references/components/t1-pull-quote-with-marginalia.md +12 -0
  209. package/control-plane/scripts/skills/hallmark/references/components/t2-logo-wall-hairline.md +19 -0
  210. package/control-plane/scripts/skills/hallmark/references/components/t3-single-huge-quote.md +11 -0
  211. package/control-plane/scripts/skills/hallmark/references/components/t4-numbered-stat-strip.md +14 -0
  212. package/control-plane/scripts/skills/hallmark/references/contract.md +25 -0
  213. package/control-plane/scripts/skills/hallmark/references/copy.md +182 -0
  214. package/control-plane/scripts/skills/hallmark/references/custom-craft.md +626 -0
  215. package/control-plane/scripts/skills/hallmark/references/custom-theme.md +367 -0
  216. package/control-plane/scripts/skills/hallmark/references/design-md.md +116 -0
  217. package/control-plane/scripts/skills/hallmark/references/export-formats.md +329 -0
  218. package/control-plane/scripts/skills/hallmark/references/floating-nav.md +89 -0
  219. package/control-plane/scripts/skills/hallmark/references/genres/atmospheric.md +69 -0
  220. package/control-plane/scripts/skills/hallmark/references/genres/editorial.md +72 -0
  221. package/control-plane/scripts/skills/hallmark/references/genres/modern-minimal.md +71 -0
  222. package/control-plane/scripts/skills/hallmark/references/genres/playful.md +70 -0
  223. package/control-plane/scripts/skills/hallmark/references/hero-enrichment.md +475 -0
  224. package/control-plane/scripts/skills/hallmark/references/imagery-kit.md +170 -0
  225. package/control-plane/scripts/skills/hallmark/references/interaction-and-states.md +208 -0
  226. package/control-plane/scripts/skills/hallmark/references/layout-and-space.md +112 -0
  227. package/control-plane/scripts/skills/hallmark/references/macrostructures/01-bento-grid.md +35 -0
  228. package/control-plane/scripts/skills/hallmark/references/macrostructures/02-long-document.md +34 -0
  229. package/control-plane/scripts/skills/hallmark/references/macrostructures/03-marquee-hero.md +31 -0
  230. package/control-plane/scripts/skills/hallmark/references/macrostructures/04-stat-led.md +34 -0
  231. package/control-plane/scripts/skills/hallmark/references/macrostructures/05-workbench.md +32 -0
  232. package/control-plane/scripts/skills/hallmark/references/macrostructures/06-conversational-faq.md +33 -0
  233. package/control-plane/scripts/skills/hallmark/references/macrostructures/07-manifesto.md +32 -0
  234. package/control-plane/scripts/skills/hallmark/references/macrostructures/08-photographic.md +34 -0
  235. package/control-plane/scripts/skills/hallmark/references/macrostructures/09-quote-led.md +32 -0
  236. package/control-plane/scripts/skills/hallmark/references/macrostructures/10-specimen.md +32 -0
  237. package/control-plane/scripts/skills/hallmark/references/macrostructures/11-catalogue.md +23 -0
  238. package/control-plane/scripts/skills/hallmark/references/macrostructures/12-letter.md +23 -0
  239. package/control-plane/scripts/skills/hallmark/references/macrostructures/13-index-first.md +23 -0
  240. package/control-plane/scripts/skills/hallmark/references/macrostructures/14-narrative-workflow.md +23 -0
  241. package/control-plane/scripts/skills/hallmark/references/macrostructures/15-split-studio.md +23 -0
  242. package/control-plane/scripts/skills/hallmark/references/macrostructures/16-feature-stack.md +23 -0
  243. package/control-plane/scripts/skills/hallmark/references/macrostructures/17-type-specimen.md +23 -0
  244. package/control-plane/scripts/skills/hallmark/references/macrostructures/18-portfolio-grid.md +23 -0
  245. package/control-plane/scripts/skills/hallmark/references/macrostructures/19-map-diagram.md +23 -0
  246. package/control-plane/scripts/skills/hallmark/references/macrostructures/20-ecosystem-index.md +23 -0
  247. package/control-plane/scripts/skills/hallmark/references/macrostructures/21-component-playground.md +23 -0
  248. package/control-plane/scripts/skills/hallmark/references/macrostructures.md +89 -0
  249. package/control-plane/scripts/skills/hallmark/references/microinteractions.md +258 -0
  250. package/control-plane/scripts/skills/hallmark/references/motion.md +109 -0
  251. package/control-plane/scripts/skills/hallmark/references/preview-examples.md +49 -0
  252. package/control-plane/scripts/skills/hallmark/references/responsive.md +138 -0
  253. package/control-plane/scripts/skills/hallmark/references/slop-test.md +192 -0
  254. package/control-plane/scripts/skills/hallmark/references/structure.md +160 -0
  255. package/control-plane/scripts/skills/hallmark/references/study.md +509 -0
  256. package/control-plane/scripts/skills/hallmark/references/themes/carnival.md +301 -0
  257. package/control-plane/scripts/skills/hallmark/references/themes/cobalt.md +146 -0
  258. package/control-plane/scripts/skills/hallmark/references/themes/grid.md +161 -0
  259. package/control-plane/scripts/skills/hallmark/references/themes/hum.md +403 -0
  260. package/control-plane/scripts/skills/hallmark/references/themes/lumen.md +478 -0
  261. package/control-plane/scripts/skills/hallmark/references/typography.md +243 -0
  262. package/control-plane/scripts/skills/hallmark/references/upstream/recipes.md +186 -0
  263. package/control-plane/scripts/skills/hallmark/references/upstream/study-examples.md +176 -0
  264. package/control-plane/scripts/skills/hallmark/references/upstream/tokens.css +1221 -0
  265. package/control-plane/scripts/skills/hallmark/references/verbs/audit.md +25 -0
  266. package/control-plane/scripts/skills/hallmark/references/verbs/redesign.md +269 -0
  267. package/control-plane/scripts/skills/human-comms/SKILL.md +29 -0
  268. package/control-plane/scripts/skills/index.mjs +432 -0
  269. package/control-plane/scripts/skills/internal-comms/LICENSE.txt +202 -0
  270. package/control-plane/scripts/skills/internal-comms/SKILL.md +32 -0
  271. package/control-plane/scripts/skills/internal-comms/examples/3p-updates.md +47 -0
  272. package/control-plane/scripts/skills/internal-comms/examples/company-newsletter.md +65 -0
  273. package/control-plane/scripts/skills/internal-comms/examples/faq-answers.md +30 -0
  274. package/control-plane/scripts/skills/internal-comms/examples/general-comms.md +16 -0
  275. package/control-plane/scripts/skills/mcp-adapter.mjs +94 -0
  276. package/control-plane/scripts/skills/mcp-builder/LICENSE.txt +202 -0
  277. package/control-plane/scripts/skills/mcp-builder/SKILL.md +236 -0
  278. package/control-plane/scripts/skills/mcp-builder/reference/evaluation.md +602 -0
  279. package/control-plane/scripts/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  280. package/control-plane/scripts/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  281. package/control-plane/scripts/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  282. package/control-plane/scripts/skills/mcp-builder/scripts/connections.py +151 -0
  283. package/control-plane/scripts/skills/mcp-builder/scripts/evaluation.py +373 -0
  284. package/control-plane/scripts/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  285. package/control-plane/scripts/skills/mcp-builder/scripts/requirements.txt +2 -0
  286. package/control-plane/scripts/skills/ponytail/SKILL.md +120 -0
  287. package/control-plane/scripts/skills/ponytail-audit/SKILL.md +41 -0
  288. package/control-plane/scripts/skills/ponytail-debt/SKILL.md +44 -0
  289. package/control-plane/scripts/skills/ponytail-gain/SKILL.md +50 -0
  290. package/control-plane/scripts/skills/ponytail-help/SKILL.md +71 -0
  291. package/control-plane/scripts/skills/ponytail-review/SKILL.md +57 -0
  292. package/control-plane/scripts/skills/receiving-code-review/SKILL.md +205 -0
  293. package/control-plane/scripts/skills/requesting-code-review/SKILL.md +95 -0
  294. package/control-plane/scripts/skills/requesting-code-review/code-reviewer.md +198 -0
  295. package/control-plane/scripts/skills/skill-creator/LICENSE.txt +202 -0
  296. package/control-plane/scripts/skills/skill-creator/SKILL.md +485 -0
  297. package/control-plane/scripts/skills/skill-creator/agents/analyzer.md +274 -0
  298. package/control-plane/scripts/skills/skill-creator/agents/comparator.md +202 -0
  299. package/control-plane/scripts/skills/skill-creator/agents/grader.md +223 -0
  300. package/control-plane/scripts/skills/skill-creator/assets/eval_review.html +146 -0
  301. package/control-plane/scripts/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  302. package/control-plane/scripts/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  303. package/control-plane/scripts/skills/skill-creator/references/schemas.md +430 -0
  304. package/control-plane/scripts/skills/skill-creator/scripts/__init__.py +0 -0
  305. package/control-plane/scripts/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  306. package/control-plane/scripts/skills/skill-creator/scripts/generate_report.py +326 -0
  307. package/control-plane/scripts/skills/skill-creator/scripts/improve_description.py +247 -0
  308. package/control-plane/scripts/skills/skill-creator/scripts/package_skill.py +136 -0
  309. package/control-plane/scripts/skills/skill-creator/scripts/quick_validate.py +103 -0
  310. package/control-plane/scripts/skills/skill-creator/scripts/run_eval.py +310 -0
  311. package/control-plane/scripts/skills/skill-creator/scripts/run_loop.py +328 -0
  312. package/control-plane/scripts/skills/skill-creator/scripts/utils.py +47 -0
  313. package/control-plane/scripts/skills/slack-gif-creator/LICENSE.txt +202 -0
  314. package/control-plane/scripts/skills/slack-gif-creator/SKILL.md +254 -0
  315. package/control-plane/scripts/skills/slack-gif-creator/core/easing.py +234 -0
  316. package/control-plane/scripts/skills/slack-gif-creator/core/frame_composer.py +176 -0
  317. package/control-plane/scripts/skills/slack-gif-creator/core/gif_builder.py +269 -0
  318. package/control-plane/scripts/skills/slack-gif-creator/core/validators.py +136 -0
  319. package/control-plane/scripts/skills/slack-gif-creator/requirements.txt +4 -0
  320. package/control-plane/scripts/skills/sources.json +401 -0
  321. package/control-plane/scripts/skills/sources.lock.json +416 -0
  322. package/control-plane/scripts/skills/subagent-driven-development/SKILL.md +570 -0
  323. package/control-plane/scripts/skills/subagent-driven-development/implementer-prompt.md +154 -0
  324. package/control-plane/scripts/skills/subagent-driven-development/re-review-prompt.md +115 -0
  325. package/control-plane/scripts/skills/subagent-driven-development/scripts/review-package +53 -0
  326. package/control-plane/scripts/skills/subagent-driven-development/scripts/sdd-workspace +82 -0
  327. package/control-plane/scripts/skills/subagent-driven-development/scripts/task-brief +43 -0
  328. package/control-plane/scripts/skills/subagent-driven-development/task-reviewer-prompt.md +207 -0
  329. package/control-plane/scripts/skills/systematic-debugging/CREATION-LOG.md +119 -0
  330. package/control-plane/scripts/skills/systematic-debugging/SKILL.md +283 -0
  331. package/control-plane/scripts/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  332. package/control-plane/scripts/skills/systematic-debugging/condition-based-waiting.md +115 -0
  333. package/control-plane/scripts/skills/systematic-debugging/defense-in-depth.md +122 -0
  334. package/control-plane/scripts/skills/systematic-debugging/find-polluter.sh +72 -0
  335. package/control-plane/scripts/skills/systematic-debugging/root-cause-tracing.md +169 -0
  336. package/control-plane/scripts/skills/systematic-debugging/test-academic.md +14 -0
  337. package/control-plane/scripts/skills/systematic-debugging/test-pressure-1.md +58 -0
  338. package/control-plane/scripts/skills/systematic-debugging/test-pressure-2.md +68 -0
  339. package/control-plane/scripts/skills/systematic-debugging/test-pressure-3.md +69 -0
  340. package/control-plane/scripts/skills/test-driven-development/SKILL.md +330 -0
  341. package/control-plane/scripts/skills/test-driven-development/writing-good-tests.md +198 -0
  342. package/control-plane/scripts/skills/theme-factory/LICENSE.txt +202 -0
  343. package/control-plane/scripts/skills/theme-factory/SKILL.md +59 -0
  344. package/control-plane/scripts/skills/theme-factory/theme-showcase.pdf +0 -0
  345. package/control-plane/scripts/skills/theme-factory/themes/arctic-frost.md +19 -0
  346. package/control-plane/scripts/skills/theme-factory/themes/botanical-garden.md +19 -0
  347. package/control-plane/scripts/skills/theme-factory/themes/desert-rose.md +19 -0
  348. package/control-plane/scripts/skills/theme-factory/themes/forest-canopy.md +19 -0
  349. package/control-plane/scripts/skills/theme-factory/themes/golden-hour.md +19 -0
  350. package/control-plane/scripts/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  351. package/control-plane/scripts/skills/theme-factory/themes/modern-minimalist.md +19 -0
  352. package/control-plane/scripts/skills/theme-factory/themes/ocean-depths.md +19 -0
  353. package/control-plane/scripts/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  354. package/control-plane/scripts/skills/theme-factory/themes/tech-innovation.md +19 -0
  355. package/control-plane/scripts/skills/using-git-worktrees/SKILL.md +167 -0
  356. package/control-plane/scripts/skills/verification-before-completion/SKILL.md +120 -0
  357. package/control-plane/scripts/skills/web-artifacts-builder/LICENSE.txt +202 -0
  358. package/control-plane/scripts/skills/web-artifacts-builder/SKILL.md +74 -0
  359. package/control-plane/scripts/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  360. package/control-plane/scripts/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  361. package/control-plane/scripts/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  362. package/control-plane/scripts/skills/webapp-testing/LICENSE.txt +202 -0
  363. package/control-plane/scripts/skills/webapp-testing/SKILL.md +96 -0
  364. package/control-plane/scripts/skills/webapp-testing/examples/console_logging.py +35 -0
  365. package/control-plane/scripts/skills/webapp-testing/examples/element_discovery.py +40 -0
  366. package/control-plane/scripts/skills/webapp-testing/examples/static_html_automation.py +33 -0
  367. package/control-plane/scripts/skills/webapp-testing/scripts/with_server.py +106 -0
  368. package/control-plane/scripts/skills/writing-plans/SKILL.md +192 -0
  369. package/control-plane/scripts/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
  370. package/control-plane/scripts/skills/writing-skills/SKILL.md +681 -0
  371. package/control-plane/scripts/skills/writing-skills/anthropic-best-practices.md +1150 -0
  372. package/control-plane/scripts/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  373. package/control-plane/scripts/skills/writing-skills/graphviz-conventions.dot +172 -0
  374. package/control-plane/scripts/skills/writing-skills/persuasion-principles.md +187 -0
  375. package/control-plane/scripts/skills/writing-skills/render-graphs.js +169 -0
  376. package/control-plane/scripts/skills/writing-skills/testing-skills-with-subagents.md +384 -0
  377. package/control-plane/scripts/smoke-mcp-schemas.mjs +30 -0
  378. package/control-plane/scripts/surface-config.mjs +45 -0
  379. package/control-plane/scripts/sync-skills.mjs +370 -0
  380. package/control-plane/scripts/tool-metrics.mjs +74 -0
  381. package/control-plane/scripts/tool-risk.mjs +156 -0
  382. package/control-plane/scripts/tool-surface-stability.mjs +38 -0
  383. package/control-plane/scripts/upstreams/catalog-cache.mjs +28 -0
  384. package/control-plane/scripts/upstreams/config.mjs +158 -0
  385. package/control-plane/scripts/upstreams/diagnostics.mjs +21 -0
  386. package/control-plane/scripts/upstreams/http-client.mjs +67 -0
  387. package/control-plane/scripts/upstreams/manager.mjs +535 -0
  388. package/control-plane/scripts/upstreams/names.mjs +55 -0
  389. package/control-plane/scripts/upstreams/presets.mjs +60 -0
  390. package/control-plane/scripts/upstreams/resource-uri.mjs +29 -0
  391. package/control-plane/scripts/upstreams/stdio-client.mjs +73 -0
  392. package/control-plane/scripts/workspace-registry.mjs +147 -0
  393. package/dist/context/authorization.d.ts +5 -0
  394. package/dist/context/authorization.js +70 -0
  395. package/dist/context/capture.d.ts +46 -0
  396. package/dist/context/capture.js +187 -0
  397. package/dist/context/cli.d.ts +47 -0
  398. package/dist/context/cli.js +287 -0
  399. package/dist/context/device-adapter.d.ts +102 -0
  400. package/dist/context/device-adapter.js +79 -0
  401. package/dist/context/gateway.d.ts +354 -0
  402. package/dist/context/gateway.js +50 -0
  403. package/dist/context/graph.d.ts +63 -0
  404. package/dist/context/graph.js +214 -0
  405. package/dist/context/importer.d.ts +8 -0
  406. package/dist/context/importer.js +69 -0
  407. package/dist/context/indexer.d.ts +14 -0
  408. package/dist/context/indexer.js +57 -0
  409. package/dist/context/migrations/index.d.ts +4 -0
  410. package/dist/context/migrations/index.js +87 -0
  411. package/dist/context/redact.d.ts +15 -0
  412. package/dist/context/redact.js +43 -0
  413. package/dist/context/repositories.d.ts +9 -0
  414. package/dist/context/repositories.js +45 -0
  415. package/dist/context/search.d.ts +63 -0
  416. package/dist/context/search.js +207 -0
  417. package/dist/context/service.d.ts +278 -0
  418. package/dist/context/service.js +160 -0
  419. package/dist/context/store.d.ts +134 -0
  420. package/dist/context/store.js +722 -0
  421. package/dist/context/text.d.ts +4 -0
  422. package/dist/context/text.js +14 -0
  423. package/dist/context/tool-contract.d.ts +534 -0
  424. package/dist/context/tool-contract.js +45 -0
  425. package/dist/device/core.d.ts +29 -0
  426. package/dist/device/core.js +66 -0
  427. package/dist/device/device.d.ts +5 -0
  428. package/dist/device/device.js +94 -37
  429. package/dist/device/gateway-channel.d.ts +8 -1
  430. package/dist/device/gateway-channel.js +51 -3
  431. package/dist/device/gateway-tool-adapter.d.ts +11 -3
  432. package/dist/device/gateway-tool-adapter.js +141 -98
  433. package/dist/device/official-trust.d.ts +12 -0
  434. package/dist/device/official-trust.js +25 -1
  435. package/dist/device/runtime-owner.js +9 -1
  436. package/dist/distribution.d.ts +4 -0
  437. package/dist/distribution.js +8 -0
  438. package/dist/handlers/filesystem-handlers.js +53 -37
  439. package/dist/handlers/search-handlers.d.ts +1 -0
  440. package/dist/handlers/search-handlers.js +51 -1
  441. package/dist/log-palace/cli.d.ts +7 -0
  442. package/dist/log-palace/cli.js +89 -0
  443. package/dist/log-palace/formats.d.ts +26 -0
  444. package/dist/log-palace/formats.js +126 -0
  445. package/dist/log-palace/store.d.ts +129 -0
  446. package/dist/log-palace/store.js +856 -0
  447. package/dist/mcp-device.d.ts +1 -1
  448. package/dist/mcp-device.js +28 -6
  449. package/dist/npm-scripts/remote.js +1 -0
  450. package/dist/platform/activity-journal.d.ts +16 -0
  451. package/dist/platform/activity-journal.js +68 -0
  452. package/dist/platform/cli.d.ts +1 -0
  453. package/dist/platform/cli.js +300 -0
  454. package/dist/platform/coordination-lock.d.ts +45 -0
  455. package/dist/platform/coordination-lock.js +233 -0
  456. package/dist/platform/device-runtime.d.ts +16 -0
  457. package/dist/platform/device-runtime.js +83 -0
  458. package/dist/platform/knowledge-contract.d.ts +46 -0
  459. package/dist/platform/knowledge-contract.js +1 -0
  460. package/dist/platform/knowledge-mcp.d.ts +29 -0
  461. package/dist/platform/knowledge-mcp.js +95 -0
  462. package/dist/platform/knowledge-router.d.ts +64 -0
  463. package/dist/platform/knowledge-router.js +320 -0
  464. package/dist/platform/plugin-child.d.ts +1 -0
  465. package/dist/platform/plugin-child.js +115 -0
  466. package/dist/platform/plugin-contract.d.ts +76 -0
  467. package/dist/platform/plugin-contract.js +53 -0
  468. package/dist/platform/plugin-driver.d.ts +8 -0
  469. package/dist/platform/plugin-driver.js +443 -0
  470. package/dist/platform/plugin-host.d.ts +88 -0
  471. package/dist/platform/plugin-host.js +817 -0
  472. package/dist/platform/plugin-policy.d.ts +3 -0
  473. package/dist/platform/plugin-policy.js +29 -0
  474. package/dist/platform/plugin-services.d.ts +14 -0
  475. package/dist/platform/plugin-services.js +32 -0
  476. package/dist/platform/process-identity.d.ts +9 -0
  477. package/dist/platform/process-identity.js +68 -0
  478. package/dist/platform/runtime-lease.d.ts +4 -0
  479. package/dist/platform/runtime-lease.js +58 -0
  480. package/dist/platform/runtime-root.d.ts +9 -0
  481. package/dist/platform/runtime-root.js +61 -0
  482. package/dist/platform/state-backup.d.ts +92 -0
  483. package/dist/platform/state-backup.js +399 -0
  484. package/dist/plugins/reference/plugin.d.ts +3 -0
  485. package/dist/plugins/reference/plugin.js +13 -0
  486. package/dist/search-manager.d.ts +6 -0
  487. package/dist/search-manager.js +123 -0
  488. package/dist/server.d.ts +13 -0
  489. package/dist/server.js +7 -3
  490. package/dist/terminal-manager.d.ts +16 -0
  491. package/dist/terminal-manager.js +137 -42
  492. package/dist/tool-dispatcher.d.ts +11 -0
  493. package/dist/tool-dispatcher.js +228 -0
  494. package/dist/tools/edit.js +72 -1
  495. package/dist/tools/filesystem.d.ts +1 -1
  496. package/dist/tools/filesystem.js +2 -2
  497. package/dist/tools/improved-process-tools.js +91 -108
  498. package/dist/tools/schemas.d.ts +94 -2
  499. package/dist/tools/schemas.js +20 -6
  500. package/dist/types.d.ts +8 -0
  501. package/dist/utils/output-budget.d.ts +6 -0
  502. package/dist/utils/output-budget.js +15 -0
  503. package/dist/version.d.ts +1 -1
  504. package/dist/version.js +1 -1
  505. package/package.json +29 -6
  506. package/skills/mcp-device-context/SKILL.md +40 -0
@@ -17,6 +17,24 @@ const mcpRoot = path.resolve(__dirname, '..', '..');
17
17
  // Track virtual Node sessions (PIDs that are actually Node fallback sessions)
18
18
  const virtualNodeSessions = new Map();
19
19
  let virtualPidCounter = -1000; // Use negative PIDs for virtual sessions
20
+ const processOperationTails = new Map();
21
+ async function acquireProcessOperation(pid) {
22
+ const previous = processOperationTails.get(pid) ?? Promise.resolve();
23
+ let release;
24
+ const current = new Promise((resolve) => { release = resolve; });
25
+ const tail = previous.catch(() => { }).then(() => current);
26
+ processOperationTails.set(pid, tail);
27
+ await previous.catch(() => { });
28
+ return () => {
29
+ release();
30
+ if (processOperationTails.get(pid) === tail) {
31
+ tail.finally(() => {
32
+ if (processOperationTails.get(pid) === tail)
33
+ processOperationTails.delete(pid);
34
+ });
35
+ }
36
+ };
37
+ }
20
38
  /**
21
39
  * Execute Node.js code via temp file (fallback when Python unavailable)
22
40
  * Creates temp .mjs file in MCP directory for ES module import access
@@ -28,6 +46,7 @@ async function executeNodeCode(code, timeout_ms = 30000) {
28
46
  const result = await new Promise((resolve) => {
29
47
  const proc = spawn(process.execPath, [tempFile], {
30
48
  cwd: mcpRoot,
49
+ env: { ...process.env, MCP_DEVICE_SESSION: 'process-tool' },
31
50
  timeout: timeout_ms,
32
51
  windowsHide: true // Prevent visible console windows on Windows
33
52
  });
@@ -152,13 +171,18 @@ export async function startProcess(args) {
152
171
  }
153
172
  }
154
173
  }
155
- const result = await terminalManager.executeCommand(commandToRun, parsed.data.timeout_ms, shellUsed, parsed.data.verbose_timing || false, workingDirectory);
174
+ const result = await terminalManager.executeCommand(commandToRun, parsed.data.background ? 0 : (parsed.data.yield_ms ?? parsed.data.timeout_ms), shellUsed, parsed.data.verbose_timing || false, workingDirectory);
156
175
  if (result.pid === -1) {
157
176
  return {
158
177
  content: [{ type: "text", text: result.output }],
159
178
  isError: true,
160
179
  };
161
180
  }
181
+ // Initial output returned here is already delivered to the consuming caller.
182
+ // Note: Only mark consumed for active running processes; completed processes retain baseline replayability.
183
+ if (terminalManager.getSession(result.pid)) {
184
+ terminalManager.markOutputConsumed(result.pid, result.deliveredCursor);
185
+ }
162
186
  // Analyze the process state to detect if it's waiting for input
163
187
  const processState = analyzeProcessState(result.output, result.pid);
164
188
  let statusMessage = '';
@@ -181,6 +205,7 @@ export async function startProcess(args) {
181
205
  type: "text",
182
206
  text: `Process started with PID ${result.pid} (shell: ${shellUsed})\nInitial output:\n${result.output}${statusMessage}${timingMessage}`
183
207
  }],
208
+ _meta: { process: terminalManager.processIdentity(result.pid) },
184
209
  };
185
210
  }
186
211
  function formatTimingInfo(timing) {
@@ -225,48 +250,15 @@ export async function readProcessOutput(args) {
225
250
  verbose_timing = false } = parsed.data;
226
251
  // Timing telemetry
227
252
  const startTime = Date.now();
228
- // For active sessions with no new output yet, optionally wait for output
253
+ // For active sessions with no unread bytes yet, wait on output/completion progress.
229
254
  const session = terminalManager.getSession(pid);
230
255
  if (session && offset === 0) {
231
- // Wait for new output to arrive (only for "new output" reads, not absolute/tail)
232
- const waitForOutput = () => {
233
- return new Promise((resolve) => {
234
- // Check if there's already new output
235
- const currentLines = terminalManager.getOutputLineCount(pid) || 0;
236
- if (currentLines > session.lastReadIndex) {
237
- resolve();
238
- return;
239
- }
240
- let resolved = false;
241
- let interval = null;
242
- let timeout = null;
243
- const cleanup = () => {
244
- if (interval)
245
- clearInterval(interval);
246
- if (timeout)
247
- clearTimeout(timeout);
248
- };
249
- const resolveOnce = () => {
250
- if (resolved)
251
- return;
252
- resolved = true;
253
- cleanup();
254
- resolve();
255
- };
256
- // Poll for new output
257
- interval = setInterval(() => {
258
- const newLineCount = terminalManager.getOutputLineCount(pid) || 0;
259
- if (newLineCount > session.lastReadIndex) {
260
- resolveOnce();
261
- }
262
- }, 50);
263
- // Timeout
264
- timeout = setTimeout(() => {
265
- resolveOnce();
266
- }, timeout_ms);
267
- });
268
- };
269
- await waitForOutput();
256
+ const currentLine = session.outputLines[session.lastReadIndex];
257
+ const hasUnread = currentLine !== undefined && session.lastReadOffset < currentLine.length
258
+ || session.outputLines.length - 1 > session.lastReadIndex;
259
+ if (!hasUnread) {
260
+ await terminalManager.waitForOutputProgress(pid, session.outputVersion, timeout_ms);
261
+ }
270
262
  }
271
263
  // Read output with pagination
272
264
  const result = terminalManager.readOutputPaginated(pid, offset, length);
@@ -313,9 +305,8 @@ export async function readProcessOutput(args) {
313
305
  processStateMessage = `\n✅ Process completed with exit code ${result.exitCode}${runtimeStr}`;
314
306
  }
315
307
  else if (session) {
316
- // Analyze state for running processes
317
- const fullOutput = session.outputLines.join('\n');
318
- const processState = analyzeProcessState(fullOutput, pid);
308
+ // Analyze only the newly returned/bounded output; never rescan retained history here.
309
+ const processState = analyzeProcessState(output, pid);
319
310
  if (processState.isWaitingForInput) {
320
311
  processStateMessage = `\n🔄 ${formatProcessStateMessage(processState, pid)}`;
321
312
  }
@@ -332,6 +323,8 @@ export async function readProcessOutput(args) {
332
323
  type: "text",
333
324
  text: `${statusMessage}\n\n${responseText}${processStateMessage}${timingMessage}`
334
325
  }],
326
+ _meta: { process: { ...terminalManager.processIdentity(pid), read_from: result.readFrom,
327
+ read_count: result.readCount, evicted_lines: result.evictedLines, is_complete: result.isComplete } },
335
328
  };
336
329
  }
337
330
  /**
@@ -350,9 +343,12 @@ export async function interactWithProcess(args) {
350
343
  };
351
344
  }
352
345
  const { pid, input, timeout_ms = 8000, wait_for_prompt = true, verbose_timing = false } = parsed.data;
353
- // Get config for output line limit
346
+ // Get config for output line limit and cap a single blocking interaction below client ceilings.
354
347
  const config = await configManager.getConfig();
355
348
  const maxOutputLines = config.fileReadLineLimit ?? 1000;
349
+ const configuredWaitCap = Number(await configManager.getValue('maxProcessWaitMs'));
350
+ const waitCapMs = Number.isFinite(configuredWaitCap) && configuredWaitCap > 0 ? configuredWaitCap : 180000;
351
+ const effectiveTimeoutMs = Math.min(Math.max(0, timeout_ms), waitCapMs);
356
352
  // Check if this is a virtual Node session (node:local)
357
353
  if (virtualNodeSessions.has(pid)) {
358
354
  const session = virtualNodeSessions.get(pid);
@@ -371,6 +367,7 @@ export async function interactWithProcess(args) {
371
367
  let lastOutputTime;
372
368
  const outputEvents = [];
373
369
  let exitReason = 'timeout';
370
+ const releaseOperation = await acquireProcessOperation(pid);
374
371
  try {
375
372
  capture('server_interact_with_process', {
376
373
  pid: pid,
@@ -417,72 +414,55 @@ export async function interactWithProcess(args) {
417
414
  let earlyExit = false;
418
415
  // Quick prompt patterns for immediate detection
419
416
  const quickPromptPatterns = />>>\s*$|>\s*$|\$\s*$|#\s*$/;
420
- const waitForResponse = () => {
421
- return new Promise((resolve) => {
422
- let resolved = false;
423
- let attempts = 0;
424
- const pollIntervalMs = 50; // Poll every 50ms for faster response
425
- const maxAttempts = Math.ceil(timeout_ms / pollIntervalMs);
426
- let interval = null;
427
- let lastOutputLength = 0; // Track output length to detect new output
428
- let resolveOnce = () => {
429
- if (resolved)
430
- return;
431
- resolved = true;
432
- if (interval)
433
- clearInterval(interval);
434
- resolve();
435
- };
436
- // Fast-polling check - check every 50ms for quick responses
437
- interval = setInterval(() => {
438
- if (resolved)
439
- return;
440
- // Use snapshot-based reading to handle REPL prompt line appending
441
- const newOutput = outputSnapshot
442
- ? terminalManager.getOutputSinceSnapshot(pid, outputSnapshot)
443
- : terminalManager.getNewOutput(pid);
444
- if (newOutput && newOutput.length > lastOutputLength) {
445
- const now = Date.now();
446
- if (!firstOutputTime)
447
- firstOutputTime = now;
448
- lastOutputTime = now;
449
- if (verbose_timing) {
450
- outputEvents.push({
451
- timestamp: now,
452
- deltaMs: now - startTime,
453
- source: 'periodic_poll',
454
- length: newOutput.length - lastOutputLength,
455
- snippet: newOutput.slice(lastOutputLength, lastOutputLength + 50).replace(/\n/g, '\\n')
456
- });
457
- }
458
- output = newOutput; // Replace with full output since snapshot
459
- lastOutputLength = newOutput.length;
460
- // Analyze current state
461
- processState = analyzeProcessState(output, pid);
462
- // Exit early if we detect the process is waiting for input
463
- if (processState.isWaitingForInput) {
464
- earlyExit = true;
465
- exitReason = 'early_exit_periodic_check';
466
- if (verbose_timing && outputEvents.length > 0) {
467
- outputEvents[outputEvents.length - 1].matchedPattern = 'periodic_check';
468
- }
469
- resolveOnce();
470
- return;
471
- }
472
- // Also exit if process finished
473
- if (processState.isFinished) {
474
- exitReason = 'process_finished';
475
- resolveOnce();
476
- return;
417
+ const waitForResponse = async () => {
418
+ const deadline = Date.now() + effectiveTimeoutMs;
419
+ let lastOutputLength = 0;
420
+ while (Date.now() < deadline) {
421
+ const active = terminalManager.getSession(pid);
422
+ const version = active?.outputVersion ?? -1;
423
+ const newOutput = outputSnapshot
424
+ ? terminalManager.getOutputSinceSnapshot(pid, outputSnapshot)
425
+ : terminalManager.getNewOutput(pid);
426
+ if (newOutput && newOutput.length > lastOutputLength) {
427
+ const now = Date.now();
428
+ if (!firstOutputTime)
429
+ firstOutputTime = now;
430
+ lastOutputTime = now;
431
+ if (verbose_timing) {
432
+ outputEvents.push({
433
+ timestamp: now,
434
+ deltaMs: now - startTime,
435
+ source: 'output_event',
436
+ length: newOutput.length - lastOutputLength,
437
+ snippet: newOutput.slice(lastOutputLength, lastOutputLength + 50).replace(/\n/g, '\\n')
438
+ });
439
+ }
440
+ output = newOutput;
441
+ lastOutputLength = newOutput.length;
442
+ processState = analyzeProcessState(output, pid);
443
+ if (processState.isWaitingForInput) {
444
+ earlyExit = true;
445
+ exitReason = 'early_exit_periodic_check';
446
+ if (verbose_timing && outputEvents.length > 0) {
447
+ outputEvents[outputEvents.length - 1].matchedPattern = 'output_event';
477
448
  }
449
+ return;
478
450
  }
479
- attempts++;
480
- if (attempts >= maxAttempts) {
481
- exitReason = 'timeout';
482
- resolveOnce();
451
+ if (processState.isFinished) {
452
+ exitReason = 'process_finished';
453
+ return;
483
454
  }
484
- }, pollIntervalMs);
485
- });
455
+ }
456
+ const remaining = deadline - Date.now();
457
+ if (remaining <= 0)
458
+ break;
459
+ if (!active) {
460
+ exitReason = 'process_finished';
461
+ return;
462
+ }
463
+ await terminalManager.waitForOutputProgress(pid, version, remaining);
464
+ }
465
+ exitReason = 'timeout';
486
466
  };
487
467
  await waitForResponse();
488
468
  // Clean and format output
@@ -569,6 +549,9 @@ export async function interactWithProcess(args) {
569
549
  isError: true,
570
550
  };
571
551
  }
552
+ finally {
553
+ releaseOperation();
554
+ }
572
555
  }
573
556
  /**
574
557
  * Force terminate a process
@@ -23,6 +23,8 @@ export declare const ListProcessesArgsSchema: z.ZodObject<{}, "strip", z.ZodType
23
23
  export declare const StartProcessArgsSchema: z.ZodObject<{
24
24
  command: z.ZodString;
25
25
  timeout_ms: z.ZodNumber;
26
+ yield_ms: z.ZodOptional<z.ZodNumber>;
27
+ background: z.ZodOptional<z.ZodBoolean>;
26
28
  working_directory: z.ZodOptional<z.ZodString>;
27
29
  shell: z.ZodOptional<z.ZodString>;
28
30
  verbose_timing: z.ZodOptional<z.ZodBoolean>;
@@ -31,6 +33,8 @@ export declare const StartProcessArgsSchema: z.ZodObject<{
31
33
  command: string;
32
34
  timeout_ms: number;
33
35
  origin?: "ui" | "llm" | undefined;
36
+ yield_ms?: number | undefined;
37
+ background?: boolean | undefined;
34
38
  working_directory?: string | undefined;
35
39
  shell?: string | undefined;
36
40
  verbose_timing?: boolean | undefined;
@@ -38,6 +42,8 @@ export declare const StartProcessArgsSchema: z.ZodObject<{
38
42
  command: string;
39
43
  timeout_ms: number;
40
44
  origin?: "ui" | "llm" | undefined;
45
+ yield_ms?: number | undefined;
46
+ background?: boolean | undefined;
41
47
  working_directory?: string | undefined;
42
48
  shell?: string | undefined;
43
49
  verbose_timing?: boolean | undefined;
@@ -106,10 +112,19 @@ export declare const ReadFileArgsSchema: z.ZodObject<{
106
112
  }>;
107
113
  export declare const ReadMultipleFilesArgsSchema: z.ZodObject<{
108
114
  paths: z.ZodArray<z.ZodString, "many">;
115
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
116
+ length: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
117
+ maxBytes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
109
118
  }, "strip", z.ZodTypeAny, {
119
+ length: number;
120
+ offset: number;
110
121
  paths: string[];
122
+ maxBytes: number;
111
123
  }, {
112
124
  paths: string[];
125
+ length?: number | undefined;
126
+ offset?: number | undefined;
127
+ maxBytes?: number | undefined;
113
128
  }>;
114
129
  export declare const WriteFileArgsSchema: z.ZodObject<{
115
130
  path: z.ZodString;
@@ -287,19 +302,37 @@ export declare const EditBlockArgsSchema: z.ZodEffects<z.ZodObject<{
287
302
  old_string: z.ZodOptional<z.ZodString>;
288
303
  new_string: z.ZodOptional<z.ZodString>;
289
304
  expected_replacements: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
305
+ edits: z.ZodOptional<z.ZodArray<z.ZodObject<{
306
+ old_string: z.ZodString;
307
+ new_string: z.ZodString;
308
+ expected_replacements: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
309
+ }, "strip", z.ZodTypeAny, {
310
+ old_string: string;
311
+ new_string: string;
312
+ expected_replacements: number;
313
+ }, {
314
+ old_string: string;
315
+ new_string: string;
316
+ expected_replacements?: number | undefined;
317
+ }>, "many">>;
290
318
  range: z.ZodOptional<z.ZodString>;
291
319
  content: z.ZodOptional<z.ZodAny>;
292
320
  options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
293
321
  origin: z.ZodOptional<z.ZodEnum<["ui", "llm"]>>;
294
322
  }, "strip", z.ZodTypeAny, {
295
- file_path: string;
296
323
  expected_replacements: number;
324
+ file_path: string;
297
325
  origin?: "ui" | "llm" | undefined;
298
326
  options?: Record<string, any> | undefined;
299
327
  range?: string | undefined;
300
328
  content?: any;
301
329
  old_string?: string | undefined;
302
330
  new_string?: string | undefined;
331
+ edits?: {
332
+ old_string: string;
333
+ new_string: string;
334
+ expected_replacements: number;
335
+ }[] | undefined;
303
336
  }, {
304
337
  file_path: string;
305
338
  origin?: "ui" | "llm" | undefined;
@@ -309,15 +342,25 @@ export declare const EditBlockArgsSchema: z.ZodEffects<z.ZodObject<{
309
342
  old_string?: string | undefined;
310
343
  new_string?: string | undefined;
311
344
  expected_replacements?: number | undefined;
345
+ edits?: {
346
+ old_string: string;
347
+ new_string: string;
348
+ expected_replacements?: number | undefined;
349
+ }[] | undefined;
312
350
  }>, {
313
- file_path: string;
314
351
  expected_replacements: number;
352
+ file_path: string;
315
353
  origin?: "ui" | "llm" | undefined;
316
354
  options?: Record<string, any> | undefined;
317
355
  range?: string | undefined;
318
356
  content?: any;
319
357
  old_string?: string | undefined;
320
358
  new_string?: string | undefined;
359
+ edits?: {
360
+ old_string: string;
361
+ new_string: string;
362
+ expected_replacements: number;
363
+ }[] | undefined;
321
364
  }, {
322
365
  file_path: string;
323
366
  origin?: "ui" | "llm" | undefined;
@@ -327,6 +370,11 @@ export declare const EditBlockArgsSchema: z.ZodEffects<z.ZodObject<{
327
370
  old_string?: string | undefined;
328
371
  new_string?: string | undefined;
329
372
  expected_replacements?: number | undefined;
373
+ edits?: {
374
+ old_string: string;
375
+ new_string: string;
376
+ expected_replacements?: number | undefined;
377
+ }[] | undefined;
330
378
  }>;
331
379
  export declare const InteractWithProcessArgsSchema: z.ZodObject<{
332
380
  pid: z.ZodNumber;
@@ -388,6 +436,50 @@ export declare const StartSearchArgsSchema: z.ZodObject<{
388
436
  earlyTermination?: boolean | undefined;
389
437
  literalSearch?: boolean | undefined;
390
438
  }>;
439
+ export declare const SearchOnceArgsSchema: z.ZodObject<{
440
+ path: z.ZodString;
441
+ pattern: z.ZodString;
442
+ searchType: z.ZodDefault<z.ZodEnum<["files", "content"]>>;
443
+ filePattern: z.ZodOptional<z.ZodString>;
444
+ ignoreCase: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
445
+ maxResults: z.ZodOptional<z.ZodNumber>;
446
+ includeHidden: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
447
+ contextLines: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
448
+ timeout_ms: z.ZodOptional<z.ZodNumber>;
449
+ earlyTermination: z.ZodOptional<z.ZodBoolean>;
450
+ literalSearch: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
451
+ origin: z.ZodOptional<z.ZodEnum<["ui", "llm"]>>;
452
+ } & {
453
+ maxBytes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
454
+ }, "strip", z.ZodTypeAny, {
455
+ path: string;
456
+ maxBytes: number;
457
+ pattern: string;
458
+ searchType: "content" | "files";
459
+ ignoreCase: boolean;
460
+ includeHidden: boolean;
461
+ contextLines: number;
462
+ literalSearch: boolean;
463
+ origin?: "ui" | "llm" | undefined;
464
+ timeout_ms?: number | undefined;
465
+ filePattern?: string | undefined;
466
+ maxResults?: number | undefined;
467
+ earlyTermination?: boolean | undefined;
468
+ }, {
469
+ path: string;
470
+ pattern: string;
471
+ origin?: "ui" | "llm" | undefined;
472
+ timeout_ms?: number | undefined;
473
+ maxBytes?: number | undefined;
474
+ searchType?: "content" | "files" | undefined;
475
+ filePattern?: string | undefined;
476
+ ignoreCase?: boolean | undefined;
477
+ maxResults?: number | undefined;
478
+ includeHidden?: boolean | undefined;
479
+ contextLines?: number | undefined;
480
+ earlyTermination?: boolean | undefined;
481
+ literalSearch?: boolean | undefined;
482
+ }>;
391
483
  export declare const GetMoreSearchResultsArgsSchema: z.ZodObject<{
392
484
  sessionId: z.ZodString;
393
485
  offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
@@ -23,6 +23,8 @@ export const ListProcessesArgsSchema = z.object({});
23
23
  export const StartProcessArgsSchema = z.object({
24
24
  command: z.string(),
25
25
  timeout_ms: z.number(),
26
+ yield_ms: z.number().positive().optional(),
27
+ background: z.boolean().optional(),
26
28
  working_directory: z.string().optional(),
27
29
  shell: z.string().optional(),
28
30
  verbose_timing: z.boolean().optional(),
@@ -60,6 +62,9 @@ export const ReadFileArgsSchema = z.object({
60
62
  });
61
63
  export const ReadMultipleFilesArgsSchema = z.object({
62
64
  paths: z.array(z.string()),
65
+ offset: z.number().optional().default(0),
66
+ length: z.number().optional().default(1000),
67
+ maxBytes: z.number().int().positive().optional().default(256 * 1024),
63
68
  });
64
69
  export const WriteFileArgsSchema = z.object({
65
70
  path: z.string(),
@@ -119,17 +124,21 @@ export const MoveFileArgsSchema = z.object({
119
124
  export const GetFileInfoArgsSchema = z.object({
120
125
  path: z.string(),
121
126
  });
122
- // Edit tools schema - SIMPLIFIED from three modes to two
123
- // Previously supported: text replacement, location-based edits (edits array), and range rewrites
124
- // Now supports only: text replacement and range rewrites
125
- // Removed 'edits' array parameter - location-based surgical edits were complex and unnecessary
126
- // Range rewrites are more powerful and cover all structured file editing needs
127
+ // Edit tool schema. Legacy text replacement and structured range rewrites remain.
128
+ // The additive edits[] mode is exact-only and batches multiple text replacements
129
+ // into one validated read/write cycle.
130
+ const ExactEditSchema = z.object({
131
+ old_string: z.string().min(1),
132
+ new_string: z.string(),
133
+ expected_replacements: z.number().int().positive().optional().default(1),
134
+ });
127
135
  export const EditBlockArgsSchema = z.object({
128
136
  file_path: z.string(),
129
137
  // Text file string replacement
130
138
  old_string: z.string().optional(),
131
139
  new_string: z.string().optional(),
132
140
  expected_replacements: z.number().optional().default(1),
141
+ edits: z.array(ExactEditSchema).min(1).optional(),
133
142
  // Structured file range rewrite (Excel, etc.)
134
143
  range: z.string().optional(),
135
144
  content: z.any().optional(),
@@ -141,8 +150,9 @@ export const EditBlockArgsSchema = z.object({
141
150
  // Helper to check if value is actually provided (not undefined, not empty string)
142
151
  const hasValue = (v) => v !== undefined && v !== '';
143
152
  return (hasValue(data.old_string) && data.new_string !== undefined) ||
153
+ (data.edits !== undefined && data.edits.length > 0) ||
144
154
  (hasValue(data.range) && hasValue(data.content));
145
- }, { message: "Must provide either (old_string + new_string) or (range + content)" });
155
+ }, { message: "Must provide either (old_string + new_string), edits, or (range + content)" });
146
156
  // Send input to process schema
147
157
  export const InteractWithProcessArgsSchema = z.object({
148
158
  pid: z.number(),
@@ -170,6 +180,9 @@ export const StartSearchArgsSchema = z.object({
170
180
  // excluded from tool-call telemetry (see isUiOriginCall in server.ts).
171
181
  origin: z.enum(['ui', 'llm']).optional(),
172
182
  });
183
+ export const SearchOnceArgsSchema = StartSearchArgsSchema.extend({
184
+ maxBytes: z.number().int().positive().optional().default(256 * 1024),
185
+ });
173
186
  export const GetMoreSearchResultsArgsSchema = z.object({
174
187
  sessionId: z.string(),
175
188
  offset: z.number().optional().default(0), // Same as file reading
@@ -213,6 +226,7 @@ export const toolArgSchemas = {
213
226
  list_directory: ListDirectoryArgsSchema,
214
227
  move_file: MoveFileArgsSchema,
215
228
  start_search: StartSearchArgsSchema,
229
+ search_once: SearchOnceArgsSchema,
216
230
  get_more_search_results: GetMoreSearchResultsArgsSchema,
217
231
  stop_search: StopSearchArgsSchema,
218
232
  list_searches: ListSearchesArgsSchema,
package/dist/types.d.ts CHANGED
@@ -12,10 +12,14 @@ export interface ProcessInfo {
12
12
  memory: string;
13
13
  }
14
14
  export interface TerminalSession {
15
+ executionId: string;
15
16
  pid: number;
16
17
  process: ChildProcess;
17
18
  outputLines: string[];
18
19
  lastReadIndex: number;
20
+ lastReadOffset: number;
21
+ outputVersion: number;
22
+ outputWaiters: Set<() => void>;
19
23
  isBlocked: boolean;
20
24
  startTime: Date;
21
25
  bufferedChars: number;
@@ -26,6 +30,10 @@ export interface CommandExecutionResult {
26
30
  pid: number;
27
31
  output: string;
28
32
  isBlocked: boolean;
33
+ deliveredCursor?: {
34
+ lineIndex: number;
35
+ lineOffset: number;
36
+ };
29
37
  timingInfo?: TimingInfo;
30
38
  }
31
39
  export interface TimingInfo {
@@ -0,0 +1,6 @@
1
+ export interface BudgetedText {
2
+ text: string;
3
+ bytes: number;
4
+ truncated: boolean;
5
+ }
6
+ export declare function takeUtf8Budget(text: string, maxBytes: number): BudgetedText;
@@ -0,0 +1,15 @@
1
+ import { StringDecoder } from 'node:string_decoder';
2
+ export function takeUtf8Budget(text, maxBytes) {
3
+ const totalBytes = Buffer.byteLength(text, 'utf8');
4
+ if (totalBytes <= maxBytes) {
5
+ return { text, bytes: totalBytes, truncated: false };
6
+ }
7
+ const decoder = new StringDecoder('utf8');
8
+ const chunk = Buffer.from(text, 'utf8').subarray(0, Math.max(0, maxBytes));
9
+ const bounded = decoder.write(chunk);
10
+ return {
11
+ text: bounded,
12
+ bytes: Buffer.byteLength(bounded, 'utf8'),
13
+ truncated: true,
14
+ };
15
+ }
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.0.9";
1
+ export declare const VERSION = "1.0.12";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = '1.0.9';
1
+ export const VERSION = '1.0.12';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hcu-lab.me/mcp-device",
3
- "version": "1.0.9",
3
+ "version": "1.0.12",
4
4
  "description": "MCP Device runtime.",
5
5
  "license": "MIT",
6
6
  "author": "Hirohimeow",
@@ -12,14 +12,22 @@
12
12
  "bugs": "https://github.com/Hiroshimeow/agent-mcp-device/issues",
13
13
  "type": "module",
14
14
  "engines": {
15
- "node": ">=18.0.0"
15
+ "node": ">=22.13.0"
16
16
  },
17
17
  "bin": {
18
18
  "mcp-device": "dist/mcp-device.js",
19
19
  "md": "dist/mcp-device.js"
20
20
  },
21
21
  "files": [
22
- "dist"
22
+ "dist",
23
+ "!dist/plugins/palace",
24
+ "config/revoked-approvals.json",
25
+ "skills/mcp-device-context",
26
+ "SECURITY.md",
27
+ "PRIVACY.md",
28
+ "control-plane/scripts",
29
+ "control-plane/config",
30
+ "control-plane/contracts"
23
31
  ],
24
32
  "scripts": {
25
33
  "device:install": "cd src/device && npm install",
@@ -38,6 +46,8 @@
38
46
  "start": "node dist/mcp-device.js",
39
47
  "start:debug": "node --inspect-brk=9229 dist/mcp-device.js",
40
48
  "prepack": "node scripts/verify-production-trust.cjs",
49
+ "build:palace": "npm run build && node scripts/v12/build-palace-package.mjs --stable",
50
+ "pack:palace": "npm run build:palace && npm pack .tmp/v12-palace-standalone/package --pack-destination .tmp/v12-palace-standalone",
41
51
  "prepare": "npm run build",
42
52
  "clean": "shx rm -rf dist",
43
53
  "test": "npm run build && node test/run-all-tests.js",
@@ -51,7 +61,10 @@
51
61
  "logs:clear": "npm run build && node scripts/clear-fuzzy-logs.js",
52
62
  "logs:export": "npm run build && node scripts/export-fuzzy-logs.js",
53
63
  "count-tokens": "npm run build && node scripts/count-tokens.js",
54
- "count-tokens:json": "npm run build && node scripts/count-tokens.js --json"
64
+ "count-tokens:json": "npm run build && node scripts/count-tokens.js --json",
65
+ "test:v12": "node scripts/v12/run-platform-tests.mjs",
66
+ "test:v12:server": "node scripts/v12/run-platform-tests.mjs --server",
67
+ "test:parity": "node scripts/v12/run-device-parity.mjs"
55
68
  },
56
69
  "keywords": [
57
70
  "mcp",
@@ -104,9 +117,19 @@
104
117
  "tiptap-markdown": "^0.9.0",
105
118
  "unified": "^11.0.5",
106
119
  "unpdf": "^1.4.0",
107
- "ws": "^8.18.3",
120
+ "ws": "^8.21.3",
108
121
  "zod": "^3.24.1",
109
- "zod-to-json-schema": "^3.23.5"
122
+ "zod-to-json-schema": "^3.23.5",
123
+ "@modelcontextprotocol/client": "2.0.0",
124
+ "@modelcontextprotocol/core": "2.0.0",
125
+ "@modelcontextprotocol/express": "2.0.0",
126
+ "@modelcontextprotocol/node": "2.0.0",
127
+ "@modelcontextprotocol/server": "2.0.0",
128
+ "cors": "^2.8.6",
129
+ "express": "5.1.0",
130
+ "express-rate-limit": "^8.7.0",
131
+ "smol-toml": "^1.4.2",
132
+ "yaml": "^2.9.1"
110
133
  },
111
134
  "optionalDependencies": {
112
135
  "caffeinate": "^1.0.1"