@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
@@ -0,0 +1,66 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import path from 'node:path';
3
+ function samePath(left, right) {
4
+ const normalize = (value) => {
5
+ const resolved = path.resolve(value);
6
+ return process.platform === 'win32' ? resolved.toLowerCase() : resolved;
7
+ };
8
+ return normalize(left) === normalize(right);
9
+ }
10
+ /**
11
+ * The transport-neutral execution owner shared by remote Device and server.
12
+ *
13
+ * No account enrollment, socket, self-MCP child, plugin, or Palace is created
14
+ * here. Authorization belongs to the caller's broker; file/process semantics
15
+ * remain owned by the existing Device handlers and GatewayToolAdapter.
16
+ *
17
+ * Existing native managers are process-scoped. A server must configure its
18
+ * isolated state root before importing them; silently changing a global root
19
+ * after import could write to the user's normal Device state.
20
+ */
21
+ export async function createDeviceCore(options) {
22
+ if (!options.deviceId || typeof options.deviceId !== 'string' || !options.deviceId.trim()) {
23
+ throw Object.assign(new Error('Device Core requires a device identity'), { code: 'DEVICE_ID_REQUIRED' });
24
+ }
25
+ // This module intentionally has no eager imports of existing Device modules.
26
+ const { CONFIG_DIR } = await import('../config.js');
27
+ const stateRoot = path.resolve(options.stateRoot ?? CONFIG_DIR);
28
+ if (!samePath(stateRoot, CONFIG_DIR)) {
29
+ throw Object.assign(new Error('Device Core stateRoot must match MCP_DEVICE_CONFIG_DIR set before importing Device modules'), { code: 'CONFIG_ROOT_MISMATCH' });
30
+ }
31
+ const [{ GatewayToolAdapter, gatewayCapabilities }, { dispatchToolCall }] = await Promise.all([
32
+ import('./gateway-tool-adapter.js'),
33
+ import('../tool-dispatcher.js')
34
+ ]);
35
+ const adapter = new GatewayToolAdapter(undefined, {
36
+ allowedRoots: options.allowedRoots,
37
+ context: { deviceId: options.deviceId, stateRoot }
38
+ });
39
+ const runtimeInstanceId = `direct-in-process:${randomUUID()}`;
40
+ let closed = false;
41
+ const assertOpen = () => {
42
+ if (closed)
43
+ throw Object.assign(new Error('Device Core is closed'), { code: 'DEVICE_NOT_READY' });
44
+ };
45
+ return {
46
+ deviceId: options.deviceId,
47
+ stateRoot,
48
+ runtimeInstanceId,
49
+ get capabilities() {
50
+ return closed ? [] : gatewayCapabilities();
51
+ },
52
+ async invoke(tool, args = {}) {
53
+ assertOpen();
54
+ return adapter.call(tool, args);
55
+ },
56
+ async invokeNative(tool, args = {}) {
57
+ assertOpen();
58
+ return dispatchToolCall(tool, args, { isRemote: true });
59
+ },
60
+ async close() {
61
+ // The core owns no second runtime or socket. Its host owns process
62
+ // shutdown; existing native process session retention is unchanged.
63
+ closed = true;
64
+ }
65
+ };
66
+ }
@@ -2,15 +2,20 @@
2
2
  import { type RuntimeOwnerStatus } from './runtime-owner.js';
3
3
  export declare class MCPDevice {
4
4
  private isShuttingDown;
5
+ private shutdownRequest?;
6
+ private core?;
7
+ private unsubscribeCapabilities?;
5
8
  private executionEngine;
6
9
  private gatewayChannel?;
7
10
  private gatewayProxyAgent?;
8
11
  private runtimeOwner?;
12
+ private stateLeases;
9
13
  constructor();
10
14
  private setupShutdownHandlers;
11
15
  start(options?: {
12
16
  confirmTakeover?: (existing: RuntimeOwnerStatus) => Promise<boolean> | boolean;
13
17
  }): Promise<void>;
14
18
  shutdown(): Promise<void>;
19
+ private performShutdown;
15
20
  }
