@openwaggle/extension-sdk 0.0.0-bootstrap.0 → 0.1.0

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 (104) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -0
  3. package/README.md +3 -0
  4. package/dist/agent-loop.d.ts +128 -0
  5. package/dist/agent-loop.js +47 -0
  6. package/dist/broker-validation.d.ts +17 -0
  7. package/dist/broker-validation.js +99 -0
  8. package/dist/broker.d.ts +193 -0
  9. package/dist/broker.js +81 -0
  10. package/dist/constants.d.ts +183 -0
  11. package/dist/constants.js +245 -0
  12. package/dist/context.d.ts +66 -0
  13. package/dist/context.js +49 -0
  14. package/dist/contribution-types.d.ts +21 -0
  15. package/dist/contribution-types.js +1 -0
  16. package/dist/core-types.d.ts +58 -0
  17. package/dist/core-types.js +1 -0
  18. package/dist/docs-validation.d.ts +3 -0
  19. package/dist/docs-validation.js +93 -0
  20. package/dist/docs.d.ts +231 -0
  21. package/dist/docs.js +85 -0
  22. package/dist/index.d.ts +15 -0
  23. package/dist/index.js +10 -0
  24. package/dist/internal-validation.d.ts +4 -0
  25. package/dist/internal-validation.js +24 -0
  26. package/dist/json.d.ts +9 -0
  27. package/dist/json.js +3 -0
  28. package/dist/manifest-contributions.d.ts +380 -0
  29. package/dist/manifest-contributions.js +75 -0
  30. package/dist/manifest-primitives.d.ts +20 -0
  31. package/dist/manifest-primitives.js +118 -0
  32. package/dist/manifest.d.ts +303 -0
  33. package/dist/manifest.js +89 -0
  34. package/dist/openwaggle-sdk.d.ts +2 -0
  35. package/dist/openwaggle-sdk.js +127 -0
  36. package/dist/openwaggle-types.d.ts +111 -0
  37. package/dist/openwaggle-types.js +1 -0
  38. package/dist/openwaggle-validation.d.ts +12 -0
  39. package/dist/openwaggle-validation.js +135 -0
  40. package/dist/registry-types.d.ts +34 -0
  41. package/dist/registry-types.js +1 -0
  42. package/dist/runtime-sdk.d.ts +2 -0
  43. package/dist/runtime-sdk.js +19 -0
  44. package/dist/runtime-types.d.ts +19 -0
  45. package/dist/runtime-types.js +1 -0
  46. package/dist/runtime.d.ts +22 -0
  47. package/dist/runtime.js +22 -0
  48. package/dist/schema.d.ts +13 -0
  49. package/dist/schema.js +25 -0
  50. package/dist/sdk-types.d.ts +92 -0
  51. package/dist/sdk-types.js +1 -0
  52. package/dist/storage-sdk.d.ts +2 -0
  53. package/dist/storage-sdk.js +51 -0
  54. package/dist/storage-types.d.ts +40 -0
  55. package/dist/storage-types.js +1 -0
  56. package/dist/theme-data.d.ts +126 -0
  57. package/dist/theme-data.js +144 -0
  58. package/dist/theme-types.d.ts +61 -0
  59. package/dist/theme-types.js +1 -0
  60. package/dist/theme.d.ts +6 -0
  61. package/dist/theme.js +128 -0
  62. package/dist/types.d.ts +6 -0
  63. package/dist/types.js +1 -0
  64. package/dist/ui-constants.d.ts +24 -0
  65. package/dist/ui-constants.js +22 -0
  66. package/dist/ui-stylesheet.d.ts +8 -0
  67. package/dist/ui-stylesheet.js +223 -0
  68. package/dist/ui.d.ts +6 -0
  69. package/dist/ui.js +16 -0
  70. package/dist-cjs/agent-loop.js +83 -0
  71. package/dist-cjs/broker-validation.js +109 -0
  72. package/dist-cjs/broker.js +120 -0
  73. package/dist-cjs/constants.js +248 -0
  74. package/dist-cjs/context.js +54 -0
  75. package/dist-cjs/contribution-types.js +2 -0
  76. package/dist-cjs/core-types.js +2 -0
  77. package/dist-cjs/docs-validation.js +97 -0
  78. package/dist-cjs/docs.js +121 -0
  79. package/dist-cjs/index.js +56 -0
  80. package/dist-cjs/internal-validation.js +30 -0
  81. package/dist-cjs/json.js +39 -0
  82. package/dist-cjs/manifest-contributions.js +111 -0
  83. package/dist-cjs/manifest-primitives.js +158 -0
  84. package/dist-cjs/manifest.js +140 -0
  85. package/dist-cjs/openwaggle-sdk.js +130 -0
  86. package/dist-cjs/openwaggle-types.js +2 -0
  87. package/dist-cjs/openwaggle-validation.js +148 -0
  88. package/dist-cjs/package.json +3 -0
  89. package/dist-cjs/registry-types.js +2 -0
  90. package/dist-cjs/runtime-sdk.js +22 -0
  91. package/dist-cjs/runtime-types.js +2 -0
  92. package/dist-cjs/runtime.js +61 -0
  93. package/dist-cjs/schema.js +61 -0
  94. package/dist-cjs/sdk-types.js +2 -0
  95. package/dist-cjs/storage-sdk.js +54 -0
  96. package/dist-cjs/storage-types.js +2 -0
  97. package/dist-cjs/theme-data.js +147 -0
  98. package/dist-cjs/theme-types.js +2 -0
  99. package/dist-cjs/theme.js +135 -0
  100. package/dist-cjs/types.js +2 -0
  101. package/dist-cjs/ui-constants.js +25 -0
  102. package/dist-cjs/ui-stylesheet.js +227 -0
  103. package/dist-cjs/ui.js +24 -0
  104. package/package.json +98 -8
