@raytio/mcp-server 10.0.0 → 10.2.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 (94) hide show
  1. package/dist/authorization.d.ts.map +1 -1
  2. package/dist/authorization.js +4 -0
  3. package/dist/authorization.js.map +1 -1
  4. package/dist/tools/_shared/side-effect.d.ts +25 -2
  5. package/dist/tools/_shared/side-effect.d.ts.map +1 -1
  6. package/dist/tools/_shared/side-effect.js +29 -4
  7. package/dist/tools/_shared/side-effect.js.map +1 -1
  8. package/dist/tools/bkm/bkm-adapter-configuration-update.d.ts +17 -0
  9. package/dist/tools/bkm/bkm-adapter-configuration-update.d.ts.map +1 -0
  10. package/dist/tools/bkm/bkm-adapter-configuration-update.js +79 -0
  11. package/dist/tools/bkm/bkm-adapter-configuration-update.js.map +1 -0
  12. package/dist/tools/bkm/bkm-availability-search-start.d.ts +20 -0
  13. package/dist/tools/bkm/bkm-availability-search-start.d.ts.map +1 -0
  14. package/dist/tools/bkm/bkm-availability-search-start.js +110 -0
  15. package/dist/tools/bkm/bkm-availability-search-start.js.map +1 -0
  16. package/dist/tools/bkm/bkm-provider-item-mapping-create.d.ts +15 -0
  17. package/dist/tools/bkm/bkm-provider-item-mapping-create.d.ts.map +1 -0
  18. package/dist/tools/bkm/bkm-provider-item-mapping-create.js +62 -0
  19. package/dist/tools/bkm/bkm-provider-item-mapping-create.js.map +1 -0
  20. package/dist/tools/bkm/generated-reads.d.ts +5 -0
  21. package/dist/tools/bkm/generated-reads.d.ts.map +1 -0
  22. package/dist/tools/bkm/generated-reads.js +33 -0
  23. package/dist/tools/bkm/generated-reads.js.map +1 -0
  24. package/dist/tools/bkm/index.d.ts +5 -0
  25. package/dist/tools/bkm/index.d.ts.map +1 -0
  26. package/dist/tools/bkm/index.js +13 -0
  27. package/dist/tools/bkm/index.js.map +1 -0
  28. package/dist/tools/dcm/dcm-device-command-dispatch.d.ts +28 -0
  29. package/dist/tools/dcm/dcm-device-command-dispatch.d.ts.map +1 -0
  30. package/dist/tools/dcm/dcm-device-command-dispatch.js +96 -0
  31. package/dist/tools/dcm/dcm-device-command-dispatch.js.map +1 -0
  32. package/dist/tools/dcm/dcm-device-register.d.ts +22 -0
  33. package/dist/tools/dcm/dcm-device-register.d.ts.map +1 -0
  34. package/dist/tools/dcm/dcm-device-register.js +86 -0
  35. package/dist/tools/dcm/dcm-device-register.js.map +1 -0
  36. package/dist/tools/dcm/dcm-device-slot-configure.d.ts +13 -0
  37. package/dist/tools/dcm/dcm-device-slot-configure.d.ts.map +1 -0
  38. package/dist/tools/dcm/dcm-device-slot-configure.js +68 -0
  39. package/dist/tools/dcm/dcm-device-slot-configure.js.map +1 -0
  40. package/dist/tools/dcm/dcm-device-update.d.ts +13 -0
  41. package/dist/tools/dcm/dcm-device-update.d.ts.map +1 -0
  42. package/dist/tools/dcm/dcm-device-update.js +55 -0
  43. package/dist/tools/dcm/dcm-device-update.js.map +1 -0
  44. package/dist/tools/dcm/generated-reads.d.ts +5 -0
  45. package/dist/tools/dcm/generated-reads.d.ts.map +1 -0
  46. package/dist/tools/dcm/generated-reads.js +30 -0
  47. package/dist/tools/dcm/generated-reads.js.map +1 -0
  48. package/dist/tools/dcm/index.d.ts +5 -0
  49. package/dist/tools/dcm/index.d.ts.map +1 -0
  50. package/dist/tools/dcm/index.js +15 -0
  51. package/dist/tools/dcm/index.js.map +1 -0
  52. package/dist/tools/domains.d.ts.map +1 -1
  53. package/dist/tools/domains.js +36 -0
  54. package/dist/tools/domains.js.map +1 -1
  55. package/dist/tools/ixn/generated-reads.d.ts +5 -0
  56. package/dist/tools/ixn/generated-reads.d.ts.map +1 -0
  57. package/dist/tools/ixn/generated-reads.js +29 -0
  58. package/dist/tools/ixn/generated-reads.js.map +1 -0
  59. package/dist/tools/ixn/index.d.ts +5 -0
  60. package/dist/tools/ixn/index.d.ts.map +1 -0
  61. package/dist/tools/ixn/index.js +8 -0
  62. package/dist/tools/ixn/index.js.map +1 -0
  63. package/dist/tools/ixn/ixn-conversation-start.d.ts +22 -0
  64. package/dist/tools/ixn/ixn-conversation-start.d.ts.map +1 -0
  65. package/dist/tools/ixn/ixn-conversation-start.js +98 -0
  66. package/dist/tools/ixn/ixn-conversation-start.js.map +1 -0
  67. package/dist/tools/ixn/ixn-message-send.d.ts +28 -0
  68. package/dist/tools/ixn/ixn-message-send.d.ts.map +1 -0
  69. package/dist/tools/ixn/ixn-message-send.js +92 -0
  70. package/dist/tools/ixn/ixn-message-send.js.map +1 -0
  71. package/dist/tools/role-mapping.d.ts.map +1 -1
  72. package/dist/tools/role-mapping.js +24 -0
  73. package/dist/tools/role-mapping.js.map +1 -1
  74. package/dist/tools/xrm/generated-reads.d.ts +5 -0
  75. package/dist/tools/xrm/generated-reads.d.ts.map +1 -0
  76. package/dist/tools/xrm/generated-reads.js +37 -0
  77. package/dist/tools/xrm/generated-reads.js.map +1 -0
  78. package/dist/tools/xrm/index.d.ts +5 -0
  79. package/dist/tools/xrm/index.d.ts.map +1 -0
  80. package/dist/tools/xrm/index.js +13 -0
  81. package/dist/tools/xrm/index.js.map +1 -0
  82. package/dist/tools/xrm/xrm-inbound-email-rule-create.d.ts +21 -0
  83. package/dist/tools/xrm/xrm-inbound-email-rule-create.d.ts.map +1 -0
  84. package/dist/tools/xrm/xrm-inbound-email-rule-create.js +85 -0
  85. package/dist/tools/xrm/xrm-inbound-email-rule-create.js.map +1 -0
  86. package/dist/tools/xrm/xrm-merchant-create.d.ts +22 -0
  87. package/dist/tools/xrm/xrm-merchant-create.d.ts.map +1 -0
  88. package/dist/tools/xrm/xrm-merchant-create.js +85 -0
  89. package/dist/tools/xrm/xrm-merchant-create.js.map +1 -0
  90. package/dist/tools/xrm/xrm-merchant-update.d.ts +14 -0
  91. package/dist/tools/xrm/xrm-merchant-update.d.ts.map +1 -0
  92. package/dist/tools/xrm/xrm-merchant-update.js +61 -0
  93. package/dist/tools/xrm/xrm-merchant-update.js.map +1 -0
  94. package/package.json +1 -1
