@cmssy/mcp-server 0.5.0 → 0.6.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.
package/README.md CHANGED
@@ -43,6 +43,32 @@ Instead of CLI args, you can set:
43
43
  - `CMSSY_WORKSPACE_ID` — Workspace ID
44
44
  - `CMSSY_API_URL` — API URL (required, e.g. `https://api.your-cmssy.com`)
45
45
 
46
+ ## Response shape (write tools)
47
+
48
+ As of 0.6.0, most write tools accept an optional `response` arg:
49
+
50
+ - `response: "minimal"` (default) - returns a small ack (~200 bytes):
51
+ `{id, slug, hasUnpublishedChanges, updatedAt}` for page tools,
52
+ `{pageId, blockId, hasUnpublishedChanges, updatedAt}` for block tools,
53
+ `{id, slug, status, updatedAt}` for form tools,
54
+ `{id, slug, updatedAt}` for model tools,
55
+ `{id, status, updatedAt}` for record tools.
56
+ - `response: "full"` - returns the full mutation response (pre-0.6 behavior).
57
+
58
+ Use `"full"` only if you need the post-write state inline; otherwise issue a
59
+ follow-up `get_page`/`get_form`/`get_model`/`get_record`. This keeps agent
60
+ context windows from being eaten by echoed content.
61
+
62
+ Tools that accept `response`: `create_page`, `update_page_blocks`,
63
+ `update_page_settings`, `publish_page`, `unpublish_page`, `revert_to_published`,
64
+ `update_page_layout`, `add_block_to_page`, `update_block_content`,
65
+ `remove_block_from_page`, `create_form`, `update_form`, `create_model`,
66
+ `update_model`, `create_record`, `update_record`.
67
+
68
+ `patch_block_content` and the various `delete_*` / status-only tools
69
+ (`update_form_submission_status`, `import_records`, `create_model_from_template`)
70
+ already returned a compact ack and don't take `response`.
71
+
46
72
  ## Available Tools
47
73
 
48
74
  ### Read Tools
@@ -109,6 +135,31 @@ Requires `@cmssy/cli`-registered workspace with `PAGES_EDIT` permission.
109
135
  Default `fieldPath` is `"content"` (the HTML body on docs-article); override
110
136
  if patching a different string field.
111
137
 
138
+ ### Model Tools (Custom Data Models)
139
+
140
+ AI agents can define ModelDefinitions and CRUD their records. Schema/fields
141
+ follow `PropertyField` from `@cmssy/types`; records are validated against the
142
+ model on every write.
143
+
144
+ | Tool | Description |
145
+ | ---------------------------- | -------------------------------------------------------------------------- |
146
+ | `list_models` | List all ModelDefinitions in the workspace |
147
+ | `get_model` | Get a model by id (ObjectId) or slug |
148
+ | `create_model` | Create a model (name, slug, fields, optional statusField) |
149
+ | `update_model` | Update any field of a model (fields change triggers schema migrate) |
150
+ | `delete_model` | Delete a model — **cascades to all its records** |
151
+ | `list_records` | List records with filter (JSON), sort, pagination, optional populate |
152
+ | `get_record` | Get a record by id |
153
+ | `create_record` | Create a record; `data` keyed by model field keys |
154
+ | `update_record` | Update a record's data and/or transition its status |
155
+ | `delete_record` | Delete a record |
156
+ | `import_records` | Bulk import up to 1000 records; returns `{ importedCount, errors }` |
157
+ | `list_model_templates` | List available templates (E-commerce, Blog, etc.) |
158
+ | `create_model_from_template` | Install a template; returns `{ templateId, installedCount, skippedSlugs }` |
159
+
160
+ Requires workspace permissions `MODELS_VIEW` (read) / `MODELS_CREATE` /
161
+ `MODELS_EDIT` / `MODELS_DELETE` depending on the operation.
162
+
112
163
  ## Resources
113
164
 
114
165
  | URI | Description |
package/dist/queries.d.ts CHANGED
@@ -7,12 +7,12 @@ export declare const CURRENT_WORKSPACE_QUERY = "\n query CurrentWorkspace {\n
7
7
  export declare const MEDIA_ASSETS_QUERY = "\n query MediaAssets($limit: Int, $offset: Int) {\n mediaAssets(limit: $limit, offset: $offset) {\n items {\n id\n url\n filename\n type\n mimeType\n size\n width\n height\n alt\n tags\n }\n total\n hasMore\n }\n }\n";
8
8
  export declare const SAVE_PAGE_MUTATION = "\n mutation SavePage($input: SavePageInput!) {\n savePage(input: $input) {\n id\n name\n slug\n description\n displayName\n seoTitle\n seoDescription\n seoKeywords\n published\n hasUnpublishedChanges\n pageType\n parentId\n blocks {\n id\n type\n content\n settings\n style\n advanced\n translations\n defaultLanguage\n metadata {\n createdAt\n updatedAt\n createdBy\n version\n }\n blockVersion\n }\n createdAt\n updatedAt\n }\n }\n";
