@w6w/embed 0.2.1 → 0.2.11

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 (119) hide show
  1. package/dist/{ConfirmModal-RLbZT5_k.js → ConfirmModal-BE-SdX-O.js} +53 -49
  2. package/dist/{ConfirmModal-RLbZT5_k.js.map → ConfirmModal-BE-SdX-O.js.map} +1 -1
  3. package/dist/{CreateFunctionModal-DRsFx-FB.js → CreateFunctionModal-D6CQLpa_.js} +25 -25
  4. package/dist/{CreateFunctionModal-DRsFx-FB.js.map → CreateFunctionModal-D6CQLpa_.js.map} +1 -1
  5. package/dist/{DocumentFormModal-BExK1V-B.js → DocumentFormModal-YauVdolr.js} +5 -5
  6. package/dist/{DocumentFormModal-BExK1V-B.js.map → DocumentFormModal-YauVdolr.js.map} +1 -1
  7. package/dist/{ImportSpecModal-BDQIf6rg.js → ImportSpecModal-B7qd1Km2.js} +3 -3
  8. package/dist/{ImportSpecModal-BDQIf6rg.js.map → ImportSpecModal-B7qd1Km2.js.map} +1 -1
  9. package/dist/ModelRoutesManager-BGESQahw.js +345 -0
  10. package/dist/ModelRoutesManager-BGESQahw.js.map +1 -0
  11. package/dist/WorkflowEditor-CwvmAGp2.js +925 -0
  12. package/dist/WorkflowEditor-CwvmAGp2.js.map +1 -0
  13. package/dist/{apps-1FNUwbGv.js → apps-CboASBKr.js} +14 -14
  14. package/dist/{apps-1FNUwbGv.js.map → apps-CboASBKr.js.map} +1 -1
  15. package/dist/{callables-3mFrMVG_.js → callables-tOlflvbl.js} +11 -11
  16. package/dist/{callables-3mFrMVG_.js.map → callables-tOlflvbl.js.map} +1 -1
  17. package/dist/chrome/ConfirmModal.d.ts +4 -1
  18. package/dist/chrome/workspace.d.ts +4 -0
  19. package/dist/{coerce-input-BicYr7nc.js → coerce-input-DttlcSdO.js} +70 -58
  20. package/dist/coerce-input-DttlcSdO.js.map +1 -0
  21. package/dist/connections-D7cgXhDS.js +119 -0
  22. package/dist/connections-D7cgXhDS.js.map +1 -0
  23. package/dist/credentials-DaQU3Ca_.js +171 -0
  24. package/dist/credentials-DaQU3Ca_.js.map +1 -0
  25. package/dist/document-sources-UCwe8x77.js +91 -0
  26. package/dist/document-sources-UCwe8x77.js.map +1 -0
  27. package/dist/draft.mjs +1 -1
  28. package/dist/editor/BindingBanner.d.ts +13 -0
  29. package/dist/editor/CallableEditorFrame.d.ts +7 -0
  30. package/dist/editor/EndpointCards.d.ts +4 -1
  31. package/dist/editor/PublishControl.d.ts +19 -0
  32. package/dist/editor/TargetSelector.d.ts +15 -0
  33. package/dist/editor/TargetSelector.types.d.ts +2 -0
  34. package/dist/editor/definition.d.ts +2 -0
  35. package/dist/{editor-apps-BdenSV1o.js → editor-apps-BUZWld-m.js} +5 -5
  36. package/dist/{editor-apps-BdenSV1o.js.map → editor-apps-BUZWld-m.js.map} +1 -1
  37. package/dist/{editor-tools-RxmY5iyi.js → editor-tools-B_Lfx3kw.js} +11 -11
  38. package/dist/editor-tools-B_Lfx3kw.js.map +1 -0
  39. package/dist/editor.mjs +1 -1
  40. package/dist/editors.mjs +768 -621
  41. package/dist/editors.mjs.map +1 -1
  42. package/dist/{endpoints-B2ynbZo-.js → endpoints-DSRo1Lc5.js} +113 -107
  43. package/dist/endpoints-DSRo1Lc5.js.map +1 -0
  44. package/dist/fields-DvS8XZFc.js +21 -0
  45. package/dist/fields-DvS8XZFc.js.map +1 -0
  46. package/dist/forms/ModelBudgetsManager.d.ts +9 -0
  47. package/dist/forms/ModelRoutesManager.d.ts +14 -0
  48. package/dist/forms.d.ts +4 -0
  49. package/dist/forms.mjs +611 -212
  50. package/dist/forms.mjs.map +1 -1
  51. package/dist/index.mjs +119 -112
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/lib/binding-problems.d.ts +38 -0
  54. package/dist/lib/code-rail.d.ts +4 -2
  55. package/dist/lib/index.d.ts +1 -0
  56. package/dist/lib/invoke-error.d.ts +1 -0
  57. package/dist/lib/sdk-snippets.d.ts +1 -1
  58. package/dist/lib/target-fields.d.ts +8 -0
  59. package/dist/lib/trigger-preview.d.ts +1 -0
  60. package/dist/lib/workflow-live-run.d.ts +9 -2
  61. package/dist/lib/workflow-nodes.d.ts +5 -0
  62. package/dist/lib/workflow-validity.d.ts +1 -0
  63. package/dist/lib.mjs +72 -70
  64. package/dist/lists/ConnectionDependents.d.ts +31 -0
  65. package/dist/lists/ConnectionDetail.d.ts +4 -1
  66. package/dist/lists/ConnectionList.d.ts +4 -1
  67. package/dist/lists/CredentialDetail.d.ts +15 -0
  68. package/dist/lists/CredentialList.d.ts +14 -0
  69. package/dist/lists/ModelCatalog.d.ts +12 -0
  70. package/dist/lists/ModelUsage.d.ts +12 -0
  71. package/dist/lists.d.ts +8 -0
  72. package/dist/lists.mjs +1322 -604
  73. package/dist/lists.mjs.map +1 -1
  74. package/dist/models-bAayQPJ_.js +270 -0
  75. package/dist/models-bAayQPJ_.js.map +1 -0
  76. package/dist/{project-context-BiCjv_E3.js → project-context-Tvp-La7A.js} +3 -3
  77. package/dist/{project-context-BiCjv_E3.js.map → project-context-Tvp-La7A.js.map} +1 -1
  78. package/dist/rail.mjs +4 -4
  79. package/dist/repos/agents-studio-agents.d.ts +52 -0
  80. package/dist/repos/agents-studio-assets.d.ts +68 -0
  81. package/dist/repos/connections.d.ts +30 -12
  82. package/dist/repos/credentials.d.ts +83 -0
  83. package/dist/repos/endpoints.d.ts +9 -3
  84. package/dist/repos/fields.d.ts +34 -0
  85. package/dist/repos/functions.d.ts +7 -5
  86. package/dist/repos/index.d.ts +5 -0
  87. package/dist/repos/models.d.ts +289 -0
  88. package/dist/repos.mjs +613 -176
  89. package/dist/repos.mjs.map +1 -1
  90. package/dist/{slug-C4ktDPdy.js → slug-BVdgiP_L.js} +64 -60
  91. package/dist/slug-BVdgiP_L.js.map +1 -0
  92. package/dist/{spec-export-Cf3VQSQS.js → spec-export-CBbloO_n.js} +7 -7
  93. package/dist/{spec-export-Cf3VQSQS.js.map → spec-export-CBbloO_n.js.map} +1 -1
  94. package/dist/{spec-import-CjmxyZDR.js → spec-import-CW6R_Wk1.js} +160 -156
  95. package/dist/spec-import-CW6R_Wk1.js.map +1 -0
  96. package/dist/theme-context-E2ZhlXDX.js +6 -0
  97. package/dist/theme-context-E2ZhlXDX.js.map +1 -0
  98. package/dist/theme-context.d.ts +2 -0
  99. package/dist/trigger-preview-DKxfjzUY.js +145 -0
  100. package/dist/trigger-preview-DKxfjzUY.js.map +1 -0
  101. package/dist/{use-callable-draft-zHLpcr-b.js → use-callable-draft-DsALnSfF.js} +22 -22
  102. package/dist/{use-callable-draft-zHLpcr-b.js.map → use-callable-draft-DsALnSfF.js.map} +1 -1
  103. package/dist/{workflow-blank-DyL3_RUA.js → workflow-blank-DFpGObrn.js} +6 -6
  104. package/dist/{workflow-blank-DyL3_RUA.js.map → workflow-blank-DFpGObrn.js.map} +1 -1
  105. package/package.json +1 -1
  106. package/src/styles.css +2 -6
  107. package/dist/WorkflowEditor-DlbVv6Fs.js +0 -854
  108. package/dist/WorkflowEditor-DlbVv6Fs.js.map +0 -1
  109. package/dist/coerce-input-BicYr7nc.js.map +0 -1
  110. package/dist/connections-CjjYeRqb.js +0 -78
  111. package/dist/connections-CjjYeRqb.js.map +0 -1
  112. package/dist/document-sources-C0grrtdq.js +0 -86
  113. package/dist/document-sources-C0grrtdq.js.map +0 -1
  114. package/dist/editor-tools-RxmY5iyi.js.map +0 -1
  115. package/dist/endpoints-B2ynbZo-.js.map +0 -1
  116. package/dist/slug-C4ktDPdy.js.map +0 -1
  117. package/dist/spec-import-CjmxyZDR.js.map +0 -1
  118. package/dist/trigger-preview-VPkrryDl.js +0 -120
  119. package/dist/trigger-preview-VPkrryDl.js.map +0 -1
