@deepseek-harness-tui/dsh-tui 0.8.1 → 0.8.3

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 (241) hide show
  1. package/README.md +30 -15
  2. package/bin/dsh-tui.js +43 -7
  3. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -0
  4. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -0
  5. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -0
  6. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -0
  7. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -0
  8. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -0
  9. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -0
  10. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -0
  11. package/dsh-ecosystem-spec/registry/README.md +14 -0
  12. package/dsh-ecosystem-spec/registry/contracts/scene-v1alpha1.json +13 -0
  13. package/dsh-ecosystem-spec/registry/contracts/settings-section-v1alpha1.json +13 -0
  14. package/dsh-ecosystem-spec/registry/contracts/tui-channel-v1alpha1.json +30 -0
  15. package/dsh-ecosystem-spec/registry/contracts/workspace-provider-v1alpha1.json +6 -0
  16. package/{ecosystem-spec → dsh-ecosystem-spec}/registry/permissions-0.1.json +1 -1
  17. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -0
  18. package/lib/types/command-trees.d.ts +2 -1
  19. package/lib/types/command-trees.d.ts.map +1 -1
  20. package/lib/types/command-trees.js +1 -1
  21. package/lib/types/components/LoadedContextPanel.d.ts +10 -5
  22. package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
  23. package/lib/types/components/LoadedContextPanel.js +18 -7
  24. package/lib/types/components/LogoV2.d.ts.map +1 -1
  25. package/lib/types/components/LogoV2.js +16 -7
  26. package/lib/types/components/Markdown.d.ts +13 -1
  27. package/lib/types/components/Markdown.d.ts.map +1 -1
  28. package/lib/types/components/Markdown.js +15 -1
  29. package/lib/types/components/MessageList.d.ts +3 -1
  30. package/lib/types/components/MessageList.d.ts.map +1 -1
  31. package/lib/types/components/MessageList.js +90 -9
  32. package/lib/types/components/PromptInput.d.ts.map +1 -1
  33. package/lib/types/components/PromptInput.js +26 -12
  34. package/lib/types/components/StreamingMarkdown.d.ts +2 -8
  35. package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
  36. package/lib/types/components/StreamingMarkdown.js +51 -9
  37. package/lib/types/components/activityFrames.d.ts +1 -1
  38. package/lib/types/components/activityFrames.d.ts.map +1 -1
  39. package/lib/types/components/activityFrames.js +4 -1
  40. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +5 -1
  41. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  42. package/lib/types/components/messages/AssistantThinkingMessage.js +26 -3
  43. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  44. package/lib/types/components/messages/AssistantToolUseMessage.js +12 -1
  45. package/lib/types/dsh-adapter/channel.d.ts +31 -4
  46. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  47. package/lib/types/dsh-adapter/channel.js +267 -102
  48. package/lib/types/dsh-adapter/childStderr.d.ts.map +1 -1
  49. package/lib/types/dsh-adapter/childStderr.js +10 -0
  50. package/lib/types/dsh-adapter/command-attribution.d.ts.map +1 -1
  51. package/lib/types/dsh-adapter/command-attribution.js +2 -2
  52. package/lib/types/dsh-adapter/command-trees.d.ts +7 -1
  53. package/lib/types/dsh-adapter/command-trees.d.ts.map +1 -1
  54. package/lib/types/dsh-adapter/command-trees.js +70 -20
  55. package/lib/types/dsh-adapter/component-identity.d.ts +5 -0
  56. package/lib/types/dsh-adapter/component-identity.d.ts.map +1 -1
  57. package/lib/types/dsh-adapter/component-identity.js +14 -14
  58. package/lib/types/dsh-adapter/decision-guard.d.ts.map +1 -1
  59. package/lib/types/dsh-adapter/decision-guard.js +10 -16
  60. package/lib/types/dsh-adapter/dialogs.d.ts +2 -3
  61. package/lib/types/dsh-adapter/dialogs.d.ts.map +1 -1
  62. package/lib/types/dsh-adapter/dialogs.js +114 -60
  63. package/lib/types/dsh-adapter/effect-ledger.d.ts +0 -8
  64. package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
  65. package/lib/types/dsh-adapter/effect-ledger.js +73 -53
  66. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  67. package/lib/types/dsh-adapter/extension-events.js +39 -1
  68. package/lib/types/dsh-adapter/grants.d.ts.map +1 -1
  69. package/lib/types/dsh-adapter/grants.js +43 -14
  70. package/lib/types/dsh-adapter/host-access.d.ts +37 -0
  71. package/lib/types/dsh-adapter/host-access.d.ts.map +1 -0
  72. package/lib/types/dsh-adapter/host-access.js +652 -0
  73. package/lib/types/dsh-adapter/host-descriptor.d.ts +2 -2
  74. package/lib/types/dsh-adapter/host-descriptor.d.ts.map +1 -1
  75. package/lib/types/dsh-adapter/host-descriptor.js +31 -8
  76. package/lib/types/dsh-adapter/index.d.ts +4 -0
  77. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  78. package/lib/types/dsh-adapter/index.js +1 -0
  79. package/lib/types/dsh-adapter/message-observer.d.ts +10 -15
  80. package/lib/types/dsh-adapter/message-observer.d.ts.map +1 -1
  81. package/lib/types/dsh-adapter/message-observer.js +114 -70
  82. package/lib/types/dsh-adapter/plugin-host.d.ts +39 -6
  83. package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
  84. package/lib/types/dsh-adapter/plugin-host.js +139 -44
  85. package/lib/types/dsh-adapter/plugin-storage.d.ts +0 -5
  86. package/lib/types/dsh-adapter/plugin-storage.d.ts.map +1 -1
  87. package/lib/types/dsh-adapter/plugin-storage.js +48 -36
  88. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  89. package/lib/types/dsh-adapter/plugin.js +97 -16
  90. package/lib/types/dsh-adapter/promptDebug.d.ts +0 -6
  91. package/lib/types/dsh-adapter/promptDebug.d.ts.map +1 -1
  92. package/lib/types/dsh-adapter/promptDebug.js +13 -4
  93. package/lib/types/dsh-adapter/renderers.d.ts +6 -14
  94. package/lib/types/dsh-adapter/renderers.d.ts.map +1 -1
  95. package/lib/types/dsh-adapter/renderers.js +81 -46
  96. package/lib/types/dsh-adapter/scenes.d.ts +8 -4
  97. package/lib/types/dsh-adapter/scenes.d.ts.map +1 -1
  98. package/lib/types/dsh-adapter/scenes.js +136 -37
  99. package/lib/types/dsh-adapter/settings-sections.d.ts +7 -3
  100. package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
  101. package/lib/types/dsh-adapter/settings-sections.js +106 -26
  102. package/lib/types/dsh-adapter/shortcuts.d.ts +8 -10
  103. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  104. package/lib/types/dsh-adapter/shortcuts.js +108 -36
  105. package/lib/types/dsh-adapter/status.d.ts +6 -7
  106. package/lib/types/dsh-adapter/status.d.ts.map +1 -1
  107. package/lib/types/dsh-adapter/status.js +88 -22
  108. package/lib/types/dsh-adapter/workspaces.d.ts +16 -5
  109. package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -1
  110. package/lib/types/dsh-adapter/workspaces.js +287 -170
  111. package/lib/types/extensions.d.ts +10 -5
  112. package/lib/types/extensions.d.ts.map +1 -1
  113. package/lib/types/extensions.js +11 -5
  114. package/lib/types/force-production-react.d.ts +1 -0
  115. package/lib/types/force-production-react.d.ts.map +1 -0
  116. package/lib/types/force-production-react.js +12 -0
  117. package/lib/types/i18n.d.ts +22 -6
  118. package/lib/types/i18n.d.ts.map +1 -1
  119. package/lib/types/i18n.js +14 -2
  120. package/lib/types/index.d.ts +1 -0
  121. package/lib/types/index.d.ts.map +1 -1
  122. package/lib/types/index.js +1 -0
  123. package/lib/types/ink/components/App.d.ts +2 -0
  124. package/lib/types/ink/components/App.d.ts.map +1 -1
  125. package/lib/types/ink/components/App.js +4 -0
  126. package/lib/types/ink/ink.d.ts +20 -3
  127. package/lib/types/ink/ink.d.ts.map +1 -1
  128. package/lib/types/ink/ink.js +57 -5
  129. package/lib/types/ink/log-update.d.ts.map +1 -1
  130. package/lib/types/ink/log-update.js +128 -9
  131. package/lib/types/ink/output.d.ts +28 -2
  132. package/lib/types/ink/output.d.ts.map +1 -1
  133. package/lib/types/ink/output.js +158 -12
  134. package/lib/types/ink/screen.d.ts +39 -0
  135. package/lib/types/ink/screen.d.ts.map +1 -1
  136. package/lib/types/ink/screen.js +117 -0
  137. package/lib/types/ink/terminal.d.ts.map +1 -1
  138. package/lib/types/ink/terminal.js +10 -2
  139. package/lib/types/ink/wrapAnsi.d.ts +1 -1
  140. package/lib/types/ink/wrapAnsi.d.ts.map +1 -1
  141. package/lib/types/ink/wrapAnsi.js +29 -2
  142. package/lib/types/plugin-host.d.ts +13 -11
  143. package/lib/types/plugin-host.d.ts.map +1 -1
  144. package/lib/types/plugin-host.js +16 -16
  145. package/lib/types/plugin-spec/registry.d.ts +2 -2
  146. package/lib/types/plugin-spec/registry.d.ts.map +1 -1
  147. package/lib/types/plugin-spec/registry.js +113 -18
  148. package/lib/types/plugin-spec/tui-extension.d.ts.map +1 -1
  149. package/lib/types/plugin-spec/tui-extension.js +2 -0
  150. package/lib/types/plugin-spec/validate.d.ts.map +1 -1
  151. package/lib/types/plugin-spec/validate.js +20 -1
  152. package/lib/types/scenes.d.ts +2 -1
  153. package/lib/types/scenes.d.ts.map +1 -1
  154. package/lib/types/scenes.js +1 -1
  155. package/lib/types/screens/Chat.d.ts +3 -3
  156. package/lib/types/screens/Chat.d.ts.map +1 -1
  157. package/lib/types/screens/Chat.js +38 -17
  158. package/lib/types/screens/SessionBrowser.d.ts.map +1 -1
  159. package/lib/types/screens/SessionBrowser.js +10 -3
  160. package/lib/types/sessions/view.d.ts +3 -2
  161. package/lib/types/sessions/view.d.ts.map +1 -1
  162. package/lib/types/sessions/view.js +18 -0
  163. package/lib/types/settings-sections.d.ts +2 -1
  164. package/lib/types/settings-sections.d.ts.map +1 -1
  165. package/lib/types/settings-sections.js +1 -1
  166. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -1
  167. package/lib/types/utils/execFileNoThrow.js +3 -0
  168. package/lib/types/workspaces.d.ts +2 -1
  169. package/lib/types/workspaces.d.ts.map +1 -1
  170. package/lib/types/workspaces.js +1 -1
  171. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -0
  172. package/node_modules/@dsh-std/command/package.json +1 -1
  173. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -0
  174. package/node_modules/@dsh-std/connection/lib/memory.d.ts +1 -1
  175. package/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -1
  176. package/node_modules/@dsh-std/connection/lib/memory.js +1 -0
  177. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  178. package/node_modules/@dsh-std/connection/package.json +1 -1
  179. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  180. package/node_modules/@dsh-std/core/package.json +1 -1
  181. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -0
  182. package/node_modules/@dsh-std/manifest/package.json +1 -1
  183. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -0
  184. package/node_modules/@dsh-std/messages/package.json +1 -1
  185. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -0
  186. package/node_modules/@dsh-std/presentation/README.md +2 -1
  187. package/node_modules/@dsh-std/presentation/README.zh.md +2 -1
  188. package/node_modules/@dsh-std/presentation/lib/callback.d.ts +2 -0
  189. package/node_modules/@dsh-std/presentation/lib/callback.js +179 -0
  190. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -0
  191. package/node_modules/@dsh-std/presentation/lib/index.d.ts +44 -1
  192. package/node_modules/@dsh-std/presentation/lib/index.d.ts.map +1 -1
  193. package/node_modules/@dsh-std/presentation/lib/index.js +6 -3
  194. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  195. package/node_modules/@dsh-std/presentation/package.json +7 -3
  196. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -0
  197. package/node_modules/@dsh-std/storage/package.json +1 -1
  198. package/package.json +10 -5
  199. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -0
  200. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.d.ts +1 -1
  201. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -1
  202. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js +1 -0
  203. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  204. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +1 -1
  205. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  206. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +1 -1
  207. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -0
  208. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +1 -1
  209. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -0
  210. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +2 -1
  211. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +2 -1
  212. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.d.ts +2 -0
  213. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js +179 -0
  214. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -0
  215. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.d.ts +44 -1
  216. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.d.ts.map +1 -1
  217. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js +6 -3
  218. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  219. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +7 -3
  220. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  221. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +1 -1
  222. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  223. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +1 -1
  224. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  225. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +1 -1
  226. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -0
  227. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.d.ts +1 -1
  228. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.d.ts.map +1 -1
  229. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js +1 -0
  230. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  231. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +1 -1
  232. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  233. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +1 -1
  234. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -0
  235. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +1 -1
  236. package/ecosystem-spec/registry/registry-0.15.json +0 -57
  237. /package/{ecosystem-spec → dsh-ecosystem-spec}/registry/contracts/decision-events-v1alpha1.json +0 -0
  238. /package/{ecosystem-spec → dsh-ecosystem-spec}/registry/host-descriptor.tui.example.json +0 -0
  239. /package/{ecosystem-spec → dsh-ecosystem-spec}/schemas/conformance-claim.schema.json +0 -0
  240. /package/{ecosystem-spec → dsh-ecosystem-spec}/schemas/effect-ledger-record.schema.json +0 -0
  241. /package/{ecosystem-spec → dsh-ecosystem-spec}/schemas/host-descriptor.schema.json +0 -0