9
9
  export declare const PATCH_BLOCK_CONTENT_MUTATION = "\n mutation PatchBlockContent($input: PatchBlockContentInput!) {\n patchBlockContent(input: $input) {\n id\n slug\n hasUnpublishedChanges\n updatedAt\n }\n }\n";
10
- export declare const UPDATE_PAGE_SETTINGS_MUTATION = "\n mutation UpdatePageSettings($input: UpdatePageSettingsInput!) {\n updatePageSettings(input: $input) {\n id\n name\n slug\n description\n displayName\n seoTitle\n seoDescription\n seoKeywords\n pageType\n parentId\n updatedAt\n }\n }\n";
11
- export declare const TOGGLE_PUBLISH_MUTATION = "\n mutation TogglePublish($id: ID!) {\n togglePublish(id: $id) {\n id\n published\n publishedAt\n hasUnpublishedChanges\n }\n }\n";
12
- export declare const PUBLISH_PAGE_MUTATION = "\n mutation PublishPage($id: ID!, $blocks: [BlockDataInput!]!) {\n publishPage(id: $id, blocks: $blocks) {\n id\n published\n publishedAt\n hasUnpublishedChanges\n blocks {\n id\n type\n content\n settings\n style\n advanced\n translations\n defaultLanguage\n metadata {\n createdAt\n updatedAt\n createdBy\n version\n }\n blockVersion\n }\n }\n }\n";
13
- export declare const REVERT_TO_PUBLISHED_MUTATION = "\n mutation RevertToPublished($id: ID!) {\n revertToPublished(id: $id) {\n id\n name\n slug\n hasUnpublishedChanges\n blocks {\n id type content settings style advanced\n translations defaultLanguage blockVersion\n }\n }\n }\n";
10
+ export declare const UPDATE_PAGE_SETTINGS_MUTATION = "\n mutation UpdatePageSettings($input: UpdatePageSettingsInput!) {\n updatePageSettings(input: $input) {\n id\n name\n slug\n description\n displayName\n seoTitle\n seoDescription\n seoKeywords\n pageType\n parentId\n hasUnpublishedChanges\n updatedAt\n }\n }\n";
11
+ export declare const TOGGLE_PUBLISH_MUTATION = "\n mutation TogglePublish($id: ID!) {\n togglePublish(id: $id) {\n id\n slug\n published\n publishedAt\n hasUnpublishedChanges\n updatedAt\n }\n }\n";
12
+ export declare const PUBLISH_PAGE_MUTATION = "\n mutation PublishPage($id: ID!, $blocks: [BlockDataInput!]!) {\n publishPage(id: $id, blocks: $blocks) {\n id\n slug\n published\n publishedAt\n hasUnpublishedChanges\n updatedAt\n blocks {\n id\n type\n content\n settings\n style\n advanced\n translations\n defaultLanguage\n metadata {\n createdAt\n updatedAt\n createdBy\n version\n }\n blockVersion\n }\n }\n }\n";
13
+ export declare const REVERT_TO_PUBLISHED_MUTATION = "\n mutation RevertToPublished($id: ID!) {\n revertToPublished(id: $id) {\n id\n name\n slug\n hasUnpublishedChanges\n updatedAt\n blocks {\n id type content settings style advanced\n translations defaultLanguage blockVersion\n }\n }\n }\n";
14
14
  export declare const REMOVE_PAGE_MUTATION = "\n mutation RemovePage($id: ID!) {\n removePage(id: $id)\n }\n";
15
- export declare const UPDATE_PAGE_LAYOUT_MUTATION = "\n mutation UpdatePageLayout($input: UpdatePageLayoutInput!) {\n updatePageLayout(input: $input) {\n id\n layoutBlocks {\n id type position order isActive\n content settings style advanced\n translations defaultLanguage\n metadata { createdAt updatedAt createdBy version }\n blockVersion\n }\n layoutOverrides { position action blockId }\n inheritsLayout\n }\n }\n";
15
+ export declare const UPDATE_PAGE_LAYOUT_MUTATION = "\n mutation UpdatePageLayout($input: UpdatePageLayoutInput!) {\n updatePageLayout(input: $input) {\n id\n slug\n hasUnpublishedChanges\n updatedAt\n layoutBlocks {\n id type position order isActive\n content settings style advanced\n translations defaultLanguage\n metadata { createdAt updatedAt createdBy version }\n blockVersion\n }\n layoutOverrides { position action blockId }\n inheritsLayout\n }\n }\n";
16
16
  export declare const FORMS_QUERY = "\n query Forms($status: String, $skip: Int, $limit: Int) {\n forms(status: $status, skip: $skip, limit: $limit) {\n forms { \n id\n name\n slug\n description\n status\n fields {\n id name fieldType\n label placeholder helpText\n defaultValue\n validation { required minLength maxLength minValue maxValue pattern customMessage }\n options { value label disabled }\n width order showIf\n }\n settings {\n actionType webhookUrl emailRecipients newsletterListId\n submitButtonLabel successMessage errorMessage\n redirectUrl enableCaptcha requireLogin\n saveSubmissions sendEmailNotification emailConfigurationId\n }\n submissionCount\n createdAt updatedAt createdBy updatedBy\n }\n total\n hasMore\n }\n }\n";