@@ -0,0 +1,380 @@
1
+ import * as Schema from 'effect/Schema';
2
+ import type { SchemaType } from './schema.js';
3
+ export declare const extensionCapabilityDeclarationSchema: Schema.filter<Schema.Struct<{
4
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
5
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
6
+ scopes: Schema.optional<Schema.Array$<Schema.Literal<["app", "project", "session", "branch"]>>>;
7
+ }>>;
8
+ export declare const extensionCommandContributionSchema: Schema.Struct<{
9
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
10
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
11
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
12
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
13
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
14
+ category: Schema.optional<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>>;
15
+ target: Schema.optional<Schema.Struct<{
16
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
17
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
18
+ }>>;
19
+ }>;
20
+ export declare const extensionRouteContributionSchema: Schema.filter<Schema.Struct<{
21
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
22
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
23
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
24
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
25
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
26
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
27
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
28
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
29
+ target: Schema.optional<Schema.Struct<{
30
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
31
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
32
+ }>>;
33
+ matches: Schema.optional<Schema.Struct<{
34
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
35
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
36
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
37
+ }>>;
38
+ }>>;
39
+ export declare const extensionSlotContributionSchema: Schema.filter<Schema.Struct<{
40
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
41
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
42
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
43
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
44
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
45
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
46
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
47
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
48
+ target: Schema.optional<Schema.Struct<{
49
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
50
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
51
+ }>>;
52
+ matches: Schema.optional<Schema.Struct<{
53
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
54
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
55
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
56
+ }>>;
57
+ }>>;
58
+ export declare const extensionContributionsSchema: Schema.Struct<{
59
+ commands: Schema.optional<Schema.Array$<Schema.Struct<{
60
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
61
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
62
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
63
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
64
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
65
+ category: Schema.optional<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>>;
66
+ target: Schema.optional<Schema.Struct<{
67
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
68
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
69
+ }>>;
70
+ }>>>;
71
+ slashCommands: Schema.optional<Schema.Array$<Schema.Struct<{
72
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
73
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
74
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
75
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
76
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
77
+ category: Schema.optional<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>>;
78
+ target: Schema.optional<Schema.Struct<{
79
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
80
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
81
+ }>>;
82
+ }>>>;
83
+ routes: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
84
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
85
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
86
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
87
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
88
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
89
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
90
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
91
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
92
+ target: Schema.optional<Schema.Struct<{
93
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
94
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
95
+ }>>;
96
+ matches: Schema.optional<Schema.Struct<{
97
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
98
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
99
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
100
+ }>>;
101
+ }>>>>;
102
+ settingsSections: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
103
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
104
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
105
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
106
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
107
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
108
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
109
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
110
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
111
+ target: Schema.optional<Schema.Struct<{
112
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
113
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
114
+ }>>;
115
+ matches: Schema.optional<Schema.Struct<{
116
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
117
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
118
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
119
+ }>>;
120
+ }>>>>;
121
+ sidePanels: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
122
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
123
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
124
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
125
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
126
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
127
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
128
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
129
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
130
+ target: Schema.optional<Schema.Struct<{
131
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
132
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
133
+ }>>;
134
+ matches: Schema.optional<Schema.Struct<{
135
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
136
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
137
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
138
+ }>>;
139
+ }>>>>;
140
+ dialogs: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
141
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
142
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
143
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
144
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
145
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
146
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
147
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
148
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
149
+ target: Schema.optional<Schema.Struct<{
150
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
151
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
152
+ }>>;
153
+ matches: Schema.optional<Schema.Struct<{
154
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
155
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
156
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
157
+ }>>;
158
+ }>>>>;
159
+ transcriptRenderers: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
160
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
161
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
162
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
163
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
164
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
165
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
166
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
167
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
168
+ target: Schema.optional<Schema.Struct<{
169
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
170
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
171
+ }>>;
172
+ matches: Schema.optional<Schema.Struct<{
173
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
174
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
175
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
176
+ }>>;
177
+ }>>>>;
178
+ toolRenderers: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
179
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
180
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
181
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
182
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
183
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
184
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
185
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
186
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
187
+ target: Schema.optional<Schema.Struct<{
188
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
189
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
190
+ }>>;
191
+ matches: Schema.optional<Schema.Struct<{
192
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
193
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
194
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
195
+ }>>;
196
+ }>>>>;
197
+ customMessageRenderers: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
198
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
199
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
200
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
201
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
202
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
203
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
204
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
205
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
206
+ target: Schema.optional<Schema.Struct<{
207
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
208
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
209
+ }>>;
210
+ matches: Schema.optional<Schema.Struct<{
211
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
212
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
213
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
214
+ }>>;
215
+ }>>>>;
216
+ interactionRenderers: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
217
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
218
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
219
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
220
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
221
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
222
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
223
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
224
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
225
+ target: Schema.optional<Schema.Struct<{
226
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
227
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
228
+ }>>;
229
+ matches: Schema.optional<Schema.Struct<{
230
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
231
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
232
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
233
+ }>>;
234
+ }>>>>;
235
+ statusWidgets: Schema.optional<Schema.Array$<Schema.filter<Schema.Struct<{
236
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
237
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
238
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
239
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
240
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
241
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
242
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
243
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
244
+ target: Schema.optional<Schema.Struct<{
245
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
246
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
247
+ }>>;
248
+ matches: Schema.optional<Schema.Struct<{
249
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
250
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
251
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
252
+ }>>;
253
+ }>>>>;
254
+ }>;
255
+ export declare const extensionCommandContributionRegistrationSchema: Schema.Struct<{
256
+ family: Schema.Literal<["commands", "slashCommands"]>;
257
+ contribution: Schema.Struct<{
258
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
259
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
260
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
261
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
262
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
263
+ category: Schema.optional<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>>;
264
+ target: Schema.optional<Schema.Struct<{
265
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
266
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
267
+ }>>;
268
+ }>;
269
+ }>;
270
+ export declare const extensionRouteContributionRegistrationSchema: Schema.Struct<{
271
+ family: Schema.Literal<["routes"]>;
272
+ contribution: Schema.filter<Schema.Struct<{
273
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
274
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
275
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
276
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
277
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
278
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
279
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
280
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
281
+ target: Schema.optional<Schema.Struct<{
282
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
283
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
284
+ }>>;
285
+ matches: Schema.optional<Schema.Struct<{
286
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
287
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
288
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
289
+ }>>;
290
+ }>>;
291
+ }>;
292
+ export declare const extensionSlotContributionRegistrationSchema: Schema.Struct<{
293
+ family: Schema.Literal<["settingsSections", "sidePanels", "dialogs", "transcriptRenderers", "toolRenderers", "customMessageRenderers", "interactionRenderers", "statusWidgets"]>;
294
+ contribution: Schema.filter<Schema.Struct<{
295
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
296
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
297
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
298
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
299
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
300
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
301
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
302
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
303
+ target: Schema.optional<Schema.Struct<{
304
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
305
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
306
+ }>>;
307
+ matches: Schema.optional<Schema.Struct<{
308
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
309
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
310
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
311
+ }>>;
312
+ }>>;
313
+ }>;
314
+ export declare const extensionContributionRegistrationSchema: Schema.Union<[Schema.Struct<{
315
+ family: Schema.Literal<["commands", "slashCommands"]>;
316
+ contribution: Schema.Struct<{
317
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
318
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
319
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
320
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
321
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
322
+ category: Schema.optional<Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>>;
323
+ target: Schema.optional<Schema.Struct<{
324
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
325
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
326
+ }>>;
327
+ }>;
328
+ }>, Schema.Struct<{
329
+ family: Schema.Literal<["routes"]>;
330
+ contribution: Schema.filter<Schema.Struct<{
331
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
332
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
333
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
334
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
335
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
336
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
337
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
338
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
339
+ target: Schema.optional<Schema.Struct<{
340
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
341
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
342
+ }>>;
343
+ matches: Schema.optional<Schema.Struct<{
344
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
345
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
346
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
347
+ }>>;
348
+ }>>;
349
+ }>, Schema.Struct<{
350
+ family: Schema.Literal<["settingsSections", "sidePanels", "dialogs", "transcriptRenderers", "toolRenderers", "customMessageRenderers", "interactionRenderers", "statusWidgets"]>;
351
+ contribution: Schema.filter<Schema.Struct<{
352
+ capability: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
353
+ method: Schema.optional<Schema.filter<Schema.filter<typeof Schema.String>>>;
354
+ methods: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
355
+ id: Schema.filter<Schema.filter<typeof Schema.String>>;
356
+ title: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
357
+ runtime: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
358
+ execution: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
359
+ entry: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
360
+ target: Schema.optional<Schema.Struct<{
361
+ projectPaths: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
362
+ sessionIds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
363
+ }>>;
364
+ matches: Schema.optional<Schema.Struct<{
365
+ toolNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
366
+ customMessageNames: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
367
+ interactionKinds: Schema.optional<Schema.Array$<Schema.filter<Schema.filter<typeof Schema.String>>>>;
368
+ }>>;
369
+ }>>;
370
+ }>]>;
371
+ export declare const extensionContributionUnregistrationSchema: Schema.Struct<{
372
+ family: Schema.Literal<["commands", "slashCommands", "routes", "settingsSections", "sidePanels", "dialogs", "transcriptRenderers", "toolRenderers", "customMessageRenderers", "interactionRenderers", "statusWidgets"]>;
373
+ contributionId: Schema.filter<Schema.filter<typeof Schema.String>>;
374
+ }>;
375
+ export type ExtensionCapabilityDeclaration = SchemaType<typeof extensionCapabilityDeclarationSchema>;
376
+ export type ExtensionCommandContribution = SchemaType<typeof extensionCommandContributionSchema>;
377
+ export type ExtensionContributions = SchemaType<typeof extensionContributionsSchema>;
378
+ export type ExtensionContributionRegistration = SchemaType<typeof extensionContributionRegistrationSchema>;
379
+ export type ExtensionContributionUnregistration = SchemaType<typeof extensionContributionUnregistrationSchema>;
380
+ export type ExtensionEntryContribution = SchemaType<typeof extensionRouteContributionSchema> | SchemaType<typeof extensionSlotContributionSchema>;
@@ -0,0 +1,75 @@
1
+ import * as Schema from 'effect/Schema';
2
+ import { OPENWAGGLE_EXTENSION } from './constants.js';
3
+ import { extensionCapabilityScopeSchema, extensionCommandContributionFamilySchema, extensionContributionEntryPathSchema, extensionContributionFamilySchema, extensionContributionIdSchema, extensionContributionRuntimeSchema, extensionExecutionPlacementSchema, extensionNonEmptyStringSchema, extensionSlotContributionFamilySchema, validateBrokerCapabilityDeclaration, } from './manifest-primitives.js';
4
+ export const extensionCapabilityDeclarationSchema = Schema.Struct({
5
+ id: extensionContributionIdSchema,
6
+ methods: Schema.optional(Schema.Array(extensionContributionIdSchema)),
7
+ scopes: Schema.optional(Schema.Array(extensionCapabilityScopeSchema)),
8
+ }).pipe(Schema.filter(validateBrokerCapabilityDeclaration));
9
+ const brokerBindingSchema = {
10
+ capability: Schema.optional(extensionContributionIdSchema),
11
+ method: Schema.optional(extensionContributionIdSchema),
12
+ methods: Schema.optional(Schema.Array(extensionContributionIdSchema)),
13
+ };
14
+ const targetSchema = Schema.Struct({
15
+ projectPaths: Schema.optional(Schema.Array(extensionNonEmptyStringSchema)),
16
+ sessionIds: Schema.optional(Schema.Array(extensionNonEmptyStringSchema)),
17
+ });
18
+ const matchSchema = Schema.Struct({
19
+ toolNames: Schema.optional(Schema.Array(extensionNonEmptyStringSchema)),
20
+ customMessageNames: Schema.optional(Schema.Array(extensionNonEmptyStringSchema)),
21
+ interactionKinds: Schema.optional(Schema.Array(extensionNonEmptyStringSchema)),
22
+ });
23
+ function validateEntryRuntime(input) {
24
+ return (input.runtime !== OPENWAGGLE_EXTENSION.CONTRIBUTION_RUNTIME.TRUSTED_RENDERER ||
25
+ input.execution === OPENWAGGLE_EXTENSION.EXECUTION_PLACEMENT.HOST_RENDERER ||
26
+ 'Trusted renderer contributions must execute in the host renderer.');
27
+ }
28
+ export const extensionCommandContributionSchema = Schema.Struct({
29
+ id: extensionContributionIdSchema,
30
+ title: extensionNonEmptyStringSchema.pipe(Schema.maxLength(OPENWAGGLE_EXTENSION.LIMITS.NAME_MAX_LENGTH)),
31
+ category: Schema.optional(extensionNonEmptyStringSchema.pipe(Schema.maxLength(OPENWAGGLE_EXTENSION.LIMITS.NAME_MAX_LENGTH))),
32
+ target: Schema.optional(targetSchema),
33
+ ...brokerBindingSchema,
34
+ });
35
+ export const extensionRouteContributionSchema = Schema.Struct({
36
+ id: extensionContributionIdSchema,
37
+ title: extensionNonEmptyStringSchema.pipe(Schema.maxLength(OPENWAGGLE_EXTENSION.LIMITS.NAME_MAX_LENGTH)),
38
+ runtime: extensionContributionRuntimeSchema,
39
+ execution: extensionExecutionPlacementSchema,
40
+ entry: extensionContributionEntryPathSchema,
41
+ target: Schema.optional(targetSchema),
42
+ matches: Schema.optional(matchSchema),
43
+ ...brokerBindingSchema,
44
+ }).pipe(Schema.filter(validateEntryRuntime));
45
+ export const extensionSlotContributionSchema = extensionRouteContributionSchema;
46
+ export const extensionContributionsSchema = Schema.Struct({
47
+ commands: Schema.optional(Schema.Array(extensionCommandContributionSchema)),
48
+ slashCommands: Schema.optional(Schema.Array(extensionCommandContributionSchema)),
49
+ routes: Schema.optional(Schema.Array(extensionRouteContributionSchema)),
50
+ settingsSections: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
51
+ sidePanels: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
52
+ dialogs: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
53
+ transcriptRenderers: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
54
+ toolRenderers: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
55
+ customMessageRenderers: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
56
+ interactionRenderers: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
57
+ statusWidgets: Schema.optional(Schema.Array(extensionSlotContributionSchema)),
58
+ });
59
+ export const extensionCommandContributionRegistrationSchema = Schema.Struct({
60
+ family: extensionCommandContributionFamilySchema,
61
+ contribution: extensionCommandContributionSchema,
62
+ });
63
+ export const extensionRouteContributionRegistrationSchema = Schema.Struct({
64
+ family: Schema.Literal(OPENWAGGLE_EXTENSION.CONTRIBUTION_FAMILY.ROUTES),
65
+ contribution: extensionRouteContributionSchema,
66
+ });
67
+ export const extensionSlotContributionRegistrationSchema = Schema.Struct({
68
+ family: extensionSlotContributionFamilySchema,
69
+ contribution: extensionSlotContributionSchema,
70
+ });
71
+ export const extensionContributionRegistrationSchema = Schema.Union(extensionCommandContributionRegistrationSchema, extensionRouteContributionRegistrationSchema, extensionSlotContributionRegistrationSchema);
72
+ export const extensionContributionUnregistrationSchema = Schema.Struct({
73
+ family: extensionContributionFamilySchema,
74
+ contributionId: extensionContributionIdSchema,
75
+ });
@@ -0,0 +1,20 @@
1
+ import * as Schema from 'effect/Schema';
2
+ export declare const extensionNonEmptyStringSchema: Schema.filter<Schema.filter<typeof Schema.String>>;
3
+ export declare function isBuildCommand(value: string): string | true;
4
+ export declare function isRuntimeRequirementBinary(value: string): string | true;
5
+ export declare function isNetworkOrigin(value: string): string | true;
6
+ export declare function validateBrokerCapabilityDeclaration(declaration: {
7
+ readonly id: string;
8
+ readonly methods?: readonly string[];
9
+ }): string | true;
10
+ export declare const extensionIdSchema: Schema.filter<Schema.filter<typeof Schema.String>>;
11
+ export declare const extensionContributionIdSchema: Schema.filter<Schema.filter<typeof Schema.String>>;
12
+ export declare const extensionSemverVersionSchema: Schema.filter<Schema.filter<typeof Schema.String>>;
13
+ export declare const extensionRelativePathSchema: Schema.filter<Schema.filter<typeof Schema.String>>;
14
+ export declare const extensionContributionEntryPathSchema: Schema.filter<Schema.filter<Schema.filter<typeof Schema.String>>>;
15
+ export declare const extensionCapabilityScopeSchema: Schema.Literal<["app", "project", "session", "branch"]>;
16
+ export declare const extensionContributionRuntimeSchema: Schema.SchemaClass<"federated-module" | "trusted-renderer", "federated-module" | "trusted-renderer", never>;
17
+ export declare const extensionExecutionPlacementSchema: Schema.SchemaClass<"host-renderer" | "frame", "host-renderer" | "frame", never>;
18
+ export declare const extensionContributionFamilySchema: Schema.Literal<["commands", "slashCommands", "routes", "settingsSections", "sidePanels", "dialogs", "transcriptRenderers", "toolRenderers", "customMessageRenderers", "interactionRenderers", "statusWidgets"]>;
19
+ export declare const extensionCommandContributionFamilySchema: Schema.Literal<["commands", "slashCommands"]>;
20
+ export declare const extensionSlotContributionFamilySchema: Schema.Literal<["settingsSections", "sidePanels", "dialogs", "transcriptRenderers", "toolRenderers", "customMessageRenderers", "interactionRenderers", "statusWidgets"]>;
@@ -0,0 +1,118 @@
1
+ import * as Schema from 'effect/Schema';
2
+ import { OPENWAGGLE_EXTENSION, OPENWAGGLE_EXTENSION_BROKER } from './constants.js';
3
+ export const extensionNonEmptyStringSchema = Schema.String.pipe(Schema.minLength(1), Schema.filter((value) => value.trim().length > 0 || 'Must not be empty.'));
4
+ function isExtensionId(value) {
5
+ if (value.length > OPENWAGGLE_EXTENSION.LIMITS.ID_MAX_LENGTH) {
6
+ return `Must be at most ${OPENWAGGLE_EXTENSION.LIMITS.ID_MAX_LENGTH} characters.`;
7
+ }
8
+ return (OPENWAGGLE_EXTENSION.PATTERNS.ID.test(value) ||
9
+ 'Use lowercase letters, numbers, dots, underscores, and dashes; start with a letter or number.');
10
+ }
11
+ function isContributionId(value) {
12
+ if (value.length > OPENWAGGLE_EXTENSION.LIMITS.CONTRIBUTION_ID_MAX_LENGTH) {
13
+ return `Must be at most ${OPENWAGGLE_EXTENSION.LIMITS.CONTRIBUTION_ID_MAX_LENGTH} characters.`;
14
+ }
15
+ return (OPENWAGGLE_EXTENSION.PATTERNS.CONTRIBUTION_ID.test(value) ||
16
+ 'Use lowercase letters, numbers, dots, underscores, dashes, and forward slashes; start with a letter or number.');
17
+ }
18
+ function isSemverVersion(value) {
19
+ return (OPENWAGGLE_EXTENSION.PATTERNS.SEMVER_VERSION.test(value) ||
20
+ 'Must be a semantic version such as 1.2.3.');
21
+ }
22
+ function isPortableRelativePath(value) {
23
+ const trimmed = value.trim();
24
+ if (trimmed.length === 0)
25
+ return 'Must not be empty.';
26
+ if (value !== trimmed)
27
+ return 'Must not have leading or trailing whitespace.';
28
+ if (trimmed.length > OPENWAGGLE_EXTENSION.LIMITS.RELATIVE_PATH_MAX_LENGTH) {
29
+ return `Must be at most ${OPENWAGGLE_EXTENSION.LIMITS.RELATIVE_PATH_MAX_LENGTH} characters.`;
30
+ }
31
+ if (trimmed.includes(OPENWAGGLE_EXTENSION.PATH.NUL_CHARACTER)) {
32
+ return 'Must not contain NUL bytes.';
33
+ }
34
+ if (trimmed.startsWith(OPENWAGGLE_EXTENSION.PATH.POSIX_SEPARATOR) ||
35
+ trimmed.startsWith(OPENWAGGLE_EXTENSION.PATH.WINDOWS_SEPARATOR) ||
36
+ OPENWAGGLE_EXTENSION.PATTERNS.WINDOWS_ABSOLUTE_PATH.test(trimmed)) {
37
+ return 'Must be relative to the extension package root.';
38
+ }
39
+ const segments = trimmed
40
+ .replaceAll(OPENWAGGLE_EXTENSION.PATH.WINDOWS_SEPARATOR, OPENWAGGLE_EXTENSION.PATH.POSIX_SEPARATOR)
41
+ .split(OPENWAGGLE_EXTENSION.PATH.POSIX_SEPARATOR);
42
+ return (!segments.some((segment) => segment.length === 0 ||
43
+ segment === OPENWAGGLE_EXTENSION.PATH.CURRENT_DIRECTORY_SEGMENT ||
44
+ segment === OPENWAGGLE_EXTENSION.PATH.RELATIVE_PARENT_SEGMENT) || 'Must not contain empty, "." or ".." path segments.');
45
+ }
46
+ export function isBuildCommand(value) {
47
+ if (value.length > OPENWAGGLE_EXTENSION.LIMITS.BUILD_COMMAND_MAX_LENGTH) {
48
+ return `Must be at most ${OPENWAGGLE_EXTENSION.LIMITS.BUILD_COMMAND_MAX_LENGTH} characters.`;
49
+ }
50
+ if (value.includes(OPENWAGGLE_EXTENSION.PATH.NUL_CHARACTER)) {
51
+ return 'Must not contain NUL bytes.';
52
+ }
53
+ return (!value.includes('\n') && !value.includes('\r')) || 'Must be a single command line.';
54
+ }
55
+ export function isRuntimeRequirementBinary(value) {
56
+ const trimmed = value.trim();
57
+ if (value !== trimmed)
58
+ return 'Must not have leading or trailing whitespace.';
59
+ if (value.length > OPENWAGGLE_EXTENSION.LIMITS.RUNTIME_REQUIREMENT_BINARY_MAX_LENGTH) {
60
+ return `Must be at most ${OPENWAGGLE_EXTENSION.LIMITS.RUNTIME_REQUIREMENT_BINARY_MAX_LENGTH} characters.`;
61
+ }
62
+ if (value.includes(OPENWAGGLE_EXTENSION.PATH.NUL_CHARACTER)) {
63
+ return 'Must not contain NUL bytes.';
64
+ }
65
+ if (value.includes('\n') || value.includes('\r'))
66
+ return 'Must be a single executable name.';
67
+ return ((!value.includes(OPENWAGGLE_EXTENSION.PATH.POSIX_SEPARATOR) &&
68
+ !value.includes(OPENWAGGLE_EXTENSION.PATH.WINDOWS_SEPARATOR)) ||
69
+ 'Must be an executable name, not a path.');
70
+ }
71
+ export function isNetworkOrigin(value) {
72
+ const trimmed = value.trim();
73
+ if (value !== trimmed)
74
+ return 'Must not have leading or trailing whitespace.';
75
+ if (value.length > OPENWAGGLE_EXTENSION.LIMITS.NETWORK_ORIGIN_MAX_LENGTH) {
76
+ return `Must be at most ${OPENWAGGLE_EXTENSION.LIMITS.NETWORK_ORIGIN_MAX_LENGTH} characters.`;
77
+ }
78
+ let url;
79
+ try {
80
+ url = new URL(value);
81
+ }
82
+ catch {
83
+ return 'Must be a valid URL origin.';
84
+ }
85
+ if (url.protocol !== 'https:')
86
+ return 'Must use https.';
87
+ return (url.origin === value ||
88
+ 'Must be an exact origin without a path, query, fragment, or trailing slash.');
89
+ }
90
+ export function validateBrokerCapabilityDeclaration(declaration) {
91
+ const supportedMethods = OPENWAGGLE_EXTENSION_BROKER.CAPABILITY_METHODS.find((descriptor) => descriptor.capability === declaration.id)?.methods ?? null;
92
+ if (supportedMethods === null)
93
+ return true;
94
+ if (declaration.methods === undefined || declaration.methods.length === 0) {
95
+ return `Built-in broker capability "${declaration.id}" must declare at least one supported method.`;
96
+ }
97
+ const unsupportedMethod = declaration.methods.find((declaredMethod) => !supportedMethods.some((method) => method === declaredMethod));
98
+ return (unsupportedMethod === undefined ||
99
+ `Built-in broker capability "${declaration.id}" does not support method "${unsupportedMethod}".`);
100
+ }
101
+ function isNotRuntimeModuleContextEntryPath(value) {
102
+ const [firstSegment] = value
103
+ .replaceAll(OPENWAGGLE_EXTENSION.PATH.WINDOWS_SEPARATOR, OPENWAGGLE_EXTENSION.PATH.POSIX_SEPARATOR)
104
+ .split(OPENWAGGLE_EXTENSION.PATH.POSIX_SEPARATOR);
105
+ return (firstSegment !== OPENWAGGLE_EXTENSION.RUNTIME_MODULE_PROTOCOL.MODULE_CONTEXT_SEGMENT ||
106
+ `Must not start with the reserved "${OPENWAGGLE_EXTENSION.RUNTIME_MODULE_PROTOCOL.MODULE_CONTEXT_SEGMENT}" runtime module path segment.`);
107
+ }
108
+ export const extensionIdSchema = Schema.String.pipe(Schema.minLength(1), Schema.filter(isExtensionId));
109
+ export const extensionContributionIdSchema = Schema.String.pipe(Schema.minLength(1), Schema.filter(isContributionId));
110
+ export const extensionSemverVersionSchema = Schema.String.pipe(Schema.minLength(1), Schema.filter(isSemverVersion));
111
+ export const extensionRelativePathSchema = Schema.String.pipe(Schema.minLength(1), Schema.filter(isPortableRelativePath));
112
+ export const extensionContributionEntryPathSchema = extensionRelativePathSchema.pipe(Schema.filter(isNotRuntimeModuleContextEntryPath));
113
+ export const extensionCapabilityScopeSchema = Schema.Literal(...OPENWAGGLE_EXTENSION.CAPABILITY_SCOPES);
114
+ export const extensionContributionRuntimeSchema = Schema.Literal(...OPENWAGGLE_EXTENSION.CONTRIBUTION_RUNTIMES);
115
+ export const extensionExecutionPlacementSchema = Schema.Literal(...OPENWAGGLE_EXTENSION.EXECUTION_PLACEMENTS);
116
+ export const extensionContributionFamilySchema = Schema.Literal(...OPENWAGGLE_EXTENSION.CONTRIBUTION_FAMILIES);
117
+ export const extensionCommandContributionFamilySchema = Schema.Literal(...OPENWAGGLE_EXTENSION.COMMAND_CONTRIBUTION_FAMILIES);
118
+ export const extensionSlotContributionFamilySchema = Schema.Literal(...OPENWAGGLE_EXTENSION.SLOT_CONTRIBUTION_FAMILIES);