@@ -8,14 +8,18 @@
8
8
  "exports": {
9
9
  ".": { "types": "./lib/index.d.ts", "default": "./lib/index.js" },
10
10
  "./operations": { "types": "./lib/operations.d.ts", "default": "./lib/operations.js" },
11
- "./interaction": { "types": "./lib/interaction.d.ts", "default": "./lib/interaction.js" }
11
+ "./interaction": { "types": "./lib/interaction.d.ts", "default": "./lib/interaction.js" },
12
+ "./callback": { "types": "./lib/callback.d.ts", "default": "./lib/callback.js" }
12
13
  },
13
- "files": ["lib"],
14
+ "files": ["lib", "CHANGELOG.md"],
14
15
  "scripts": {
15
16
  "build": "pnpm run typecheck && tsdown",
16
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
17
18
  "test": "vitest run --passWithNoTests"
18
19
  },
19
- "dependencies": { "@dsh-std/core": "workspace:*", "@dsh-std/connection": "workspace:*" },
20
+ "dependencies": {
21
+ "@dsh-std/core": "workspace:*",
22
+ "@dsh-std/connection": "workspace:*"
23
+ },
20
24
  "engines": { "node": "^22.19 || >=24" }
21
25
  }
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/core` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
+ - Separated evaluator knowledge, requirements, potential support, and live support.
@@ -11,7 +11,7 @@
11
11
  "default": "./lib/index.js"
12
12
  }
13
13
  },
14
- "files": ["lib"],
14
+ "files": ["lib", "CHANGELOG.md"],
15
15
  "scripts": {
16
16
  "build": "pnpm run typecheck && tsdown",
17
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/core` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
+ - Separated evaluator knowledge, requirements, potential support, and live support.
@@ -11,7 +11,7 @@
11
11
  "default": "./lib/index.js"
