@ggui-ai/mcp-server-handlers 0.2.0-alpha.4 → 0.4.0-rc.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 (185) hide show
  1. package/dist/app-discovery/list-gadgets.d.ts +15 -14
  2. package/dist/app-discovery/list-gadgets.d.ts.map +1 -1
  3. package/dist/app-discovery/list-gadgets.js +18 -15
  4. package/dist/blueprints/describe-data-contract-format.d.ts.map +1 -1
  5. package/dist/blueprints/describe-data-contract-format.js +35 -8
  6. package/dist/blueprints/list-featured-blueprints.d.ts.map +1 -1
  7. package/dist/blueprints/list-featured-blueprints.js +8 -4
  8. package/dist/blueprints/render-blueprint.d.ts +1 -1
  9. package/dist/blueprints/render-blueprint.d.ts.map +1 -1
  10. package/dist/blueprints/render-blueprint.js +4 -6
  11. package/dist/blueprints/search-blueprints.d.ts +3 -3
  12. package/dist/blueprints/search-blueprints.d.ts.map +1 -1
  13. package/dist/blueprints/search-blueprints.js +33 -47
  14. package/dist/credits/list-credit-transactions.d.ts +2 -2
  15. package/dist/credits/list-credit-transactions.d.ts.map +1 -1
  16. package/dist/credits/list-credit-transactions.js +2 -2
  17. package/dist/index.d.ts +2 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/ops-apps/create-app.d.ts +7 -0
  21. package/dist/ops-apps/create-app.d.ts.map +1 -1
  22. package/dist/ops-apps/create-app.js +6 -2
  23. package/dist/ops-blueprint/errors.d.ts +8 -0
  24. package/dist/ops-blueprint/errors.d.ts.map +1 -1
  25. package/dist/ops-blueprint/errors.js +8 -0
  26. package/dist/ops-blueprint/generate.d.ts +11 -7
  27. package/dist/ops-blueprint/generate.d.ts.map +1 -1
  28. package/dist/ops-blueprint/generate.js +32 -11
  29. package/dist/ops-blueprint/list.d.ts +4 -2
  30. package/dist/ops-blueprint/list.d.ts.map +1 -1
  31. package/dist/ops-blueprint/list.js +9 -4
  32. package/dist/ops-blueprint/register.d.ts +7 -12
  33. package/dist/ops-blueprint/register.d.ts.map +1 -1
  34. package/dist/ops-blueprint/register.js +24 -20
  35. package/dist/ops-blueprint/update.d.ts +1 -1
  36. package/dist/ops-blueprint/update.js +2 -2
  37. package/dist/renders/agentcaps-measurement.d.ts +68 -0
  38. package/dist/renders/agentcaps-measurement.d.ts.map +1 -0
  39. package/dist/renders/agentcaps-measurement.js +39 -0
  40. package/dist/renders/{apply-render-patch.d.ts → apply-ggui-session-patch.d.ts} +9 -9
  41. package/dist/renders/apply-ggui-session-patch.d.ts.map +1 -0
  42. package/dist/renders/{apply-render-patch.js → apply-ggui-session-patch.js} +5 -6
  43. package/dist/renders/assert-action-contract.d.ts +2 -2
  44. package/dist/renders/assert-action-contract.js +2 -2
  45. package/dist/renders/assert-contract-no-retired-fields.d.ts +1 -1
  46. package/dist/renders/assert-contract-no-retired-fields.d.ts.map +1 -1
  47. package/dist/renders/assert-contract-no-retired-fields.js +8 -7
  48. package/dist/renders/assert-gadgets.d.ts +12 -12
  49. package/dist/renders/assert-gadgets.js +15 -15
  50. package/dist/renders/assert-generator.d.ts +14 -31
  51. package/dist/renders/assert-generator.d.ts.map +1 -1
  52. package/dist/renders/assert-generator.js +14 -38
  53. package/dist/renders/assert-no-duplicate-gadget-hooks.d.ts +3 -2
  54. package/dist/renders/assert-no-duplicate-gadget-hooks.d.ts.map +1 -1
  55. package/dist/renders/assert-no-duplicate-gadget-hooks.js +4 -3
  56. package/dist/renders/assert-props-contract.d.ts +1 -1
  57. package/dist/renders/assert-props-contract.js +1 -1
  58. package/dist/renders/assert-public-env.d.ts +5 -5
  59. package/dist/renders/assert-public-env.js +5 -5
  60. package/dist/renders/assert-stream-contract.d.ts +3 -3
  61. package/dist/renders/assert-stream-contract.js +3 -3
  62. package/dist/renders/blueprint-coverage.d.ts +49 -0
  63. package/dist/renders/blueprint-coverage.d.ts.map +1 -0
  64. package/dist/renders/blueprint-coverage.js +65 -0
  65. package/dist/renders/blueprint-fulfillability.d.ts +53 -0
  66. package/dist/renders/blueprint-fulfillability.d.ts.map +1 -0
  67. package/dist/renders/blueprint-fulfillability.js +100 -0
  68. package/dist/renders/blueprint-matcher.d.ts +16 -4
  69. package/dist/renders/blueprint-matcher.d.ts.map +1 -1
  70. package/dist/renders/blueprint-matcher.js +87 -39
  71. package/dist/renders/blueprint-registry.d.ts +129 -104
  72. package/dist/renders/blueprint-registry.d.ts.map +1 -1
  73. package/dist/renders/blueprint-registry.js +278 -75
  74. package/dist/renders/build-seed-pool.d.ts +27 -0
  75. package/dist/renders/build-seed-pool.d.ts.map +1 -0
  76. package/dist/renders/build-seed-pool.js +100 -0
  77. package/dist/renders/cache-trace-sink.d.ts +39 -16
  78. package/dist/renders/cache-trace-sink.d.ts.map +1 -1
  79. package/dist/renders/cache-trace-sink.js +84 -0
  80. package/dist/renders/canonicalize-tool-identity.d.ts +21 -0
  81. package/dist/renders/canonicalize-tool-identity.d.ts.map +1 -0
  82. package/dist/renders/canonicalize-tool-identity.js +19 -0
  83. package/dist/renders/client-observations.d.ts +1 -1
  84. package/dist/renders/client-observations.js +1 -1
  85. package/dist/renders/consume.d.ts +37 -34
  86. package/dist/renders/consume.d.ts.map +1 -1
  87. package/dist/renders/consume.js +57 -79
  88. package/dist/renders/decide-handshake.d.ts +158 -0
  89. package/dist/renders/decide-handshake.d.ts.map +1 -0
  90. package/dist/renders/decide-handshake.js +487 -0
  91. package/dist/renders/declare-tool-catalog.d.ts +81 -0
  92. package/dist/renders/declare-tool-catalog.d.ts.map +1 -0
  93. package/dist/renders/declare-tool-catalog.js +84 -0
  94. package/dist/renders/errors.d.ts +43 -26
  95. package/dist/renders/errors.d.ts.map +1 -1
  96. package/dist/renders/errors.js +25 -25
  97. package/dist/renders/export-registry.d.ts +38 -0
  98. package/dist/renders/export-registry.d.ts.map +1 -0
  99. package/dist/renders/export-registry.js +66 -0
  100. package/dist/renders/fetch-gadget-types.d.ts +3 -3
  101. package/dist/renders/fetch-gadget-types.js +3 -3
  102. package/dist/renders/generation-cache.d.ts +61 -50
  103. package/dist/renders/generation-cache.d.ts.map +1 -1
  104. package/dist/renders/generation-cache.js +5 -49
  105. package/dist/renders/{get-render.d.ts → get-session.d.ts} +17 -17
  106. package/dist/renders/get-session.d.ts.map +1 -0
  107. package/dist/renders/{get-render.js → get-session.js} +33 -33
  108. package/dist/renders/handle-stream.d.ts +7 -7
  109. package/dist/renders/handle-stream.d.ts.map +1 -1
  110. package/dist/renders/handle-stream.js +2 -2
  111. package/dist/renders/handshake.d.ts +48 -22
  112. package/dist/renders/handshake.d.ts.map +1 -1
  113. package/dist/renders/handshake.js +40 -20
  114. package/dist/renders/import-gate.d.ts +50 -0
  115. package/dist/renders/import-gate.d.ts.map +1 -0
  116. package/dist/renders/import-gate.js +52 -0
  117. package/dist/renders/index.d.ts +27 -18
  118. package/dist/renders/index.d.ts.map +1 -1
  119. package/dist/renders/index.js +23 -15
  120. package/dist/renders/install-to-cache.d.ts +19 -14
  121. package/dist/renders/install-to-cache.d.ts.map +1 -1
  122. package/dist/renders/install-to-cache.js +22 -16
  123. package/dist/renders/installed-blueprints-provider.d.ts +5 -4
  124. package/dist/renders/installed-blueprints-provider.d.ts.map +1 -1
  125. package/dist/renders/installed-blueprints-provider.js +0 -0
  126. package/dist/renders/lifecycle.d.ts +37 -0
  127. package/dist/renders/lifecycle.d.ts.map +1 -0
  128. package/dist/renders/lifecycle.js +21 -0
  129. package/dist/renders/{list-renders.d.ts → list-sessions.d.ts} +18 -18
  130. package/dist/renders/list-sessions.d.ts.map +1 -0
  131. package/dist/renders/{list-renders.js → list-sessions.js} +15 -15
  132. package/dist/renders/no-credentials-card.d.ts +7 -7
  133. package/dist/renders/no-credentials-card.d.ts.map +1 -1
  134. package/dist/renders/no-credentials-card.js +4 -4
  135. package/dist/renders/payload-trace-sink.d.ts +7 -7
  136. package/dist/renders/payload-trace-sink.d.ts.map +1 -1
  137. package/dist/renders/payload-trace-sink.js +5 -5
  138. package/dist/renders/provisional-preview.d.ts +48 -50
  139. package/dist/renders/provisional-preview.d.ts.map +1 -1
  140. package/dist/renders/provisional-preview.js +22 -25
  141. package/dist/renders/refresh-ws-token.d.ts +15 -9
  142. package/dist/renders/refresh-ws-token.d.ts.map +1 -1
  143. package/dist/renders/refresh-ws-token.js +3 -3
  144. package/dist/renders/render.d.ts +177 -251
  145. package/dist/renders/render.d.ts.map +1 -1
  146. package/dist/renders/render.js +651 -410
  147. package/dist/renders/seed-pool-source.d.ts +17 -0
  148. package/dist/renders/seed-pool-source.d.ts.map +1 -0
  149. package/dist/renders/slice-meta-derivation.d.ts +185 -60
  150. package/dist/renders/slice-meta-derivation.d.ts.map +1 -1
  151. package/dist/renders/slice-meta-derivation.js +100 -77
  152. package/dist/renders/stream-replay-ops.d.ts +29 -29
  153. package/dist/renders/stream-replay-ops.d.ts.map +1 -1
  154. package/dist/renders/stream-replay-ops.js +35 -35
  155. package/dist/renders/stream.d.ts +5 -5
  156. package/dist/renders/stream.d.ts.map +1 -1
  157. package/dist/renders/stream.js +14 -16
  158. package/dist/renders/submit-action.d.ts +9 -9
  159. package/dist/renders/submit-action.d.ts.map +1 -1
  160. package/dist/renders/submit-action.js +16 -16
  161. package/dist/renders/sync-context.d.ts +9 -9
  162. package/dist/renders/sync-context.d.ts.map +1 -1
  163. package/dist/renders/sync-context.js +29 -22
  164. package/dist/renders/tenancy.d.ts +22 -0
  165. package/dist/renders/tenancy.d.ts.map +1 -0
  166. package/dist/renders/tenancy.js +15 -0
  167. package/dist/renders/tool-identity-catalog-store.d.ts +35 -0
  168. package/dist/renders/tool-identity-catalog-store.d.ts.map +1 -0
  169. package/dist/renders/tool-identity-catalog-store.js +15 -0
  170. package/dist/renders/update.d.ts +76 -103
  171. package/dist/renders/update.d.ts.map +1 -1
  172. package/dist/renders/update.js +112 -109
  173. package/dist/types.d.ts +83 -28
  174. package/dist/types.d.ts.map +1 -1
  175. package/dist/types.js +24 -0
  176. package/package.json +12 -25
  177. package/dist/contract-tests/index.d.ts +0 -20
  178. package/dist/contract-tests/index.d.ts.map +0 -1
  179. package/dist/renders/apply-render-patch.d.ts.map +0 -1
  180. package/dist/renders/canvas-lifecycle.d.ts +0 -36
  181. package/dist/renders/canvas-lifecycle.d.ts.map +0 -1
  182. package/dist/renders/canvas-lifecycle.js +0 -20
  183. package/dist/renders/get-render.d.ts.map +0 -1
  184. package/dist/renders/list-renders.d.ts.map +0 -1
  185. /package/dist/{contract-tests/index.js → renders/seed-pool-source.js} +0 -0