17
17
  export declare const FORM_BY_ID_QUERY = "\n query Form($formId: ID!) {\n form(formId: $formId) {\n \n id\n name\n slug\n description\n status\n fields {\n id name fieldType\n label placeholder helpText\n defaultValue\n validation { required minLength maxLength minValue maxValue pattern customMessage }\n options { value label disabled }\n width order showIf\n }\n settings {\n actionType webhookUrl emailRecipients newsletterListId\n submitButtonLabel successMessage errorMessage\n redirectUrl enableCaptcha requireLogin\n saveSubmissions sendEmailNotification emailConfigurationId\n }\n submissionCount\n createdAt updatedAt createdBy updatedBy\n\n }\n }\n";
18
18
  export declare const FORM_SUBMISSIONS_QUERY = "\n query FormSubmissions($formId: ID, $status: String, $skip: Int, $limit: Int) {\n formSubmissions(formId: $formId, status: $status, skip: $skip, limit: $limit) {\n submissions {\n id formId formSlug data status\n ipAddress userAgent referrer customerId\n processedAt emailSent webhookSent createdAt\n }\n total\n hasMore\n }\n }\n";
@@ -22,4 +22,19 @@ export declare const UPDATE_FORM_MUTATION = "\n mutation UpdateForm($formId: ID
22
22
  export declare const DELETE_FORM_MUTATION = "\n mutation DeleteForm($formId: ID!) {\n deleteForm(formId: $formId)\n }\n";
23
23
  export declare const UPDATE_FORM_SUBMISSION_STATUS_MUTATION = "\n mutation UpdateFormSubmissionStatus($submissionId: ID!, $status: String!) {\n updateFormSubmissionStatus(submissionId: $submissionId, status: $status)\n }\n";
24
24
  export declare const DELETE_FORM_SUBMISSION_MUTATION = "\n mutation DeleteFormSubmission($submissionId: ID!) {\n deleteFormSubmission(submissionId: $submissionId)\n }\n";