@@ -0,0 +1,96 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { confirmFlagSchema } from '../_shared/side-effect.js';
5
+ /**
6
+ * Command semantic tool: dispatch a control message to a registered
7
+ * device through `POST /persist/v2/dcm/devices/{id}/command`. The
8
+ * endpoint rejects a device that is not ONLINE, validates the slot and
9
+ * session-start item, and records `requested_by`. A direct insert into
10
+ * `dcm_device_commands` gets none of that: the send job has no ONLINE
11
+ * check of its own, so a command for an offline device would still
12
+ * report SENT.
13
+ *
14
+ * The tool requires `confirm: true` and a `command_type_code`, which is
15
+ * validated at the boundary for shape only; persist rejects unknown
16
+ * codes. `correlation_id` is server-assigned.
17
+ *
18
+ * ACKNOWLEDGED means the device replied, not that the command worked: a
19
+ * device that does not support a command still acknowledges it, with
20
+ * `success: false` in `response_payload`.
21
+ *
22
+ * This tool is NOT retry-safe. Nothing identifies a repeat call, so a
23
+ * retry sends the command to the device again. It takes no
24
+ * `idempotency_key` because the endpoint would ignore it (WI-0009332).
25
+ *
26
+ * Internal command queues (`fnd_http_outbox`, `ixn_queues`) are
27
+ * EXCLUDED from the MCP surface by the queue guardrail and must not
28
+ * be surfaced by this or any other tool.
29
+ */
30
+ export const dcmDeviceCommandDispatchTool = {
31
+ name: 'dcm_device_command_dispatch',
32
+ description: 'Send a control command to a registered DCM device. Fails if the device is not ONLINE. ' +
33
+ 'Requires confirm=true and command_type_code. Poll dcm_device_commands_get with the ' +
34
+ 'returned command_id: ACKNOWLEDGED only means the device replied, so also check ' +
35
+ 'response_payload.success. Not deduplicated: calling it again sends the command to the ' +
36
+ 'device again, so check dcm_device_commands_list filtered on device_id before retrying.',
37
+ inputSchema: z.object({
38
+ device_id: z.string().min(1).describe('UUID of the target device'),
39
+ command_type_code: z
40
+ .string()
41
+ .min(1)
42
+ .max(64)
43
+ .describe('Command from the DCM_COMMAND_TYPE lookup (e.g. GET_STATUS, HALT_STATUS, DISPENSE). ' +
44
+ 'Validated at persist. Not every device supports every command.'),
45
+ command_payload: z
46
+ .record(z.unknown())
47
+ .optional()
48
+ .describe('Command-specific payload sent to the device'),
49
+ slot_id: z
50
+ .string()
51
+ .min(1)
52
+ .optional()
53
+ .describe('Optional UUID of a dcm_device_slots row on this device'),
54
+ item_id: z
55
+ .string()
56
+ .min(1)
57
+ .optional()
58
+ .describe('Optional UUID of an item in the slot catalogue, for session-start commands ' +
59
+ '(SET_STATUS, SELECT_PRODUCT, SELECT_TIMER). Requires slot_id.'),
60
+ timeout_seconds: z
61
+ .number()
62
+ .int()
63
+ .positive()
64
+ .max(3600)
65
+ .optional()
66
+ .describe('Command timeout in seconds (defaults per command type)'),
67
+ metadata: z.record(z.unknown()).optional(),
68
+ confirm: confirmFlagSchema,
69
+ }),
70
+ capabilities: [cap('dcm_device_commands', 'INSERT')],
71
+ sideEffect: 'command',
72
+ confirmation: 'caller_confirms',
73
+ idempotency: 'not_idempotent',
74
+ handler: async (args, ctx) => {
75
+ const input = args;
76
+ const body = { command_type_code: input.command_type_code };
77
+ for (const field of [
78
+ 'command_payload',
79
+ 'slot_id',
80
+ 'item_id',
81
+ 'timeout_seconds',
82
+ 'metadata',
83
+ ]) {
84
+ if (input[field] !== undefined)
85
+ body[field] = input[field];
86
+ }
87
+ try {
88
+ const result = await ctx.apiClient.postLambda(`/dcm/devices/${encodeURIComponent(input.device_id)}/command`, body);
89
+ return successResponse(result);
90
+ }
91
+ catch (error) {
92
+ return errorResponse(API_ERROR, `Failed to dispatch DCM device command: ${error.message}`);
93
+ }
94
+ },
95
+ };
96
+ //# sourceMappingURL=dcm-device-command-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-command-dispatch.js","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-command-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,GAAG,EAAE,MAAM,uCAAuC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAS;IAChD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,wFAAwF;QACxF,qFAAqF;QACrF,iFAAiF;QACjF,wFAAwF;QACxF,wFAAwF;IAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAClE,iBAAiB,EAAE,CAAC;aACjB,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,QAAQ,CACP,qFAAqF;YACnF,gEAAgE,CACnE;QACH,eAAe,EAAE,CAAC;aACf,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACnB,QAAQ,EAAE;aACV,QAAQ,CAAC,6CAA6C,CAAC;QAC1D,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;QACrE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CACP,6EAA6E;YAC3E,+DAA+D,CAClE;QACH,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,GAAG,CAAC,IAAI,CAAC;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;QACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC1C,OAAO,EAAE,iBAAiB;KAC3B,CAAC;IACF,YAAY,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;IACpD,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,iBAAiB;IAC/B,WAAW,EAAE,gBAAgB;IAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAA2B,CAAC;QAC1C,MAAM,IAAI,GAAwB,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACjF,KAAK,MAAM,KAAK,IAAI;YAClB,iBAAiB;YACjB,SAAS;YACT,SAAS;YACT,iBAAiB;YACjB,UAAU;SACX,EAAE,CAAC;YACF,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,UAAU,CAC3C,gBAAgB,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,EAC7D,IAAI,CACL,CAAC;YACF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,aAAa,CAClB,SAAS,EACT,0CAA0C,KAAK,CAAC,OAAO,EAAE,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Tool } from '../registry.js';
2
+ /**
3
+ * Provisioning semantic tool: register a new IoT device on the tenant
4
+ * (`dcm_devices`). Creating a device provisions an IoT identity and
5
+ * causes downstream cloud resources to be allocated on the caller's
6
+ * behalf, so the tool requires:
7
+ *
8
+ * - `confirm: true` to prevent accidental invocation;
9
+ * - a `device_key`. `t_dcm_devices_key_tenant_uk` makes it unique per
10
+ * tenant, so a retry fails with a duplicate-key error rather than
11
+ * provisioning a second device.
12
+ *
13
+ * `device_status_code`, `firmware_version`, `iot_endpoint_name`,
14
+ * `iot_thing_name`, `shadow_state`, and `last_seen_at` are read-only
15
+ * per the pinned contract — persist assigns them during
16
+ * provisioning, and MCP does not attempt to write them.
17
+ *
18
+ * Certificate material (`dcm_device_certificates`) is EXCLUDED from
19
+ * the MCP surface by the credentials guardrail and is never returned.
20
+ */
21
+ export declare const dcmDeviceRegisterTool: Tool;
22
+ //# sourceMappingURL=dcm-device-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-register.d.ts","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAStC;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,IAgEnC,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { confirmFlagSchema, unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
5
+ /**
6
+ * Provisioning semantic tool: register a new IoT device on the tenant
7
+ * (`dcm_devices`). Creating a device provisions an IoT identity and
8
+ * causes downstream cloud resources to be allocated on the caller's
9
+ * behalf, so the tool requires:
10
+ *
11
+ * - `confirm: true` to prevent accidental invocation;
12
+ * - a `device_key`. `t_dcm_devices_key_tenant_uk` makes it unique per
13
+ * tenant, so a retry fails with a duplicate-key error rather than
14
+ * provisioning a second device.
15
+ *
16
+ * `device_status_code`, `firmware_version`, `iot_endpoint_name`,
17
+ * `iot_thing_name`, `shadow_state`, and `last_seen_at` are read-only
18
+ * per the pinned contract — persist assigns them during
19
+ * provisioning, and MCP does not attempt to write them.
20
+ *
21
+ * Certificate material (`dcm_device_certificates`) is EXCLUDED from
22
+ * the MCP surface by the credentials guardrail and is never returned.
23
+ */
24
+ export const dcmDeviceRegisterTool = {
25
+ name: 'dcm_device_register',
26
+ description: 'Provision a new IoT device on the tenant (dcm_devices). Requires confirm=true and ' +
27
+ 'a device_key. Certificate material is never returned. device_key is unique within ' +
28
+ 'the tenant: a retry fails with a duplicate-key error instead of registering a second device.',
29
+ inputSchema: z.object({
30
+ device_key: z
31
+ .string()
32
+ .min(1)
33
+ .max(128)
34
+ .describe('Stable device identifier, unique within the tenant'),
35
+ device_name: z.string().min(1).max(256).describe('Human-readable device name'),
36
+ device_type_code: z.string().max(64).optional(),
37
+ party_id: z
38
+ .string()
39
+ .min(1)
40
+ .optional()
41
+ .describe('UUID of the PRM party (merchant) this device is owned by'),
42
+ location_id: z.string().min(1).optional().describe('UUID of the PRM location'),
43
+ is_public: z
44
+ .boolean()
45
+ .optional()
46
+ .describe('Whether this device is discoverable via the anonymous public view'),
47
+ iot_thing_arn: z
48
+ .string()
49
+ .max(2048)
50
+ .optional()
51
+ .describe('Optional pre-provisioned AWS IoT thing ARN'),
52
+ metadata: z.record(z.unknown()).optional(),
53
+ confirm: confirmFlagSchema,
54
+ idempotency_key: unenforcedIdempotencyKeySchema,
55
+ }),
56
+ capabilities: [cap('dcm_devices', 'INSERT')],
57
+ sideEffect: 'provisioning',
58
+ confirmation: 'caller_confirms',
59
+ idempotency: 'natural_key',
60
+ handler: async (args, ctx) => {
61
+ const input = args;
62
+ const body = {
63
+ device_key: input.device_key,
64
+ device_name: input.device_name,
65
+ };
66
+ for (const field of [
67
+ 'device_type_code',
68
+ 'party_id',
69
+ 'location_id',
70
+ 'is_public',
71
+ 'iot_thing_arn',
72
+ 'metadata',
73
+ ]) {
74
+ if (input[field] !== undefined)
75
+ body[field] = input[field];
76
+ }
77
+ try {
78
+ const rows = await ctx.apiClient.post(`${ctx.apiClient.dbBasePath}/dcm_devices?select=*`, body, { headers: writeHeadersWithIdempotency(input.idempotency_key) });
79
+ return successResponse(rows[0]);
80
+ }
81
+ catch (error) {
82
+ return errorResponse(API_ERROR, `Failed to register DCM device: ${error.message}`);
83
+ }
84
+ },
85
+ };
86
+ //# sourceMappingURL=dcm-device-register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-register.js","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Tool } from '../registry.js';
2
+ /**
3
+ * Explicit-schema update for a DCM device slot (`dcm_device_slots`).
4
+ * Configures the assigned item, quantity, and capacity so slot-level
5
+ * inventory state stays in sync with reality. `slot_state` and
6
+ * `device_id` / `slot_number` are read-only per the pinned contract
7
+ * and cannot be reassigned through this tool (delete + recreate the
8
+ * slot for that).
9
+ *
10
+ * Retry-safe (converges on the same target state).
11
+ */
12
+ export declare const dcmDeviceSlotConfigureTool: Tool;
13
+ //# sourceMappingURL=dcm-device-slot-configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-slot-configure.d.ts","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-slot-configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAQtC;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,EAAE,IAoExC,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
5
+ /**
6
+ * Explicit-schema update for a DCM device slot (`dcm_device_slots`).
7
+ * Configures the assigned item, quantity, and capacity so slot-level
8
+ * inventory state stays in sync with reality. `slot_state` and
9
+ * `device_id` / `slot_number` are read-only per the pinned contract
10
+ * and cannot be reassigned through this tool (delete + recreate the
11
+ * slot for that).
12
+ *
13
+ * Retry-safe (converges on the same target state).
14
+ */
15
+ export const dcmDeviceSlotConfigureTool = {
16
+ name: 'dcm_device_slot_configure',
17
+ description: 'Configure a DCM device slot (dcm_device_slots): assigned item, quantity, capacity, ' +
18
+ 'status, and UoM. slot_state, device_id, and slot_number are read-only. Retry-safe.',
19
+ inputSchema: z
20
+ .object({
21
+ id: z.string().min(1).describe('UUID of the dcm_device_slots row'),
22
+ item_id: z
23
+ .string()
24
+ .min(1)
25
+ .nullable()
26
+ .optional()
27
+ .describe('UUID of the gpm_items row assigned to this slot; null to clear'),
28
+ quantity: z.number().nonnegative().optional(),
29
+ capacity: z.number().positive().optional(),
30
+ slot_status_code: z.string().max(64).optional(),
31
+ slot_uom: z.string().max(3).optional(),
32
+ slot_name: z.string().max(256).optional(),
33
+ metadata: z.record(z.unknown()).nullable().optional(),
34
+ idempotency_key: unenforcedIdempotencyKeySchema,
35
+ })
36
+ .refine((v) => v.item_id !== undefined ||
37
+ v.quantity !== undefined ||
38
+ v.capacity !== undefined ||
39
+ v.slot_status_code !== undefined ||
40
+ v.slot_uom !== undefined ||
41
+ v.slot_name !== undefined ||
42
+ v.metadata !== undefined, {
43
+ message: 'supply at least one field to change.',
44
+ }),
45
+ capabilities: [cap('dcm_device_slots', 'UPDATE')],
46
+ sideEffect: 'state_change',
47
+ confirmation: 'none',
48
+ idempotency: 'natural_key',
49
+ handler: async (args, ctx) => {
50
+ const { id, idempotency_key, ...rest } = args;
51
+ const body = {};
52
+ for (const [k, v] of Object.entries(rest)) {
53
+ if (v !== undefined)
54
+ body[k] = v;
55
+ }
56
+ try {
57
+ const rows = await ctx.apiClient.patch(`${ctx.apiClient.dbBasePath}/dcm_device_slots?id=eq.${id}&select=*`, body, { headers: writeHeadersWithIdempotency(idempotency_key) });
58
+ if (!rows || rows.length === 0) {
59
+ return errorResponse(API_ERROR, `DCM device slot ${id} not found or not accessible`);
60
+ }
61
+ return successResponse(rows[0]);
62
+ }
63
+ catch (error) {
64
+ return errorResponse(API_ERROR, `Failed to configure DCM device slot: ${error.message}`);
65
+ }
66
+ },
67
+ };
68
+ //# sourceMappingURL=dcm-device-slot-configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-slot-configure.js","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-slot-configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Tool } from '../registry.js';
2
+ /**
3
+ * Explicit-schema update for `dcm_devices` — safe metadata fields
4
+ * only. `device_status_code`, `firmware_version`, `iot_endpoint_name`,
5
+ * `iot_thing_name`, `shadow_state`, `last_seen_at` are read-only per
6
+ * the pinned contract and are set by the device / cloud sync path;
7
+ * `iot_thing_arn` is intentionally excluded from this generic update
8
+ * (re-provisioning is not a rename operation).
9
+ *
10
+ * Retry-safe (converges on the same target state).
11
+ */
12
+ export declare const dcmDeviceUpdateTool: Tool;
13
+ //# sourceMappingURL=dcm-device-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-update.d.ts","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAQtC;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,EAAE,IAgDjC,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { z } from 'zod';
2
+ import { API_ERROR, errorResponse, successResponse } from '../types.js';
3
+ import { cap } from '../../capabilities/tool-capability.js';
4
+ import { unenforcedIdempotencyKeySchema, writeHeadersWithIdempotency, } from '../_shared/side-effect.js';
5
+ /**
6
+ * Explicit-schema update for `dcm_devices` — safe metadata fields
7
+ * only. `device_status_code`, `firmware_version`, `iot_endpoint_name`,
8
+ * `iot_thing_name`, `shadow_state`, `last_seen_at` are read-only per
9
+ * the pinned contract and are set by the device / cloud sync path;
10
+ * `iot_thing_arn` is intentionally excluded from this generic update
11
+ * (re-provisioning is not a rename operation).
12
+ *
13
+ * Retry-safe (converges on the same target state).
14
+ */
15
+ export const dcmDeviceUpdateTool = {
16
+ name: 'dcm_device_update',
17
+ description: 'Update DCM device metadata (dcm_devices) with an explicit safe field set. Status, ' +
18
+ 'firmware, IoT identifiers, and shadow state are read-only. Retry-safe.',
19
+ inputSchema: z.object({
20
+ id: z.string().min(1).describe('UUID of the device'),
21
+ device_name: z.string().min(1).max(256).optional(),
22
+ device_type_code: z.string().max(64).nullable().optional(),
23
+ party_id: z.string().min(1).nullable().optional(),
24
+ location_id: z.string().min(1).nullable().optional(),
25
+ is_public: z.boolean().optional(),
26
+ metadata: z.record(z.unknown()).nullable().optional(),
27
+ idempotency_key: unenforcedIdempotencyKeySchema,
28
+ }),
29
+ capabilities: [cap('dcm_devices', 'UPDATE')],
30
+ sideEffect: 'state_change',
31
+ confirmation: 'none',
32
+ idempotency: 'natural_key',
33
+ handler: async (args, ctx) => {
34
+ const { id, idempotency_key, ...rest } = args;
35
+ const body = {};
36
+ for (const [k, v] of Object.entries(rest)) {
37
+ if (v !== undefined)
38
+ body[k] = v;
39
+ }
40
+ if (Object.keys(body).length === 0) {
41
+ return errorResponse(API_ERROR, 'Update payload is empty — supply at least one field to change.');
42
+ }
43
+ try {
44
+ const rows = await ctx.apiClient.patch(`${ctx.apiClient.dbBasePath}/dcm_devices?id=eq.${id}&select=*`, body, { headers: writeHeadersWithIdempotency(idempotency_key) });
45
+ if (!rows || rows.length === 0) {
46
+ return errorResponse(API_ERROR, `DCM device ${id} not found or not accessible`);
47
+ }
48
+ return successResponse(rows[0]);
49
+ }
50
+ catch (error) {
51
+ return errorResponse(API_ERROR, `Failed to update DCM device: ${error.message}`);
52
+ }
53
+ },
54
+ };
55
+ //# sourceMappingURL=dcm-device-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dcm-device-update.js","sourceRoot":"","sources":["../../../src/tools/dcm/dcm-device-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '../registry.js';
2
+ import { CatalogueReport } from '../../generated-reads/index.js';
3
+ export declare const dcmGeneratedReadReport: CatalogueReport;
4
+ export declare const dcmGeneratedReadTools: Tool[];
5
+ //# sourceMappingURL=generated-reads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-reads.d.ts","sourceRoot":"","sources":["../../../src/tools/dcm/generated-reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAGL,eAAe,EAChB,MAAM,gCAAgC,CAAC;AA8BxC,eAAO,MAAM,sBAAsB,EAAE,eAC8B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,EAAE,IAAI,EAGvC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { buildGeneratedReadCatalogue, buildGeneratedReadCatalogueReport, } from '../../generated-reads/index.js';
2
+ import { loadPersistResourceContract } from '../../contracts/persist-resource-contract.js';
3
+ /**
4
+ * Bounded read tools for the DCM module (WI-0003509).
5
+ *
6
+ * The schema-driven catalogue (WI-0003500) emits describe/list/get for
7
+ * every `normal`-sensitivity DCM resource that declares a read
8
+ * operation and has no side effects. The pinned Persist contract
9
+ * already excludes `dcm_device_certificates` (credentials) and
10
+ * `dcm_device_events` (append-only log) via the standard guardrails,
11
+ * so this module gets bounded reads for:
12
+ *
13
+ * - `dcm_devices` / `dcm_devices_public` — device registry + the
14
+ * anonymous-accessible marketplace projection.
15
+ * - `dcm_device_slots` / `dcm_device_slots_public` — slot state
16
+ * (assigned item, quantity, capacity, status) + the anonymous
17
+ * projection used by anonymous slot discovery.
18
+ * - `dcm_device_slot_items` — the option catalogue mapping a slot
19
+ * to purchasable gpm_items.
20
+ * - `dcm_device_commands` — the command log used for status
21
+ * polling after `dcm_device_command_dispatch`.
22
+ *
23
+ * Every dispatch/register/configure write on these tables lives in a
24
+ * dedicated hand-written tool with explicit confirmation/idempotency
25
+ * semantics (see `dcm-device-*`, `dcm-device-command-*`).
26
+ */
27
+ const contract = loadPersistResourceContract();
28
+ export const dcmGeneratedReadReport = buildGeneratedReadCatalogueReport(contract, { modules: ['dcm'] });
29
+ export const dcmGeneratedReadTools = buildGeneratedReadCatalogue(contract, { modules: ['dcm'] });
30
+ //# sourceMappingURL=generated-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-reads.js","sourceRoot":"","sources":["../../../src/tools/dcm/generated-reads.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAElC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GACjC,iCAAiC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,qBAAqB,GAAW,2BAA2B,CACtE,QAAQ,EACR,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '../registry.js';
2
+ export declare const dcmTools: Tool[];
3
+ /** Read-only slice used by the `dcm-readonly` selectable sub-domain. */
4
+ export declare const dcmReadOnlyTools: Tool[];
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/dcm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AActC,eAAO,MAAM,QAAQ,EAAE,IAAI,EAAiD,CAAC;AAE7E,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAA0B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { dcmGeneratedReadTools } from './generated-reads.js';
2
+ import { dcmDeviceRegisterTool } from './dcm-device-register.js';
3
+ import { dcmDeviceUpdateTool } from './dcm-device-update.js';
4
+ import { dcmDeviceCommandDispatchTool } from './dcm-device-command-dispatch.js';
5
+ import { dcmDeviceSlotConfigureTool } from './dcm-device-slot-configure.js';
6
+ const dcmWriteTools = [
7
+ dcmDeviceRegisterTool,
8
+ dcmDeviceUpdateTool,
9
+ dcmDeviceCommandDispatchTool,
10
+ dcmDeviceSlotConfigureTool,
11
+ ];
12
+ export const dcmTools = [...dcmGeneratedReadTools, ...dcmWriteTools];
13
+ /** Read-only slice used by the `dcm-readonly` selectable sub-domain. */
14
+ export const dcmReadOnlyTools = dcmGeneratedReadTools;
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/dcm/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAE5E,MAAM,aAAa,GAAW;IAC5B,qBAAqB;IACrB,mBAAmB;IACnB,4BAA4B;IAC5B,0BAA0B;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAW,CAAC,GAAG,qBAAqB,EAAE,GAAG,aAAa,CAAC,CAAC;AAE7E,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAW,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAerC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,eAAO,MAAM,cAAc,EAAE,aAAa,EAgGzC,CAAC;AAwDF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CA0B9C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAepD"}
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAmBrC;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,eAAO,MAAM,cAAc,EAAE,aAAa,EA4HzC,CAAC;AAwDF;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAkC9C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAepD"}
@@ -11,6 +11,10 @@ import { secReadOnlyTools, secTools } from './sec/index.js';
11
11
  import { cmmTools, cmmReadOnlyTools } from './cmm/index.js';