@@ -0,0 +1,270 @@
1
+ import { useQuery as c, useQueryClient as i, useMutation as y } from "@tanstack/react-query";
2
+ import { path as m } from "@w6w/sdk";
3
+ import { u as n } from "./client-context-CX61Bgw-.js";
4
+ const h = (e = {}) => ["model-catalog", e], M = ["model-providers"], K = (e) => ["model-routes", e], Q = (e) => ["model-budgets", e], C = (e, t) => ["model-budget-usage", e, t], E = (e, t = {}) => ["model-usage", e, t];
5
+ async function b(e, t = {}) {
6
+ return (await e.request({
7
+ method: "GET",
8
+ path: "/models",
9
+ query: { ...t }
10
+ })).body;
11
+ }
12
+ function F(e) {
13
+ var a;
14
+ const t = (a = e.operations) == null ? void 0 : a.complete, o = e.adapter === null, s = (t == null ? void 0 : t.supported) === !0 && !o, u = [...e.reasons ?? []];
15
+ return !s && u.length === 0 && u.push({
16
+ code: o || (t == null ? void 0 : t.supported) === !0 || e.installed ? "no_adapter" : "not_installed",
17
+ message: (t == null ? void 0 : t.reason) ?? "Not supported for this provider"
18
+ }), { supported: s, features: (t == null ? void 0 : t.features) ?? {}, reasons: u };
19
+ }
20
+ async function w(e, t = {}) {
21
+ const o = t.maxPages ?? 50, s = [];
22
+ let u;
23
+ for (let a = 0; a < o; a++) {
24
+ const l = await e(u);
25
+ if (s.push(...l.models), !l.nextCursor) return { models: s, truncated: !1 };
26
+ u = l.nextCursor;
27
+ }
28
+ return { models: s, truncated: !0 };
29
+ }
30
+ async function B(e) {
31
+ const o = (await e.request({
32
+ method: "GET",
33
+ path: "/models/providers"
34
+ })).body;
35
+ return Array.isArray(o) ? o : (o == null ? void 0 : o.providers) ?? [];
36
+ }
37
+ function k(e, t, o) {
38
+ var a, l;
39
+ const s = /* @__PURE__ */ new Map();
40
+ for (const d of t) d.designation && s.set(d.appId, d);
41
+ const u = [];
42
+ for (const d of e) {
43
+ const p = s.get(d.appId);
44
+ if (!p) continue;
45
+ const r = (a = p.operations) == null ? void 0 : a[o], g = { id: d.id, appId: d.appId, displayName: d.displayName };
46
+ if (o === "complete") {
47
+ const f = F(p);
48
+ f.supported || (g.disabledReason = (r == null ? void 0 : r.reason) ?? ((l = f.reasons[0]) == null ? void 0 : l.message) ?? "Not supported for this provider");
49
+ } else r != null && r.supported || (g.disabledReason = (r == null ? void 0 : r.reason) ?? "Not supported for this provider");
50
+ u.push(g);
51
+ }
52
+ return u;
53
+ }
54
+ function q(e) {
55
+ const t = (e.fallbacks ?? []).map((o) => {
56
+ const s = o;
57
+ return { model: s.model ?? s.modelId ?? "", connection: s.connection ?? s.connectionId ?? "" };
58
+ });
59
+ return { ...e, fallbacks: t };
60
+ }
61
+ async function R(e, t) {
62
+ return (await e.request({
63
+ method: "GET",
64
+ path: "/model-routes",
65
+ query: { project: t }
66
+ })).body.routes.map(q);
67
+ }
68
+ async function T(e, t, o) {
69
+ const s = await e.request({
70
+ method: "POST",
71
+ path: "/model-routes",
72
+ query: { project: t },
73
+ body: o
74
+ });
75
+ return q(s.body.route);
76
+ }
77
+ async function P(e, t, o, s) {
78
+ const u = await e.request({
79
+ method: "PATCH",
80
+ path: m`/model-routes/${o}`,
81
+ query: { project: t },
82
+ body: s
83
+ });
84
+ return q(u.body.route);
85
+ }
86
+ async function v(e, t, o) {
87
+ await e.request({
88
+ method: "DELETE",
89
+ path: m`/model-routes/${o}`,
90
+ query: { project: t }
91
+ });
92
+ }
93
+ async function A(e, t) {
94
+ return (await e.request({
95
+ method: "GET",
96
+ path: "/model-budgets",
97
+ query: { project: t }
98
+ })).body.budgets;
99
+ }
100
+ async function S(e, t, o) {
101
+ return (await e.request({
102
+ method: "POST",
103
+ path: "/model-budgets",
104
+ query: { project: t },
105
+ body: o
106
+ })).body;
107
+ }
108
+ async function U(e, t, o, s) {
109
+ return (await e.request({
110
+ method: "PATCH",
111
+ path: m`/model-budgets/${o}`,
112
+ query: { project: t },
113
+ body: s
114
+ })).body;
115
+ }
116
+ async function x(e, t, o) {
117
+ await e.request({
118
+ method: "DELETE",
119
+ path: m`/model-budgets/${o}`,
120
+ query: { project: t }
121
+ });
122
+ }
123
+ async function G(e, t, o) {
124
+ return (await e.request({
125
+ method: "GET",
126
+ path: m`/model-budgets/${o}/usage`,
127
+ query: { project: t }
128
+ })).body;
129
+ }
130
+ async function D(e, t, o = {}) {
131
+ return (await e.request({
132
+ method: "GET",
133
+ path: "/model-usage",
134
+ query: { project: t, ...o }
135
+ })).body;
136
+ }
137
+ function H(e = {}) {
138
+ const t = n();
139
+ return c({
140
+ queryKey: h(e),
141
+ queryFn: () => b(t, e)
142
+ });
143
+ }
144
+ function L(e = {}) {
145
+ const t = n();
146
+ return c({
147
+ queryKey: ["model-catalog-all", e],
148
+ queryFn: () => w((o) => b(t, { ...e, cursor: o }))
149
+ });
150
+ }
151
+ function O() {
152
+ const e = n();
153
+ return c({ queryKey: M, queryFn: () => B(e) });
154
+ }
155
+ function z(e) {
156
+ const t = n();
157
+ return c({
158
+ queryKey: K(e),
159
+ enabled: e != null,
160
+ queryFn: () => R(t, e)
161
+ });
162
+ }
163
+ function J(e) {
164
+ const t = n();
165
+ return c({
166
+ queryKey: Q(e),
167
+ enabled: e != null,
168
+ queryFn: () => A(t, e)
169
+ });
170
+ }
171
+ function V(e, t) {
172
+ const o = n();
173
+ return c({
174
+ queryKey: C(e, t),
175
+ enabled: t != null,
176
+ queryFn: () => G(o, t, e)
177
+ });
178
+ }
179
+ function W(e, t = {}) {
180
+ const o = n();
181
+ return c({
182
+ queryKey: E(e, t),
183
+ enabled: e != null,
184
+ queryFn: () => D(o, e, t)
185
+ });
186
+ }
187
+ function X() {
188
+ const e = n(), t = i();
189
+ return y({
190
+ mutationFn: (o) => T(e, o.project, o.input),
191
+ onSuccess: () => t.invalidateQueries({ queryKey: ["model-routes"] })
192
+ });
193
+ }
194
+ function Y() {
195
+ const e = n(), t = i();
196
+ return y({
197
+ mutationFn: (o) => P(e, o.project, o.name, o.patch),
198
+ onSuccess: () => t.invalidateQueries({ queryKey: ["model-routes"] })
199
+ });
200
+ }
201
+ function Z() {
202
+ const e = n(), t = i();
203
+ return y({
204
+ mutationFn: (o) => v(e, o.project, o.name),
205
+ onSuccess: () => t.invalidateQueries({ queryKey: ["model-routes"] })
206
+ });
207
+ }
208
+ function j() {
209
+ const e = n(), t = i();
210
+ return y({
211
+ mutationFn: (o) => S(e, o.project, o.input),
212
+ onSuccess: () => t.invalidateQueries({ queryKey: ["model-budgets"] })
213
+ });
214
+ }
215
+ function I() {
216
+ const e = n(), t = i();
217
+ return y({
218
+ mutationFn: (o) => U(e, o.project, o.id, o.patch),
219
+ // The row meter reads its limit from the per-budget usage query, so refresh it too.
220
+ onSuccess: (o, s) => Promise.all([
221
+ t.invalidateQueries({ queryKey: ["model-budgets"] }),
222
+ t.invalidateQueries({ queryKey: ["model-budget-usage", s.id] })
223
+ ])
224
+ });
225
+ }
226
+ function ee() {
227
+ const e = n(), t = i();
228
+ return y({
229
+ mutationFn: (o) => x(e, o.project, o.id),
230
+ onSuccess: () => t.invalidateQueries({ queryKey: ["model-budgets"] })
231
+ });
232
+ }
233
+ export {
234
+ U as A,
235
+ P as B,
236
+ j as C,
237
+ ee as D,
238
+ V as E,
239
+ J as F,
240
+ H as G,
241
+ W as H,
242
+ I,
243
+ Z as a,
244
+ L as b,
245
+ O as c,
246
+ k as d,
247
+ X as e,
248
+ Y as f,
249
+ F as g,
250
+ S as h,
251
+ T as i,
252
+ x as j,
253
+ v as k,
254
+ R as l,
255
+ G as m,
256
+ D as n,
257
+ A as o,
258
+ b as p,
259
+ B as q,
260
+ w as r,
261
+ C as s,
262
+ Q as t,
263
+ z as u,
264
+ h as v,
265
+ M as w,
266
+ K as x,
267
+ E as y,
268
+ q as z
269
+ };
270
+ //# sourceMappingURL=models-bAayQPJ_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-bAayQPJ_.js","sources":["../src/repos/models.ts"],"sourcesContent":["/**\n * The model-registry repo — catalog, routes, budgets and usage over `W6WClient.request()`\n * (the stable ops for these land in the SDK separately; `request()` is the public escape hatch,\n * same as `vars.ts`). Shapes are the server's pinned wire shapes (project plan §Wire shapes).\n *\n * Scope: the catalog is tenant-wide and NEVER sends `project`. Routes, budgets and usage are\n * project-scoped, so their hooks are `enabled: projectId != null` and every fetcher sends\n * `?project=`; a project-scoped page therefore never queries before the project resolves.\n */\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { W6WClient } from \"@w6w/sdk\";\nimport { path } from \"@w6w/sdk\";\nimport { useEmbedClient } from \"../draft/client-context.ts\";\n\nexport interface ModelRates {\n input?: number;\n output?: number;\n cachedInput?: number;\n cacheWrite?: number;\n perRequest?: number;\n currency?: string;\n}\nexport interface ModelRate {\n id: string;\n modelId: string;\n effectiveFrom: string;\n rates: ModelRates;\n source: \"seed\" | \"tenant\";\n}\nexport interface Model {\n id: string;\n providerAppId: string;\n provider: string;\n nativeId: string;\n displayName: string;\n capabilities: unknown;\n limits: { maxInputTokens?: number; maxOutputTokens?: number };\n status: \"active\" | \"deprecated\" | \"blocked\";\n source: \"discovered\" | \"manual\";\n currentRate: ModelRate | null;\n discoveredAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\nexport interface ModelFallback {\n model: string;\n connection: string;\n}\nexport interface ModelRoute {\n id: string;\n name: string;\n project: string;\n modelId: string;\n connectionId: string;\n fallbacks: ModelFallback[];\n defaults: Record<string, unknown>;\n status: \"active\" | \"broken\";\n createdAt: string;\n updatedAt: string;\n}\nexport interface ModelRouteInput {\n name: string;\n model: string;\n connection: string;\n fallbacks?: ModelFallback[];\n defaults?: Record<string, unknown>;\n}\nexport type ModelRoutePatch = Partial<Omit<ModelRouteInput, \"name\">>;\nexport interface ModelBudgetLimits {\n requests?: number;\n tokens?: number;\n costMinor?: number;\n currency?: string;\n}\nexport interface ModelBudget {\n id: string;\n scopeKind: string;\n scopeId: string | null;\n window: string;\n limits: ModelBudgetLimits;\n onBreach: \"block\" | \"warn\";\n}\nexport interface ModelBudgetInput {\n scopeKind: string;\n scopeId?: string;\n window: string;\n limits: ModelBudgetLimits;\n onBreach: \"block\" | \"warn\";\n}\nexport type ModelBudgetPatch = Partial<Omit<ModelBudgetInput, \"scopeKind\" | \"scopeId\">>;\nexport interface ModelBudgetUsageCounts {\n requests: number;\n tokens: number;\n costMinor: number;\n}\nexport interface ModelBudgetUsage {\n budgetId: string;\n window: string;\n windowStart: string;\n limits: ModelBudgetLimits;\n used: ModelBudgetUsageCounts;\n reserved: ModelBudgetUsageCounts;\n}\nexport interface ModelCost {\n currency: string;\n amountMinor: number;\n}\nexport interface ModelUsageGroup {\n key: string;\n requests: number;\n totalTokens: number;\n cost: ModelCost[];\n}\nexport interface ModelUsageTotals {\n requests: number;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n cacheWriteTokens: number;\n totalTokens: number;\n cost: ModelCost[];\n unpriced: number;\n}\nexport interface ModelUsageItem {\n id: string;\n routeId: string | null;\n modelId: string;\n connectionId: string;\n provider: string;\n nativeId: string;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n cacheWriteTokens: number;\n totalTokens: number;\n costMinor: number | null;\n currency: string | null;\n rateVersion: string | null;\n durationMs: number;\n ok: boolean;\n errorCode: string | null;\n invocationId: string | null;\n runId: string | null;\n occurredAt: string;\n}\nexport interface ModelUsageReport {\n totals: ModelUsageTotals;\n totalsTruncated?: boolean | null;\n groups?: ModelUsageGroup[];\n items: ModelUsageItem[];\n nextCursor: string | null;\n}\nexport interface ModelUsageFilter {\n route?: string;\n model?: string;\n from?: string;\n to?: string;\n groupBy?: \"route\" | \"model\" | \"day\";\n limit?: number;\n cursor?: string;\n}\nexport interface ModelCatalogFilter {\n provider?: string;\n status?: string;\n limit?: number;\n cursor?: string;\n}\nexport interface ModelCatalogPage {\n models: Model[];\n nextCursor: string | null;\n}\n\nexport const modelCatalogKey = (filter: ModelCatalogFilter = {}) =>\n [\"model-catalog\", filter] as const;\nexport const modelProvidersKey = [\"model-providers\"] as const;\nexport const modelRoutesKey = (projectId?: string) => [\"model-routes\", projectId] as const;\nexport const modelBudgetsKey = (projectId?: string) => [\"model-budgets\", projectId] as const;\nexport const modelBudgetUsageKey = (id: string, projectId?: string) =>\n [\"model-budget-usage\", id, projectId] as const;\nexport const modelUsageKey = (projectId?: string, filter: ModelUsageFilter = {}) =>\n [\"model-usage\", projectId, filter] as const;\n\nexport async function listModelCatalog(\n client: W6WClient,\n filter: ModelCatalogFilter = {},\n): Promise<ModelCatalogPage> {\n // Tenant-wide: deliberately no `project` here.\n const res = await client.request<ModelCatalogPage>({\n method: \"GET\",\n path: \"/models\",\n query: { ...filter },\n });\n return res.body;\n}\n\n/** One row of `GET /models/providers` — the descriptor the model pickers are driven by. */\nexport interface ModelProviderRow {\n appId: string;\n provider: string | null;\n installed: boolean;\n designation?: { modelTypes: string[]; modelFamilies?: string[] } | null;\n operations?: {\n discover: { supported: boolean; reason?: string };\n complete: {\n supported: boolean;\n reason?: string;\n features?: Partial<Record<ModelFeature, ModelFeatureState>>;\n };\n };\n /** A2 (optional): the bridge adapter serving this app; `null` = none. */\n adapter?: { provider: string; contractVersion: number } | null;\n /** A2 (optional): why this app cannot serve the caller right now. */\n reasons?: ModelProviderReason[];\n}\nexport type ModelFeature = \"toolCalls\" | \"structuredOutput\" | \"streaming\";\nexport type ModelFeatureState = \"supported\" | \"unsupported\" | \"unknown\";\nexport type ModelProviderReasonCode =\n | \"not_installed\"\n | \"no_adapter\"\n | \"not_entitled\"\n | \"no_connection\";\nexport interface ModelProviderReason {\n code: ModelProviderReasonCode;\n message: string;\n}\nexport interface CompleteSupport {\n supported: boolean;\n features: Partial<Record<ModelFeature, ModelFeatureState>>;\n reasons: ModelProviderReason[];\n}\n\n/**\n * THE support policy for `operations.complete`. Unsupported when the descriptor says so or the\n * row names no adapter (`adapter: null`); a pre-A2 row (no `adapter`/`features`/`reasons`) falls\n * back to `operations.complete.supported`. Unsupported rows always carry a reason.\n */\nexport function completeSupport(row: ModelProviderRow): CompleteSupport {\n const op = row.operations?.complete;\n const noAdapter = row.adapter === null;\n const supported = op?.supported === true && !noAdapter;\n const reasons = [...(row.reasons ?? [])];\n if (!supported && reasons.length === 0) {\n reasons.push({\n code:\n noAdapter || op?.supported === true\n ? \"no_adapter\"\n : row.installed\n ? \"no_adapter\"\n : \"not_installed\",\n message: op?.reason ?? \"Not supported for this provider\",\n });\n }\n return { supported, features: op?.features ?? {}, reasons };\n}\n\n/** Follow `nextCursor` until null (or `maxPages`), concatenating `models`. */\nexport async function loadAllModelCatalogPages(\n fetchPage: (cursor?: string) => Promise<ModelCatalogPage>,\n opts: { maxPages?: number } = {},\n): Promise<{ models: Model[]; truncated: boolean }> {\n const maxPages = opts.maxPages ?? 50;\n const models: Model[] = [];\n let cursor: string | undefined;\n for (let i = 0; i < maxPages; i++) {\n const page = await fetchPage(cursor);\n models.push(...page.models);\n if (!page.nextCursor) return { models, truncated: false };\n cursor = page.nextCursor;\n }\n return { models, truncated: true };\n}\nexport type ModelOperation = \"discover\" | \"complete\";\nexport interface ConnectionChoice {\n id: string;\n appId: string;\n displayName: string;\n /** Present only when the descriptor says the operation is unsupported for this provider. */\n disabledReason?: string;\n}\n\nexport async function listModelProviders(client: W6WClient): Promise<ModelProviderRow[]> {\n const res = await client.request<{ providers?: ModelProviderRow[] } | ModelProviderRow[]>({\n method: \"GET\",\n path: \"/models/providers\",\n });\n const b = res.body;\n return Array.isArray(b) ? b : (b?.providers ?? []);\n}\n\n/**\n * The connections a model picker may offer for `operation`, decided by the descriptor alone:\n * a connection whose app has no designated provider row never appears (an `ai`-category app is\n * not a provider); a designated row whose `discover` is unsupported appears disabled with the\n * descriptor's reason; for `complete` the shared `completeSupport` policy decides (unsupported => disabled, never selectable).\n */\nexport function connectionChoices<C extends { id: string; appId: string; displayName: string }>(\n connections: C[],\n providers: ModelProviderRow[],\n operation: ModelOperation,\n): ConnectionChoice[] {\n const byApp = new Map<string, ModelProviderRow>();\n for (const p of providers) if (p.designation) byApp.set(p.appId, p);\n const out: ConnectionChoice[] = [];\n for (const c of connections) {\n const row = byApp.get(c.appId);\n if (!row) continue;\n const op = row.operations?.[operation];\n const choice: ConnectionChoice = { id: c.id, appId: c.appId, displayName: c.displayName };\n if (operation === \"complete\") {\n const sup = completeSupport(row);\n if (!sup.supported) {\n choice.disabledReason =\n op?.reason ?? sup.reasons[0]?.message ?? \"Not supported for this provider\";\n }\n } else if (!op?.supported) {\n choice.disabledReason = op?.reason ?? \"Not supported for this provider\";\n }\n out.push(choice);\n }\n return out;\n}\n\n/** The server answers fallbacks as `{modelId, connectionId}`; the editor works in `{model, connection}`. */\nexport function normaliseRoute(r: ModelRoute): ModelRoute {\n const fallbacks = (r.fallbacks ?? []).map((f) => {\n const x = f as ModelFallback & { modelId?: string; connectionId?: string };\n return { model: x.model ?? x.modelId ?? \"\", connection: x.connection ?? x.connectionId ?? \"\" };\n });\n return { ...r, fallbacks };\n}\n\nexport async function listModelRoutes(client: W6WClient, project: string): Promise<ModelRoute[]> {\n const res = await client.request<{ routes: ModelRoute[] }>({\n method: \"GET\",\n path: \"/model-routes\",\n query: { project },\n });\n return res.body.routes.map(normaliseRoute);\n}\nexport async function createModelRoute(\n client: W6WClient,\n project: string,\n input: ModelRouteInput,\n): Promise<ModelRoute> {\n const res = await client.request<{ route: ModelRoute }>({\n method: \"POST\",\n path: \"/model-routes\",\n query: { project },\n body: input,\n });\n return normaliseRoute(res.body.route);\n}\nexport async function updateModelRoute(\n client: W6WClient,\n project: string,\n name: string,\n patch: ModelRoutePatch,\n): Promise<ModelRoute> {\n const res = await client.request<{ route: ModelRoute }>({\n method: \"PATCH\",\n path: path`/model-routes/${name}`,\n query: { project },\n body: patch,\n });\n return normaliseRoute(res.body.route);\n}\nexport async function deleteModelRoute(\n client: W6WClient,\n project: string,\n name: string,\n): Promise<void> {\n await client.request<{ ok: true }>({\n method: \"DELETE\",\n path: path`/model-routes/${name}`,\n query: { project },\n });\n}\n\nexport async function listModelBudgets(client: W6WClient, project: string): Promise<ModelBudget[]> {\n const res = await client.request<{ budgets: ModelBudget[] }>({\n method: \"GET\",\n path: \"/model-budgets\",\n query: { project },\n });\n return res.body.budgets;\n}\nexport async function createModelBudget(\n client: W6WClient,\n project: string,\n input: ModelBudgetInput,\n): Promise<ModelBudget> {\n // The server answers with the budget row itself (201), not a `{ budget }` wrapper.\n const res = await client.request<ModelBudget>({\n method: \"POST\",\n path: \"/model-budgets\",\n query: { project },\n body: input,\n });\n return res.body;\n}\nexport async function updateModelBudget(\n client: W6WClient,\n project: string,\n id: string,\n patch: ModelBudgetPatch,\n): Promise<ModelBudget> {\n // The server answers with the updated budget row itself, not a `{ budget }` wrapper.\n const res = await client.request<ModelBudget>({\n method: \"PATCH\",\n path: path`/model-budgets/${id}`,\n query: { project },\n body: patch,\n });\n return res.body;\n}\nexport async function deleteModelBudget(\n client: W6WClient,\n project: string,\n id: string,\n): Promise<void> {\n await client.request<{ ok: true }>({\n method: \"DELETE\",\n path: path`/model-budgets/${id}`,\n query: { project },\n });\n}\nexport async function getModelBudgetUsage(\n client: W6WClient,\n project: string,\n id: string,\n): Promise<ModelBudgetUsage> {\n const res = await client.request<ModelBudgetUsage>({\n method: \"GET\",\n path: path`/model-budgets/${id}/usage`,\n query: { project },\n });\n return res.body;\n}\nexport async function getModelUsage(\n client: W6WClient,\n project: string,\n filter: ModelUsageFilter = {},\n): Promise<ModelUsageReport> {\n const res = await client.request<ModelUsageReport>({\n method: \"GET\",\n path: \"/model-usage\",\n query: { project, ...filter },\n });\n return res.body;\n}\n\nexport function useModelCatalogQuery(filter: ModelCatalogFilter = {}) {\n const client = useEmbedClient();\n return useQuery({\n queryKey: modelCatalogKey(filter),\n queryFn: () => listModelCatalog(client, filter),\n });\n}\nexport function useAllModelCatalogQuery(filter: Omit<ModelCatalogFilter, \"cursor\"> = {}) {\n const client = useEmbedClient();\n return useQuery({\n queryKey: [\"model-catalog-all\", filter] as const,\n queryFn: () =>\n loadAllModelCatalogPages((cursor) => listModelCatalog(client, { ...filter, cursor })),\n });\n}\nexport function useModelProvidersQuery() {\n const client = useEmbedClient();\n return useQuery({ queryKey: modelProvidersKey, queryFn: () => listModelProviders(client) });\n}\nexport function useModelRoutesQuery(projectId?: string) {\n const client = useEmbedClient();\n return useQuery({\n queryKey: modelRoutesKey(projectId),\n enabled: projectId != null,\n queryFn: () => listModelRoutes(client, projectId as string),\n });\n}\nexport function useModelBudgetsQuery(projectId?: string) {\n const client = useEmbedClient();\n return useQuery({\n queryKey: modelBudgetsKey(projectId),\n enabled: projectId != null,\n queryFn: () => listModelBudgets(client, projectId as string),\n });\n}\nexport function useModelBudgetUsageQuery(id: string, projectId?: string) {\n const client = useEmbedClient();\n return useQuery({\n queryKey: modelBudgetUsageKey(id, projectId),\n enabled: projectId != null,\n queryFn: () => getModelBudgetUsage(client, projectId as string, id),\n });\n}\nexport function useModelUsageQuery(projectId?: string, filter: ModelUsageFilter = {}) {\n const client = useEmbedClient();\n return useQuery({\n queryKey: modelUsageKey(projectId, filter),\n enabled: projectId != null,\n queryFn: () => getModelUsage(client, projectId as string, filter),\n });\n}\n\nexport function useCreateModelRouteMutation() {\n const client = useEmbedClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (v: { project: string; input: ModelRouteInput }) =>\n createModelRoute(client, v.project, v.input),\n onSuccess: () => qc.invalidateQueries({ queryKey: [\"model-routes\"] }),\n });\n}\nexport function useUpdateModelRouteMutation() {\n const client = useEmbedClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (v: { project: string; name: string; patch: ModelRoutePatch }) =>\n updateModelRoute(client, v.project, v.name, v.patch),\n onSuccess: () => qc.invalidateQueries({ queryKey: [\"model-routes\"] }),\n });\n}\nexport function useDeleteModelRouteMutation() {\n const client = useEmbedClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (v: { project: string; name: string }) =>\n deleteModelRoute(client, v.project, v.name),\n onSuccess: () => qc.invalidateQueries({ queryKey: [\"model-routes\"] }),\n });\n}\nexport function useCreateModelBudgetMutation() {\n const client = useEmbedClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (v: { project: string; input: ModelBudgetInput }) =>\n createModelBudget(client, v.project, v.input),\n onSuccess: () => qc.invalidateQueries({ queryKey: [\"model-budgets\"] }),\n });\n}\nexport function useUpdateModelBudgetMutation() {\n const client = useEmbedClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (v: { project: string; id: string; patch: ModelBudgetPatch }) =>\n updateModelBudget(client, v.project, v.id, v.patch),\n // The row meter reads its limit from the per-budget usage query, so refresh it too.\n onSuccess: (_b, v) =>\n Promise.all([\n qc.invalidateQueries({ queryKey: [\"model-budgets\"] }),\n qc.invalidateQueries({ queryKey: [\"model-budget-usage\", v.id] }),\n ]),\n });\n}\nexport function useDeleteModelBudgetMutation() {\n const client = useEmbedClient();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: (v: { project: string; id: string }) => deleteModelBudget(client, v.project, v.id),\n onSuccess: () => qc.invalidateQueries({ queryKey: [\"model-budgets\"] }),\n });\n}\n"],"names":["modelCatalogKey","filter","modelProvidersKey","modelRoutesKey","projectId","modelBudgetsKey","modelBudgetUsageKey","id","modelUsageKey","listModelCatalog","client","completeSupport","row","op","_a","noAdapter","supported","reasons","loadAllModelCatalogPages","fetchPage","opts","maxPages","models","cursor","i","page","listModelProviders","b","connectionChoices","connections","providers","operation","byApp","p","out","c","choice","sup","_b","normaliseRoute","r","fallbacks","f","x","listModelRoutes","project","createModelRoute","input","res","updateModelRoute","name","patch","path","deleteModelRoute","listModelBudgets","createModelBudget","updateModelBudget","deleteModelBudget","getModelBudgetUsage","getModelUsage","useModelCatalogQuery","useEmbedClient","useQuery","useAllModelCatalogQuery","useModelProvidersQuery","useModelRoutesQuery","useModelBudgetsQuery","useModelBudgetUsageQuery","useModelUsageQuery","useCreateModelRouteMutation","qc","useQueryClient","useMutation","v","useUpdateModelRouteMutation","useDeleteModelRouteMutation","useCreateModelBudgetMutation","useUpdateModelBudgetMutation","useDeleteModelBudgetMutation"],"mappings":"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"}
@@ -17,9 +17,9 @@ function a(t) {
17
17
  }