@@ -2,10 +2,11 @@
2
2
  * `ggui_list_gadgets` — per-app browser-capability gadget
3
3
  * catalog discovery tool.
4
4
  *
5
- * Returns the list of `GadgetDescriptor` declarations registered for
6
- * an app — the stdlib seed (`STDLIB_GADGETS` from
7
- * `@ggui-ai/protocol`) by default, or an operator-mutated catalog
8
- * once operator mutation is supported.
5
+ * Returns the app's effective `GadgetDescriptor` catalog: the
6
+ * first-party stdlib floor (`STDLIB_GADGETS` from
7
+ * `@ggui-ai/protocol`) with any operator-declared per-app packages
8
+ * (`ggui.json#app.gadgets`, pushed via the CLI's config-push) layered
9
+ * on top — a declared package wins on a `package`-name collision.
9
10
  *
10
11
  * ## Behavior
11
12
  *
@@ -15,14 +16,16 @@
15
16
  * 2. When `appId` is supplied explicitly, asserts it matches
16
17
  * `ctx.appId`; cross-tenant requests fail with
17
18
  * {@link AppAccessDeniedError}.
18
- * 3. Reads `app.gadgets` from the bound {@link AppMetadataStore}.
19
- * When the store returns `null` (app not registered — common for
20
- * OSS sandbox apps that bypass an explicit register call) the
21
- * handler falls back to `STDLIB_GADGETS` so callers
22
- * always get a meaningful catalog. This is a permitted-error
23
- * path, not a tenancy escape — `ctx.appId` was already proved
24
- * by the auth adapter; the absence of a registry row just means
25
- * the deployment runs default-seeded.
19
+ * 3. Reads `app.gadgets` from the bound {@link AppMetadataStore}
20
+ * and resolves the effective catalog via `resolveAppGadgets`
21
+ * (stdlib floor + declared extensions). When the store returns
22
+ * `null` (app not registered — common for OSS sandbox apps that
23
+ * bypass an explicit register call) the resolution yields
24
+ * exactly `STDLIB_GADGETS`, so callers always get a meaningful
25
+ * catalog. This is a permitted-error path, not a tenancy
26
+ * escape — `ctx.appId` was already proved by the auth adapter;
27
+ * the absence of a registry row just means the deployment runs
28
+ * default-seeded.
26
29
  *
27
30
  * ## Audience
28
31
  *
@@ -53,7 +56,6 @@ declare const outputSchema: {
53
56
  example: z.ZodOptional<z.ZodType<import("@ggui-ai/protocol").JsonValue, unknown, z.core.$ZodTypeInternals<import("@ggui-ai/protocol").JsonValue, unknown>>>;
54
57
  permission: z.ZodOptional<z.ZodString>;
55
58
  gotchas: z.ZodOptional<z.ZodString>;
56
- required: z.ZodOptional<z.ZodBoolean>;
57
59
  hook: z.ZodString;
58
60
  }, z.core.$strict>, z.ZodObject<{
59
61
  description: z.ZodOptional<z.ZodString>;
@@ -61,7 +63,6 @@ declare const outputSchema: {
61
63
  example: z.ZodOptional<z.ZodType<import("@ggui-ai/protocol").JsonValue, unknown, z.core.$ZodTypeInternals<import("@ggui-ai/protocol").JsonValue, unknown>>>;
62
64
  permission: z.ZodOptional<z.ZodString>;
63
65
  gotchas: z.ZodOptional<z.ZodString>;
64
- required: z.ZodOptional<z.ZodBoolean>;
65
66
  component: z.ZodString;
66
67
  }, z.core.$strict>]>>;
67
68
  version: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"list-gadgets.d.ts","sourceRoot":"","sources":["../../src/app-discovery/list-gadgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE,QAAA,MAAM,WAAW;;CAQP,CAAC;AAkBX,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAER,CAAC;AAEX,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,0BAA0B,GAC/B,aAAa,CACd,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,qBAAqB,CACtB,CA6BA"}
1
+ {"version":3,"file":"list-gadgets.d.ts","sourceRoot":"","sources":["../../src/app-discovery/list-gadgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE,QAAA,MAAM,WAAW;;CAQP,CAAC;AAkBX,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAER,CAAC;AAEX,MAAM,WAAW,0BAA0B;IACzC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,0BAA0B,GAC/B,aAAa,CACd,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,qBAAqB,CACtB,CA6BA"}
@@ -2,10 +2,11 @@
2
2
  * `ggui_list_gadgets` — per-app browser-capability gadget
3
3
  * catalog discovery tool.
4
4
  *
5
- * Returns the list of `GadgetDescriptor` declarations registered for
6
- * an app — the stdlib seed (`STDLIB_GADGETS` from
7
- * `@ggui-ai/protocol`) by default, or an operator-mutated catalog
8
- * once operator mutation is supported.
5
+ * Returns the app's effective `GadgetDescriptor` catalog: the
6
+ * first-party stdlib floor (`STDLIB_GADGETS` from
7
+ * `@ggui-ai/protocol`) with any operator-declared per-app packages
8
+ * (`ggui.json#app.gadgets`, pushed via the CLI's config-push) layered
9
+ * on top — a declared package wins on a `package`-name collision.
9
10
  *
10
11
  * ## Behavior
11
12
  *
@@ -15,14 +16,16 @@
15
16
  * 2. When `appId` is supplied explicitly, asserts it matches
16
17
  * `ctx.appId`; cross-tenant requests fail with
17
18
  * {@link AppAccessDeniedError}.
18
- * 3. Reads `app.gadgets` from the bound {@link AppMetadataStore}.
19
- * When the store returns `null` (app not registered — common for
20
- * OSS sandbox apps that bypass an explicit register call) the
21
- * handler falls back to `STDLIB_GADGETS` so callers
22
- * always get a meaningful catalog. This is a permitted-error
23
- * path, not a tenancy escape — `ctx.appId` was already proved
24
- * by the auth adapter; the absence of a registry row just means
25
- * the deployment runs default-seeded.
19
+ * 3. Reads `app.gadgets` from the bound {@link AppMetadataStore}
20
+ * and resolves the effective catalog via `resolveAppGadgets`
21
+ * (stdlib floor + declared extensions). When the store returns
22
+ * `null` (app not registered — common for OSS sandbox apps that
23
+ * bypass an explicit register call) the resolution yields
24
+ * exactly `STDLIB_GADGETS`, so callers always get a meaningful
25
+ * catalog. This is a permitted-error path, not a tenancy
26
+ * escape — `ctx.appId` was already proved by the auth adapter;
27
+ * the absence of a registry row just means the deployment runs
28
+ * default-seeded.
26
29
  *
27
30
  * ## Audience
28
31
  *
@@ -39,7 +42,7 @@
39
42
  * defeats per-app curation.
40
43
  */
41
44
  import { z } from 'zod';
42
- import { STDLIB_GADGETS, gadgetDescriptorSchema, } from '@ggui-ai/protocol';
45
+ import { resolveAppGadgets, gadgetDescriptorSchema, } from '@ggui-ai/protocol';
43
46
  import { AppAccessDeniedError } from './errors.js';
44
47
  const inputSchema = {
45
48
  appId: z
@@ -71,7 +74,7 @@ export function createGguiListGadgetsHandler(deps) {
71
74
  name: 'ggui_list_gadgets',
72
75
  title: 'List gadgets',
73
76
  audience: ['agent'],
74
- description: 'List the per-app catalog of browser-capability gadget hooks the UI may import in `clientCapabilities.gadgets[*]` of a DataContract. Returns the v1 stdlib catalog by default; operator-mutated per-app overrides ship in a follow-up slice. Pass appId to scope explicitly (must match the caller identity); omit to default to the caller-resolved app.',
77
+ description: "List the per-app catalog of browser-capability gadget hooks the UI may import in `clientCapabilities.gadgets[*]` of a DataContract. Returns the app's effective catalog — the first-party stdlib floor plus any operator-registered per-app packages (`ggui.json#app.gadgets`); a declared package wins on a package-name collision. Pass appId to scope explicitly (must match the caller identity); omit to default to the caller-resolved app.",
75
78
  inputSchema,
76
79
  outputSchema,
77
80
  async handler(rawInput, ctx) {
@@ -86,7 +89,7 @@ export function createGguiListGadgetsHandler(deps) {
86
89
  // explicitly created. Return the stdlib seed so callers always
87
90
  // get a meaningful catalog. This mirrors the cloud DDB adapter's
88
91
  // default-on-read pattern at the row-projection site.
89
- const gadgets = app?.gadgets ?? STDLIB_GADGETS;
92
+ const gadgets = resolveAppGadgets(app?.gadgets);
90
93
  return { gadgets };
91
94
  },
92
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"describe-data-contract-format.d.ts","sourceRoot":"","sources":["../../src/blueprints/describe-data-contract-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,WAAW,IAAK,CAAC;AAEvB,QAAA,MAAM,YAAY;;;;;;;CASjB,CAAC;AAEF,UAAU,gCAAgC;IACxC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC,CAAC;CACJ;AAoQD,wBAAgB,uCAAuC,IAAI,aAAa,CACtE,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,gCAAgC,CACjC,CAiBA"}
1
+ {"version":3,"file":"describe-data-contract-format.d.ts","sourceRoot":"","sources":["../../src/blueprints/describe-data-contract-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,WAAW,IAAK,CAAC;AAEvB,QAAA,MAAM,YAAY;;;;;;;CASjB,CAAC;AAEF,UAAU,gCAAgC;IACxC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC5C,CAAC,CAAC;CACJ;AA+RD,wBAAgB,uCAAuC,IAAI,aAAa,CACtE,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,gCAAgC,CACjC,CAiBA"}
@@ -120,16 +120,25 @@ and read latest as \`stream.latest\` or iterate \`stream.history\`.
120
120
 
121
121
  \`\`\`ts
122
122
  interface AgentCapabilitiesSpec {
123
+ // Keyed by the bare MCP tool name (the catalog key).
123
124
  tools: Record<string, AgentToolEntry>;
124
125
  }
125
126
 
126
127
  interface AgentToolEntry {
127
- description?: string;
128
- inputSchema?: JsonSchema;
129
- outputSchema?: JsonSchema;
128
+ // Owning MCP server identity. OPTIONAL — Tier-2: derive name from the
129
+ // mcp__<server>__ prefix (omit when absent, never invent); Tier-1:
130
+ // agent-server fills from 'initialize'. (server, toolName) is the
131
+ // canonical identity; version is metadata, not identity.
132
+ serverInfo?: { name: string; version?: string };
133
+ // MCP tool descriptor, echoed from 'tools/list' (minus name = the key).
134
+ toolInfo: {
135
+ inputSchema: JsonSchema; // REQUIRED — every MCP tool has one.
136
+ description?: string;
137
+ outputSchema?: JsonSchema;
138
+ };
139
+ // ggui authoring layer (not MCP): when/why/by-whom the tool is called.
130
140
  usage?: string;
131
- example?: { input?: JsonValue; output?: JsonValue };
132
- required?: boolean;
141
+ example?: { input: JsonValue; output: JsonValue };
133
142
  }
134
143
  \`\`\`
135
144
 
@@ -139,6 +148,24 @@ Pure catalog — declares tools the AGENT may invoke. Referenced from
139
148
  NEVER calls these. Cross-ref linter rejects dangling \`nextStep\` /
140
149
  \`source.tool\` values that don't resolve to a key here.
141
150
 
151
+ Canonical-identity hints (improve reuse of UIs built by earlier
152
+ conversations or other agents):
153
+
154
+ - The map KEYS are the **bare** MCP tool name — the part AFTER any
155
+ \`mcp__<server>__\` prefix a host prepends on its connection. Key by
156
+ the bare name (e.g. \`todo_add\`), NOT the host's connection label or
157
+ prefix.
158
+ - \`serverInfo.name\` identifies the owning MCP server so a UI built against
159
+ the same \`(server, toolName)\` is reused across conversations and agents.
160
+ Set it to the server handle from your tool's \`mcp__<server>__\` prefix —
161
+ the SAME \`<server>\` you stripped to get the bare key (e.g.
162
+ \`mcp__todo__todo_add\` → \`serverInfo.name: 'todo'\`). If a tool has no
163
+ such prefix, OMIT \`serverInfo\` — never invent a name. \`version\` is
164
+ OPTIONAL metadata (include it only if your host surfaces it); a version
165
+ difference alone never blocks reuse.
166
+ - \`toolInfo.inputSchema\` is echoed verbatim from the tool's \`tools/list\`
167
+ descriptor.
168
+
142
169
  ## ClientCapabilitiesSpec entry
143
170
 
144
171
  \`\`\`ts
@@ -169,11 +196,11 @@ interface GadgetExportUse {
169
196
 
170
197
  The wire carries IDENTITY ONLY — \`(package, export name)\`. It does
171
198
  NOT carry \`version\`: the operator's \`App.gadgets\` catalog owns the
172
- version pin. Per-export registry metadata (\`permission\`, \`example\`,
173
- the \`required\` flag) and transport fields (\`bundleUrl\`,
199
+ version pin. Per-export registry metadata (\`permission\`, \`example\`)
200
+ and transport fields (\`bundleUrl\`,
174
201
  \`bundleSri\`, …) likewise live on the operator-registered gadget
175
202
  package descriptor — NOT on the wire. The renderer resolves them
176
- server-side from the app's gadget catalog at push time (e.g. a hook's
203
+ server-side from the app's gadget catalog at render time (e.g. a hook's
177
204
  browser \`permission\` flows into the iframe's Permissions-Policy
178
205
  directive set from there).
179
206
 
@@ -1 +1 @@
1
- {"version":3,"file":"list-featured-blueprints.d.ts","sourceRoot":"","sources":["../../src/blueprints/list-featured-blueprints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,WAAW,IAChB,CAAC;AAEF,QAAA,MAAM,YAAY;;;CAOjB,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,mCAAmC,CACjD,IAAI,GAAE,0BAA+B,GACpC,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,4BAA4B,CAAC,CAwBtF"}
1
+ {"version":3,"file":"list-featured-blueprints.d.ts","sourceRoot":"","sources":["../../src/blueprints/list-featured-blueprints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,QAAA,MAAM,WAAW,IAAmC,CAAC;AAErD,QAAA,MAAM,YAAY;;;CAOjB,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,mCAAmC,CACjD,IAAI,GAAE,0BAA+B,GACpC,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,4BAA4B,CAAC,CAqBtF"}
@@ -14,7 +14,12 @@
14
14
  * manifest becomes discoverable through this tool.
15
15
  */
16
16
  import { z } from 'zod';
17
- const inputSchema = {};
17
+ import { listFeaturedBlueprintsInputShape } from '@ggui-ai/protocol';
18
+ // Canonical SSoT shape — authored once in `@ggui-ai/protocol`
19
+ // (`schemas/mcp.ts`). Intentionally EMPTY: the pre-launch No-Backcompat
20
+ // scrub deleted the filter vocabulary; filters re-enter when a real
21
+ // consumer passes them.
22
+ const inputSchema = listFeaturedBlueprintsInputShape;
18
23
  const outputSchema = {
19
24
  // Two-arg `z.record(z.string(), z.unknown())` — zod v4 dropped the
20
25
  // single-arg form. Keeping the explicit key/value pair so schema
@@ -31,13 +36,12 @@ export function createListFeaturedBlueprintsHandler(deps = {}) {
31
36
  description: "Builder-curated featured blueprints. Returns entries declared via the server's blueprint catalog (typically ggui.json's `blueprints.include` for OSS deployments). Empty when no catalog is wired.",
32
37
  inputSchema,
33
38
  outputSchema,
34
- async handler(rawInput) {
35
- const { category } = z.object(inputSchema).parse(rawInput);
39
+ async handler() {
36
40
  const provider = deps.blueprints;
37
41
  if (!provider) {
38
42
  return { blueprints: [], total: 0 };
39
43
  }
40
- const entries = await provider.list(category !== undefined ? { tag: category } : {});
44
+ const entries = await provider.list({});
41
45
  return {
42
46
  blueprints: entries.map((entry) => ({ ...entry })),
43
47
  total: entries.length,
@@ -50,7 +50,7 @@ import type { UiRegistry } from '@ggui-ai/ui-registry';
50
50
  import type { GguiRenderBlueprintOutput } from '@ggui-ai/protocol';
51
51
  import type { SharedHandler } from '../types.js';
52
52
  declare const inputSchema: {
53
- blueprintId: z.ZodString;
53
+ readonly blueprintId: z.ZodString;
54
54
  };
55
55
  declare const outputSchema: {
56
56
  blueprintId: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"render-blueprint.d.ts","sourceRoot":"","sources":["../../src/blueprints/render-blueprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,QAAA,MAAM,WAAW;;CAOhB,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;CAKjB,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,mBAAmB,GACxB,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,yBAAyB,CAAC,CAqCnF"}
1
+ {"version":3,"file":"render-blueprint.d.ts","sourceRoot":"","sources":["../../src/blueprints/render-blueprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,QAAA,MAAM,WAAW;;CAA4B,CAAC;AAE9C,QAAA,MAAM,YAAY;;;;;CAKjB,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,mBAAmB,GACxB,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,yBAAyB,CAAC,CAqCnF"}
@@ -46,12 +46,10 @@
46
46
  * surface advertised, zero functionality — and is retired here.
47
47
  */
48
48
  import { z } from 'zod';
49
- const inputSchema = {
50
- blueprintId: z
51
- .string()
52
- .min(1)
53
- .describe('The stable blueprint id declared via ggui.ui.json#id. Must match an entry in this server\'s UI registry.'),
54
- };
49
+ import { renderBlueprintInputShape } from '@ggui-ai/protocol';
50
+ // Canonical SSoT shape — authored once in `@ggui-ai/protocol`
51
+ // (`schemas/mcp.ts`).
52
+ const inputSchema = renderBlueprintInputShape;
55
53
  const outputSchema = {
56
54
  blueprintId: z.string(),
57
55
  blueprintName: z.string(),
@@ -43,7 +43,7 @@
43
43
  */
44
44
  import { z } from 'zod';
45
45
  import type { BlueprintProvider, EmbeddingProvider, VectorStore } from '@ggui-ai/mcp-server-core';
46
- import type { GguiSearchBlueprintsOutput } from '@ggui-ai/protocol';
46
+ import { type GguiSearchBlueprintsOutput } from '@ggui-ai/protocol';
47
47
  import type { SharedHandler } from '../types.js';
48
48
  /**
49
49
  * Matches the hosted `MIN_SIMILARITY_SCORE`. Below this is noise —
@@ -82,8 +82,8 @@ export interface SearchBlueprintsDeps {
82
82
  readonly blueprints?: BlueprintProvider;
83
83
  }
84
84
  declare const inputSchema: {
85
- query: z.ZodString;
86
- limit: z.ZodOptional<z.ZodNumber>;
85
+ readonly query: z.ZodString;
86
+ readonly limit: z.ZodOptional<z.ZodNumber>;
87
87
  };
88
88
  declare const outputSchema: {
89
89
  results: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"search-blueprints.d.ts","sourceRoot":"","sources":["../../src/blueprints/search-blueprints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAEV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,IAAM,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAED,QAAA,MAAM,WAAW;;;CAMhB,CAAC;AAEF,QAAA,MAAM,YAAY;;;;CAUjB,CAAC;AAKF;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,oBAAoB,GACzB,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,0BAA0B,CAAC,CA4CpF"}
1
+ {"version":3,"file":"search-blueprints.d.ts","sourceRoot":"","sources":["../../src/blueprints/search-blueprints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAEV,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,IAAM,CAAC;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAID,QAAA,MAAM,WAAW;;;CAA6B,CAAC;AAE/C,QAAA,MAAM,YAAY;;;;CAUjB,CAAC;AAKF;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,oBAAoB,GACzB,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,0BAA0B,CAAC,CA4CpF"}
@@ -42,6 +42,7 @@
42
42
  * when composing.
43
43
  */
44
44
  import { z } from 'zod';
45
+ import { flatToBlueprintSource, searchBlueprintsInputShape, } from '@ggui-ai/protocol';
45
46
  /**
46
47
  * Matches the hosted `MIN_SIMILARITY_SCORE`. Below this is noise —
47
48
  * callers that want stricter matching post-filter by `score`.
@@ -62,13 +63,9 @@ export const MANIFEST_EXACT_NAME_SCORE = 1.0;
62
63
  * stronger signal.
63
64
  */
64
65
  export const MANIFEST_SUBSTRING_SCORE = 0.7;
65
- const inputSchema = {
66
- query: z
67
- .string()
68
- .min(1)
69
- .describe("Natural-language description of the UI you're looking for"),
70
- limit: z.number().int().min(1).max(100).optional(),
71
- };
66
+ // Canonical SSoT shape — authored once in `@ggui-ai/protocol`
67
+ // (`schemas/mcp.ts`).
68
+ const inputSchema = searchBlueprintsInputShape;
72
69
  const outputSchema = {
73
70
  // `z.record(z.string(), z.unknown())` — zod v4 dropped the single-arg
74
71
  // form `z.record(z.unknown())` that implicitly defaulted the key type
@@ -130,38 +127,41 @@ export function createSearchBlueprintsHandler(deps) {
130
127
  * same score-rounding. A manifest-only OSS boot with an empty vector
131
128
  * store returns `[]` here and all visible hits come from the manifest
132
129
  * branch.
130
+ *
131
+ * Rows are blueprint-registry rows (`blueprintToMetadata` layout):
132
+ * `description` reads the stored `intent`, and `category` surfaces the
133
+ * provenance discriminant (`llm` / `user` / `curated`). Rows without
134
+ * valid provenance — legacy flat-vocabulary rows, foreign vector
135
+ * families sharing the scope — are dropped at this trust boundary,
136
+ * never surfaced with coerced labels.
133
137
  */
134
138
  async function searchSemantic(deps, scope, query, limit) {
135
139
  const vector = await deps.embedding.embed(query);
136
140
  const raw = await deps.vectors.query(scope, vector, limit);
137
- return raw
138
- .filter((r) => r.score >= MIN_SIMILARITY_SCORE)
139
- .map((r) => {
140
- const blueprintHash = r.key;
141
- const prompt = asString(r.metadata.prompt);
142
- const category = asString(r.metadata.category) || 'generated';
143
- const props = parseJsonArray(r.metadata.props);
144
- const callbacks = parseJsonArray(r.metadata.callbacks);
145
- const featured = asBoolean(r.metadata.featured);
146
- return {
147
- id: blueprintHash.startsWith('p_') ? blueprintHash : `c_${blueprintHash}`,
148
- name: blueprintHash.startsWith('p_')
149
- ? `Predefined_${blueprintHash.substring(2)}`
150
- : `Cached_${blueprintHash.substring(0, 8)}`,
151
- description: prompt,
152
- category,
153
- props: props.map((p) => ({
154
- name: p.name,
155
- type: p.type,
156
- required: p.required,
157
- description: p.description,
158
- })),
159
- callbacks,
160
- featured,
141
+ const hits = [];
142
+ for (const r of raw) {
143
+ if (r.score < MIN_SIMILARITY_SCORE)
144
+ continue;
145
+ const source = flatToBlueprintSource(r.metadata);
146
+ if (source === null)
147
+ continue;
148
+ const key = r.key;
149
+ hits.push({
150
+ id: `c_${key}`,
151
+ name: `Cached_${key.substring(0, 8)}`,
152
+ description: asString(r.metadata.intent),
153
+ category: source.kind,
154
+ // Registry rows don't carry per-prop docs / callback lists /
155
+ // a featured flag — surface honest empties rather than parse
156
+ // keys no writer ever stamps.
157
+ props: [],
158
+ callbacks: [],
159
+ featured: false,
161
160
  relevance: 'match',
162
161
  score: Math.round(r.score * 1000) / 1000,
163
- };
164
- });
162
+ });
163
+ }
164
+ return hits;
165
165
  }
166
166
  /**
167
167
  * Manifest-source branch: text-match against `BlueprintProvider.list`
@@ -209,17 +209,3 @@ function toManifestHit(entry, queryLower) {
209
209
  function asString(value) {
210
210
  return typeof value === 'string' ? value : '';
211
211
  }
212
- function asBoolean(value) {
213
- return Boolean(value);
214
- }
215
- function parseJsonArray(value) {
216
- if (typeof value !== 'string' || value.length === 0)
217
- return [];
218
- try {
219
- const parsed = JSON.parse(value);
220
- return Array.isArray(parsed) ? parsed : [];
221
- }
222
- catch {
223
- return [];
224
- }
225
- }
@@ -41,7 +41,7 @@ export interface CreditTransactionView {
41
41
  readonly balanceAfterCents: number;
42
42
  readonly reason: string;
43
43
  readonly createdAt: string;
44
- readonly relatedRenderId?: string;
44
+ readonly relatedSessionId?: string;
45
45
  }
46
46
  export interface ListCreditTransactionsDeps {
47
47
  readonly creditTransactions: CreditTransactionSource;
@@ -65,7 +65,7 @@ declare const outputSchema: {
65
65
  balanceAfterCents: z.ZodNumber;
66
66
  reason: z.ZodString;
67
67
  createdAt: z.ZodString;
68
- relatedRenderId: z.ZodOptional<z.ZodString>;
68
+ relatedSessionId: z.ZodOptional<z.ZodString>;
69
69
  }, z.core.$strip>>;
70
70
  /** Set when more rows exist past `limit`. Pass back as the next call's `cursor`. */
71
71
  nextCursor: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"list-credit-transactions.d.ts","sourceRoot":"","sources":["../../src/credits/list-credit-transactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,oCAAoC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,4EAA4E;QAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QACV,YAAY,EAAE,qBAAqB,EAAE,CAAC;QACtC,6CAA6C;QAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;CACtD;AAED,QAAA,MAAM,WAAW;IACf,2BAA2B;;IAE3B,kEAAkE;;CAEnE,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;IAYhB,oFAAoF;;CAErF,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,qBAAqB,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,0BAA0B,GAC/B,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,4BAA4B,CAAC,CAkCtF"}
1
+ {"version":3,"file":"list-credit-transactions.d.ts","sourceRoot":"","sources":["../../src/credits/list-credit-transactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,oCAAoC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,4EAA4E;QAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QACV,YAAY,EAAE,qBAAqB,EAAE,CAAC;QACtC,6CAA6C;QAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;CACtD;AAED,QAAA,MAAM,WAAW;IACf,2BAA2B;;IAE3B,kEAAkE;;CAEnE,CAAC;AAEF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;IAYhB,oFAAoF;;CAErF,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,qBAAqB,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,0BAA0B,GAC/B,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,4BAA4B,CAAC,CAkCtF"}
@@ -28,7 +28,7 @@ const outputSchema = {
28
28
  balanceAfterCents: z.number().int(),
29
29
  reason: z.string(),
30
30
  createdAt: z.string(),
31
- relatedRenderId: z.string().optional(),
31
+ relatedSessionId: z.string().optional(),
32
32
  })),
33
33
  /** Set when more rows exist past `limit`. Pass back as the next call's `cursor`. */
34
34
  nextCursor: z.string().optional(),
@@ -38,7 +38,7 @@ export function createListCreditTransactionsHandler(deps) {
38
38
  name: 'ggui_ops_list_credit_transactions',
39
39
  title: 'List credit transactions',
40
40
  audience: ['ops'],
41
- description: "Returns the calling user's credit transaction ledger, newest-first. Each row carries kind ('free_credit' | 'render_charge' | 'topup' | 'refund'), deltaCents (signed — positive for grants/topups, negative for charges), balanceAfterCents (snapshot at time of write), reason (human-readable), and optional relatedRenderId for render_charge rows. Default limit 20, cap 100; pass `cursor` from the previous response's `nextCursor` for paging.",
41
+ description: "Returns the calling user's credit transaction ledger, newest-first. Each row carries kind ('free_credit' | 'render_charge' | 'topup' | 'refund'), deltaCents (signed — positive for grants/topups, negative for charges), balanceAfterCents (snapshot at time of write), reason (human-readable), and optional relatedSessionId for render_charge rows. Default limit 20, cap 100; pass `cursor` from the previous response's `nextCursor` for paging.",
42
42
  inputSchema,
43
43
  outputSchema,
44
44
  // No `allowedFor` — same toolset on every pod kind. Callers
package/dist/index.d.ts CHANGED
@@ -15,8 +15,8 @@
15
15
  */
16
16
  export * from "./blueprints/index.js";
17
17
  export * from "./renders/index.js";
18
- export { AuthRequiredError } from "./types.js";
19
- export type { AudienceTag, HandlerContext, SharedHandler } from "./types.js";
18
+ export { AuthRequiredError, HANDLER_FAILURE_MARKER, handlerFailure, isHandlerFailure, } from "./types.js";
19
+ export type { AudienceTag, HandlerContext, HandlerFailure, SharedHandler, SharedHandlerResult, } from "./types.js";
20
20
  export * from "./threads/index.js";
21
21
  export * from "./credits/index.js";
22
22
  export * from "./app-discovery/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI7E,cAAc,oBAAoB,CAAC;AAInC,cAAc,oBAAoB,CAAC;AAInC,cAAc,0BAA0B,CAAC;AAIzC,cAAc,0BAA0B,CAAC;AAMzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAIpB,cAAc,oBAAoB,CAAC;AAInC,cAAc,oBAAoB,CAAC;AAInC,cAAc,0BAA0B,CAAC;AAIzC,cAAc,0BAA0B,CAAC;AAMzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@
15
15
  */
16
16
  export * from "./blueprints/index.js";
17
17
  export * from "./renders/index.js";
18
- export { AuthRequiredError } from "./types.js";
18
+ export { AuthRequiredError, HANDLER_FAILURE_MARKER, handlerFailure, isHandlerFailure, } from "./types.js";
19
19
  // Persistent-chat handler family — thread storage and message
20
20
  // history MCP tools. Thin over @ggui-ai/mcp-server-core ThreadStore.
21
21
  // Available under `@ggui-ai/mcp-server-handlers/threads` subpath too.
@@ -24,6 +24,7 @@ declare const outputSchema: {
24
24
  readonly systemPrompt: z.ZodOptional<z.ZodString>;
25
25
  readonly createdAt: z.ZodString;
26
26
  readonly updatedAt: z.ZodString;
27
+ readonly connectUrl: z.ZodOptional<z.ZodString>;
27
28
  };
28
29
  export interface CreateAppOutput {
29
30
  readonly appId: string;
@@ -31,6 +32,12 @@ export interface CreateAppOutput {
31
32
  readonly systemPrompt?: string;
32
33
  readonly createdAt: string;
33
34
  readonly updatedAt: string;
35
+ /**
36
+ * Per-app MCP connect URL. Optional: emitted only by deployments
37
+ * that expose per-app ingress (this handler has no ingress
38
+ * knowledge, so the default composition never sets it).
39
+ */
40
+ readonly connectUrl?: string;
34
41
  }
35
42
  export interface CreateAppDeps {
36
43
  readonly apps: AppsSource;
@@ -1 +1 @@
1
- {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../src/ops-apps/create-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,QAAA,MAAM,WAAW;;CASP,CAAC;AAEX,QAAA,MAAM,YAAY;;;;;;CAMR,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,aAAa,GAClB,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,eAAe,CAAC,CAgCzE"}
1
+ {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../src/ops-apps/create-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD,QAAA,MAAM,WAAW;;CASP,CAAC;AAEX,QAAA,MAAM,YAAY;;;;;;;CAYR,CAAC;AAEX,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,aAAa,GAClB,aAAa,CAAC,OAAO,WAAW,EAAE,OAAO,YAAY,EAAE,eAAe,CAAC,CAgCzE"}
@@ -20,7 +20,7 @@ const inputSchema = {
20
20
  .min(1)
21
21
  .max(120)
22
22
  .optional()
23
- .describe("Human-friendly label for the new app. Defaults to 'My ggui app' when absent — matches the auto-create path in `useGguiUser`."),
23
+ .describe("Human-friendly label for the new app. Defaults to 'My ggui app' when absent — the same label the deployment's first-load auto-create uses."),
24
24
  };
25
25
  const outputSchema = {
26
26
  appId: z.string(),
@@ -28,13 +28,17 @@ const outputSchema = {
28
28
  systemPrompt: z.string().optional(),
29
29
  createdAt: z.string(),
30
30
  updatedAt: z.string(),
31
+ connectUrl: z
32
+ .string()
33
+ .optional()
34
+ .describe('Per-app MCP connect URL — present when the deployment exposes per-app ingress. Paste-ready for an MCP client config.'),
31
35
  };
32
36
  export function createCreateAppHandler(deps) {
33
37
  return {
34
38
  name: 'ggui_ops_create_app',
35
39
  title: 'Create app',
36
40
  audience: ['ops'],
37
- description: "Provision a fresh `GguiApp` owned by the calling user. Wraps the cloud's `provisionGguiApp` mutation: opaque base62 appId is minted server-side, the row is owned by the caller's Cognito sub, displayName defaults to 'My ggui app' when absent (cap 120 chars). Returns the persisted shape — call `ggui_ops_set_default_app({appId})` afterwards to promote the new app to the user's default.",
41
+ description: "Provision a fresh `GguiApp` owned by the calling user: an opaque base62 appId is minted server-side, the row is owned by the caller's identity, displayName defaults to 'My ggui app' when absent (cap 120 chars). Returns the persisted shape — call `ggui_ops_set_default_app({appId})` afterwards to promote the new app to the user's default.",
38
42
  inputSchema,
39
43
  outputSchema,
40
44
  async handler(rawInput, ctx) {
@@ -21,6 +21,14 @@
21
21
  * Recovery: omit the `generator` field to use
22
22
  * `registry.defaultGenerator()`, or register the missing generator
23
23
  * before re-invoking.
24
+ *
25
+ * Not the retired agent-surface `unknown_generator` gate (rc3,
26
+ * retired-surface cleanup 2026-06-11 — see `@ggui-ai/protocol`'s
27
+ * version.ts changelog): the agent surface handles a bad
28
+ * `blueprintDraft.generator` hint forgivingly as the
29
+ * `GENERATOR_UNKNOWN` handshake finding (`renders/assert-generator.ts`);
30
+ * THIS error is the operator registry's strict slug lookup and stays
31
+ * live. Don't re-unify them.
24
32
  */
25
33
  export declare class GeneratorNotFoundError extends Error {
26
34
  readonly code: "generator_not_found";
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/ops-blueprint/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBACnC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE;CAM7D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBACnC,OAAO,CAAC,EAAE,MAAM;CAO7B;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAU;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAK5C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/ops-blueprint/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBACnC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,MAAM,EAAE;CAM7D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBACnC,OAAO,CAAC,EAAE,MAAM;CAO7B;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAG,mBAAmB,CAAU;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAK5C"}
@@ -21,6 +21,14 @@
21
21
  * Recovery: omit the `generator` field to use
22
22
  * `registry.defaultGenerator()`, or register the missing generator
23
23
  * before re-invoking.
24
+ *
25
+ * Not the retired agent-surface `unknown_generator` gate (rc3,
26
+ * retired-surface cleanup 2026-06-11 — see `@ggui-ai/protocol`'s
27
+ * version.ts changelog): the agent surface handles a bad
28
+ * `blueprintDraft.generator` hint forgivingly as the
29
+ * `GENERATOR_UNKNOWN` handshake finding (`renders/assert-generator.ts`);
30
+ * THIS error is the operator registry's strict slug lookup and stays
31
+ * live. Don't re-unify them.
24
32
  */
25
33
  export class GeneratorNotFoundError extends Error {
26
34
  code = "generator_not_found";