@try-works/dsh-model-as-tool 0.1.2 → 0.3.6

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 (267) hide show
  1. package/bin/dsh-tool-mode-credentials.mjs +20 -0
  2. package/bin/dsh-tool-mode.mjs +202 -0
  3. package/catalog/desert-ant-models.json +693 -693
  4. package/client/client.model-tools.js +592 -0
  5. package/client/index.js +1679 -0
  6. package/lib/adapters/index.d.ts.map +1 -1
  7. package/lib/adapters/index.js +4 -4
  8. package/lib/bindings.d.ts.map +1 -1
  9. package/lib/bindings.js +26 -25
  10. package/lib/capability.d.ts.map +1 -1
  11. package/lib/capability.js +17 -0
  12. package/lib/capture-path.d.ts +97 -0
  13. package/lib/capture-path.d.ts.map +1 -0
  14. package/lib/capture-path.js +152 -0
  15. package/lib/diagnostics.d.ts +166 -0
  16. package/lib/diagnostics.d.ts.map +1 -0
  17. package/lib/diagnostics.js +135 -0
  18. package/lib/extension-dependencies.d.ts +197 -0
  19. package/lib/extension-dependencies.d.ts.map +1 -0
  20. package/lib/extension-dependencies.js +369 -0
  21. package/lib/extension-dispatch.d.ts +117 -0
  22. package/lib/extension-dispatch.d.ts.map +1 -0
  23. package/lib/extension-dispatch.js +124 -0
  24. package/lib/extension-registrar.d.ts +100 -0
  25. package/lib/extension-registrar.d.ts.map +1 -0
  26. package/lib/extension-registrar.js +134 -0
  27. package/lib/extensions-api.d.ts +217 -0
  28. package/lib/extensions-api.d.ts.map +1 -0
  29. package/lib/extensions-api.js +17 -0
  30. package/lib/extensions-remote.d.ts +54 -0
  31. package/lib/extensions-remote.d.ts.map +1 -0
  32. package/lib/extensions-remote.js +66 -0
  33. package/lib/extensions-service.d.ts +334 -0
  34. package/lib/extensions-service.d.ts.map +1 -0
  35. package/lib/extensions-service.js +1351 -0
  36. package/lib/harness-llm.d.ts +138 -0
  37. package/lib/harness-llm.d.ts.map +1 -0
  38. package/lib/harness-llm.js +218 -0
  39. package/lib/harness-serving.d.ts +95 -0
  40. package/lib/harness-serving.d.ts.map +1 -0
  41. package/lib/harness-serving.js +157 -0
  42. package/lib/headless.d.ts +97 -0
  43. package/lib/headless.d.ts.map +1 -0
  44. package/lib/headless.js +349 -0
  45. package/lib/http-acquisition.d.ts +27 -0
  46. package/lib/http-acquisition.d.ts.map +1 -0
  47. package/lib/http-acquisition.js +136 -0
  48. package/lib/index.d.ts +250 -7
  49. package/lib/index.d.ts.map +1 -1
  50. package/lib/index.js +2625 -70
  51. package/lib/invocation-accounting.d.ts +169 -0
  52. package/lib/invocation-accounting.d.ts.map +1 -0
  53. package/lib/invocation-accounting.js +148 -0
  54. package/lib/legacy-migration.d.ts +95 -0
  55. package/lib/legacy-migration.d.ts.map +1 -0
  56. package/lib/legacy-migration.js +429 -0
  57. package/lib/managed-workers.d.ts +151 -0
  58. package/lib/managed-workers.d.ts.map +1 -0
  59. package/lib/managed-workers.js +249 -0
  60. package/lib/mcp/client-grant.d.ts +74 -0
  61. package/lib/mcp/client-grant.d.ts.map +1 -0
  62. package/lib/mcp/client-grant.js +60 -0
  63. package/lib/mcp/credential-cli.d.ts +38 -0
  64. package/lib/mcp/credential-cli.d.ts.map +1 -0
  65. package/lib/mcp/credential-cli.js +148 -0
  66. package/lib/mcp/credential-store.d.ts +143 -0
  67. package/lib/mcp/credential-store.d.ts.map +1 -0
  68. package/lib/mcp/credential-store.js +454 -0
  69. package/lib/mcp/host-binding.d.ts +25 -0
  70. package/lib/mcp/host-binding.d.ts.map +1 -1
  71. package/lib/mcp/host-binding.js +107 -14
  72. package/lib/mcp/http.d.ts +68 -18
  73. package/lib/mcp/http.d.ts.map +1 -1
  74. package/lib/mcp/http.js +390 -62
  75. package/lib/mcp/oauth.d.ts +149 -0
  76. package/lib/mcp/oauth.d.ts.map +1 -0
  77. package/lib/mcp/oauth.js +396 -0
  78. package/lib/mcp/protocol.d.ts +46 -7
  79. package/lib/mcp/protocol.d.ts.map +1 -1
  80. package/lib/mcp/protocol.js +63 -16
  81. package/lib/mcp/rate-limit.d.ts +68 -0
  82. package/lib/mcp/rate-limit.d.ts.map +1 -0
  83. package/lib/mcp/rate-limit.js +114 -0
  84. package/lib/mcp/sdk-v2.d.ts +17 -0
  85. package/lib/mcp/sdk-v2.d.ts.map +1 -0
  86. package/lib/mcp/sdk-v2.js +181 -0
  87. package/lib/mcp/server.d.ts +11 -1
  88. package/lib/mcp/server.d.ts.map +1 -1
  89. package/lib/mcp/server.js +80 -13
  90. package/lib/mcp/stdio.d.ts.map +1 -1
  91. package/lib/mcp/stdio.js +9 -1
  92. package/lib/mcp/subscriptions.d.ts +43 -1
  93. package/lib/mcp/subscriptions.d.ts.map +1 -1
  94. package/lib/mcp/subscriptions.js +90 -9
  95. package/lib/model-qualification.d.ts +192 -0
  96. package/lib/model-qualification.d.ts.map +1 -0
  97. package/lib/model-qualification.js +178 -0
  98. package/lib/planning.d.ts +246 -0
  99. package/lib/planning.d.ts.map +1 -0
  100. package/lib/planning.js +457 -0
  101. package/lib/prepared-assets.d.ts +178 -0
  102. package/lib/prepared-assets.d.ts.map +1 -0
  103. package/lib/prepared-assets.js +286 -0
  104. package/lib/provider-bridge.d.ts +37 -0
  105. package/lib/provider-bridge.d.ts.map +1 -1
  106. package/lib/provider-bridge.js +189 -12
  107. package/lib/ptc-authority.d.ts +140 -0
  108. package/lib/ptc-authority.d.ts.map +1 -0
  109. package/lib/ptc-authority.js +216 -0
  110. package/lib/ptc-runtime.d.ts +156 -0
  111. package/lib/ptc-runtime.d.ts.map +1 -0
  112. package/lib/ptc-runtime.js +191 -0
  113. package/lib/publication.d.ts +2 -1
  114. package/lib/publication.d.ts.map +1 -1
  115. package/lib/publication.js +13 -5
  116. package/lib/receipt.d.ts.map +1 -1
  117. package/lib/receipt.js +8 -0
  118. package/lib/title-proposal.d.ts +194 -0
  119. package/lib/title-proposal.d.ts.map +1 -0
  120. package/lib/title-proposal.js +244 -0
  121. package/lib/tool-mode-run.d.ts +235 -0
  122. package/lib/tool-mode-run.d.ts.map +1 -0
  123. package/lib/tool-mode-run.js +283 -0
  124. package/lib/types.d.ts +3 -1
  125. package/lib/types.d.ts.map +1 -1
  126. package/lib/update-surface.d.ts +79 -0
  127. package/lib/update-surface.d.ts.map +1 -0
  128. package/lib/update-surface.js +224 -0
  129. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/lang-detect.d.ts +16 -0
  130. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/lang-detect.d.ts.map +1 -0
  131. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/lang-detect.js +85 -0
  132. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.d.ts +38 -0
  133. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.d.ts.map +1 -0
  134. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/standard.js +445 -0
  135. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/stt-transcribe.d.ts +20 -0
  136. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/stt-transcribe.d.ts.map +1 -0
  137. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/stt-transcribe.js +112 -0
  138. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.d.ts +14 -0
  139. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.d.ts.map +1 -0
  140. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-embed.js +63 -0
  141. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.d.ts +14 -0
  142. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.d.ts.map +1 -0
  143. package/node_modules/@try-works/tool-mode-contracts/lib/contracts/text-rerank.js +76 -0
  144. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.d.ts +82 -0
  145. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.d.ts.map +1 -0
  146. package/node_modules/@try-works/tool-mode-contracts/lib/dsh.js +274 -0
  147. package/node_modules/@try-works/tool-mode-contracts/lib/index.d.ts +26 -0
  148. package/node_modules/@try-works/tool-mode-contracts/lib/index.d.ts.map +1 -0
  149. package/node_modules/@try-works/tool-mode-contracts/lib/index.js +48 -0
  150. package/node_modules/@try-works/tool-mode-contracts/lib/meta.d.ts +104 -0
  151. package/node_modules/@try-works/tool-mode-contracts/lib/meta.d.ts.map +1 -0
  152. package/node_modules/@try-works/tool-mode-contracts/lib/meta.js +55 -0
  153. package/node_modules/@try-works/tool-mode-contracts/lib/registry.d.ts +107 -0
  154. package/node_modules/@try-works/tool-mode-contracts/lib/registry.d.ts.map +1 -0
  155. package/node_modules/@try-works/tool-mode-contracts/lib/registry.js +246 -0
  156. package/node_modules/@try-works/tool-mode-contracts/package.json +34 -0
  157. package/node_modules/@try-works/tool-mode-extension-sdk/bin/dsh-tool-mode.mjs +20 -0
  158. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.d.ts +80 -0
  159. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.d.ts.map +1 -0
  160. package/node_modules/@try-works/tool-mode-extension-sdk/lib/cli.js +533 -0
  161. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.d.ts +83 -0
  162. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.d.ts.map +1 -0
  163. package/node_modules/@try-works/tool-mode-extension-sdk/lib/declarative-recipes.js +125 -0
  164. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.d.ts +70 -0
  165. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.d.ts.map +1 -0
  166. package/node_modules/@try-works/tool-mode-extension-sdk/lib/discovery.js +201 -0
  167. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.d.ts +57 -0
  168. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.d.ts.map +1 -0
  169. package/node_modules/@try-works/tool-mode-extension-sdk/lib/errors.js +83 -0
  170. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.d.ts +31 -0
  171. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.d.ts.map +1 -0
  172. package/node_modules/@try-works/tool-mode-extension-sdk/lib/index.js +31 -0
  173. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.d.ts +86 -0
  174. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.d.ts.map +1 -0
  175. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/archive.js +185 -0
  176. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.d.ts +126 -0
  177. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.d.ts.map +1 -0
  178. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/dependencies.js +297 -0
  179. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.d.ts +216 -0
  180. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.d.ts.map +1 -0
  181. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/lifecycle.js +800 -0
  182. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.d.ts +210 -0
  183. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.d.ts.map +1 -0
  184. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/migration.js +368 -0
  185. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.d.ts +63 -0
  186. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.d.ts.map +1 -0
  187. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/runtime-link.js +149 -0
  188. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.d.ts +35 -0
  189. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.d.ts.map +1 -0
  190. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/source-directory.js +179 -0
  191. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.d.ts +179 -0
  192. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.d.ts.map +1 -0
  193. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/staged.js +235 -0
  194. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.d.ts +367 -0
  195. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.d.ts.map +1 -0
  196. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/store.js +807 -0
  197. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.d.ts +185 -0
  198. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.d.ts.map +1 -0
  199. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/update-flow.js +504 -0
  200. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.d.ts +17 -0
  201. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.d.ts.map +1 -0
  202. package/node_modules/@try-works/tool-mode-extension-sdk/lib/install/zip-source.js +80 -0
  203. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.d.ts +52 -0
  204. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.d.ts.map +1 -0
  205. package/node_modules/@try-works/tool-mode-extension-sdk/lib/load.js +102 -0
  206. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.d.ts +171 -0
  207. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.d.ts.map +1 -0
  208. package/node_modules/@try-works/tool-mode-extension-sdk/lib/manifest.js +271 -0
  209. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.d.ts +242 -0
  210. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.d.ts.map +1 -0
  211. package/node_modules/@try-works/tool-mode-extension-sdk/lib/runtime.js +58 -0
  212. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.d.ts +118 -0
  213. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.d.ts.map +1 -0
  214. package/node_modules/@try-works/tool-mode-extension-sdk/lib/state.js +113 -0
  215. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.d.ts +2 -0
  216. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.d.ts.map +1 -0
  217. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker/worker-child.js +351 -0
  218. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.d.ts +150 -0
  219. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.d.ts.map +1 -0
  220. package/node_modules/@try-works/tool-mode-extension-sdk/lib/worker.js +670 -0
  221. package/node_modules/@try-works/tool-mode-extension-sdk/package.json +53 -0
  222. package/node_modules/@try-works/tool-mode-extension-sdk/schema/extension-manifest-1.1.0.schema.json +253 -0
  223. package/node_modules/@try-works/tool-mode-recipes/bin/tool-mode-recipe.mjs +15 -0
  224. package/node_modules/@try-works/tool-mode-recipes/lib/broker.d.ts +427 -0
  225. package/node_modules/@try-works/tool-mode-recipes/lib/broker.d.ts.map +1 -0
  226. package/node_modules/@try-works/tool-mode-recipes/lib/broker.js +592 -0
  227. package/node_modules/@try-works/tool-mode-recipes/lib/cli.d.ts +60 -0
  228. package/node_modules/@try-works/tool-mode-recipes/lib/cli.d.ts.map +1 -0
  229. package/node_modules/@try-works/tool-mode-recipes/lib/cli.js +936 -0
  230. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.d.ts +237 -0
  231. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.d.ts.map +1 -0
  232. package/node_modules/@try-works/tool-mode-recipes/lib/dsh-adapter.js +200 -0
  233. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.d.ts +85 -0
  234. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.d.ts.map +1 -0
  235. package/node_modules/@try-works/tool-mode-recipes/lib/fixture-provider.js +176 -0
  236. package/node_modules/@try-works/tool-mode-recipes/lib/images.d.ts +105 -0
  237. package/node_modules/@try-works/tool-mode-recipes/lib/images.d.ts.map +1 -0
  238. package/node_modules/@try-works/tool-mode-recipes/lib/images.js +129 -0
  239. package/node_modules/@try-works/tool-mode-recipes/lib/index.d.ts +25 -0
  240. package/node_modules/@try-works/tool-mode-recipes/lib/index.d.ts.map +1 -0
  241. package/node_modules/@try-works/tool-mode-recipes/lib/index.js +25 -0
  242. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.d.ts +325 -0
  243. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.d.ts.map +1 -0
  244. package/node_modules/@try-works/tool-mode-recipes/lib/recipe-format.js +1310 -0
  245. package/node_modules/@try-works/tool-mode-recipes/lib/templates.d.ts +51 -0
  246. package/node_modules/@try-works/tool-mode-recipes/lib/templates.d.ts.map +1 -0
  247. package/node_modules/@try-works/tool-mode-recipes/lib/templates.js +310 -0
  248. package/node_modules/@try-works/tool-mode-recipes/lib/titles.d.ts +227 -0
  249. package/node_modules/@try-works/tool-mode-recipes/lib/titles.d.ts.map +1 -0
  250. package/node_modules/@try-works/tool-mode-recipes/lib/titles.js +407 -0
  251. package/node_modules/@try-works/tool-mode-recipes/package.json +56 -0
  252. package/node_modules/@try-works/tool-mode-recipes/recipes/describe-image.json +38 -0
  253. package/node_modules/@try-works/tool-mode-recipes/recipes/text-title.json +45 -0
  254. package/node_modules/@try-works/tool-mode-recipes/schema/harness-model-recipe.schema.json +273 -0
  255. package/package.json +50 -17
  256. package/remote/spec.mjs +439 -0
  257. package/remote/typert.host.mjs +14 -0
  258. package/remote/typert.remote-client.mjs +16 -0
  259. package/lib/adapters/tongue.d.ts +0 -31
  260. package/lib/adapters/tongue.d.ts.map +0 -1
  261. package/lib/adapters/tongue.js +0 -93
  262. package/lib/adapters/voz.d.ts +0 -28
  263. package/lib/adapters/voz.d.ts.map +0 -1
  264. package/lib/adapters/voz.js +0 -102
  265. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.d.ts +0 -0
  266. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.d.ts.map +0 -0
  267. /package/{lib → node_modules/@try-works/tool-mode-extension-sdk/lib}/licensing.js +0 -0