25
+ export declare const MODEL_DEFINITIONS_QUERY = "\n query ModelDefinitions {\n modelDefinitions {\n \n id\n workspaceId\n name\n slug\n description\n icon\n color\n displayField\n defaultSort { field direction }\n fields { \n key\n label\n type\n required\n description\n defaultValue\n options\n fields\n itemType\n itemFields\n relationTo\n relationType\n acceptedTypes\n multiple\n schemaProperty\n minLength\n maxLength\n minValue\n maxValue\n pattern\n }\n statusField {\n enabled\n values\n defaultValue\n transitions { from to }\n }\n createdAt\n updatedAt\n createdBy\n recordCount\n\n }\n }\n";
26
+ export declare const MODEL_DEFINITIONS_BY_SLUG_INDEX_QUERY = "\n query ModelDefinitionsSlugIndex {\n modelDefinitions {\n id\n slug\n }\n }\n";
27
+ export declare const MODEL_DEFINITION_BY_ID_QUERY = "\n query ModelDefinition($id: ID!) {\n modelDefinition(id: $id) {\n \n id\n workspaceId\n name\n slug\n description\n icon\n color\n displayField\n defaultSort { field direction }\n fields { \n key\n label\n type\n required\n description\n defaultValue\n options\n fields\n itemType\n itemFields\n relationTo\n relationType\n acceptedTypes\n multiple\n schemaProperty\n minLength\n maxLength\n minValue\n maxValue\n pattern\n }\n statusField {\n enabled\n values\n defaultValue\n transitions { from to }\n }\n createdAt\n updatedAt\n createdBy\n recordCount\n\n }\n }\n";
28
+ export declare const MODEL_RECORDS_QUERY = "\n query ModelRecords(\n $modelId: ID!\n $filter: JSON\n $limit: Int\n $offset: Int\n $sort: String\n $populate: [String!]\n ) {\n modelRecords(\n modelId: $modelId\n filter: $filter\n limit: $limit\n offset: $offset\n sort: $sort\n populate: $populate\n ) {\n items { \n id\n workspaceId\n modelId\n data\n status\n createdAt\n updatedAt\n createdBy\n updatedBy\n }\n total\n hasMore\n }\n }\n";
29
+ export declare const MODEL_RECORD_BY_ID_QUERY = "\n query ModelRecord($id: ID!) {\n modelRecord(id: $id) {\n \n id\n workspaceId\n modelId\n data\n status\n createdAt\n updatedAt\n createdBy\n updatedBy\n\n }\n }\n";
30
+ export declare const MODEL_TEMPLATES_QUERY = "\n query ModelTemplates {\n modelTemplates {\n id\n name\n description\n icon\n category\n models {\n name\n slug\n description\n icon\n fieldCount\n hasStatus\n }\n }\n }\n";
31
+ export declare const CREATE_MODEL_DEFINITION_MUTATION = "\n mutation CreateModelDefinition($input: CreateModelDefinitionInput!) {\n createModelDefinition(input: $input) {\n \n id\n workspaceId\n name\n slug\n description\n icon\n color\n displayField\n defaultSort { field direction }\n fields { \n key\n label\n type\n required\n description\n defaultValue\n options\n fields\n itemType\n itemFields\n relationTo\n relationType\n acceptedTypes\n multiple\n schemaProperty\n minLength\n maxLength\n minValue\n maxValue\n pattern\n }\n statusField {\n enabled\n values\n defaultValue\n transitions { from to }\n }\n createdAt\n updatedAt\n createdBy\n recordCount\n\n }\n }\n";
32
+ export declare const UPDATE_MODEL_DEFINITION_MUTATION = "\n mutation UpdateModelDefinition($input: UpdateModelDefinitionInput!) {\n updateModelDefinition(input: $input) {\n \n id\n workspaceId\n name\n slug\n description\n icon\n color\n displayField\n defaultSort { field direction }\n fields { \n key\n label\n type\n required\n description\n defaultValue\n options\n fields\n itemType\n itemFields\n relationTo\n relationType\n acceptedTypes\n multiple\n schemaProperty\n minLength\n maxLength\n minValue\n maxValue\n pattern\n }\n statusField {\n enabled\n values\n defaultValue\n transitions { from to }\n }\n createdAt\n updatedAt\n createdBy\n recordCount\n\n }\n }\n";
33
+ export declare const DELETE_MODEL_DEFINITION_MUTATION = "\n mutation DeleteModelDefinition($id: ID!) {\n deleteModelDefinition(id: $id)\n }\n";
34
+ export declare const CREATE_MODEL_RECORD_MUTATION = "\n mutation CreateModelRecord($input: CreateModelRecordInput!) {\n createModelRecord(input: $input) {\n \n id\n workspaceId\n modelId\n data\n status\n createdAt\n updatedAt\n createdBy\n updatedBy\n\n }\n }\n";
35
+ export declare const UPDATE_MODEL_RECORD_MUTATION = "\n mutation UpdateModelRecord($input: UpdateModelRecordInput!) {\n updateModelRecord(input: $input) {\n \n id\n workspaceId\n modelId\n data\n status\n createdAt\n updatedAt\n createdBy\n updatedBy\n\n }\n }\n";
36
+ export declare const UPDATE_MODEL_RECORD_STATUS_MUTATION = "\n mutation UpdateModelRecordStatus($input: UpdateModelRecordStatusInput!) {\n updateModelRecordStatus(input: $input) {\n \n id\n workspaceId\n modelId\n data\n status\n createdAt\n updatedAt\n createdBy\n updatedBy\n\n }\n }\n";
37
+ export declare const DELETE_MODEL_RECORD_MUTATION = "\n mutation DeleteModelRecord($id: ID!) {\n deleteModelRecord(id: $id)\n }\n";
38
+ export declare const IMPORT_MODEL_RECORDS_MUTATION = "\n mutation ImportModelRecords($input: ImportModelRecordsInput!) {\n importModelRecords(input: $input) {\n importedCount\n errors { row message }\n }\n }\n";
39
+ export declare const INSTALL_MODEL_TEMPLATE_MUTATION = "\n mutation InstallModelTemplate($templateId: String!) {\n installModelTemplate(templateId: $templateId) {\n templateId\n installedCount\n skippedSlugs\n }\n }\n";
25
40
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,2SAkBvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,0+CAuE5B,CAAC;AAIF,eAAO,MAAM,sBAAsB,QAkBlC,CAAC;AAEF,eAAO,MAAM,6BAA6B,QAkBzC,CAAC;AAIF,eAAO,MAAM,iBAAiB,2JAU7B,CAAC;AAIF,eAAO,MAAM,uBAAuB,6YAqBnC,CAAC;AAIF,eAAO,MAAM,kBAAkB,+TAmB9B,CAAC;AAIF,eAAO,MAAM,kBAAkB,+nBAoC9B,CAAC;AAOF,eAAO,MAAM,4BAA4B,gMASxC,CAAC;AAEF,eAAO,MAAM,6BAA6B,iTAgBzC,CAAC;AAEF,eAAO,MAAM,uBAAuB,kKASnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,yfA0BjC,CAAC;AAEF,eAAO,MAAM,4BAA4B,2RAaxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,wEAIhC,CAAC;AAEF,eAAO,MAAM,2BAA2B,qbAevC,CAAC;AA4BF,eAAO,MAAM,WAAW,owBAQvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,oqBAM5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,kYAYlC,CAAC;AAEF,eAAO,MAAM,2BAA2B,4PAQvC,CAAC;AAIF,eAAO,MAAM,oBAAoB,6rBAMhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4tBAMhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,oFAIhC,CAAC;AAEF,eAAO,MAAM,sCAAsC,yKAIlD,CAAC;AAEF,eAAO,MAAM,+BAA+B,0HAI3C,CAAC"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,2SAkBvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,0+CAuE5B,CAAC;AAIF,eAAO,MAAM,sBAAsB,QAkBlC,CAAC;AAEF,eAAO,MAAM,6BAA6B,QAkBzC,CAAC;AAIF,eAAO,MAAM,iBAAiB,2JAU7B,CAAC;AAIF,eAAO,MAAM,uBAAuB,6YAqBnC,CAAC;AAIF,eAAO,MAAM,kBAAkB,+TAmB9B,CAAC;AAIF,eAAO,MAAM,kBAAkB,+nBAoC9B,CAAC;AAOF,eAAO,MAAM,4BAA4B,gMASxC,CAAC;AAEF,eAAO,MAAM,6BAA6B,8UAiBzC,CAAC;AAEF,eAAO,MAAM,uBAAuB,+LAWnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,shBA4BjC,CAAC;AAEF,eAAO,MAAM,4BAA4B,4SAcxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,wEAIhC,CAAC;AAEF,eAAO,MAAM,2BAA2B,+eAkBvC,CAAC;AA4BF,eAAO,MAAM,WAAW,owBAQvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,oqBAM5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,kYAYlC,CAAC;AAEF,eAAO,MAAM,2BAA2B,4PAQvC,CAAC;AAIF,eAAO,MAAM,oBAAoB,6rBAMhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4tBAMhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,oFAIhC,CAAC;AAEF,eAAO,MAAM,sCAAsC,yKAIlD,CAAC;AAEF,eAAO,MAAM,+BAA+B,0HAI3C,CAAC;AAiEF,eAAO,MAAM,uBAAuB,0mBAMnC,CAAC;AAKF,eAAO,MAAM,qCAAqC,sGAOjD,CAAC;AAEF,eAAO,MAAM,4BAA4B,2nBAMxC,CAAC;AAEF,eAAO,MAAM,mBAAmB,meAsB/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,gMAMpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,uQAkBjC,CAAC;AAIF,eAAO,MAAM,gCAAgC,2qBAM5C,CAAC;AAEF,eAAO,MAAM,gCAAgC,2qBAM5C,CAAC;AAEF,eAAO,MAAM,gCAAgC,8FAI5C,CAAC;AAEF,eAAO,MAAM,4BAA4B,4OAMxC,CAAC;AAEF,eAAO,MAAM,4BAA4B,4OAMxC,CAAC;AAEF,eAAO,MAAM,mCAAmC,8PAM/C,CAAC;AAEF,eAAO,MAAM,4BAA4B,sFAIxC,CAAC;AAEF,eAAO,MAAM,6BAA6B,kLAOzC,CAAC;AAEF,eAAO,MAAM,+BAA+B,6LAQ3C,CAAC"}
package/dist/queries.js CHANGED
@@ -253,6 +253,7 @@ export const UPDATE_PAGE_SETTINGS_MUTATION = `
253
253
  seoKeywords
254
254
  pageType
255
255
  parentId
256
+ hasUnpublishedChanges
256
257
  updatedAt
257
258
  }
258
259
  }
@@ -261,9 +262,11 @@ export const TOGGLE_PUBLISH_MUTATION = `
261
262
  mutation TogglePublish($id: ID!) {
262
263
  togglePublish(id: $id) {
263
264
  id
265
+ slug
264
266
  published
265
267
  publishedAt
266
268
  hasUnpublishedChanges
269
+ updatedAt
267
270
  }
268
271
  }