16
21
  export declare function isModuleEntrypoint(moduleUrl: string, argvEntry?: string, pmExecPath?: string): boolean;
@@ -9,8 +9,10 @@ import { GatewayDeviceIdentity } from './gateway-identity.js';
9
9
  import { pairGatewayDevice } from './gateway-pairing.js';
10
10
  import { bootstrapOfficialGatewayTrust } from './official-trust.js';
11
11
  import { GatewayDeviceStatusStore } from './device-status.js';
12
- import { GatewayToolAdapter } from './gateway-tool-adapter.js';
12
+ import { createPlatformDeviceCore as createDeviceCore } from '../platform/device-runtime.js';
13
+ import { resolveDevicePluginPolicy } from '../platform/plugin-policy.js';
13
14
  import { RuntimeOwner, acquireRuntimeOwner } from './runtime-owner.js';
15
+ import { acquireServerLease } from '../platform/runtime-lease.js';
14
16
  import { assertDeviceStartupAllowedDuringUpdate, launchDeviceUpdateHelper, prepareDevicePackageUpdate, reconcileDeviceUpdateAfterStart, retireDeviceUpdateState, signalDeviceUpdateHandoff } from './self-update.js';
15
17
  import { captureRemote } from '../utils/capture.js';
16
18
  import { VERSION } from '../version.js';