@@ -0,0 +1,334 @@
1
+ /**
2
+ * The HOST half of the extension-management surface (Settings → Model as Tool).
3
+ *
4
+ * This module implements {@link ModelToolsRemote} from `extensions-api.ts` and is
5
+ * deliberately WIRE-AGNOSTIC: it imports `node:*` and the published SDK, never DSH,
6
+ * never the client page, and never the generated Typert artifact. That boundary is
7
+ * what lets the same implementation be exercised by unit tests without a Context,
8
+ * by the plugin at `apply`, and by whatever transports the browser half uses.
9
+ *
10
+ * The governing rule is TRUTHFULNESS over convenience, because every field here is
11
+ * shown to an operator who is about to change what code their host runs:
12
+ *
13
+ * - `store` is `null` when no extension store is configured, rather than an empty
14
+ * string that a caller could mistake for a mounted store.
15
+ * - `writable` is derived from a real access check on the store path and from the
16
+ * store lock being readable, not assumed from "the config mentions a directory".
17
+ * - `installed` means a record exists in the store lock; `active` means the
18
+ * persisted observation was made by THIS process; `integrity` is `unknown` when
19
+ * the installed bytes could not be digested, never `unchanged` by default.
20
+ * - `reason` names the FIRST condition that prevents install/activation, so a UI
21
+ * can show why an extension is not usable instead of guessing.
22
+ *
23
+ * INSTALLATION IS NOT ACTIVATION (EXT-07): `install` returns `active: false` and
24
+ * never calls the lifecycle. `enable`/`disable` are the only activation paths.
25
+ *
26
+ * FIRST-PARTY DEPENDENCIES (EXT-09): a source-directory install also supplies the
27
+ * SDK's dependency graph (`extension-dependencies.ts`), which resolves every
28
+ * declared runtime dependency from the host's own installed tree and refuses the
29
+ * install by name when one is missing. With the operator's preinstalled-content
30
+ * gate on, the resolved directory is copied by the SDK and recorded with
31
+ * `provenance: 'preinstalled'`; with it off (the default), the dependency is served
32
+ * as verified archive bytes and EXT-10's lifecycle-script refusal applies.
33
+ *
34
+ * PERSISTENCE, STATED HONESTLY:
35
+ *
36
+ * - Activation intent is durable through the SDK: `ExtensionLifecycle.activate`
37
+ * writes `desiredActivation: 'active'` and `deactivate` writes `'inactive'` into
38
+ * the profile state document, so a restart follows the operator's last toggle
39
+ * even when nothing else persists.
40
+ * - The operator's `disabledExtensions` list is a CONFIG value (Settings form). This
41
+ * service cannot write plugin config from the host: no config writer is injected.
42
+ * It therefore keeps this process's toggles as an in-memory override, seeded from
43
+ * `disabledExtensions`, and exposes `persistDisabledExtensions` as the seam a host
44
+ * with a config writer supplies. Without that seam, a toggle is truthfully
45
+ * reported as affecting this process only, and a `disable` survives restart via
46
+ * the SDK's durable `desiredActivation: 'inactive'` while an `enable` of an id
47
+ * still listed in config will be filtered by the restore gate on the next load.
48
+ *
49
+ * @module @try-works/dsh-model-as-tool/extensions-service
50
+ */
51
+ import { stagedInstallFromDirectory, type ExtensionLifecycle, type InstallDependencyGraph } from '@try-works/tool-mode-extension-sdk';
52
+ import type { ExtensionInstallResult, ExtensionPrepareResult, ExtensionToggleResult, ExtensionsDescribeResult, ModelToolsRemote } from './extensions-api.ts';
53
+ import type { AcquisitionSource } from './asset-acquisition.ts';
54
+ import type { PrepareAssetsSurface } from './prepared-assets.ts';
55
+ /** What the host can report about the shared harness model provider (declarative extensions). */
56
+ export interface HarnessProviderStatus {
57
+ /** Whether a provider is composed and able to serve declarative extensions. */
58
+ readonly available: boolean;
59
+ /** Provider identity when available, for the satisfied reason. */
60
+ readonly provider?: string;
61
+ /** Model identity the provider serves, when known. */
62
+ readonly model?: string;
63
+ /**
64
+ * REQUIRED when `available` is false: why not, and the exact remediation.
65
+ *
66
+ * Used VERBATIM as the harness-model requirement reason (and the enable preflight
67
+ * message), so it must be operator-facing and name the configuration that fixes it.
68
+ */
69
+ readonly reason?: string;
70
+ /** What clears it; defaults to `config`. */
71
+ readonly action?: 'config' | 'none';
72
+ }
73
+ /** The lifecycle surface this service needs. Narrower than the class, so a test can double it. */
74
+ export type ExtensionActivation = Pick<ExtensionLifecycle, 'stateOf' | 'activate' | 'deactivate'>;
75
+ /** The directory installer signature the service delegates to. */
76
+ export type DirectoryInstaller = (options: Parameters<typeof stagedInstallFromDirectory>[0]) => ReturnType<typeof stagedInstallFromDirectory>;
77
+ /** Every named refusal this service raises. */
78
+ export type ExtensionsServiceErrorCode =
79
+ /** `install`/`enable`/`disable` need `config.extensionStore`; it is not configured. */
80
+ 'extension-store-unconfigured'
81
+ /** `install` had no explicit source and `config.extensionSourceDir` is not configured. */
82
+ | 'extension-source-unconfigured'
83
+ /** The resolved source directory does not exist, or is not a directory. */
84
+ | 'extension-source-missing'
85
+ /** The requested id is not a usable package identity (a path could escape the source root). */
86
+ | 'extension-id-invalid'
87
+ /** The source package's own name is not the id that was requested. */
88
+ | 'extension-source-mismatch'
89
+ /** The source directory does not contain a discoverable extension package. */
90
+ | 'extension-source-invalid'
91
+ /** Source-directory installs are developer mode and must be allowed by configuration. */
92
+ | 'extension-source-directories-not-allowed'
93
+ /** The integrity digest of the source or the installed copy could not be computed. */
94
+ | 'extension-digest-unavailable'
95
+ /** The SDK installer refused or failed; its own named error is carried in the message. */
96
+ | 'extension-install-failed'
97
+ /** A declared runtime dependency could not be resolved, verified or materialized. */
98
+ | 'extension-dependency-unsatisfied'
99
+ /** The extension has no installed record in the store, so it cannot be activated. */
100
+ | 'extension-not-installed'
101
+ /** The store lock or the profile state document is unreadable, so activation state cannot be trusted. */
102
+ | 'extension-store-unreadable'
103
+ /** The host mounted no lifecycle (no store at load), so activation state cannot change. */
104
+ | 'extension-activation-unavailable'
105
+ /** `activate` refused or failed; the SDK's named error is carried in the message. */
106
+ | 'extension-activation-failed'
107
+ /** Activation is refused because a declared model's assets were never prepared. */
108
+ | 'extension-preparation-required'
109
+ /** The host mounted no prepared-assets surface, so assets cannot be prepared here. */
110
+ | 'extension-preparation-unavailable'
111
+ /** The preparation plan could not be resolved or its readiness could not be recorded. */
112
+ | 'extension-preparation-failed'
113
+ /** A prerequisite the deployment cannot satisfy blocks activation before any lifecycle call. */
114
+ | 'extension-requirement-unmet'
115
+ /** `deactivate` refused or failed; the SDK's named error is carried in the message. */
116
+ | 'extension-deactivation-failed'
117
+ /** The host's disabled-list writer rejected the new list after the action landed. */
118
+ | 'extension-override-persist-failed';
119
+ /**
120
+ * A named refusal from the extension-management surface.
121
+ *
122
+ * The `code` is stable and machine-readable; the message is operator-facing and
123
+ * names the concrete condition (path, SDK code, or identity) rather than a generic
124
+ * "failed", because the Settings page shows it verbatim.
125
+ */
126
+ export declare class ExtensionsServiceError extends Error {
127
+ readonly name = "ExtensionsServiceError";
128
+ readonly code: ExtensionsServiceErrorCode;
129
+ constructor(code: ExtensionsServiceErrorCode, message: string, options?: ErrorOptions);
130
+ }
131
+ /** The host's disabled-list store. `list` is read live; `set` is called after a toggle. */
132
+ export interface ExtensionsServiceOptions {
133
+ /** `config.extensionStore`; empty means no extension store is configured. */
134
+ readonly storeDir?: string;
135
+ /**
136
+ * `config.extensionSourceDir`: the directory that holds first-party package
137
+ * checkouts, one directory per package. Empty means no source directory.
138
+ */
139
+ readonly sourceDir?: string;
140
+ /**
141
+ * `config.extensions.allowSourceDirectories`: the explicit developer-mode gate.
142
+ * Absent/false refuses every directory install with a named error.
143
+ */
144
+ readonly allowSourceDirectories?: boolean;
145
+ /** The lifecycle profile; defaults to `default`, the profile the host restores. */
146
+ readonly profile?: string;
147
+ /** Read `config.disabledExtensions` live. */
148
+ readonly disabledExtensions?: () => readonly string[];
149
+ /**
150
+ * Persist the effective disabled list. The host's implementation must arrange for
151
+ * `disabledExtensions()` to return the same list afterwards; a rejection is
152
+ * surfaced as `extension-override-persist-failed`.
153
+ */
154
+ readonly persistDisabledExtensions?: (ids: readonly string[]) => void | Promise<void>;
155
+ /**
156
+ * The mounted lifecycle, read lazily. Absent means the host mounted none, and
157
+ * `enable`/`disable` refuse with `extension-activation-unavailable` instead of
158
+ * pretending the durable state changed.
159
+ */
160
+ readonly lifecycle?: () => ExtensionActivation | undefined;
161
+ /** Declare that this host cannot write the store (read-only mount). */
162
+ readonly readOnly?: boolean;
163
+ /** INTERNAL TEST SEAM: the directory installer, defaulting to the SDK's staged path. */
164
+ readonly installDirectory?: DirectoryInstaller;
165
+ /** INTERNAL TEST SEAM: the content digest, defaulting to the SDK's installed-content digest. */
166
+ readonly digestContent?: (directory: string) => string;
167
+ /**
168
+ * INTERNAL TEST SEAM: the dependency graph for a first-party source checkout.
169
+ *
170
+ * The default resolves each declared dependency from the host's own installed
171
+ * tree (`extension-dependencies.ts`) and refuses the install, by name, when one
172
+ * is not installed or is inadmissible. The graph is part of the same
173
+ * developer-mode source-directory gate; it is never consulted for anything else.
174
+ */
175
+ readonly dependencyGraph?: (sourcePackageDir: string) => InstallDependencyGraph;
176
+ /**
177
+ * Operator gate for PREINSTALLED dependency content (task-84); DEFAULT OFF.
178
+ *
179
+ * When on, a dependency resolved from the host's installed tree is copied by the
180
+ * SDK into the extension's own install directory and recorded with
181
+ * `provenance: 'preinstalled'` — the content arrived from an operator-completed
182
+ * install and this installer ran no lifecycle script. When off, the bytes arm
183
+ * applies and EXT-10's script refusal is unchanged. Requires
184
+ * {@link ExtensionsServiceOptions.preinstalledDependenciesRoot}.
185
+ */
186
+ readonly allowPreinstalledDependencies?: boolean;
187
+ /** The operator-configured root preinstalled dependency directories must live under. */
188
+ readonly preinstalledDependenciesRoot?: string;
189
+ /**
190
+ * The mounted prepared-assets surface, read lazily (the plugin constructs it in
191
+ * `apply` after this service). Absent means the host mounted no asset surface,
192
+ * and `prepare` refuses with `extension-preparation-unavailable`.
193
+ */
194
+ readonly prepareSurface?: () => PrepareAssetsSurface | undefined;
195
+ /**
196
+ * The acquisition source a preparation uses. Defaults to the real ranged HTTP
197
+ * source; a test injects a local source and the suite therefore performs no
198
+ * network.
199
+ */
200
+ readonly preparationSource?: () => AcquisitionSource;
201
+ /**
202
+ * Read the operator's STANDING RES-02 approval for executable assets.
203
+ *
204
+ * DEFAULT FALSE. When false, `prepare` passes `allowExecutable: false` and the
205
+ * prepared-assets registry returns its exact refusal without acquiring anything.
206
+ * When the operator explicitly configured the approval, that is the standing
207
+ * consent for the digest-pinned plans this host resolves; the management channel
208
+ * (`extensions-prepare`) still takes its own PER-CALL flag and is unaffected.
209
+ */
210
+ readonly allowExecutablePreparation?: () => boolean;
211
+ /**
212
+ * Read the host's harness-model provider status (task-93 seam).
213
+ *
214
+ * Consulted only for `execution.kind === 'declarative'` extensions, which are
215
+ * served by the host's harness broker and therefore need a composed LlmProvider.
216
+ * Absent means the host cannot answer; the harness-model requirement is then
217
+ * reported unsatisfied with an honest "provider status unknown" reason.
218
+ */
219
+ readonly harnessProviderStatus?: () => HarnessProviderStatus | undefined;
220
+ /**
221
+ * Notified when this service changes an extension's activation intent.
222
+ *
223
+ * The host's contribution registrar refuses to publish a tool for an extension
224
+ * absent from its activated set, so a runtime `enable` must admit the id BEFORE
225
+ * the lifecycle publishes and revoke it when activation fails or the extension is
226
+ * disabled. The host implementations may reconcile against the lifecycle state.
227
+ */
228
+ readonly onActivationChange?: (extensionId: string, active: boolean) => void;
229
+ }
230
+ /**
231
+ * The directory a first-party checkout for one package identity occupies.
232
+ *
233
+ * A source directory holds PACKAGE DIRECTORIES, not scoped directories: the
234
+ * workspace layout is `packages/extension-laya`, whose package name is
235
+ * `@try-works/extension-laya`. The scope is therefore dropped and the final path
236
+ * segment is used, which is the only mapping that requires no registry lookup.
237
+ * @param extensionId - the extension identity, which equals its package name.
238
+ * @returns the directory name under the configured source directory.
239
+ */
240
+ export declare function packageDirFor(extensionId: string): string;
241
+ /**
242
+ * The extension-management service: describe, install, enable, disable.
243
+ *
244
+ * Construct one per host and share it between the wire transport and any local
245
+ * surface; it owns the in-process override list and must not be duplicated, or two
246
+ * instances would report different disabled sets.
247
+ */
248
+ export declare class ExtensionsService implements ModelToolsRemote {
249
+ #private;
250
+ constructor(options?: ExtensionsServiceOptions);
251
+ /**
252
+ * Read the current state of the extension surface.
253
+ *
254
+ * Every row is derived from the store, the profile state and the source
255
+ * directory; nothing is cached between calls, so a page that re-reads after an
256
+ * action sees the committed result.
257
+ * @param signal - cancellation.
258
+ * @returns the store/source configuration and one row per known extension.
259
+ */
260
+ describe(signal?: AbortSignal): Promise<ExtensionsDescribeResult>;
261
+ /**
262
+ * Install one extension from a local source directory (EXT-06 developer mode).
263
+ *
264
+ * Refusals are named and happen BEFORE the copy: an unconfigured store, an
265
+ * unconfigured/missing source, a source whose package identity differs from the
266
+ * requested id, a disallowed source-directory install, or content that cannot be
267
+ * digested. The SDK then copies, validates, verifies and records the install; a
268
+ * failure there is re-thrown as `extension-install-failed` with the SDK's own
269
+ * named code in the message.
270
+ *
271
+ * INSTALLATION IS NOT ACTIVATION: the result is always `active: false`.
272
+ * @param extensionId - the package identity to install.
273
+ * @param source - an explicit source directory, or absent to use the configured one.
274
+ * @param signal - cancellation.
275
+ * @returns the installed identity and version.
276
+ * @throws ExtensionsServiceError for every refusal and failure.
277
+ */
278
+ install(extensionId: string, source?: string, signal?: AbortSignal): Promise<ExtensionInstallResult>;
279
+ /**
280
+ * Activate an installed extension and clear its disabled override.
281
+ *
282
+ * Activation runs through the mounted lifecycle, which verifies the installed
283
+ * bytes, publishes the contributions and persists `desiredActivation: 'active'`.
284
+ * The disabled list is updated only after activation succeeds, so a refused
285
+ * activation does not leave the operator's override claiming a state change that
286
+ * did not happen.
287
+ * @param extensionId - the installed extension.
288
+ * @param signal - cancellation.
289
+ * @returns the id with the observed active/disabled state.
290
+ * @throws ExtensionsServiceError for every refusal.
291
+ */
292
+ enable(extensionId: string, signal?: AbortSignal): Promise<ExtensionToggleResult>;
293
+ /**
294
+ * Acquire and verify an installed extension's model assets, then record the
295
+ * resulting readiness.
296
+ *
297
+ * This is the management-channel `extensions-prepare-plan` + `extensions-prepare`
298
+ * pair behind one call, over the SAME host surface: the plan is resolved from the
299
+ * installed manifest's asset lock, the acquisition runs through the injectable
300
+ * source (the real ranged HTTP source unless the host injects one), and a
301
+ * successful acquisition records `prepared-cold` through the lifecycle — which is
302
+ * what lets a following `enable` activate the extension.
303
+ *
304
+ * The RES-02 executable gate is deliberately CLOSED here: the Remote call carries
305
+ * no executable-approval argument, so a plan containing an executable asset is
306
+ * returned as `prepared: false` with the registry's own reason rather than
307
+ * acquired. The pinned EmbeddingGemma assets are not executable.
308
+ * @param extensionId - the installed extension to prepare.
309
+ * @param signal - cancellation.
310
+ * @returns the disclosure that was executed and the resulting readiness.
311
+ * @throws ExtensionsServiceError for every precondition and plan failure.
312
+ */
313
+ prepare(extensionId: string, signal?: AbortSignal): Promise<ExtensionPrepareResult>;
314
+ /**
315
+ * Deactivate an installed extension and record it as disabled.
316
+ *
317
+ * The SDK's deactivation persists `desiredActivation: 'inactive'` BEFORE it
318
+ * withdraws anything, so the durable answer survives a crash mid-withdrawal. The
319
+ * disabled override is recorded only after the lifecycle call settles; a
320
+ * deactivation that throws leaves the operator's list unchanged.
321
+ * @param extensionId - the installed extension.
322
+ * @param signal - cancellation.
323
+ * @returns the id with the observed active/disabled state.
324
+ * @throws ExtensionsServiceError for every refusal.
325
+ */
326
+ disable(extensionId: string, signal?: AbortSignal): Promise<ExtensionToggleResult>;
327
+ }
328
+ /**
329
+ * Construct the extension-management service.
330
+ * @param options - store/source configuration and the host's seams.
331
+ * @returns a service satisfying {@link ModelToolsRemote}.
332
+ */
333
+ export declare function createExtensionsService(options?: ExtensionsServiceOptions): ExtensionsService;
334
+ //# sourceMappingURL=extensions-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions-service.d.ts","sourceRoot":"","sources":["../src/extensions-service.ts"],"names":[],"mappings":"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"}