269
272
  `;
@@ -271,9 +274,11 @@ export const PUBLISH_PAGE_MUTATION = `
271
274
  mutation PublishPage($id: ID!, $blocks: [BlockDataInput!]!) {
272
275
  publishPage(id: $id, blocks: $blocks) {
273
276
  id
277
+ slug
274
278
  published
275
279
  publishedAt
276
280
  hasUnpublishedChanges
281
+ updatedAt
277
282
  blocks {
278
283
  id
279
284
  type
@@ -301,6 +306,7 @@ export const REVERT_TO_PUBLISHED_MUTATION = `
301
306
  name
302
307
  slug
303
308
  hasUnpublishedChanges
309
+ updatedAt
304
310
  blocks {
305
311
  id type content settings style advanced
306
312
  translations defaultLanguage blockVersion
@@ -317,6 +323,9 @@ export const UPDATE_PAGE_LAYOUT_MUTATION = `
317
323
  mutation UpdatePageLayout($input: UpdatePageLayoutInput!) {
318
324
  updatePageLayout(input: $input) {
319
325
  id
326
+ slug
327
+ hasUnpublishedChanges
328
+ updatedAt
320
329
  layoutBlocks {
321
330
  id type position order isActive
322
331
  content settings style advanced
@@ -421,4 +430,200 @@ export const DELETE_FORM_SUBMISSION_MUTATION = `
421
430
  deleteFormSubmission(submissionId: $submissionId)
422
431
  }
423
432
  `;
433
+ // ─── Model Queries ───────────────────────────────────────────
434
+ // PropertyField is self-recursive (fields/itemFields are JSON on the wire
435
+ // to avoid infinite schema recursion). Keep this in sync with page-type.ts
436
+ // resolver's PropertyField object type.
437
+ const PROPERTY_FIELD_FRAGMENT = `
438
+ key
439
+ label
440
+ type
441
+ required
442
+ description
443
+ defaultValue
444
+ options
445
+ fields
446
+ itemType
447
+ itemFields
448
+ relationTo
449
+ relationType
450
+ acceptedTypes
451
+ multiple
452
+ schemaProperty
453
+ minLength
454
+ maxLength
455
+ minValue
456
+ maxValue
457
+ pattern
458
+ `;
459
+ const MODEL_DEFINITION_FRAGMENT = `
460
+ id
461
+ workspaceId
462
+ name
463
+ slug
464
+ description
465
+ icon
466
+ color
467
+ displayField
468
+ defaultSort { field direction }
469
+ fields { ${PROPERTY_FIELD_FRAGMENT} }
470
+ statusField {
471
+ enabled
472
+ values
473
+ defaultValue
474
+ transitions { from to }
475
+ }
476
+ createdAt
477
+ updatedAt
478
+ createdBy
479
+ recordCount
480
+ `;
481
+ const MODEL_RECORD_FRAGMENT = `
482
+ id
483
+ workspaceId
484
+ modelId
485
+ data
486
+ status
487
+ createdAt
488
+ updatedAt
489
+ createdBy
490
+ updatedBy
491
+ `;
492
+ export const MODEL_DEFINITIONS_QUERY = `
493
+ query ModelDefinitions {
494
+ modelDefinitions {
495
+ ${MODEL_DEFINITION_FRAGMENT}
496
+ }
497
+ }
498
+ `;
499
+ // Lightweight companion to MODEL_DEFINITIONS_QUERY: used by get_model's
500
+ // slug fallback to avoid pulling full field schemas for every model when
501
+ // all we need is the id for a follow-up lookup.
502
+ export const MODEL_DEFINITIONS_BY_SLUG_INDEX_QUERY = `
503
+ query ModelDefinitionsSlugIndex {
504
+ modelDefinitions {
505
+ id
506
+ slug
507
+ }
508
+ }
509
+ `;
510
+ export const MODEL_DEFINITION_BY_ID_QUERY = `
511
+ query ModelDefinition($id: ID!) {
512
+ modelDefinition(id: $id) {
513
+ ${MODEL_DEFINITION_FRAGMENT}
514
+ }
515
+ }
516
+ `;
517
+ export const MODEL_RECORDS_QUERY = `
518
+ query ModelRecords(
519
+ $modelId: ID!
520
+ $filter: JSON
521
+ $limit: Int
522
+ $offset: Int
523
+ $sort: String
524
+ $populate: [String!]
525
+ ) {
526
+ modelRecords(
527
+ modelId: $modelId
528
+ filter: $filter
529
+ limit: $limit
530
+ offset: $offset
531
+ sort: $sort
532
+ populate: $populate
533
+ ) {
534
+ items { ${MODEL_RECORD_FRAGMENT} }
535
+ total
536
+ hasMore
537
+ }
538
+ }
539
+ `;
540
+ export const MODEL_RECORD_BY_ID_QUERY = `
541
+ query ModelRecord($id: ID!) {
542
+ modelRecord(id: $id) {
543
+ ${MODEL_RECORD_FRAGMENT}
544
+ }
545
+ }
546
+ `;
547
+ export const MODEL_TEMPLATES_QUERY = `
548
+ query ModelTemplates {
549
+ modelTemplates {
550
+ id
551
+ name
552
+ description
553
+ icon
554
+ category
555
+ models {
556
+ name
557
+ slug
558
+ description
559
+ icon
560
+ fieldCount
561
+ hasStatus
562
+ }
563
+ }
564
+ }
565
+ `;
566
+ // ─── Model Mutations ─────────────────────────────────────────
567
+ export const CREATE_MODEL_DEFINITION_MUTATION = `
568
+ mutation CreateModelDefinition($input: CreateModelDefinitionInput!) {
569
+ createModelDefinition(input: $input) {
570
+ ${MODEL_DEFINITION_FRAGMENT}
571
+ }
572
+ }
573
+ `;
574
+ export const UPDATE_MODEL_DEFINITION_MUTATION = `
575
+ mutation UpdateModelDefinition($input: UpdateModelDefinitionInput!) {
576
+ updateModelDefinition(input: $input) {
577
+ ${MODEL_DEFINITION_FRAGMENT}
578
+ }
579
+ }
580
+ `;
581
+ export const DELETE_MODEL_DEFINITION_MUTATION = `
582
+ mutation DeleteModelDefinition($id: ID!) {
583
+ deleteModelDefinition(id: $id)
584
+ }
585
+ `;
586
+ export const CREATE_MODEL_RECORD_MUTATION = `
587
+ mutation CreateModelRecord($input: CreateModelRecordInput!) {
588
+ createModelRecord(input: $input) {
589
+ ${MODEL_RECORD_FRAGMENT}
590
+ }
591
+ }
592
+ `;
593
+ export const UPDATE_MODEL_RECORD_MUTATION = `
594
+ mutation UpdateModelRecord($input: UpdateModelRecordInput!) {
595
+ updateModelRecord(input: $input) {
596
+ ${MODEL_RECORD_FRAGMENT}
597
+ }
598
+ }
599
+ `;
600
+ export const UPDATE_MODEL_RECORD_STATUS_MUTATION = `
601
+ mutation UpdateModelRecordStatus($input: UpdateModelRecordStatusInput!) {
602
+ updateModelRecordStatus(input: $input) {
603
+ ${MODEL_RECORD_FRAGMENT}
604
+ }
605
+ }
606
+ `;
607
+ export const DELETE_MODEL_RECORD_MUTATION = `
608
+ mutation DeleteModelRecord($id: ID!) {
609
+ deleteModelRecord(id: $id)
610
+ }
611
+ `;
612
+ export const IMPORT_MODEL_RECORDS_MUTATION = `
613
+ mutation ImportModelRecords($input: ImportModelRecordsInput!) {
614
+ importModelRecords(input: $input) {
615
+ importedCount
616
+ errors { row message }
617
+ }
618
+ }
619
+ `;
620
+ export const INSTALL_MODEL_TEMPLATE_MUTATION = `
621
+ mutation InstallModelTemplate($templateId: String!) {
622
+ installModelTemplate(templateId: $templateId) {
623
+ templateId
624
+ installedCount
625
+ skippedSlugs
626
+ }
627
+ }
628
+ `;
424
629
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,sBAAsB,GAAG,0BAA0B,EAAE,CAAC;AAE5D,gEAAgE;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;CAkB1B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuE/B,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;UAY5B,sBAAsB;;;;;;CAM/B,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;UAYnC,sBAAsB;;;;;;CAM/B,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBtC,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;CAmBjC,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjC,CAAC;AAEF,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,iEAAiE;AACjE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;CAS3C,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG;;;;;;;;;;;;;;;;CAgB5C,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;CAStC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BpC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;CAa3C,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;CAInC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;CAe1C,CAAC;AAEF,gEAAgE;AAEhE,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB5B,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;;;gBAGX,oBAAoB;;;;;CAKnC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;QAGxB,oBAAoB;;;CAG3B,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;CAYrC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;CAQ1C,CAAC;AAEF,gEAAgE;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;QAG5B,oBAAoB;;;CAG3B,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;QAG5B,oBAAoB;;;CAG3B,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;CAInC,CAAC;AAEF,MAAM,CAAC,MAAM,sCAAsC,GAAG;;;;CAIrD,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG;;;;CAI9C,CAAC"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { z } from "zod";
2
+ export declare const responseModeSchema: z.ZodDefault<z.ZodOptional<z.ZodEnum<["minimal", "full"]>>>;
3
+ export type ResponseMode = "minimal" | "full";
4
+ interface PageLike {
5
+ id: string;
6
+ slug?: string | null;
7
+ hasUnpublishedChanges?: boolean | null;
8
+ updatedAt?: string | null;
9
+ published?: boolean | null;
10
+ }
11
+ export interface PageMinimal {
12
+ id: string;
13
+ slug?: string;
14
+ hasUnpublishedChanges?: boolean;
15
+ updatedAt?: string;
16
+ published?: boolean;
17
+ }
18
+ export declare function pageMinimal(page: PageLike, extras?: {
19
+ published?: boolean;
20
+ }): PageMinimal;
21
+ export interface PageBlockMinimal {
22
+ pageId: string;
23
+ blockId: string;
24
+ hasUnpublishedChanges?: boolean;
25
+ updatedAt?: string;
26
+ }
27
+ export declare function pageBlockMinimal(page: PageLike, blockId: string): PageBlockMinimal;
28
+ interface FormLike {
29
+ id: string;
30
+ slug?: string | null;
31
+ status?: string | null;
32
+ updatedAt?: string | null;
33
+ }
34
+ export interface FormMinimal {
35
+ id: string;
36
+ slug?: string;
37
+ status?: string;
38
+ updatedAt?: string;
39
+ }
40
+ export declare function formMinimal(form: FormLike): FormMinimal;
41
+ interface ModelLike {
42
+ id: string;
43
+ slug?: string | null;
44
+ updatedAt?: string | null;
45
+ }
46
+ export interface ModelMinimal {
47
+ id: string;
48
+ slug?: string;
49
+ updatedAt?: string;
50
+ }
51
+ export declare function modelMinimal(model: ModelLike): ModelMinimal;
52
+ interface RecordLike {
53
+ id: string;
54
+ status?: string | null;
55
+ updatedAt?: string | null;
56
+ }
57
+ export interface RecordMinimal {
58
+ id: string;
59
+ status?: string;
60
+ updatedAt?: string;
61
+ }
62
+ export declare function recordMinimal(record: RecordLike): RecordMinimal;
63
+ export declare function jsonText<T>(mode: ResponseMode, full: T, toMinimal: (full: T) => unknown): {
64
+ content: Array<{
65
+ type: "text";
66
+ text: string;
67
+ }>;
68
+ };
69
+ export {};
70
+ //# sourceMappingURL=responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ // `response: "minimal"` is the default starting in 0.6.0 to keep agent
3
+ // context windows from being eaten by echoed page/block content.
4
+ // Pass "full" only when the caller actually needs the post-write state
5
+ // inline; otherwise issue a follow-up read tool call.
6
+ export const responseModeSchema = z
7
+ .enum(["minimal", "full"])
8
+ .optional()
9
+ .default("minimal")
10
+ .describe("Response shape. 'minimal' (default) returns a small ack (~200 bytes). 'full' returns the full mutation response.");
11
+ export function pageMinimal(page, extras) {
12
+ const out = { id: page.id };
13
+ if (page.slug != null)
14
+ out.slug = page.slug;
15
+ if (page.hasUnpublishedChanges != null)
16
+ out.hasUnpublishedChanges = page.hasUnpublishedChanges;
17
+ if (page.updatedAt != null)
18
+ out.updatedAt = page.updatedAt;
19
+ // `published` is only emitted when the caller explicitly requests it —
20
+ // i.e. publish_page / unpublish_page. Other mutations (savePage etc.)
21
+ // may echo `published` as part of their selection set, but including it
22
+ // in the minimal ack would make the shape depend on which mutation
23
+ // served the request. Keeping it opt-in keeps the minimal schema stable.
24
+ if (extras?.published !== undefined)
25
+ out.published = extras.published;
26
+ return out;
27
+ }
28
+ export function pageBlockMinimal(page, blockId) {
29
+ const out = { pageId: page.id, blockId };
30
+ if (page.hasUnpublishedChanges != null)
31
+ out.hasUnpublishedChanges = page.hasUnpublishedChanges;
32
+ if (page.updatedAt != null)
33
+ out.updatedAt = page.updatedAt;
34
+ return out;
35
+ }
36
+ export function formMinimal(form) {
37
+ const out = { id: form.id };
38
+ if (form.slug != null)
39
+ out.slug = form.slug;
40
+ if (form.status != null)
41
+ out.status = form.status;
42
+ if (form.updatedAt != null)
43
+ out.updatedAt = form.updatedAt;
44
+ return out;
45
+ }
46
+ export function modelMinimal(model) {
47
+ const out = { id: model.id };
48
+ if (model.slug != null)
49
+ out.slug = model.slug;
50
+ if (model.updatedAt != null)
51
+ out.updatedAt = model.updatedAt;
52
+ return out;
53
+ }
54
+ export function recordMinimal(record) {
55
+ const out = { id: record.id };
56
+ if (record.status != null)
57
+ out.status = record.status;
58
+ if (record.updatedAt != null)
59
+ out.updatedAt = record.updatedAt;
60
+ return out;
61
+ }
62
+ // Tiny wrapper so call sites stay one-liners instead of repeating
63
+ // `JSON.stringify(mode === "full" ? data : minimal(data), ...)`.
64
+ // Minimal mode emits compact JSON - the whole point is keeping the ack
65
+ // small, and pretty-print whitespace was eating ~25-40% of the payload.
66
+ // Full mode keeps pretty-print for human-readable debugging.
67
+ export function jsonText(mode, full, toMinimal) {
68
+ const text = mode === "full"
69
+ ? JSON.stringify(full, null, 2)
70
+ : JSON.stringify(toMinimal(full));
71
+ return {
72
+ content: [{ type: "text", text }],
73
+ };
74
+ }
75
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,uEAAuE;AACvE,iEAAiE;AACjE,uEAAuE;AACvE,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KACzB,QAAQ,EAAE;KACV,OAAO,CAAC,SAAS,CAAC;KAClB,QAAQ,CACP,kHAAkH,CACnH,CAAC;AAoBJ,MAAM,UAAU,WAAW,CACzB,IAAc,EACd,MAAgC;IAEhC,MAAM,GAAG,GAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI;QACpC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;IACzD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3D,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,mEAAmE;IACnE,yEAAyE;IACzE,IAAI,MAAM,EAAE,SAAS,KAAK,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACtE,OAAO,GAAG,CAAC;AACb,CAAC;AASD,MAAM,UAAU,gBAAgB,CAC9B,IAAc,EACd,OAAe;IAEf,MAAM,GAAG,GAAqB,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI;QACpC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;IACzD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAgBD,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,GAAG,GAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAClD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAcD,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,MAAM,GAAG,GAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IAC3C,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9C,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7D,OAAO,GAAG,CAAC;AACb,CAAC;AAcD,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,MAAM,GAAG,GAAkB,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI;QAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI;QAAE,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,iEAAiE;AACjE,uEAAuE;AACvE,wEAAwE;AACxE,6DAA6D;AAC7D,MAAM,UAAU,QAAQ,CACtB,IAAkB,EAClB,IAAO,EACP,SAA+B;IAE/B,MAAM,IAAI,GACR,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAmElD,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,aAivD/C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AA2FlD,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,aAu3E/C"}