12
12
  }
13
13
  },
14
- "files": ["lib"],
14
+ "files": ["lib", "CHANGELOG.md"],
15
15
  "scripts": {
16
16
  "build": "pnpm run typecheck && tsdown",
17
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/core` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
+ - Separated evaluator knowledge, requirements, potential support, and live support.
@@ -11,7 +11,7 @@
11
11
  "default": "./lib/index.js"
12
12
  }
13
13
  },
14
- "files": ["lib"],
14
+ "files": ["lib", "CHANGELOG.md"],
15
15
  "scripts": {
16
16
  "build": "pnpm run typecheck && tsdown",
17
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/connection` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined connection services, endpoint views, participant publication, capability bindings, and attachments.
8
+ - Added an in-memory transport for protocol conformance and host integration tests.
@@ -18,7 +18,7 @@ interface MemoryConnectionPair {
18
18
  renegotiate(options: ResolveConnectionOptions): ConnectionPlan;
19
19
  close(reason?: string): void;
20
20
  }
21
- declare function createMemoryConnectionPair(left: MemoryConnectionEndpoint, right: MemoryConnectionEndpoint, options: ResolveConnectionOptions): MemoryConnectionPair;
21
+ declare function createMemoryConnectionPair(left: ConnectionEndpoint, right: ConnectionEndpoint, options: ResolveConnectionOptions): MemoryConnectionPair;
22
22
  //#endregion
23
23
  export { MemoryConnectionEndpoint, MemoryConnectionPair, createMemoryConnectionPair };
24
24
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","names":[],"sources":["../src/memory.ts"],"mappings":";;cAmBa,oCAAoC;UACvC;mBACS;mBACA;EAEL,YAAA,OAAO;MAKf,SAAS;EAEb,aAAa,OAAO;EAQpB,SAAS,gBAAgB;EAgBnB,SAAS,kBAAkB,mBAAmB,qBAAqB,YAAY,mBAAmB,QAAQ,aAAa,QAAQ;EAerI,cAAc,WAAW,OAAO;;UAMjB;WACN,MAAM;WACN,OAAO;WACP,MAAM;EACf,YAAY,SAAS,2BAA2B;EAChD,MAAM;;iBAGQ,2BACd,MAAM,0BAA0B,OAAO,0BAA0B,SAAS,2BACzE"}
1
+ {"version":3,"file":"memory.d.ts","names":[],"sources":["../src/memory.ts"],"mappings":";;cAmBa,oCAAoC;UACvC;mBACS;mBACA;EAEL,YAAA,OAAO;MAKf,SAAS;EAEb,aAAa,OAAO;EAQpB,SAAS,gBAAgB;EAgBnB,SAAS,kBAAkB,mBAAmB,qBAAqB,YAAY,mBAAmB,QAAQ,aAAa,QAAQ;EAerI,cAAc,WAAW,OAAO;;UAMjB;WACN,MAAM;WACN,OAAO;WACP,MAAM;EACf,YAAY,SAAS,2BAA2B;EAChD,MAAM;;iBAGQ,2BACd,MAAM,oBAAoB,OAAO,oBAAoB,SAAS,2BAC7D"}
@@ -89,6 +89,7 @@ var MemoryPair = class {
89
89
  };
90
90
  }