18
18
  export {
19
19
  o as E,
20
- i as a,
21
- u as b,
20
+ u as a,
21
+ i as b,
22
22
  c as r,
23
23
  a as u
24
24
  };
25
- //# sourceMappingURL=project-context-BiCjv_E3.js.map
25
+ //# sourceMappingURL=project-context-Tvp-La7A.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-context-BiCjv_E3.js","sources":["../src/project-context.ts"],"sourcesContent":["/**\n * Which project does an embedded editor save into? One answer, in one place.\n *\n * A project-less workflow save is not harmless: the server resolves a missing `?project=` to the\n * account default and WRITES it on update, silently moving the row there. The editor therefore\n * always names its project explicitly, or refuses. `useEmbedProject` and the\n * `EmbedProjectState` type are re-exported from the package index; the rest is internal.\n */\nimport { createContext, useContext } from \"react\";\n\n/** What `useEmbedProject()` reports. */\nexport interface EmbedProjectState {\n /** The resolved project id, or `null` (none given, still resolving, or resolution failed). */\n project: string | null;\n status: \"resolving\" | \"ready\" | \"error\";\n error?: unknown;\n}\n\n/** The provider's project, as frozen with the applied client (see `W6WEmbedProvider`). */\nexport const EmbedProjectContext = createContext<EmbedProjectState>({\n project: null,\n status: \"ready\",\n});\n\n/**\n * The project the provider names: `{use:\"default\"}` resolved once per identity, a plain string, or\n * `null` when none was given. `status` says which of \"none\", \"still resolving\" and \"could not\n * resolve\" a `null` means.\n */\nexport function useEmbedProject(): EmbedProjectState {\n return useContext(EmbedProjectContext);\n}\n\n/** `undefined` while resolving, on error, or when the provider names no project. */\nexport function useProvidedProject(): string | undefined {\n return useContext(EmbedProjectContext).project ?? undefined;\n}\n\n/**\n * The editor's own prop wins over the provider's project. `undefined` (omitted) defers to the\n * provider; `null` or `\"\"` means \"no project yet\" and REFUSES (`null`) — it never falls through,\n * so a host whose project is still loading cannot have edits saved into the provider's project.\n * (`prop ?? provided` would be wrong: `null` would fall through.)\n */\nexport function resolveEditorProject(\n prop: string | null | undefined,\n provided: string | undefined,\n): string | null {\n if (prop === undefined) return provided ? provided : null;\n return prop ? prop : null;\n}\n\nexport function useEditorProject(prop: string | null | undefined): string | null {\n return resolveEditorProject(prop, useProvidedProject());\n}\n"],"names":["EmbedProjectContext","createContext","useEmbedProject","useContext","useProvidedProject","resolveEditorProject","prop","provided","useEditorProject"],"mappings":";AAmBO,MAAMA,IAAsBC,EAAiC;AAAA,EAClE,SAAS;AAAA,EACT,QAAQ;AACV,CAAC;AAOM,SAASC,IAAqC;AACnD,SAAOC,EAAWH,CAAmB;AACvC;AAGO,SAASI,IAAyC;AACvD,SAAOD,EAAWH,CAAmB,EAAE,WAAW;AACpD;AAQO,SAASK,EACdC,GACAC,GACe;AACf,SAAID,MAAS,SAAkBC,KAAsB,OAC9CD,KAAc;AACvB;AAEO,SAASE,EAAiBF,GAAgD;AAC/E,SAAOD,EAAqBC,GAAMF,GAAoB;AACxD;"}
1
+ {"version":3,"file":"project-context-Tvp-La7A.js","sources":["../src/project-context.ts"],"sourcesContent":["/**\n * Which project does an embedded editor save into? One answer, in one place.\n *\n * A project-less workflow save is not harmless: the server resolves a missing `?project=` to the\n * account default and WRITES it on update, silently moving the row there. The editor therefore\n * always names its project explicitly, or refuses. `useEmbedProject` and the\n * `EmbedProjectState` type are re-exported from the package index; the rest is internal.\n */\nimport { createContext, useContext } from \"react\";\n\n/** What `useEmbedProject()` reports. */\nexport interface EmbedProjectState {\n /** The resolved project id, or `null` (none given, still resolving, or resolution failed). */\n project: string | null;\n status: \"resolving\" | \"ready\" | \"error\";\n error?: unknown;\n}\n\n/** The provider's project, as frozen with the applied client (see `W6WEmbedProvider`). */\nexport const EmbedProjectContext = createContext<EmbedProjectState>({\n project: null,\n status: \"ready\",\n});\n\n/**\n * The project the provider names: `{use:\"default\"}` resolved once per identity, a plain string, or\n * `null` when none was given. `status` says which of \"none\", \"still resolving\" and \"could not\n * resolve\" a `null` means.\n */\nexport function useEmbedProject(): EmbedProjectState {\n return useContext(EmbedProjectContext);\n}\n\n/** `undefined` while resolving, on error, or when the provider names no project. */\nexport function useProvidedProject(): string | undefined {\n return useContext(EmbedProjectContext).project ?? undefined;\n}\n\n/**\n * The editor's own prop wins over the provider's project. `undefined` (omitted) defers to the\n * provider; `null` or `\"\"` means \"no project yet\" and REFUSES (`null`) — it never falls through,\n * so a host whose project is still loading cannot have edits saved into the provider's project.\n * (`prop ?? provided` would be wrong: `null` would fall through.)\n */\nexport function resolveEditorProject(\n prop: string | null | undefined,\n provided: string | undefined,\n): string | null {\n if (prop === undefined) return provided ? provided : null;\n return prop ? prop : null;\n}\n\nexport function useEditorProject(prop: string | null | undefined): string | null {\n return resolveEditorProject(prop, useProvidedProject());\n}\n"],"names":["EmbedProjectContext","createContext","useEmbedProject","useContext","useProvidedProject","resolveEditorProject","prop","provided","useEditorProject"],"mappings":";AAmBO,MAAMA,IAAsBC,EAAiC;AAAA,EAClE,SAAS;AAAA,EACT,QAAQ;AACV,CAAC;AAOM,SAASC,IAAqC;AACnD,SAAOC,EAAWH,CAAmB;AACvC;AAGO,SAASI,IAAyC;AACvD,SAAOD,EAAWH,CAAmB,EAAE,WAAW;AACpD;AAQO,SAASK,EACdC,GACAC,GACe;AACf,SAAID,MAAS,SAAkBC,KAAsB,OAC9CD,KAAc;AACvB;AAEO,SAASE,EAAiBF,GAAgD;AAC/E,SAAOD,EAAqBC,GAAMF,GAAoB;AACxD;"}
package/dist/rail.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsx as r } from "react/jsx-runtime";
3
3
  import { useMemo as u } from "react";