@@ -18,43 +20,45 @@ export class MCPDevice {
18
20
  constructor() {
19
21
  this.isShuttingDown = false;
20
22
  this.executionEngine = new LocalExecutionEngine();
23
+ this.stateLeases = [];
21
24
  this.setupShutdownHandlers();
22
25
  }
23
26
  setupShutdownHandlers() {
24
27
  const handleShutdown = async (signal) => {
25
- if (this.isShuttingDown) {
26
- console.log(`\n${signal} received, but already shutting down...`);
27
- process.exit(1);
28
- return;
29
- }
30
- console.log(`\n${signal} received, initiating graceful shutdown...`);
31
- const forceExit = setTimeout(() => {
32
- console.error('\n⚠️ Graceful shutdown timed out, forcing exit...');
33
- process.exit(1);
28
+ console.log(this.isShuttingDown
29
+ ? `\n${signal} received, waiting for owned resources to stop...`
30
+ : `\n${signal} received, initiating graceful shutdown...`);
31
+ const shutdownWarning = setTimeout(() => {
32
+ console.error('\n⚠️ Graceful shutdown is still waiting for owned resources; runtime ownership is retained.');
33
+ process.exitCode = 1;
34
34
  }, 5000);
35
35
  try {
36
36
  await this.shutdown();
37
- clearTimeout(forceExit);
38
37
  process.exit(0);
39
38
  }
40
39
  catch (error) {
41
40
  console.error('Error during shutdown:', error);
42
- await captureRemote('remote_device_shutdown_handler_error', { error });
43
- process.exit(1);
41
+ await captureRemote('remote_device_shutdown_handler_error', { error }).catch(() => { });
42
+ // Exiting here would make the PID lease stale while a plugin
43
+ // may still own its files. Keep the owner available for retry.
44
+ process.exitCode = 1;
45
+ }
46
+ finally {
47
+ clearTimeout(shutdownWarning);
44
48
  }
45
49
  };
46
50
  process.on('SIGINT', () => {
47
51
  handleShutdown('SIGINT').catch((error) => {
48
52
  console.error('Fatal error during shutdown:', error);
49
53
  captureRemote('remote_device_shutdown_handler_error', { error, signal: 'SIGINT' }).catch(() => { });
50
- process.exit(1);
54
+ process.exitCode = 1;
51
55
  });
52
56
  });
53
57
  process.on('SIGTERM', () => {
54
58
  handleShutdown('SIGTERM').catch((error) => {
55
59
  console.error('Fatal error during shutdown:', error);
56
60
  captureRemote('remote_device_shutdown_handler_error', { error, signal: 'SIGTERM' }).catch(() => { });
57
- process.exit(1);
61
+ process.exitCode = 1;
58
62
  });
59
63
  });
60
64
  }
@@ -73,9 +77,21 @@ export class MCPDevice {
73
77
  : 'foreground';
74
78
  this.runtimeOwner = new RuntimeOwner({ mode, onStop: () => this.shutdown() });
75
79
  await acquireRuntimeOwner(this.runtimeOwner, { confirmTakeover: options.confirmTakeover });
80
+ const { CONFIG_DIR } = await import('../config.js');
81
+ // Child shell/CLI processes must resolve the same Device-only runtime.
82
+ process.env.MCP_DEVICE_CONFIG_DIR = CONFIG_DIR;
83
+ const stateRoots = new Map();
84
+ for (const root of [this.runtimeOwner.paths.root, CONFIG_DIR]) {
85
+ const absolute = path.resolve(root);
86
+ stateRoots.set(process.platform === 'win32' ? absolute.toLowerCase() : absolute, absolute);
87
+ }
88
+ for (const [, root] of [...stateRoots].sort(([a], [b]) => a.localeCompare(b))) {
89
+ this.stateLeases.push(await acquireServerLease(root, { allowDeviceOwnerPid: process.pid }));
90
+ }
76
91
  await this.runtimeOwner.bootstrap();
77
92
  await bootstrapOfficialGatewayTrust(new GatewayDeviceConfigStore());
78
- await this.executionEngine.initialize();
93
+ // Remote mode uses direct in-process dispatch (tool-dispatcher.ts).
94
+ // Do not eagerly initialize LocalExecutionEngine, avoiding child dist/index.js process spawn.
79
95
  const gatewayStatus = new GatewayDeviceStatusStore();
80
96
  const storedGatewayStatus = await gatewayStatus.load();
81
97
  const gatewayConfig = await new GatewayDeviceConfigStore().load();
@@ -88,10 +104,16 @@ export class MCPDevice {
88
104
  const proxy = createGatewayProxyAgent(gatewayConfig);
89
105
  this.gatewayProxyAgent = proxy.agent;
90
106
  process.env.MCP_DEVICE_REMOTE = 'true';
91
- console.log(`⏳ Connecting directly to MCP Gateway ${gatewayUrl}`);
107
+ console.log(`⏳ Connecting directly to MCP Device server ${gatewayUrl}`);
92
108
  const identity = new GatewayDeviceIdentity();
93
109
  const identityRecord = await identity.loadOrCreate();
94
110
  this.runtimeOwner.setDeviceId(identityRecord.deviceId);
111
+ // Local providers start before pairing; local indexing needs no account session.
112
+ this.core = await createDeviceCore({
113
+ deviceId: identityRecord.deviceId,
114
+ allowedRoots: gatewayConfig.allowedRoots,
115
+ pluginPolicy: resolveDevicePluginPolicy(process.argv)
116
+ });
95
117
  const enrollmentCredential = String(process.env.MCP_GATEWAY_ENROLLMENT_TOKEN || process.env.MCP_DEVICE_ENROLLMENT_TOKEN || '').trim() || undefined;
96
118
  let pairingGrant;
97
119
  if (!identityRecord.enrolled && !enrollmentCredential) {
@@ -115,9 +137,15 @@ export class MCPDevice {
115
137
  proxyAgent: proxy.agent,
116
138
  securityProtocolFloor: gatewayConfig.securityProtocolFloor,
117
139
  appCaPem: gatewayConfig.appCaPem || undefined,
118
- adapter: new GatewayToolAdapter(this.executionEngine, { allowedRoots: gatewayConfig.allowedRoots }),
119
- runtimeState: () => this.executionEngine.getRuntimeState(),
120
- agentVersion: process.env.npm_package_version,
140
+ adapter: { call: (tool, args) => this.core.invoke(tool, args) },
141
+ capabilities: () => this.core?.capabilities ?? [],
142
+ // In remote direct-dispatch mode, the daemon is ready once the gateway channel & dispatch are established.
143
+ runtimeState: () => ({
144
+ runtime_ready: true,
145
+ runtime_reason: null,
146
+ execution_runtime_generation: this.core.runtimeInstanceId
147
+ }),
148
+ agentVersion: VERSION || process.env.npm_package_version || '1.0.12',
121
149
  onUpdateRequest: async (targetVersion, { requestId }) => {
122
150
  const record = await identity.loadOrCreate();
123
151
  const prepared = await prepareDevicePackageUpdate({
@@ -169,6 +197,9 @@ export class MCPDevice {
169
197
  });
170
198
  }
171
199
  });
200
+ this.unsubscribeCapabilities = this.core.onCapabilitiesChanged?.(() => {
201
+ this.gatewayChannel?.updateCapabilities();
202
+ });
172
203
  await this.gatewayChannel.start();
173
204
  const updateReconciliation = await reconcileDeviceUpdateAfterStart(VERSION);
174
205
  if (updateReconciliation.action === 'success') {
@@ -209,32 +240,58 @@ export class MCPDevice {
209
240
  process.exit(1);
210
241
  }
211
242
  }
212
- async shutdown() {
213
- if (this.isShuttingDown)
214
- return;
243
+ shutdown() {
244
+ if (this.shutdownRequest)
245
+ return this.shutdownRequest;
215
246
  this.isShuttingDown = true;
247
+ const request = this.performShutdown();
248
+ this.shutdownRequest = request;
249
+ // Concurrent callers share the same outcome. A rejected cleanup keeps
250
+ // ownership and resources available for a real retry; only success is cached.
251
+ void request.catch(() => {
252
+ if (this.shutdownRequest === request)
253
+ this.shutdownRequest = undefined;
254
+ });
255
+ return request;
256
+ }
257
+ async performShutdown() {
216
258
  console.log('\n🛑 Shutting down device...');
217
259
  try {
218
- if (this.gatewayChannel) {
219
- console.log(' → Closing direct Gateway channel...');
220
- await this.gatewayChannel.stop();
221
- this.gatewayChannel = undefined;
222
- }
223
- if (this.gatewayProxyAgent) {
224
- this.gatewayProxyAgent.destroy();
225
- this.gatewayProxyAgent = undefined;
260
+ try {
261
+ this.unsubscribeCapabilities?.();
262
+ this.unsubscribeCapabilities = undefined;
263
+ if (this.gatewayChannel) {
264
+ console.log(' → Closing direct Gateway channel...');
265
+ await this.gatewayChannel.stop();
266
+ this.gatewayChannel = undefined;
267
+ }
268
+ if (this.gatewayProxyAgent) {
269
+ this.gatewayProxyAgent.destroy();
270
+ this.gatewayProxyAgent = undefined;
271
+ }
272
+ await new GatewayDeviceStatusStore().markOffline().catch(() => { });
226
273
  }
227
- await new GatewayDeviceStatusStore().markOffline().catch(() => { });
228
- await this.executionEngine.shutdown();
229
- if (this.runtimeOwner) {
230
- await this.runtimeOwner.release().catch(() => { });
231
- this.runtimeOwner = undefined;
274
+ finally {
275
+ // Release shared state only after the same Core and its plugins
276
+ // have stopped, including failures partway through startup.
277
+ await this.core?.close();
278
+ this.core = undefined;
279
+ await this.executionEngine.shutdown();
280
+ while (this.stateLeases.length) {
281
+ await this.stateLeases[this.stateLeases.length - 1]();
282
+ this.stateLeases.pop();
283
+ }
284
+ if (this.runtimeOwner) {
285
+ await this.runtimeOwner.release();
286
+ this.runtimeOwner = undefined;
287
+ }
232
288
  }
233
289
  console.log('✓ Device shutdown complete');
234
290
  }
235
291
  catch (error) {
236
292
  console.error('Shutdown error:', error.message);
237
- await captureRemote('remote_device_shutdown_error', { error });
293
+ await captureRemote('remote_device_shutdown_error', { error }).catch(() => { });
294
+ throw error;
238
295
  }
239
296
  }
240
297
  }
@@ -13,7 +13,9 @@ export interface GatewayChannelOptions {
13
13
  proxyAgent?: Agent;
14
14
  securityProtocolFloor?: number;
15
15
  appCaPem?: string;
16
- adapter: GatewayToolAdapter;
16
+ adapter: Pick<GatewayToolAdapter, 'call'>;
17
+ /** Healthy current capabilities, including optional extensions. */
18
+ capabilities?: () => string[];
17
19
  runtimeState?: () => {
18
20
  runtime_ready: boolean;
19
21
  runtime_reason: string | null;
@@ -44,7 +46,12 @@ export declare class GatewayDeviceChannel {
44
46
  private secureSocket?;
45
47
  private authMode;
46
48
  private updateInFlight?;
49
+ private lastAdvertisedCapabilities?;
47
50
  constructor(options: GatewayChannelOptions);
51
+ private currentCapabilities;
52
+ private capabilityPayload;
53
+ /** Uses the existing authenticated v11 capability_sync frame. No reconnect. */
54
+ updateCapabilities(): boolean;
48
55
  private runtimePayload;
49
56
  start(): Promise<void>;
50
57
  private startV2Transport;
@@ -2,7 +2,7 @@ import os from 'os';
2
2
  import WebSocket from 'ws';
3
3
  import { GatewayDeviceIdentity } from './gateway-identity.js';
4
4
  import { DEVICE_INNER_TLS_SUBPROTOCOL, createClientInnerTls, createJsonFrameParser, encodeJsonFrame, exportDeviceAuthKeyingMaterial } from './gateway-secure-transport.js';
5
- import { GATEWAY_CAPABILITIES } from './gateway-tool-adapter.js';
5
+ import { gatewayCapabilities } from './gateway-tool-adapter.js';
6
6
  import { gatewaySocketUrl } from './gateway-url-policy.js';
7
7
  import { VERSION } from '../version.js';
8
8
  const PROTOCOL_VERSION = 1;
@@ -19,6 +19,51 @@ export class GatewayDeviceChannel {
19
19
  this.authMode = 'reconnect';
20
20
  this.identity = options.identity || new GatewayDeviceIdentity();
21
21
  }
22
+ currentCapabilities() {
23
+ try {
24
+ const supplied = this.options.capabilities?.() ?? gatewayCapabilities();
25
+ return [...new Set(supplied.filter(value => typeof value === 'string' && value.length > 0 && value.length <= 128))];
26
+ }
27
+ catch {
28
+ // Extension metadata must not take ordinary Device execution offline.
29
+ return gatewayCapabilities();
30
+ }
31
+ }
32
+ capabilityPayload() {
33
+ const capabilities = this.currentCapabilities();
34
+ this.lastAdvertisedCapabilities = JSON.stringify(capabilities);
35
+ return { capabilities, context_version: capabilities.includes('local_status') ? 1 : undefined };
36
+ }
37
+ /** Uses the existing authenticated v11 capability_sync frame. No reconnect. */
38
+ updateCapabilities() {
39
+ if (!this.authenticatedDeviceId || this.connectionEpoch === undefined ||
40
+ !this.socket || this.socket.readyState !== WebSocket.OPEN)
41
+ return false;
42
+ const capabilities = this.currentCapabilities();
43
+ const serialized = JSON.stringify(capabilities);
44
+ if (serialized === this.lastAdvertisedCapabilities)
45
+ return false;
46
+ try {
47
+ this.send({
48
+ protocol_version: this.protocolVersion,
49
+ type: 'capability_sync',
50
+ device_id: this.authenticatedDeviceId,
51
+ connection_epoch: this.connectionEpoch,
52
+ timestamp: Date.now(),
53
+ payload: {
54
+ capabilities,
55
+ agent_version: this.options.agentVersion || 'mcp-device-1',
56
+ package_version: VERSION
57
+ }
58
+ });
59
+ this.lastAdvertisedCapabilities = serialized;
60
+ return true;
61
+ }
62
+ catch {
63
+ // A reconnect will advertise the current getter in its normal hello.
64
+ return false;
65
+ }
66
+ }
22
67
  runtimePayload() {
23
68
  if (!this.options.runtimeState)
24
69
  return {};
@@ -35,6 +80,7 @@ export class GatewayDeviceChannel {
35
80
  async start() {
36
81
  this.authenticatedDeviceId = undefined;
37
82
  this.connectionEpoch = undefined;
83
+ this.lastAdvertisedCapabilities = undefined;
38
84
  this.messageQueue = Promise.resolve();
39
85
  const record = await this.identity.loadOrCreate();
40
86
  this.protocolVersion = Number(this.options.securityProtocolFloor || 1) >= 2 ? PROTOCOL_VERSION_V2 : PROTOCOL_VERSION;
@@ -162,7 +208,7 @@ export class GatewayDeviceChannel {
162
208
  platform: process.platform,
163
209
  arch: process.arch,
164
210
  path_style: process.platform === 'win32' ? 'windows' : 'posix',
165
- capabilities: [...GATEWAY_CAPABILITIES],
211
+ ...this.capabilityPayload(),
166
212
  ...this.runtimePayload(),
167
213
  ...(enrolling || pairing ? { public_key_pem: record.publicKeyPem } : {})
168
214
  }
@@ -186,7 +232,7 @@ export class GatewayDeviceChannel {
186
232
  platform: process.platform,
187
233
  arch: process.arch,
188
234
  path_style: process.platform === 'win32' ? 'windows' : 'posix',
189
- capabilities: [...GATEWAY_CAPABILITIES],
235
+ ...this.capabilityPayload(),
190
236
  ...this.runtimePayload(),
191
237
  ...(pairing || enrolling ? { public_key_pem: record.publicKeyPem, enrollment_grant: grant } : {})
192
238
  }
@@ -247,6 +293,7 @@ export class GatewayDeviceChannel {
247
293
  this.options.pairingGrant = undefined;
248
294
  if (this.options.onStatus && message.payload)
249
295
  await this.options.onStatus(message.payload);
296
+ this.updateCapabilities();
250
297
  this.startHeartbeat();
251
298
  this.reconnectAttempt = 0;
252
299
  this.readyResolve?.();
@@ -456,6 +503,7 @@ export class GatewayDeviceChannel {
456
503
  startHeartbeat() {
457
504
  this.stopHeartbeat();
458
505
  this.heartbeat = setInterval(async () => {
506
+ this.updateCapabilities();
459
507
  const record = await this.identity.loadOrCreate();
460
508
  this.send({
461
509
  protocol_version: this.protocolVersion,
@@ -1,17 +1,25 @@
1
- import { LocalExecutionEngine } from './execution-engine.js';
1
+ import { type CanonicalObserver } from '../context/capture.js';
2
+ import { type DeviceContextOptions } from '../context/device-adapter.js';
2
3
  export declare const GATEWAY_CAPABILITIES: readonly ["read_text_file", "write_file", "edit_file", "shell_execute", "start_process", "read_process_output", "interact_with_process", "terminate_process", "image_preview", "project_inspect"];
4
+ export declare function gatewayCapabilities(): string[];
3
5
  export interface GatewayToolAdapterOptions {
6
+ context?: DeviceContextOptions;
7
+ /** Trusted runtime supplies an owner/repository-bound observer, never tool arguments. */
8
+ observer?: CanonicalObserver;
4
9
  allowedRoots?: string[];
5
10
  pathValidator?: (requestedPath: string) => Promise<string>;
6
11
  }
7
12
  export declare class GatewayToolAdapter {
8
- private engine;
9
13
  private allowedRoots;
10
14
  private pathValidator;
11
15
  private canonicalRoots?;
12
- constructor(engine: LocalExecutionEngine, options?: GatewayToolAdapterOptions);
16
+ private readonly observer?;
17
+ private readonly context?;
18
+ constructor(_unusedEngine?: any, options?: GatewayToolAdapterOptions);
19
+ private parseSessionPid;
13
20
  private guardPath;
14
21
  private imagePreview;
15
22
  call(tool: string, args?: any): Promise<any>;
23
+ private executeCall;
16
24
  private editFile;
17
25
  }