91
91
  binding(local, participantId, reference) {
92
+ if (this.closed) return void 0;
92
93
  return this.currentPlan.bindings.find((binding) => binding.consumer.endpoint.instanceId === local.offer.endpoint.instanceId && binding.consumer.participantId === participantId && sameProtocol(binding.requirement, reference));
93
94
  }
94
95
  invoke(local, participantId, reference, operation, input, signal) {
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","names":[],"sources":["../src/memory.ts"],"sourcesContent":["import { sameProtocol, type ApiReference } from '@dsh-std/core'\nimport {\n ConnectionInvocationError,\n type CapabilityCall,\n type CapabilityClient,\n type CapabilityDispatch,\n type CapabilityImplementation,\n type ConnectionEndpoint,\n type StandardConnection,\n} from './connection.js'\nimport {\n validateEndpointOffer,\n type CapabilityBinding,\n type ConnectionPlan,\n type EndpointOffer,\n type ResolveConnectionOptions,\n} from './model.js'\nimport { resolveConnection } from './resolve.js'\n\nexport class MemoryConnectionEndpoint implements ConnectionEndpoint {\n private currentOffer: EndpointOffer\n private readonly implementations: CapabilityImplementation[] = []\n private readonly offerListeners = new Set<(offer: EndpointOffer) => void>()\n\n constructor(offer: EndpointOffer) {\n validateEndpointOffer(offer)\n this.currentOffer = offer\n }\n\n get offer(): EndpointOffer { return this.currentOffer }\n\n replaceOffer(offer: EndpointOffer): void {\n validateEndpointOffer(offer)\n if (offer.endpoint.instanceId !== this.currentOffer.endpoint.instanceId) throw new TypeError('replacement offer belongs to another endpoint')\n if (offer.revision <= this.currentOffer.revision) throw new TypeError('replacement offer must increase revision')\n this.currentOffer = offer\n for (const listener of this.offerListeners) listener(offer)\n }\n\n register(implementation: CapabilityImplementation): () => void {\n const declaration = this.currentOffer.declarations.find(row => row.participant.id === implementation.participantId)\n if (declaration === undefined || !(declaration.supports ?? []).some(row => sameProtocol(row, implementation.protocol))) {\n throw new TypeError('implementation is not backed by a live endpoint declaration')\n }\n if (this.implementations.some(row => row.participantId === implementation.participantId && sameProtocol(row.protocol, implementation.protocol))) {\n throw new TypeError('capability implementation is already registered')\n }\n const stored = Object.freeze({ ...implementation, protocol: Object.freeze({ ...implementation.protocol }) })\n this.implementations.push(stored)\n return () => {\n const index = this.implementations.indexOf(stored)\n if (index >= 0) this.implementations.splice(index, 1)\n }\n }\n\n async dispatch<TInput = unknown, TOutput = unknown, TProgress = unknown>(invocation: CapabilityDispatch<TInput, TProgress>): Promise<TOutput> {\n const implementation = this.implementations.find(row =>\n row.participantId === invocation.binding.provider.participantId\n && sameProtocol(row.protocol, invocation.binding.support))\n if (implementation === undefined) throw new ConnectionInvocationError('handler-missing', 'binding has no live implementation')\n return await implementation.handle(invocation.operation, invocation.input, Object.freeze({\n connectionId: invocation.connectionId,\n planRevision: invocation.planRevision,\n invocationId: invocation.invocationId,\n binding: invocation.binding,\n signal: invocation.signal,\n progress: invocation.progress,\n })) as TOutput\n }\n\n onOfferChange(listener: (offer: EndpointOffer) => void): () => void {\n this.offerListeners.add(listener)\n return () => { this.offerListeners.delete(listener) }\n }\n}\n\nexport interface MemoryConnectionPair {\n readonly left: StandardConnection\n readonly right: StandardConnection\n readonly plan: ConnectionPlan\n renegotiate(options: ResolveConnectionOptions): ConnectionPlan\n close(reason?: string): void\n}\n\nexport function createMemoryConnectionPair(\n left: MemoryConnectionEndpoint, right: MemoryConnectionEndpoint, options: ResolveConnectionOptions,\n): MemoryConnectionPair {\n return new MemoryPair(left, right, options)\n}\n\nclass MemoryPair implements MemoryConnectionPair {\n private currentPlan: ConnectionPlan\n private closed = false\n private invocationSequence = 0\n private readonly listeners = new Set<(plan: ConnectionPlan) => void>()\n private readonly active = new Map<string, (reason?: string, code?: 'cancelled' | 'connection-closed') => void>()\n readonly left: StandardConnection\n readonly right: StandardConnection\n\n constructor(\n private readonly leftEndpoint: MemoryConnectionEndpoint,\n private readonly rightEndpoint: MemoryConnectionEndpoint,\n options: ResolveConnectionOptions,\n ) {\n this.currentPlan = resolveConnection(leftEndpoint.offer, rightEndpoint.offer, options)\n this.left = new MemoryConnectionView(this, leftEndpoint, rightEndpoint)\n this.right = new MemoryConnectionView(this, rightEndpoint, leftEndpoint)\n }\n\n get plan(): ConnectionPlan { return this.currentPlan }\n\n renegotiate(options: ResolveConnectionOptions): ConnectionPlan {\n this.assertOpen()\n if (options.connectionId !== this.currentPlan.connectionId || options.revision <= this.currentPlan.revision) {\n throw new TypeError('renegotiation must retain connectionId and increase revision')\n }\n this.currentPlan = resolveConnection(this.leftEndpoint.offer, this.rightEndpoint.offer, options)\n for (const listener of this.listeners) listener(this.currentPlan)\n return this.currentPlan\n }\n\n subscribe(listener: (plan: ConnectionPlan) => void): () => void {\n this.listeners.add(listener)\n return () => { this.listeners.delete(listener) }\n }\n\n binding(local: MemoryConnectionEndpoint, participantId: string, reference: ApiReference): CapabilityBinding | undefined {\n return this.currentPlan.bindings.find(binding =>\n binding.consumer.endpoint.instanceId === local.offer.endpoint.instanceId\n && binding.consumer.participantId === participantId\n && sameProtocol(binding.requirement, reference))\n }\n\n invoke<TInput, TOutput, TProgress>(\n local: MemoryConnectionEndpoint,\n participantId: string,\n reference: ApiReference,\n operation: string,\n input: TInput,\n signal?: AbortSignal,\n ): CapabilityCall<TOutput, TProgress> {\n this.assertOpen()\n signal?.throwIfAborted()\n const binding = this.binding(local, participantId, reference)\n if (binding === undefined) throw new ConnectionInvocationError('capability-unbound', `participant ${JSON.stringify(participantId)} has no binding`)\n const target = binding.provider.endpoint.instanceId === this.leftEndpoint.offer.endpoint.instanceId\n ? this.leftEndpoint\n : binding.provider.endpoint.instanceId === this.rightEndpoint.offer.endpoint.instanceId ? this.rightEndpoint : undefined\n if (target === undefined) throw new ConnectionInvocationError('handler-missing', 'binding provider endpoint is unavailable')\n const invocationId = `${local.offer.endpoint.instanceId}:${String(++this.invocationSequence)}`\n const controller = new AbortController()\n const progress = new AsyncProgress<TProgress>()\n let settled = false\n let resolveResult!: (value: TOutput | PromiseLike<TOutput>) => void\n let rejectResult!: (reason?: unknown) => void\n const result = new Promise<TOutput>((resolve, reject) => { resolveResult = resolve; rejectResult = reject })\n const finish = () => { settled = true; this.active.delete(invocationId); progress.close() }\n const cancel = (reason = 'capability invocation cancelled', code: 'cancelled' | 'connection-closed' = 'cancelled') => {\n if (settled) return\n controller.abort(reason)\n finish()\n rejectResult(new ConnectionInvocationError(code, reason))\n }\n this.active.set(invocationId, cancel)\n if (signal !== undefined) signal.addEventListener('abort', () => cancel(abortMessage(signal)), { once: true })\n queueMicrotask(() => {\n if (settled) return\n Promise.resolve(target.dispatch<TInput, TOutput, TProgress>({\n connectionId: this.currentPlan.connectionId,\n planRevision: binding.planRevision,\n invocationId,\n binding,\n operation,\n input,\n signal: controller.signal,\n progress: value => { if (!settled) progress.push(value) },\n })).then(value => { if (!settled) { finish(); resolveResult(value) } }, error => {\n if (!settled) { finish(); rejectResult(error) }\n })\n })\n return Object.freeze({ invocationId, result, progress, cancel })\n }\n\n close(reason = 'connection closed'): void {\n if (this.closed) return\n this.closed = true\n for (const cancel of this.active.values()) cancel(reason, 'connection-closed')\n this.active.clear()\n this.listeners.clear()\n }\n\n private assertOpen(): void {\n if (this.closed) throw new ConnectionInvocationError('connection-closed', 'connection is closed')\n }\n}\n\nclass MemoryConnectionView implements StandardConnection {\n constructor(\n private readonly pair: MemoryPair,\n private readonly localEndpoint: MemoryConnectionEndpoint,\n private readonly remoteEndpoint: MemoryConnectionEndpoint,\n ) {}\n\n get id(): string { return this.pair.plan.connectionId }\n get local() { return this.localEndpoint.offer.endpoint }\n get remote() { return this.remoteEndpoint.offer.endpoint }\n get plan() { return this.pair.plan }\n\n client(participantId: string): CapabilityClient {\n nonEmpty(participantId, 'participantId')\n return Object.freeze({\n participantId,\n binding: (reference: ApiReference) => this.pair.binding(this.localEndpoint, participantId, reference),\n invoke: <TInput, TOutput, TProgress>(\n reference: ApiReference, operation: string, input: TInput, options?: { readonly signal?: AbortSignal },\n ) => this.pair.invoke<TInput, TOutput, TProgress>(this.localEndpoint, participantId, reference, operation, input, options?.signal),\n })\n }\n\n onPlanChange(listener: (plan: ConnectionPlan) => void): () => void { return this.pair.subscribe(listener) }\n close(reason?: string): void { this.pair.close(reason) }\n}\n\nclass AsyncProgress<T> implements AsyncIterableIterator<T> {\n private readonly values: T[] = []\n private readonly waiters: Array<(result: IteratorResult<T>) => void> = []\n private done = false\n push(value: T): void {\n if (this.done) return\n const waiter = this.waiters.shift()\n if (waiter === undefined) this.values.push(value)\n else waiter({ done: false, value })\n }\n close(): void {\n if (this.done) return\n this.done = true\n for (const waiter of this.waiters.splice(0)) waiter({ done: true, value: undefined })\n }\n next(): Promise<IteratorResult<T>> {\n if (this.values.length > 0) return Promise.resolve({ done: false, value: this.values.shift() as T })\n if (this.done) return Promise.resolve({ done: true, value: undefined })\n return new Promise(resolve => { this.waiters.push(resolve) })\n }\n return(): Promise<IteratorResult<T>> { this.close(); return Promise.resolve({ done: true, value: undefined }) }\n [Symbol.asyncIterator](): AsyncIterableIterator<T> { return this }\n}\n\nfunction abortMessage(signal: AbortSignal): string {\n return signal.reason instanceof Error ? signal.reason.message : typeof signal.reason === 'string' ? signal.reason : 'capability invocation cancelled'\n}\n\nfunction nonEmpty(value: string, label: string): void {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be non-empty`)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"memory.js","names":[],"sources":["../src/memory.ts"],"sourcesContent":["import { sameProtocol, type ApiReference } from '@dsh-std/core'\nimport {\n ConnectionInvocationError,\n type CapabilityCall,\n type CapabilityClient,\n type CapabilityDispatch,\n type CapabilityImplementation,\n type ConnectionEndpoint,\n type StandardConnection,\n} from './connection.js'\nimport {\n validateEndpointOffer,\n type CapabilityBinding,\n type ConnectionPlan,\n type EndpointOffer,\n type ResolveConnectionOptions,\n} from './model.js'\nimport { resolveConnection } from './resolve.js'\n\nexport class MemoryConnectionEndpoint implements ConnectionEndpoint {\n private currentOffer: EndpointOffer\n private readonly implementations: CapabilityImplementation[] = []\n private readonly offerListeners = new Set<(offer: EndpointOffer) => void>()\n\n constructor(offer: EndpointOffer) {\n validateEndpointOffer(offer)\n this.currentOffer = offer\n }\n\n get offer(): EndpointOffer { return this.currentOffer }\n\n replaceOffer(offer: EndpointOffer): void {\n validateEndpointOffer(offer)\n if (offer.endpoint.instanceId !== this.currentOffer.endpoint.instanceId) throw new TypeError('replacement offer belongs to another endpoint')\n if (offer.revision <= this.currentOffer.revision) throw new TypeError('replacement offer must increase revision')\n this.currentOffer = offer\n for (const listener of this.offerListeners) listener(offer)\n }\n\n register(implementation: CapabilityImplementation): () => void {\n const declaration = this.currentOffer.declarations.find(row => row.participant.id === implementation.participantId)\n if (declaration === undefined || !(declaration.supports ?? []).some(row => sameProtocol(row, implementation.protocol))) {\n throw new TypeError('implementation is not backed by a live endpoint declaration')\n }\n if (this.implementations.some(row => row.participantId === implementation.participantId && sameProtocol(row.protocol, implementation.protocol))) {\n throw new TypeError('capability implementation is already registered')\n }\n const stored = Object.freeze({ ...implementation, protocol: Object.freeze({ ...implementation.protocol }) })\n this.implementations.push(stored)\n return () => {\n const index = this.implementations.indexOf(stored)\n if (index >= 0) this.implementations.splice(index, 1)\n }\n }\n\n async dispatch<TInput = unknown, TOutput = unknown, TProgress = unknown>(invocation: CapabilityDispatch<TInput, TProgress>): Promise<TOutput> {\n const implementation = this.implementations.find(row =>\n row.participantId === invocation.binding.provider.participantId\n && sameProtocol(row.protocol, invocation.binding.support))\n if (implementation === undefined) throw new ConnectionInvocationError('handler-missing', 'binding has no live implementation')\n return await implementation.handle(invocation.operation, invocation.input, Object.freeze({\n connectionId: invocation.connectionId,\n planRevision: invocation.planRevision,\n invocationId: invocation.invocationId,\n binding: invocation.binding,\n signal: invocation.signal,\n progress: invocation.progress,\n })) as TOutput\n }\n\n onOfferChange(listener: (offer: EndpointOffer) => void): () => void {\n this.offerListeners.add(listener)\n return () => { this.offerListeners.delete(listener) }\n }\n}\n\nexport interface MemoryConnectionPair {\n readonly left: StandardConnection\n readonly right: StandardConnection\n readonly plan: ConnectionPlan\n renegotiate(options: ResolveConnectionOptions): ConnectionPlan\n close(reason?: string): void\n}\n\nexport function createMemoryConnectionPair(\n left: ConnectionEndpoint, right: ConnectionEndpoint, options: ResolveConnectionOptions,\n): MemoryConnectionPair {\n return new MemoryPair(left, right, options)\n}\n\nclass MemoryPair implements MemoryConnectionPair {\n private currentPlan: ConnectionPlan\n private closed = false\n private invocationSequence = 0\n private readonly listeners = new Set<(plan: ConnectionPlan) => void>()\n private readonly active = new Map<string, (reason?: string, code?: 'cancelled' | 'connection-closed') => void>()\n readonly left: StandardConnection\n readonly right: StandardConnection\n\n constructor(\n private readonly leftEndpoint: ConnectionEndpoint,\n private readonly rightEndpoint: ConnectionEndpoint,\n options: ResolveConnectionOptions,\n ) {\n this.currentPlan = resolveConnection(leftEndpoint.offer, rightEndpoint.offer, options)\n this.left = new MemoryConnectionView(this, leftEndpoint, rightEndpoint)\n this.right = new MemoryConnectionView(this, rightEndpoint, leftEndpoint)\n }\n\n get plan(): ConnectionPlan { return this.currentPlan }\n\n renegotiate(options: ResolveConnectionOptions): ConnectionPlan {\n this.assertOpen()\n if (options.connectionId !== this.currentPlan.connectionId || options.revision <= this.currentPlan.revision) {\n throw new TypeError('renegotiation must retain connectionId and increase revision')\n }\n this.currentPlan = resolveConnection(this.leftEndpoint.offer, this.rightEndpoint.offer, options)\n for (const listener of this.listeners) listener(this.currentPlan)\n return this.currentPlan\n }\n\n subscribe(listener: (plan: ConnectionPlan) => void): () => void {\n this.listeners.add(listener)\n return () => { this.listeners.delete(listener) }\n }\n\n binding(local: ConnectionEndpoint, participantId: string, reference: ApiReference): CapabilityBinding | undefined {\n if (this.closed) return undefined\n return this.currentPlan.bindings.find(binding =>\n binding.consumer.endpoint.instanceId === local.offer.endpoint.instanceId\n && binding.consumer.participantId === participantId\n && sameProtocol(binding.requirement, reference))\n }\n\n invoke<TInput, TOutput, TProgress>(\n local: ConnectionEndpoint,\n participantId: string,\n reference: ApiReference,\n operation: string,\n input: TInput,\n signal?: AbortSignal,\n ): CapabilityCall<TOutput, TProgress> {\n this.assertOpen()\n signal?.throwIfAborted()\n const binding = this.binding(local, participantId, reference)\n if (binding === undefined) throw new ConnectionInvocationError('capability-unbound', `participant ${JSON.stringify(participantId)} has no binding`)\n const target = binding.provider.endpoint.instanceId === this.leftEndpoint.offer.endpoint.instanceId\n ? this.leftEndpoint\n : binding.provider.endpoint.instanceId === this.rightEndpoint.offer.endpoint.instanceId ? this.rightEndpoint : undefined\n if (target === undefined) throw new ConnectionInvocationError('handler-missing', 'binding provider endpoint is unavailable')\n const invocationId = `${local.offer.endpoint.instanceId}:${String(++this.invocationSequence)}`\n const controller = new AbortController()\n const progress = new AsyncProgress<TProgress>()\n let settled = false\n let resolveResult!: (value: TOutput | PromiseLike<TOutput>) => void\n let rejectResult!: (reason?: unknown) => void\n const result = new Promise<TOutput>((resolve, reject) => { resolveResult = resolve; rejectResult = reject })\n const finish = () => { settled = true; this.active.delete(invocationId); progress.close() }\n const cancel = (reason = 'capability invocation cancelled', code: 'cancelled' | 'connection-closed' = 'cancelled') => {\n if (settled) return\n controller.abort(reason)\n finish()\n rejectResult(new ConnectionInvocationError(code, reason))\n }\n this.active.set(invocationId, cancel)\n if (signal !== undefined) signal.addEventListener('abort', () => cancel(abortMessage(signal)), { once: true })\n queueMicrotask(() => {\n if (settled) return\n Promise.resolve(target.dispatch<TInput, TOutput, TProgress>({\n connectionId: this.currentPlan.connectionId,\n planRevision: binding.planRevision,\n invocationId,\n binding,\n operation,\n input,\n signal: controller.signal,\n progress: value => { if (!settled) progress.push(value) },\n })).then(value => { if (!settled) { finish(); resolveResult(value) } }, error => {\n if (!settled) { finish(); rejectResult(error) }\n })\n })\n return Object.freeze({ invocationId, result, progress, cancel })\n }\n\n close(reason = 'connection closed'): void {\n if (this.closed) return\n this.closed = true\n for (const cancel of this.active.values()) cancel(reason, 'connection-closed')\n this.active.clear()\n this.listeners.clear()\n }\n\n private assertOpen(): void {\n if (this.closed) throw new ConnectionInvocationError('connection-closed', 'connection is closed')\n }\n\n}\n\nclass MemoryConnectionView implements StandardConnection {\n constructor(\n private readonly pair: MemoryPair,\n private readonly localEndpoint: ConnectionEndpoint,\n private readonly remoteEndpoint: ConnectionEndpoint,\n ) {}\n\n get id(): string { return this.pair.plan.connectionId }\n get local() { return this.localEndpoint.offer.endpoint }\n get remote() { return this.remoteEndpoint.offer.endpoint }\n get plan() { return this.pair.plan }\n\n client(participantId: string): CapabilityClient {\n nonEmpty(participantId, 'participantId')\n return Object.freeze({\n participantId,\n binding: (reference: ApiReference) => this.pair.binding(this.localEndpoint, participantId, reference),\n invoke: <TInput, TOutput, TProgress>(\n reference: ApiReference, operation: string, input: TInput, options?: { readonly signal?: AbortSignal },\n ) => this.pair.invoke<TInput, TOutput, TProgress>(this.localEndpoint, participantId, reference, operation, input, options?.signal),\n })\n }\n\n onPlanChange(listener: (plan: ConnectionPlan) => void): () => void { return this.pair.subscribe(listener) }\n close(reason?: string): void { this.pair.close(reason) }\n}\n\nclass AsyncProgress<T> implements AsyncIterableIterator<T> {\n private readonly values: T[] = []\n private readonly waiters: Array<(result: IteratorResult<T>) => void> = []\n private done = false\n push(value: T): void {\n if (this.done) return\n const waiter = this.waiters.shift()\n if (waiter === undefined) this.values.push(value)\n else waiter({ done: false, value })\n }\n close(): void {\n if (this.done) return\n this.done = true\n for (const waiter of this.waiters.splice(0)) waiter({ done: true, value: undefined })\n }\n next(): Promise<IteratorResult<T>> {\n if (this.values.length > 0) return Promise.resolve({ done: false, value: this.values.shift() as T })\n if (this.done) return Promise.resolve({ done: true, value: undefined })\n return new Promise(resolve => { this.waiters.push(resolve) })\n }\n return(): Promise<IteratorResult<T>> { this.close(); return Promise.resolve({ done: true, value: undefined }) }\n [Symbol.asyncIterator](): AsyncIterableIterator<T> { return this }\n}\n\nfunction abortMessage(signal: AbortSignal): string {\n return signal.reason instanceof Error ? signal.reason.message : typeof signal.reason === 'string' ? signal.reason : 'capability invocation cancelled'\n}\n\nfunction nonEmpty(value: string, label: string): void {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be non-empty`)\n}\n"],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  ".": { "types": "./lib/index.d.ts", "default": "./lib/index.js" },
10
10
  "./memory": { "types": "./lib/memory.d.ts", "default": "./lib/memory.js" }