4
- import { W as d, R as p, P as m, u as b, a as f, e as v, b as h } from "./editor-tools-RxmY5iyi.js";
5
- import { r as P, b as j } from "./project-context-BiCjv_E3.js";
4
+ import { W as d, R as p, P as m, u as f, a as v, e as b, b as h } from "./editor-tools-B_Lfx3kw.js";
5
+ import { r as P, a as j } from "./project-context-Tvp-La7A.js";
6
6
  const R = () => {
7
7
  };
8
8
  function y({
@@ -18,10 +18,10 @@ function y({
18
18
  function E({
19
19
  kind: l,
20
20
  id: s,
21
- tools: a = v,
21
+ tools: a = b,
22
22
  storageKey: i
23
23
  }) {
24
- const e = b(), { project: o } = f();
24
+ const e = f(), { project: o } = v();
25
25
  if (!e || e.kind !== l || e.id !== s) return null;
26
26
  const t = a.filter((c) => c.isAvailable(e));
27
27
  if (t.length === 0) return null;
@@ -0,0 +1,52 @@
1
+ import { Agent, ApiError, ContextEntry, ContextPin, CreateAgentInput, SkillPin, SkillVersion, UpdateAgentInput, W6WClient } from '@w6w/sdk';
2
+ export type { Agent, ContextEntry, ContextPin, CreateAgentInput, SkillPin, SkillVersion, UpdateAgentInput, };
3
+ /** Thrown by {@linkcode updateAgent} on a 409: the draft changed elsewhere. Never overwrites. */
4
+ export declare class AgentConflictError extends Error {
5
+ readonly kind: "conflict";
6
+ /** The server's current revision, when the error body carried one. */
7
+ readonly currentRevision: number | null;
8
+ readonly cause: ApiError;
9
+ constructor(cause: ApiError);
10
+ }
11
+ /** True for a {@linkcode AgentConflictError}. */
12
+ export declare function isAgentConflict(e: unknown): e is AgentConflictError;
13
+ export declare const agentsKey: (includeArchived?: boolean) => readonly ["agents", {
14
+ readonly includeArchived: boolean;
15
+ }];
16
+ export declare const agentKey: (id: string) => readonly ["agents", "detail", string];
17
+ export declare const agentSkillVersionsKey: (skillId: string) => readonly ["agents", "skill-versions", string];
18
+ export declare const agentSkillsKey: () => readonly ["agents", "skills"];
19
+ export declare const agentContextKey: () => readonly ["agents", "context"];
20
+ export declare const agentContextEntriesKey: (collectionId: string) => readonly ["agents", "context-entries", string];
21
+ export declare const agentAllContextEntriesKey: () => readonly ["agents", "context-entries-all"];
22
+ export declare const agentModelRoutesKey: (projectId?: string) => readonly ["agents", "model-routes", string | undefined];
23
+ export declare const agentSettingsKey: () => readonly ["agent-settings"];
24
+ export declare const storageBindingsKey: () => readonly ["agent-settings", "storage-bindings"];
25
+ /** Save an agent: `revision` in the body, `updatedAt` as the precondition header; 409 → conflict. */
26
+ export declare function updateAgent(client: W6WClient, id: string, patch: Omit<UpdateAgentInput, "revision">, loaded: Pick<Agent, "revision" | "updatedAt">): Promise<Agent>;
27
+ /** Readiness of a pin against the ready-only picker lists. */
28
+ export type PinState = "ready" | "unavailable";
29
+ /** A skill pin is `ready` only when its version is among the ready versions of its skill. */
30
+ export declare function skillPinState(pin: SkillPin, readyVersions: readonly SkillVersion[] | undefined): PinState;
31
+ /** A context pin is `ready` only when its entry is listed, unarchived, at the pinned version. */
32
+ export declare function contextPinState(pin: ContextPin, entries: readonly ContextEntry[] | undefined): PinState;
33
+ /** Picker options: ready (listed, unarchived) context entries only. */
34
+ export declare function readyContextEntries(entries: readonly ContextEntry[]): ContextEntry[];
35
+ export declare function useAgentsQuery(includeArchived?: boolean): import('@tanstack/react-query').UseQueryResult<NoInfer<Agent[]>, Error>;
36
+ export declare function useAgentQuery(id: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<Agent>, Error>;
37
+ export declare function useCreateAgent(): import('@tanstack/react-query').UseMutationResult<Agent, Error, CreateAgentInput, unknown>;
38
+ export declare function useUpdateAgent(id: string): import('@tanstack/react-query').UseMutationResult<Agent, Error, {
39
+ patch: Omit<UpdateAgentInput, "revision">;
40
+ loaded: Pick<Agent, "revision" | "updatedAt">;
41
+ }, unknown>;
42
+ export declare function useArchiveAgent(): import('@tanstack/react-query').UseMutationResult<Agent, Error, string, unknown>;
43
+ export declare function useAgentSkillsQuery(): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').Skill[]>, Error>;
44
+ export declare function useAgentSkillVersionsQuery(skillId: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<SkillVersion[]>, Error>;
45
+ export declare function useAgentContextCollectionsQuery(): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').ContextCollection[]>, Error>;
46
+ export declare function useAgentContextEntriesQuery(collectionId: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<ContextEntry[]>, Error>;
47
+ /** Every doc visible to the caller (collection-less included) — the pin picker's source. */
48
+ export declare function useAgentAllContextEntriesQuery(): import('@tanstack/react-query').UseQueryResult<NoInfer<ContextEntry[]>, Error>;
49
+ export declare function useAgentModelRoutesQuery(projectId?: string): import('@tanstack/react-query').UseQueryResult<NoInfer<import('./models.ts').ModelRoute[]>, Error>;
50
+ export declare function useAgentSettingsQuery(): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk/console').AgentSettings>, Error>;
51
+ export declare function usePatchAgentSettings(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk/console').AgentSettings, Error, Partial<import('@w6w/sdk/console').AgentSettingsValues>, unknown>;
52
+ export declare function useStorageBindingsQuery(): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk/console').StorageBinding[]>, Error>;
@@ -0,0 +1,68 @@
1
+ import { AssetUploadCreateInput, CreateContextCollectionInput, CreateStandaloneContextEntryInput, UpdateContextEntryInput } from '@w6w/sdk';
2
+ export declare const skillsKey: (includeArchived?: boolean) => readonly ["skills", {
3
+ readonly includeArchived: boolean;
4
+ }];
5
+ export declare const skillKey: (id: string) => readonly ["skills", string];
6
+ export declare const skillVersionsKey: (id: string) => readonly ["skills", string, "versions"];
7
+ export declare const contextCollectionsKey: (includeArchived?: boolean) => readonly ["context-collections", {
8
+ readonly includeArchived: boolean;
9
+ }];
10
+ export declare const contextCollectionKey: (id: string) => readonly ["context-collections", string];
11
+ export declare const contextEntriesKey: (id: string, includeArchived?: boolean) => readonly ["context-collections", string, "entries", {
12
+ readonly includeArchived: boolean;
13
+ }];
14
+ export declare const allContextEntriesKey: (includeArchived?: boolean) => readonly ["context-entries", {
15
+ readonly includeArchived: boolean;
16
+ }];
17
+ export declare const assetVersionsKey: (id: string) => readonly ["assets", string, "versions"];
18
+ export declare const assetFilesKey: (id: string, versionId: string) => readonly ["assets", string, "versions", string, "files"];
19
+ export declare function useSkillsQuery(includeArchived?: boolean): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').Skill[]>, Error>;
20
+ export declare function useSkillQuery(id: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').Skill>, Error>;
21
+ export declare function useSkillVersionsQuery(id: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').SkillVersion[]>, Error>;
22
+ export declare function useArchiveSkillMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').Skill, Error, string, unknown>;
23
+ export declare function useContextCollectionsQuery(includeArchived?: boolean): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').ContextCollection[]>, Error>;
24
+ export declare function useContextCollectionQuery(id: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').ContextCollection>, Error>;
25
+ export declare function useCreateContextCollectionMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').ContextCollection, Error, CreateContextCollectionInput, unknown>;
26
+ export declare function useContextEntriesQuery(collectionId: string | undefined, includeArchived?: boolean): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').ContextEntry[]>, Error>;
27
+ /** Edit-as-new-version: `PUT` creates the next version; `ifUnmodifiedSince` guards a stale edit. */
28
+ export declare function useUpdateContextEntryMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').ContextEntryView, Error, {
29
+ collectionId: string;
30
+ entryId: string;
31
+ input: UpdateContextEntryInput;
32
+ ifUnmodifiedSince?: string;
33
+ }, unknown>;
34
+ /** Every doc visible to the caller, whether or not it is in a collection. */
35
+ export declare function useAllContextEntriesQuery(includeArchived?: boolean): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').ContextEntry[]>, Error>;
36
+ /** Create a text doc, private unless `collectionIds` / `visibility` say otherwise. */
37
+ export declare function useCreateContextEntryMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').ContextEntryView, Error, CreateStandaloneContextEntryInput, unknown>;
38
+ export declare function useAddEntryToCollectionMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').ContextEntry, Error, {
39
+ entryId: string;
40
+ collectionId: string;
41
+ }, unknown>;
42
+ export declare function useRemoveEntryFromCollectionMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').ContextEntry, Error, {
43
+ entryId: string;
44
+ collectionId: string;
45
+ }, unknown>;
46
+ export declare function useAssetVersionsQuery(assetId: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').AssetVersion[]>, Error>;
47
+ export declare function useAssetFilesQuery(assetId: string | undefined, versionId: string | undefined): import('@tanstack/react-query').UseQueryResult<NoInfer<import('@w6w/sdk').AssetVersionFiles>, Error>;
48
+ /** Exact bytes of one file. A mutation (not a query): downloads are user-triggered, never cached. */
49
+ export declare function useDownloadAssetFileMutation(): import('@tanstack/react-query').UseMutationResult<Uint8Array<ArrayBufferLike>, Error, {
50
+ assetId: string;
51
+ versionId: string;
52
+ fileId: string;
53
+ }, unknown>;
54
+ /** One version as a store-only ZIP. */
55
+ export declare function useDownloadAssetArchiveMutation(): import('@tanstack/react-query').UseMutationResult<Uint8Array<ArrayBufferLike>, Error, {
56
+ assetId: string;
57
+ versionId: string;
58
+ }, unknown>;
59
+ export declare function useArchiveAssetMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').Asset, Error, string, unknown>;
60
+ export declare function useCreateAssetUploadMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').AssetUploadStatus, Error, AssetUploadCreateInput, unknown>;
61
+ export declare function usePutAssetUploadEntryMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').AssetUploadEntry, Error, {
62
+ uploadId: string;
63
+ index: number;
64
+ bytes: Uint8Array;
65
+ }, unknown>;
66
+ /** Publishing a version changes skills, context and assets alike — invalidate all three. */
67
+ export declare function useFinalizeAssetUploadMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').AssetFinalizeResult, Error, string, unknown>;
68
+ export declare function useAbortAssetUploadMutation(): import('@tanstack/react-query').UseMutationResult<import('@w6w/sdk').AssetUploadStatus, Error, string, unknown>;
@@ -1,6 +1,8 @@
1
1
  import { ConnectionSummary, W6WClient } from '@w6w/sdk';
2
- import { ConnectionTestResult } from '@w6w/sdk/console';
2
+ import { ConnectionDependents, ConnectionTestResult } from '@w6w/sdk/console';
3
3
  export type { ConnectionSummary } from '@w6w/sdk';
4
+ export type CreateConnectionBody = Parameters<W6WClient["console"]["connections"]["create"]>[1];
5
+ export type UpdateConnectionBody = Parameters<W6WClient["console"]["connections"]["update"]>[1];
4
6
  export declare const connectionsForAppKey: (appId: string) => readonly ["app-connections", string];
5
7
  export declare function listConnectionsForApp(client: W6WClient, appId: string): Promise<ConnectionSummary[]>;
6
8
  /**
@@ -14,20 +16,36 @@ export declare function useConnectionsQuery(): import('@tanstack/react-query').U
14
16
  export declare const connectionKey: (id: string) => readonly ["connection", string];
15
17
  export declare function getConnection(client: W6WClient, id: string): Promise<ConnectionSummary>;
16
18
  export declare function useConnectionQuery(id: string): import('@tanstack/react-query').UseQueryResult<NoInfer<ConnectionSummary>, Error>;
17
- export declare function createConnection(client: W6WClient, appId: string, body: {
18
- authKey: string;
19
- credential: Record<string, unknown>;
20
- displayName?: string;
21
- profile?: Record<string, unknown>;
22
- }): Promise<ConnectionSummary>;
19
+ export declare function createConnection(client: W6WClient, appId: string, body: CreateConnectionBody): Promise<ConnectionSummary>;
23
20
  /** The write `W6WEmbedProvider` hands the ui adapter as `updateConnection` (the SDK adapter has none). */
24
- export declare function updateConnection(client: W6WClient, id: string, body: {
25
- displayName?: string;
26
- credential?: Record<string, unknown>;
27
- }): Promise<ConnectionSummary>;
21
+ export declare function updateConnection(client: W6WClient, id: string, body: UpdateConnectionBody): Promise<ConnectionSummary>;
28
22
  export declare function useUpdateConnectionMutation(connectionId: string): import('@tanstack/react-query').UseMutationResult<ConnectionSummary, Error, {
29
23
  displayName?: string;
24
+ binding?: import('@w6w/sdk/console').ConnectionBinding;
25
+ credentialId?: string;
30
26
  credential?: Record<string, unknown>;
31
27
  }, unknown>;
32
28
  export declare function useTestConnectionMutation(connectionId: string): import('@tanstack/react-query').UseMutationResult<ConnectionTestResult, Error, void, unknown>;
33
- export declare function useDeleteConnectionMutation(): import('@tanstack/react-query').UseMutationResult<void, Error, string, unknown>;
29
+ export type { ConnectionDependents } from '@w6w/sdk/console';
30
+ export declare const connectionDependentsKey: (id: string) => readonly ["connection-dependents", string];
31
+ export declare function getConnectionDependents(client: W6WClient, id: string): Promise<ConnectionDependents>;
32
+ /** What a delete would disable. `enabled` gates the fetch (the modal is closed → no request). */
33
+ export declare function useConnectionDependentsQuery(id: string, enabled?: boolean): import('@tanstack/react-query').UseQueryResult<NoInfer<ConnectionDependents>, Error>;
34
+ export type DeleteConnectionResult = {
35
+ ok: true;
36
+ } | {
37
+ ok: false;
38
+ dependents: ConnectionDependents;
39
+ };
40
+ /**
41
+ * Delete with an optional `force`. A 409 `connection_in_use` is data — `{ ok: false, dependents }`
42
+ * — not a thrown error; every other failure rejects.
43
+ */
44
+ export declare function deleteConnection(client: W6WClient, args: {
45
+ id: string;
46
+ force?: boolean;
47
+ }): Promise<DeleteConnectionResult>;
48
+ export declare function useDeleteConnectionMutation(): import('@tanstack/react-query').UseMutationResult<DeleteConnectionResult, Error, {
49
+ id: string;
50
+ force?: boolean;
51
+ }, unknown>;