12
12
  import { fxmTools, fxmReadOnlyTools } from './fxm/index.js';
13
13
  import { fglReadOnlyTools, fglTools } from './fgl/index.js';
14
+ import { dcmReadOnlyTools, dcmTools } from './dcm/index.js';
15
+ import { bkmReadOnlyTools, bkmTools } from './bkm/index.js';
16
+ import { xrmReadOnlyTools, xrmTools } from './xrm/index.js';
17
+ import { ixnReadOnlyTools, ixnTools } from './ixn/index.js';
14
18
  export const primaryDomains = [
15
19
  {
16
20
  id: 'dsm',
@@ -94,6 +98,30 @@ export const primaryDomains = [
94
98
  summary: 'Manage GL ledgers, periods, code combinations, journal batches (create/post/reverse), trial balances, tax rates, and daily exchange rates. Gated by the FGL_GENERAL_LEDGER PBM feature.',
95
99
  tools: fglTools,
96
100
  },
101
+ {
102
+ id: 'dcm',
103
+ title: 'DCM — Device / Command Management',
104
+ summary: 'Bounded reads plus explicit-schema mutations for IoT devices, device slots, slot options, and device commands. Certificates and event logs are excluded by the credential/log guardrails; provisioning and command dispatch require confirmation and support idempotency keys for safe retries.',
105
+ tools: dcmTools,
106
+ },
107
+ {
108
+ id: 'bkm',
109
+ title: 'BKM — Booking Management',
110
+ summary: 'Bounded reads plus explicit-schema mutations for booking-provider adapter configurations, availability searches, availability slots, and provider item mappings. External availability searches require caller confirmation and use explicit idempotency keys to prevent duplicate provider fan-out.',
111
+ tools: bkmTools,
112
+ },
113
+ {
114
+ id: 'xrm',
115
+ title: 'XRM — Merchant / Relationship Management',
116
+ summary: 'Bounded reads plus explicit-schema mutations for marketplace merchants, merchant classifications/countries/items, and inbound email routing metadata. Provider credentials and payment-processor credentials are excluded by the credentials guardrail; merchant provisioning and inbound-rule creation require caller confirmation.',
117
+ tools: xrmTools,
118
+ },
119
+ {
120
+ id: 'ixn',
121
+ title: 'IXN — Interactions',
122
+ summary: 'Bounded reads plus explicit-schema mutations for interaction conversations and messages. Queue internals and sensitive channel-endpoint configuration are excluded by the queue and sensitivity guardrails. Outbound message dispatch requires caller confirmation and an explicit idempotency key so retries never duplicate customer-visible sends.',
123
+ tools: ixnTools,
124
+ },
97
125
  ];
98
126
  const PPM_READ_TOOL_NAMES = new Set([
99
127
  'ppm_work_item_get',
@@ -174,6 +202,14 @@ export const domainIndex = {
174
202
  'cmm-readonly': cmmReadOnlyTools,
175
203
  fgl: fglTools,
176
204
  'fgl-readonly': fglReadOnlyTools,
205
+ dcm: dcmTools,
206
+ 'dcm-readonly': dcmReadOnlyTools,
207
+ bkm: bkmTools,
208
+ 'bkm-readonly': bkmReadOnlyTools,
209
+ xrm: xrmTools,
210
+ 'xrm-readonly': xrmReadOnlyTools,
211
+ ixn: ixnTools,
212
+ 'ixn-readonly': ixnReadOnlyTools,
177
213
  };
178
214
  /**
179
215
  * Resolve a comma-separated list of domain IDs to the corresponding set
@@ -1 +1 @@
1
- {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAa5D,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,+BAA+B;QACtC,OAAO,EACL,+FAA+F;QACjG,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,oCAAoC;QAC3C,OAAO,EACL,oFAAoF;QACtF,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,qCAAqC;QAC5C,OAAO,EACL,6FAA6F;QAC/F,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,8BAA8B;QACrC,OAAO,EACL,2IAA2I;QAC7I,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,sCAAsC;QAC7C,OAAO,EACL,yHAAyH;QAC3H,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,qCAAqC;QAC5C,OAAO,EACL,0SAA0S;QAC5S,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,kCAAkC;QACzC,OAAO,EACL,qPAAqP;QACvP,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,kBAAkB;QACzB,OAAO,EACL,iaAAia;QACna,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,kCAAkC;QACzC,OAAO,EACL,sTAAsT;QACxT,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,gBAAgB;QACvB,OAAO,EACL,6NAA6N;QAC/N,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,iCAAiC;QACxC,OAAO,EACL,qGAAqG;YACrG,wGAAwG;YACxG,2FAA2F;YAC3F,8DAA8D;QAChE,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,8BAA8B;QACrC,OAAO,EACL,wGAAwG;YACxG,wGAAwG;QAC1G,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,gCAAgC;QACvC,OAAO,EACL,yLAAyL;QAC3L,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,mCAAmC;QAC1C,OAAO,EACL,iSAAiS;QACnS,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,0BAA0B;QACjC,OAAO,EACL,sSAAsS;QACxS,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,0CAA0C;QACjD,OAAO,EACL,sUAAsU;QACxU,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EACL,uVAAuV;QACzV,KAAK,EAAE,QAAQ;KAChB;CACF,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,0BAA0B;IAC1B,yBAAyB;IACzB,+BAA+B;IAC/B,0BAA0B;IAC1B,mBAAmB;IACnB,kBAAkB;IAClB,wBAAwB;CACzB,CAAC,CAAC;AAEH,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,sEAAsE;AACtE,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAW,EAAE,CACxD,IAAI,KAAK,gBAAgB;IACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAExB,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,eAAe;IACf,cAAc;IACd,uBAAuB;IACvB,sBAAsB;IACtB,eAAe;IACf,cAAc;IACd,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,0BAA0B;IAC1B,2BAA2B;IAC3B,2BAA2B;IAC3B,yBAAyB;IACzB,2BAA2B;IAC3B,uBAAuB;IACvB,4BAA4B;IAC5B,4BAA4B;IAC5B,iCAAiC;IACjC,wBAAwB;IACxB,mBAAmB;IACnB,4BAA4B;IAC5B,gCAAgC;CACjC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2B;IACjD,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;IAChC,GAAG,EAAE,QAAQ;IACb,cAAc,EAAE,gBAAgB;CACjC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,MAAM,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,KAAK,CACb,sCAAsC,IAAI,iBAAiB,SAAS,GAAG,CACxE,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '../registry.js';
2
+ import { CatalogueReport } from '../../generated-reads/index.js';
3
+ export declare const ixnGeneratedReadReport: CatalogueReport;
4
+ export declare const ixnGeneratedReadTools: Tool[];
5
+ //# sourceMappingURL=generated-reads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-reads.d.ts","sourceRoot":"","sources":["../../../src/tools/ixn/generated-reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAGL,eAAe,EAChB,MAAM,gCAAgC,CAAC;AA6BxC,eAAO,MAAM,sBAAsB,EAAE,eAC8B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,EAAE,IAAI,EAGvC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { buildGeneratedReadCatalogue, buildGeneratedReadCatalogueReport, } from '../../generated-reads/index.js';
2
+ import { loadPersistResourceContract } from '../../contracts/persist-resource-contract.js';
3
+ /**
4
+ * Bounded read tools for the IXN module (WI-0003508).
5
+ *
6
+ * The schema-driven catalogue (WI-0003500) emits describe/list/get for
7
+ * every `normal`-sensitivity IXN resource that declares a read
8
+ * operation and has no side effects. The pinned Persist contract
9
+ * excludes operational queue internals (`ixn_queues`, sensitivity=queue)
10
+ * via the standard queue guardrail, so this module gets bounded reads
11
+ * for the safe subset:
12
+ *
13
+ * - `ixn_conversations` — conversation threads scoped by tenant / queue.
14
+ * - `ixn_messages` — the message log inside a conversation (inbound
15
+ * and outbound).
16
+ *
17
+ * `ixn_channel_endpoints` is classified `sensitive` in the pinned
18
+ * contract because it carries `outbound_credential_ssm_names` (SSM
19
+ * parameter pointers used by the delivery worker) and is deliberately
20
+ * NOT surfaced here — channel endpoint configuration lives outside the
21
+ * MCP surface. Every outbound message send lives in a dedicated
22
+ * hand-written tool with explicit confirmation and retry
23
+ * semantics (see `ixn-message-send.ts`); every conversation-open
24
+ * lives in `ixn-conversation-start.ts`.
25
+ */
26
+ const contract = loadPersistResourceContract();
27
+ export const ixnGeneratedReadReport = buildGeneratedReadCatalogueReport(contract, { modules: ['ixn'] });
28
+ export const ixnGeneratedReadTools = buildGeneratedReadCatalogue(contract, { modules: ['ixn'] });
29
+ //# sourceMappingURL=generated-reads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-reads.js","sourceRoot":"","sources":["../../../src/tools/ixn/generated-reads.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAElC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,QAAQ,GAAG,2BAA2B,EAAE,CAAC;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GACjC,iCAAiC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,qBAAqB,GAAW,2BAA2B,CACtE,QAAQ,EACR,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Tool } from '../registry.js';
2
+ export declare const ixnTools: Tool[];
3
+ /** Read-only slice used by the `ixn-readonly` selectable sub-domain. */
4
+ export declare const ixnReadOnlyTools: Tool[];
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/ixn/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAOtC,eAAO,MAAM,QAAQ,EAAE,IAAI,EAAiD,CAAC;AAE7E,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAA0B,CAAC"}