11
11
  },
12
- "files": ["lib"],
12
+ "files": ["lib", "CHANGELOG.md"],
13
13
  "scripts": {
14
14
  "build": "pnpm run typecheck && tsdown",
15
15
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/core` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
+ - Separated evaluator knowledge, requirements, potential support, and live support.
@@ -11,7 +11,7 @@
11
11
  "default": "./lib/index.js"
12
12
  }
13
13
  },
14
- "files": ["lib"],
14
+ "files": ["lib", "CHANGELOG.md"],
15
15
  "scripts": {
16
16
  "build": "pnpm run typecheck && tsdown",
17
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/core` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
+ - Separated evaluator knowledge, requirements, potential support, and live support.
@@ -11,7 +11,7 @@
11
11
  "default": "./lib/index.js"
12
12
  }
13
13
  },
14
- "files": ["lib"],
14
+ "files": ["lib", "CHANGELOG.md"],
15
15
  "scripts": {
16
16
  "build": "pnpm run typecheck && tsdown",
17
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -1,57 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "profileVersion": "tui-admission/0.15",
4
- "std": {
5
- "repository": "https://github.com/Yan-Zero/dsh-std",
6
- "submodule": "vendor/dsh-std",
7
- "manifestVersion": "0.15"
8
- },
9
- "imports": [
10
- {
11
- "name": "commands",
12
- "coordinates": {"apiVersion": "commands.dsh/v1alpha1", "kind": "Command"},
13
- "package": "@dsh-std/command",
14
- "kind": "capability",
15
- "permissions": ["commands.invoke"]
16
- },
17
- {
18
- "name": "storage.local",
19
- "coordinates": {"apiVersion": "storage.dsh/v1alpha1", "kind": "LocalStorage"},
20
- "package": "@dsh-std/storage",
21
- "kind": "capability",
22
- "permissions": ["storage.local.read", "storage.local.write"]
23
- },
24
- {
25
- "name": "messages.observe",
26
- "coordinates": {"apiVersion": "messages.dsh/v1alpha1", "kind": "MessageObserver"},
27
- "package": "@dsh-std/messages",
28
- "kind": "event",
29
- "permissions": ["messages.observe.read"],
30
- "eventEnvelope": "@dsh-std/messages/schema/message-observer-envelope-0.15.json"
31
- },
32
- {
33
- "name": "presentation.open-external",
34
- "coordinates": {"apiVersion": "presentation.dsh/v1alpha1", "kind": "OpenExternal"},
35
- "package": "@dsh-std/presentation",
36
- "kind": "capability",
37
- "permissions": []
38
- }
39
- ],
40
- "definitions": [
41
- {
42
- "name": "tui.decision-events",
43
- "authority": "dsh-tui",
44
- "coordinates": {"apiVersion": "tui.dsh/v1alpha1", "kind": "DecisionEvents"},
45
- "kind": "capability",
46
- "profile": "registry/contracts/decision-events-v1alpha1.json",
47
- "profileHash": "sha256:56440dde1b00c210b22761a0cba139ce0a20207330567777cebe1e48b494ceb0",
48
- "permissions": [
49
- "session.input.intercept",
50
- "session.rewind.intercept",
51
- "session.switch.intercept",
52
- "session.compact.intercept"
53
- ]
54
- }
55
- ],
56
- "facetApiVersions": ["v1alpha1"]
57
- }