@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
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import './bootstrap.js';
@@ -1,7 +1,29 @@
1
1
  #!/usr/bin/env node
2
- // MCP Device publishes only the authenticated device runtime surface.
3
- if (process.argv[2] !== 'remote')
4
- process.argv.splice(2, 0, 'remote');
5
- const { runRemote } = await import('./npm-scripts/remote.js');
6
- await runRemote();
7
- export {};
2
+ import './bootstrap.js';
3
+ // Context and P1 commands remain isolated local operations.
4
+ if (process.argv[2] === 'context') {
5
+ const { runContextCli } = await import('./context/cli.js');
6
+ const result = await runContextCli(process.argv.slice(3));
7
+ process.stdout.write(result.stdout);
8
+ process.stderr.write(result.stderr);
9
+ process.exitCode = result.exitCode;
10
+ }
11
+ else if (process.argv[2] === 'logs') {
12
+ const { runLogPalaceCli } = await import('./log-palace/cli.js');
13
+ const result = runLogPalaceCli(process.argv.slice(3));
14
+ process.stdout.write(result.stdout);
15
+ process.stderr.write(result.stderr);
16
+ process.exitCode = result.exitCode;
17
+ }
18
+ else if (['server', 'plugins', 'knowledge', 'admin', 'state', 'help', '--help', '-h'].includes(process.argv[2])) {
19
+ const { runPlatformCli } = await import('./platform/cli.js');
20
+ await runPlatformCli(['--help', '-h'].includes(process.argv[2]) ? 'help' : process.argv[2], process.argv.slice(3));
21
+ }
22
+ else {
23
+ if (process.argv[2] === 'device')
24
+ process.argv[2] = 'remote';
25
+ else if (process.argv[2] !== 'remote')
26
+ process.argv.splice(2, 0, 'remote');
27
+ const { runRemote } = await import('./npm-scripts/remote.js');
28
+ await runRemote();
29
+ }
@@ -21,6 +21,7 @@ function commandName() {
21
21
  function printRemoteUsage() {
22
22
  console.log([
23
23
  'Usage: mcp-device [command]',
24
+ 'Core-only distribution; optional plugins require explicit install/enable.',
24
25
  '',
25
26
  'Commands: start, login, logout, status, install, stop, uninstall'
26
27
  ].join('\n'));
@@ -0,0 +1,16 @@
1
+ /** Bounded platform observations. A receipt describes execution, never validation of a claim. */
2
+ export declare class ActivityJournal {
3
+ private deviceId;
4
+ private runtimeId;
5
+ private maxBytes;
6
+ private tail;
7
+ private pending;
8
+ private closed;
9
+ private filename;
10
+ private segmentTime;
11
+ private readonly directory;
12
+ constructor(stateRoot: string, deviceId: string, runtimeId: string, maxBytes?: number);
13
+ private nextSegment;
14
+ record(tool: string, args: unknown, result?: any, error?: unknown): void;
15
+ close(): Promise<void>;
16
+ }
@@ -0,0 +1,68 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ /** Bounded platform observations. A receipt describes execution, never validation of a claim. */
5
+ export class ActivityJournal {
6
+ constructor(stateRoot, deviceId, runtimeId, maxBytes = 2 * 1024 * 1024) {
7
+ this.deviceId = deviceId;
8
+ this.runtimeId = runtimeId;
9
+ this.maxBytes = maxBytes;
10
+ this.tail = Promise.resolve();
11
+ this.pending = 0;
12
+ this.closed = false;
13
+ this.segmentTime = 0;
14
+ this.directory = path.join(stateRoot, 'logs');
15
+ this.filename = this.nextSegment();
16
+ }
17
+ nextSegment() {
18
+ this.segmentTime = Math.max(Date.now(), this.segmentTime + 1);
19
+ return path.join(this.directory, `device-activity-${this.segmentTime}-${randomUUID()}.jsonl`);
20
+ }
21
+ record(tool, args, result, error) {
22
+ if (this.closed || this.pending >= 256 || tool.startsWith('knowledge.'))
23
+ return;
24
+ const input = args && typeof args === 'object' ? args : {};
25
+ const paths = {};
26
+ for (const name of ['path', 'file_path', 'working_directory', 'cwd'])
27
+ if (typeof input[name] === 'string')
28
+ paths[name] = input[name].slice(0, 1024);
29
+ let value = result?.structuredContent ?? result;
30
+ const text = value?.content?.find?.((part) => part.type === 'text')?.text;
31
+ if (typeof text === 'string' && text.length < 64 * 1024) {
32
+ try {
33
+ value = JSON.parse(text);
34
+ }
35
+ catch { /* no raw output is persisted */ }
36
+ }
37
+ const exitCode = typeof value?.exitCode === 'number' ? value.exitCode : typeof value?.exit_code === 'number' ? value.exit_code : null;
38
+ const failed = Boolean(error || result?.isError || value?.isError || value?.success === false || value?.timedOut || (exitCode !== null && exitCode !== 0));
39
+ const running = !failed && exitCode === null && Boolean(value?.sessionId || value?.session_id);
40
+ const status = failed ? 'failed' : running ? 'running' : 'completed';
41
+ const receipt = {
42
+ version: 1, event_id: randomUUID(), timestamp: new Date().toISOString(), device_id: this.deviceId,
43
+ session_id: this.runtimeId, toolName: tool.slice(0, 96), arguments: paths,
44
+ output: `Device tool ${tool.slice(0, 96)} ${status}${exitCode === null ? '' : ' with exit code ' + exitCode}.`,
45
+ status, exit_code: exitCode,
46
+ ...(error ? { error: { code: String(error.code ?? 'TOOL_CALL_FAILED').slice(0, 96) } } : {})
47
+ };
48
+ const frame = JSON.stringify(receipt) + '\n';
49
+ this.pending++;
50
+ this.tail = this.tail.then(async () => {
51
+ await fs.mkdir(this.directory, { recursive: true });
52
+ let size = await fs.stat(this.filename).then(stat => stat.size, () => 0);
53
+ if (size > 0 && size + Buffer.byteLength(frame) > this.maxBytes) {
54
+ this.filename = this.nextSegment();
55
+ size = 0;
56
+ }
57
+ await fs.appendFile(this.filename, frame, { mode: 0o600 });
58
+ if (size === 0) {
59
+ // Stable paths keep exact-source references valid until intentional
60
+ // retention pruning. Every segment remains discoverable as JSONL.
61
+ const segments = (await fs.readdir(this.directory)).filter(name => /^device-activity-\d+-[0-9a-f-]+\.jsonl$/.test(name) && name !== path.basename(this.filename)).sort().reverse();
62
+ for (const name of segments.slice(3))
63
+ await fs.rm(path.join(this.directory, name), { force: true });
64
+ }
65
+ }).catch(() => { }).finally(() => { this.pending--; });
66
+ }
67
+ async close() { this.closed = true; await this.tail; }
68
+ }
@@ -0,0 +1 @@
1
+ export declare function runPlatformCli(command: string, argv: string[]): Promise<void>;
@@ -0,0 +1,300 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ import { fileURLToPath, pathToFileURL } from 'node:url';
5
+ import { spawn } from 'node:child_process';
6
+ import { CapabilityError } from './plugin-contract.js';
7
+ import { resolveRuntimeRoot } from './runtime-root.js';
8
+ import { resolveDevicePluginPolicy } from './plugin-policy.js';
9
+ const packageRoot = fileURLToPath(new URL('../../', import.meta.url));
10
+ const usage = `MCP Device 1.0.12
11
+ mcp-device start Core-only Device runtime
12
+ mcp-device device [start|status|...] Alias for the Device-only commands
13
+ mcp-device server [--runtime-dir DIR] [--host HOST] [--port PORT] [--loopback-port PORT] [--public-url URL] [--skill-root DIR] [--allow-http-lan] [--legacy-knowledge-mcp] [--plugin-policy bundled|core-first]
14
+ mcp-device admin [--runtime-dir DIR] account|invite ...
15
+ mcp-device plugins [--runtime-dir DIR] list|install|enable|disable|uninstall|purge|upgrade|configure ...
16
+ mcp-device plugins install /path/to/palace.plugin.json --enable Explicit optional Palace installation
17
+ mcp-device plugins upgrade /path/to/palace.plugin.json Upgrade an optional plugin safely
18
+ mcp-device plugins repair-lock Recover a proved-abandoned/incomplete registry lock
19
+ mcp-device knowledge [--runtime-dir DIR] search|list|read|ingest|learn|correct|skills [JSON]
20
+ mcp-device state backup|verify|restore|migrate [--source DIR] [--backup DIR] [--target DIR]
21
+ mcp-device context ... Existing local Context commands
22
+ mcp-device logs ... Existing P1 log search commands
23
+
24
+ Server state defaults to ~/.mcp-device/server. Device state defaults stay unchanged.
25
+ Server clients, including localhost, use the ordinary account/OAuth and Device pairing flow.
26
+ Install/upgrade takes a local plugin manifest JSON. Disable/uninstall retain plugin data.
27
+ Purge is a separate explicit operation for a disabled plugin. Admin passwords come from HCU_ADMIN_PASSWORD.
28
+ State migration defaults to a reviewable dry run; --apply writes only a new target after verified backups.
29
+ Core includes no bundled plugins or Palace Skill integration. Legacy --plugin-policy values
30
+ are accepted for compatibility; neither value installs or automatically enables Palace.
31
+ `;
32
+ function parse(argv) {
33
+ const values = {}, flags = new Set(), positional = [];
34
+ const valued = new Set(['runtime-dir', 'host', 'port', 'loopback-port', 'public-url', 'skill-root', 'project-root', 'source-root', 'plugin-policy', 'config', 'source', 'backup', 'target', 'device-root', 'gateway-root']);
35
+ const switches = new Set(['help', 'enable', 'bundled', 'apply', 'json', 'allow-http-lan', 'legacy-knowledge-mcp']);
36
+ for (let i = 0; i < argv.length; i++) {
37
+ const arg = argv[i];
38
+ if (arg === '--') {
39
+ positional.push(...argv.slice(i + 1));
40
+ break;
41
+ }
42
+ if (arg === '-h') {
43
+ flags.add('help');
44
+ continue;
45
+ }
46
+ if (!arg.startsWith('--')) {
47
+ positional.push(arg);
48
+ continue;
49
+ }
50
+ const equal = arg.indexOf('='), key = arg.slice(2, equal < 0 ? undefined : equal);
51
+ if (switches.has(key) && equal < 0) {
52
+ flags.add(key);
53
+ continue;
54
+ }
55
+ if (!valued.has(key))
56
+ throw new CapabilityError('INVALID_ARGUMENT', 'Unknown option: --' + key);
57
+ const value = equal < 0 ? argv[++i] : arg.slice(equal + 1);
58
+ if (!value || value.startsWith('--'))
59
+ throw new CapabilityError('INVALID_ARGUMENT', 'Missing value for --' + key);
60
+ (values[key] ?? (values[key] = [])).push(value);
61
+ }
62
+ return { values, flags, positional };
63
+ }
64
+ const one = (args, key, fallback) => args.values[key]?.[args.values[key].length - 1] ?? fallback;
65
+ function stateRoot(args, serverDefault = false) {
66
+ return path.resolve(one(args, 'runtime-dir', process.env.MCP_DEVICE_CONFIG_DIR || path.join(os.homedir(), '.mcp-device', ...(serverDefault ? ['server'] : []))));
67
+ }
68
+ function required(args, key) {
69
+ const value = one(args, key);
70
+ if (!value)
71
+ throw new CapabilityError('INVALID_ARGUMENT', '--' + key + ' is required');
72
+ return path.resolve(value);
73
+ }
74
+ async function jsonFile(filename) {
75
+ const text = await fs.readFile(path.resolve(filename), 'utf8');
76
+ return JSON.parse(text.replace(/^\uFEFF/, ''));
77
+ }
78
+ const print = (value) => process.stdout.write(JSON.stringify(value, null, 2) + '\n');
79
+ const event = (value) => process.stdout.write(JSON.stringify(value) + '\n');
80
+ async function pluginCli(args) {
81
+ const { PluginHost } = await import('./plugin-host.js');
82
+ const root = await resolveRuntimeRoot(one(args, 'runtime-dir')), [action = 'list', target, extra] = args.positional;
83
+ const host = new PluginHost({ stateRoot: root, deviceId: 'local-plugin-management' });
84
+ let release;
85
+ await host.load();
86
+ try {
87
+ if (action === 'list') {
88
+ print({ runtime_dir: root, plugins: host.list(), diagnostics: host.diagnostics() });
89
+ return;
90
+ }
91
+ if (action === 'repair-lock') {
92
+ print({ runtime_dir: root, ...await host.repairRegistryLock() });
93
+ return;
94
+ }
95
+ if (!target)
96
+ throw new CapabilityError('INVALID_ARGUMENT', 'Plugin id or manifest file is required');
97
+ if (action === 'install' || action === 'upgrade') {
98
+ let manifest;
99
+ if (args.flags.has('bundled')) {
100
+ const { bundledPluginManifests } = await import('../distribution.js');
101
+ const bundled = bundledPluginManifests().find(item => item.id === target);
102
+ if (!bundled)
103
+ throw new CapabilityError('PLUGIN_NOT_FOUND', 'Unknown bundled plugin: ' + target);
104
+ manifest = bundled;
105
+ }
106
+ else {
107
+ manifest = await jsonFile(target);
108
+ manifest.entry = path.resolve(path.dirname(path.resolve(target)), manifest.entry);
109
+ }
110
+ if (action === 'install')
111
+ await host.install(manifest, { enabled: args.flags.has('enable'), installationSource: args.flags.has('bundled') ? 'distribution' : 'manual' });
112
+ else {
113
+ // Migration must not race a running provider in a different process.
114
+ const { acquireServerLease } = await import('./runtime-lease.js');
115
+ release = await acquireServerLease(root);
116
+ await host.upgrade(manifest, { installationSource: args.flags.has('bundled') ? 'distribution' : 'manual' });
117
+ }
118
+ }
119
+ else if (action === 'configure') {
120
+ if (!extra)
121
+ throw new CapabilityError('INVALID_ARGUMENT', 'configure requires a settings JSON file');
122
+ const settings = await jsonFile(extra);
123
+ if (!settings || Array.isArray(settings) || typeof settings !== 'object')
124
+ throw new CapabilityError('INVALID_ARGUMENT', 'Plugin settings must be an object');
125
+ const record = host.list().find(item => item.manifest.id === target);
126
+ if (record?.enabled)
127
+ throw new CapabilityError('PLUGIN_STILL_ENABLED', 'Disable the plugin before changing its settings');
128
+ await host.configure(target, settings);
129
+ }
130
+ else if (['enable', 'disable', 'uninstall'].includes(action)) {
131
+ await host[action](target);
132
+ }
133
+ else if (action === 'purge') {
134
+ const { acquireServerLease } = await import('./runtime-lease.js');
135
+ release = await acquireServerLease(root);
136
+ await host.purge(target);
137
+ }
138
+ else
139
+ throw new CapabilityError('INVALID_ARGUMENT', 'Unknown plugins action: ' + action);
140
+ }
141
+ finally {
142
+ await host.close();
143
+ await release?.();
144
+ }
145
+ print({ ok: true, action, plugins: host.list() });
146
+ }
147
+ async function knowledgeCli(args) {
148
+ const root = await resolveRuntimeRoot(one(args, 'runtime-dir')), [action = 'search', payload = '{}'] = args.positional;
149
+ if (!['search', 'list', 'read', 'ingest', 'learn', 'correct', 'skills'].includes(action))
150
+ throw new CapabilityError('INVALID_ARGUMENT', 'Unknown knowledge action');
151
+ const input = payload.startsWith('@') ? await jsonFile(payload.slice(1)) : JSON.parse(payload);
152
+ const { acquireServerLease } = await import('./runtime-lease.js');
153
+ const release = await acquireServerLease(root);
154
+ let host;
155
+ try {
156
+ const { GatewayDeviceIdentity } = await import('../device/gateway-identity.js');
157
+ const { PluginHost } = await import('./plugin-host.js');
158
+ const record = await new GatewayDeviceIdentity(path.join(root, 'gateway-identity.json')).loadOrCreate();
159
+ host = new PluginHost({ stateRoot: root, deviceId: record.deviceId, projectRoots: args.values['project-root']?.map(item => path.resolve(item)), sourceRoots: args.values['source-root']?.map(item => path.resolve(item)) ?? [path.join(root, 'logs')] });
160
+ await host.start({ skipIds: ['palace'] });
161
+ print(await host.invoke('knowledge.' + action, input));
162
+ }
163
+ finally {
164
+ await host?.close();
165
+ await release();
166
+ }
167
+ }
168
+ async function adminCli(args) {
169
+ const root = stateRoot(args, true);
170
+ await fs.mkdir(root, { recursive: true });
171
+ const child = spawn(process.execPath, [path.join(packageRoot, 'control-plane', 'scripts', 'admin.mjs'), ...args.positional], {
172
+ stdio: 'inherit', windowsHide: true, env: { ...process.env, MCP_RUNTIME_DIR: root, MCP_GATEWAY_DB_PATH: path.join(root, 'gateway.sqlite') }
173
+ });
174
+ await new Promise((resolve, reject) => { child.once('error', reject); child.once('exit', code => { process.exitCode = code ?? 1; resolve(); }); });
175
+ }
176
+ async function serverCli(args) {
177
+ if (args.positional.length && !(args.positional.length === 1 && args.positional[0] === 'start'))
178
+ throw new CapabilityError('INVALID_ARGUMENT', 'server accepts only start; use Ctrl-C or the service manager to stop');
179
+ const root = stateRoot(args, true), port = Number(one(args, 'port', '8104'));
180
+ if (!Number.isInteger(port) || port < 1 || port > 65535)
181
+ throw new CapabilityError('INVALID_ARGUMENT', 'Invalid server port');
182
+ const localPortInput = one(args, 'loopback-port');
183
+ const loopbackPort = localPortInput === undefined ? undefined : Number(localPortInput);
184
+ if (loopbackPort !== undefined && (!Number.isInteger(loopbackPort) || loopbackPort < 1 || loopbackPort > 65535 || loopbackPort === port))
185
+ throw new CapabilityError('INVALID_ARGUMENT', 'Loopback MCP port must be a distinct port in the range 1..65535');
186
+ const { acquireServerLease } = await import('./runtime-lease.js');
187
+ const release = await acquireServerLease(root);
188
+ process.env.MCP_DEVICE_CONFIG_DIR = root;
189
+ let core;
190
+ let runtime;
191
+ try {
192
+ const config = one(args, 'config') ? await jsonFile(one(args, 'config')) : {};
193
+ if (!config || typeof config !== 'object' || Array.isArray(config) || (config.env && (typeof config.env !== 'object' || Array.isArray(config.env))))
194
+ throw new CapabilityError('INVALID_ARGUMENT', 'Server config must be a JSON object with an optional env object');
195
+ const publicUrl = one(args, 'public-url');
196
+ const allowHttpLan = args.flags.has('allow-http-lan');
197
+ if (allowHttpLan) {
198
+ if (!publicUrl)
199
+ throw new CapabilityError('INVALID_ARGUMENT', '--allow-http-lan requires --public-url http://<lan-host>:<port>');
200
+ let url;
201
+ try {
202
+ url = new URL(publicUrl);
203
+ }
204
+ catch {
205
+ throw new CapabilityError('INVALID_ARGUMENT', '--public-url must be a valid absolute URL');
206
+ }
207
+ if (url.protocol !== 'http:')
208
+ throw new CapabilityError('INVALID_ARGUMENT', '--allow-http-lan is only for an explicit http:// LAN public URL');
209
+ }
210
+ const configuredSkillRoot = one(args, 'skill-root', process.env.MCP_SKILL_ROOT);
211
+ const legacySharedSkillRoot = path.join(os.homedir(), '.mcp-device', 'skills');
212
+ const skillRoot = configuredSkillRoot
213
+ ? path.resolve(configuredSkillRoot)
214
+ : await fs.stat(legacySharedSkillRoot).then(stat => stat.isDirectory() ? legacySharedSkillRoot : undefined).catch(() => undefined);
215
+ const { GatewayDeviceIdentity } = await import('../device/gateway-identity.js');
216
+ const identity = new GatewayDeviceIdentity(path.join(root, 'gateway-identity.json'));
217
+ const record = await identity.loadOrCreate();
218
+ const { createPlatformDeviceCore } = await import('./device-runtime.js');
219
+ const legacyKnowledgeMcp = args.flags.has('legacy-knowledge-mcp');
220
+ const cliPluginPolicy = one(args, 'plugin-policy');
221
+ const selectedPluginPolicy = cliPluginPolicy === undefined
222
+ ? (config.pluginPolicy === undefined ? resolveDevicePluginPolicy([], process.env) : resolveDevicePluginPolicy(['--plugin-policy', String(config.pluginPolicy)], {}))
223
+ : resolveDevicePluginPolicy(['--plugin-policy', cliPluginPolicy], {});
224
+ core = await createPlatformDeviceCore({ deviceId: record.deviceId, stateRoot: root, projectRoots: args.values['project-root']?.map(item => path.resolve(item)), sourceRoots: args.values['source-root']?.map(item => path.resolve(item)), pluginPolicy: selectedPluginPolicy, exposeKnowledgeMcp: legacyKnowledgeMcp });
225
+ const { createPlatformTools } = await import('./knowledge-mcp.js');
226
+ const { startServerRuntime } = await import(pathToFileURL(path.join(packageRoot, 'control-plane', 'scripts', 'authenticated-mcp-wrapper.mjs')).href);
227
+ const configPath = typeof config.configPath === 'string' ? path.resolve(path.dirname(path.resolve(one(args, 'config'))), config.configPath) : undefined;
228
+ runtime = await startServerRuntime({ core, identity, stateRoot: root, packageRoot, port, loopbackPort, host: one(args, 'host', '127.0.0.1'), publicUrl, allowHttpLan, skillRoot, env: config.env ?? {}, configPath, extraTools: legacyKnowledgeMcp ? await createPlatformTools(root) : [],
229
+ deviceName: 'localhost',
230
+ onPairing: (pairing) => event({ event: 'device_pairing_required', pairing }) });
231
+ event({ event: 'server_ready', version: '1.0.12', url: runtime.baseUrl, ...(runtime.loopbackUrl ? { loopback_url: runtime.loopbackUrl } : {}), device_id: record.deviceId, runtime_dir: root, local_runtime: 'shared-device-core', authentication: 'account-oauth-and-pairing' });
232
+ await new Promise(resolve => {
233
+ // A process manager may use Node's private parent/child IPC channel to stop
234
+ // gracefully on Windows, where kill(SIGTERM) otherwise terminates abruptly.
235
+ const message = (value) => { if (value?.type === 'mcp-device:shutdown')
236
+ stop(); };
237
+ const stop = () => { process.removeListener('SIGINT', stop); process.removeListener('SIGTERM', stop); process.removeListener('message', message); process.removeListener('disconnect', stop); resolve(); };
238
+ process.once('SIGINT', stop);
239
+ process.once('SIGTERM', stop);
240
+ if (process.send) {
241
+ process.on('message', message);
242
+ process.once('disconnect', stop);
243
+ }
244
+ runtime.server.once('close', stop);
245
+ });
246
+ }
247
+ finally {
248
+ if (runtime)
249
+ await runtime.close();
250
+ else
251
+ await core?.close();
252
+ await release();
253
+ if (process.connected)
254
+ process.disconnect();
255
+ }
256
+ }
257
+ async function stateCli(args) {
258
+ // The implementation is imported only for explicit state-management commands.
259
+ const modulePath = new URL('./state-backup.js', import.meta.url).href;
260
+ const state = await import(modulePath);
261
+ const [action] = args.positional;
262
+ if (action === 'backup')
263
+ print(await state.createStateBackup({ sourceRoot: required(args, 'source'), backupRoot: required(args, 'backup') }));
264
+ else if (action === 'verify')
265
+ print(await state.verifyStateBackup({ backupRoot: required(args, 'backup') }));
266
+ else if (action === 'restore')
267
+ print(await state.restoreStateBackup({ backupRoot: required(args, 'backup'), targetRoot: required(args, 'target') }));
268
+ else if (action === 'migrate') {
269
+ const options = { deviceRoot: required(args, 'device-root'), gatewayRoot: required(args, 'gateway-root'), targetRoot: required(args, 'target'), backupRoot: required(args, 'backup') };
270
+ const plan = await state.planLegacyMigration(options);
271
+ print(args.flags.has('apply') ? await state.applyLegacyMigration({ plan }) : plan);
272
+ }
273
+ else
274
+ throw new CapabilityError('INVALID_ARGUMENT', 'Use state backup, verify, restore or migrate');
275
+ }
276
+ export async function runPlatformCli(command, argv) {
277
+ try {
278
+ const args = parse(argv);
279
+ if (command === 'help' || args.flags.has('help')) {
280
+ process.stdout.write(usage);
281
+ return;
282
+ }
283
+ if (command === 'server')
284
+ await serverCli(args);
285
+ else if (command === 'plugins')
286
+ await pluginCli(args);
287
+ else if (command === 'knowledge')
288
+ await knowledgeCli(args);
289
+ else if (command === 'admin')
290
+ await adminCli(args);
291
+ else if (command === 'state')
292
+ await stateCli(args);
293
+ else
294
+ throw new CapabilityError('INVALID_ARGUMENT', 'Unknown platform command');
295
+ }
296
+ catch (error) {
297
+ process.stderr.write(JSON.stringify({ ok: false, code: error.code ?? 'COMMAND_FAILED', error: error.message }) + '\n');
298
+ process.exitCode = 1;
299
+ }
300
+ }
@@ -0,0 +1,45 @@
1
+ import { type FileHandle } from 'node:fs/promises';
2
+ import { type ProcessNamespace } from './process-identity.js';
3
+ export interface CoordinationLockBody {
4
+ pid: number;
5
+ token: string;
6
+ createdAt?: number;
7
+ processBirth?: string;
8
+ namespace?: ProcessNamespace;
9
+ }
10
+ export interface CoordinationObservation {
11
+ body?: CoordinationLockBody;
12
+ ageMs: number;
13
+ mtimeMs: number;
14
+ size: number;
15
+ }
16
+ export interface CoordinationCodes {
17
+ busy: string;
18
+ active: string;
19
+ recoveryRequired: string;
20
+ }
21
+ export interface CoordinationOptions {
22
+ nonBlocking?: boolean;
23
+ breakLock?: boolean;
24
+ attempts?: number;
25
+ staleMs?: number;
26
+ codes: CoordinationCodes;
27
+ messagePrefix?: string;
28
+ retainAbandoned?: boolean;
29
+ }
30
+ export declare function coordinationObservation(filename: string): Promise<CoordinationObservation | null>;
31
+ export declare function processAppearsDead(pid: number): boolean;
32
+ export declare function coordinationOwnerAbandoned(body: CoordinationLockBody): Promise<boolean>;
33
+ export declare function createCoordinationLock(filename: string, token?: `${string}-${string}-${string}-${string}-${string}`): Promise<{
34
+ handle: FileHandle;
35
+ token: string;
36
+ }>;
37
+ export declare function releaseCoordinationLock(lock: {
38
+ handle: FileHandle;
39
+ token: string;
40
+ }, filename: string): Promise<void>;
41
+ export declare function repairCoordinationLock(lockPath: string, options: CoordinationOptions): Promise<{
42
+ recovered: boolean;
43
+ reason?: string;
44
+ }>;
45
+ export declare function withCoordinationLock<T>(lockPath: string, work: () => Promise<T>, options: CoordinationOptions): Promise<T>;