@forumone/throughline 1.4.0-pr-287-01fd93c → 1.4.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/CHANGELOG.md CHANGED
@@ -1,16 +1,20 @@
1
1
  # @forumone/throughline
2
2
 
3
- ## 1.4.0-pr-287-01fd93c
3
+ ## 1.4.0
4
4
 
5
5
  ### Minor Changes
6
6
 
7
- - 485c257: Adds `create_draft` and `update_draft` to the content tools. Both write drafts only and refuse `_status`, publishing dates, the approval policy and any field off the site's allow-list. They refuse a document someone has open in the admin, naming the person (even when it's the key's own person, whose tab would autosave over the change). They also refuse a block the field doesn't offer, a layout that breaks the composition rules, and a slug that's taken, including one held in the trash. Each write is recorded in the audit log with the caller's `_meta`.
7
+ - a7a9a8c: Adds `insert_block`, `update_block`, `move_block` and `remove_block` to the content tools. They change one block of a draft's blocks field, either `layout` or a field inside a group such as a case study's `approach.blocks`, without resending the layout. A new or changed block is checked against the blocks the field offers and against its own field validation, which a draft save would otherwise skip. The field is then checked against the composition rules before saving, with the same lock check and audit record as `update_draft`.
8
+
9
+ **Upgrading: a migration.** The key collection gains four checkbox columns. Run `migrate:create` and apply it before deploying.
10
+
11
+ - 7f42a5d: Adds `create_draft` and `update_draft` to the content tools. Both write drafts only and refuse `_status`, publishing dates, the approval policy and any field off the site's allow-list. They refuse a document someone has open in the admin, naming the person (even when it's the key's own person, whose tab would autosave over the change). They also refuse a block the field doesn't offer, a layout that breaks the composition rules, and a slug that's taken, including one held in the trash. Each write is recorded in the audit log with the caller's `_meta`.
8
12
 
9
13
  **Upgrading: a migration.** The key collection gains two checkbox columns, one per new tool. Run `migrate:create` and apply it before deploying.
10
14
 
11
15
  ### Patch Changes
12
16
 
13
- - @forumone/throughline-design-system@1.4.0-pr-287-01fd93c
17
+ - @forumone/throughline-design-system@1.4.0
14
18
 
15
19
  ## 1.3.0
16
20
 
@@ -0,0 +1,230 @@
1
+ import { z } from 'zod';
2
+ import type { Field } from 'payload';
3
+ import type { McpToolDefinition } from '../plugin-contract/index.js';
4
+ import type { McpToolDescriptor } from '../mcp/collector.js';
5
+ import { type ContentWriteDeps } from './write.js';
6
+ export declare const CONTENT_BLOCK_TOOLS: {
7
+ readonly insertBlock: {
8
+ readonly name: "insert_block";
9
+ readonly description: "Adds one block to a blocks field of a draft — `layout`, or a field inside a group such as `approach.blocks` — at the end, at the start, or after a given block. The block is { blockType, ...its fields } as get_contract describes it, and is checked against the blocks the field offers, its own validation and the composition rules before anything is saved. Returns the new block's id.";
10
+ };
11
+ readonly updateBlock: {
12
+ readonly name: "update_block";
13
+ readonly description: "Changes fields of one block in a draft, by the block's id from get_document. A group inside the block is merged; an array is replaced. The block type cannot change: remove it and insert another.";
14
+ };
15
+ readonly moveBlock: {
16
+ readonly name: "move_block";
17
+ readonly description: "Moves one block within its blocks field: to the start, to the end, or after another block. Checked against the composition rules, which care about order.";
18
+ };
19
+ readonly removeBlock: {
20
+ readonly name: "remove_block";
21
+ readonly description: "Removes one block from a draft's blocks field, by its id. Checked against the composition rules, since a block may be another's required sibling.";
22
+ };
23
+ };
24
+ export declare const CONTENT_BLOCK_TOOL_DESCRIPTORS: readonly McpToolDescriptor[];
25
+ type BlocksField = Extract<Field, {
26
+ type: 'blocks';
27
+ }>;
28
+ /**
29
+ * Every blocks field an author may change, by path: a top-level one by its
30
+ * name, and one inside an allow-listed group as `group.field`.
31
+ */
32
+ export declare function blockFieldPaths(fields: readonly Field[]): Map<string, BlocksField>;
33
+ /** Block ids Payload would accept: 24 hex characters, as its own are. */
34
+ export declare function newBlockId(): string;
35
+ declare const insertInput: z.ZodObject<{
36
+ after: z.ZodOptional<z.ZodString>;
37
+ position: z.ZodOptional<z.ZodEnum<["start", "end"]>>;
38
+ block: z.ZodObject<{
39
+ blockType: z.ZodString;
40
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
41
+ blockType: z.ZodString;
42
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
43
+ blockType: z.ZodString;
44
+ }, z.ZodTypeAny, "passthrough">>;
45
+ collection: z.ZodString;
46
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
47
+ field: z.ZodString;
48
+ } & {
49
+ _meta: z.ZodOptional<z.ZodObject<{
50
+ userPrompt: z.ZodOptional<z.ZodString>;
51
+ reasoning: z.ZodOptional<z.ZodString>;
52
+ changesSummary: z.ZodOptional<z.ZodString>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ reasoning?: string | undefined;
55
+ changesSummary?: string | undefined;
56
+ userPrompt?: string | undefined;
57
+ }, {
58
+ reasoning?: string | undefined;
59
+ changesSummary?: string | undefined;
60
+ userPrompt?: string | undefined;
61
+ }>>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ collection: string;
64
+ block: {
65
+ blockType: string;
66
+ } & {
67
+ [k: string]: unknown;
68
+ };
69
+ id: string | number;
70
+ field: string;
71
+ position?: "start" | "end" | undefined;
72
+ _meta?: {
73
+ reasoning?: string | undefined;
74
+ changesSummary?: string | undefined;
75
+ userPrompt?: string | undefined;
76
+ } | undefined;
77
+ after?: string | undefined;
78
+ }, {
79
+ collection: string;
80
+ block: {
81
+ blockType: string;
82
+ } & {
83
+ [k: string]: unknown;
84
+ };
85
+ id: string | number;
86
+ field: string;
87
+ position?: "start" | "end" | undefined;
88
+ _meta?: {
89
+ reasoning?: string | undefined;
90
+ changesSummary?: string | undefined;
91
+ userPrompt?: string | undefined;
92
+ } | undefined;
93
+ after?: string | undefined;
94
+ }>;
95
+ declare const updateInput: z.ZodObject<{
96
+ blockId: z.ZodString;
97
+ patch: z.ZodRecord<z.ZodString, z.ZodUnknown>;
98
+ collection: z.ZodString;
99
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
100
+ field: z.ZodString;
101
+ } & {
102
+ _meta: z.ZodOptional<z.ZodObject<{
103
+ userPrompt: z.ZodOptional<z.ZodString>;
104
+ reasoning: z.ZodOptional<z.ZodString>;
105
+ changesSummary: z.ZodOptional<z.ZodString>;
106
+ }, "strip", z.ZodTypeAny, {
107
+ reasoning?: string | undefined;
108
+ changesSummary?: string | undefined;
109
+ userPrompt?: string | undefined;
110
+ }, {
111
+ reasoning?: string | undefined;
112
+ changesSummary?: string | undefined;
113
+ userPrompt?: string | undefined;
114
+ }>>;
115
+ }, "strip", z.ZodTypeAny, {
116
+ collection: string;
117
+ id: string | number;
118
+ patch: Record<string, unknown>;
119
+ field: string;
120
+ blockId: string;
121
+ _meta?: {
122
+ reasoning?: string | undefined;
123
+ changesSummary?: string | undefined;
124
+ userPrompt?: string | undefined;
125
+ } | undefined;
126
+ }, {
127
+ collection: string;
128
+ id: string | number;
129
+ patch: Record<string, unknown>;
130
+ field: string;
131
+ blockId: string;
132
+ _meta?: {
133
+ reasoning?: string | undefined;
134
+ changesSummary?: string | undefined;
135
+ userPrompt?: string | undefined;
136
+ } | undefined;
137
+ }>;
138
+ declare const moveInput: z.ZodObject<{
139
+ after: z.ZodOptional<z.ZodString>;
140
+ position: z.ZodOptional<z.ZodEnum<["start", "end"]>>;
141
+ blockId: z.ZodString;
142
+ collection: z.ZodString;
143
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
144
+ field: z.ZodString;
145
+ } & {
146
+ _meta: z.ZodOptional<z.ZodObject<{
147
+ userPrompt: z.ZodOptional<z.ZodString>;
148
+ reasoning: z.ZodOptional<z.ZodString>;
149
+ changesSummary: z.ZodOptional<z.ZodString>;
150
+ }, "strip", z.ZodTypeAny, {
151
+ reasoning?: string | undefined;
152
+ changesSummary?: string | undefined;
153
+ userPrompt?: string | undefined;
154
+ }, {
155
+ reasoning?: string | undefined;
156
+ changesSummary?: string | undefined;
157
+ userPrompt?: string | undefined;
158
+ }>>;
159
+ }, "strip", z.ZodTypeAny, {
160
+ collection: string;
161
+ id: string | number;
162
+ field: string;
163
+ blockId: string;
164
+ position?: "start" | "end" | undefined;
165
+ _meta?: {
166
+ reasoning?: string | undefined;
167
+ changesSummary?: string | undefined;
168
+ userPrompt?: string | undefined;
169
+ } | undefined;
170
+ after?: string | undefined;
171
+ }, {
172
+ collection: string;
173
+ id: string | number;
174
+ field: string;
175
+ blockId: string;
176
+ position?: "start" | "end" | undefined;
177
+ _meta?: {
178
+ reasoning?: string | undefined;
179
+ changesSummary?: string | undefined;
180
+ userPrompt?: string | undefined;
181
+ } | undefined;
182
+ after?: string | undefined;
183
+ }>;
184
+ declare const removeInput: z.ZodObject<{
185
+ blockId: z.ZodString;
186
+ collection: z.ZodString;
187
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
188
+ field: z.ZodString;
189
+ } & {
190
+ _meta: z.ZodOptional<z.ZodObject<{
191
+ userPrompt: z.ZodOptional<z.ZodString>;
192
+ reasoning: z.ZodOptional<z.ZodString>;
193
+ changesSummary: z.ZodOptional<z.ZodString>;
194
+ }, "strip", z.ZodTypeAny, {
195
+ reasoning?: string | undefined;
196
+ changesSummary?: string | undefined;
197
+ userPrompt?: string | undefined;
198
+ }, {
199
+ reasoning?: string | undefined;
200
+ changesSummary?: string | undefined;
201
+ userPrompt?: string | undefined;
202
+ }>>;
203
+ }, "strip", z.ZodTypeAny, {
204
+ collection: string;
205
+ id: string | number;
206
+ field: string;
207
+ blockId: string;
208
+ _meta?: {
209
+ reasoning?: string | undefined;
210
+ changesSummary?: string | undefined;
211
+ userPrompt?: string | undefined;
212
+ } | undefined;
213
+ }, {
214
+ collection: string;
215
+ id: string | number;
216
+ field: string;
217
+ blockId: string;
218
+ _meta?: {
219
+ reasoning?: string | undefined;
220
+ changesSummary?: string | undefined;
221
+ userPrompt?: string | undefined;
222
+ } | undefined;
223
+ }>;
224
+ export declare function createInsertBlockTool(deps: ContentWriteDeps): McpToolDefinition<typeof insertInput>;
225
+ export declare function createUpdateBlockTool(deps: ContentWriteDeps): McpToolDefinition<typeof updateInput>;
226
+ export declare function createMoveBlockTool(deps: ContentWriteDeps): McpToolDefinition<typeof moveInput>;
227
+ export declare function createRemoveBlockTool(deps: ContentWriteDeps): McpToolDefinition<typeof removeInput>;
228
+ export declare function createContentBlockTools(deps: ContentWriteDeps): McpToolDefinition[];
229
+ export {};
230
+ //# sourceMappingURL=blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/content/blocks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAyB,KAAK,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAY5D,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAe3E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAqBsB,CAAA;AAEtD,eAAO,MAAM,8BAA8B,EAAE,SAAS,iBAAiB,EACnC,CAAA;AAEpC,KAAK,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAA;AAErD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAWlF;AAqBD,yEAAyE;AACzE,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAyBD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOf,CAAA;AACF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIf,CAAA;AACF,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIb,CAAA;AACF,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGf,CAAA;AAmHF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAmBnG;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,WAAW,CAAC,CA2BnG;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,SAAS,CAAC,CAqB/F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAgBnG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAOnF"}
@@ -0,0 +1,295 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { z } from 'zod';
3
+ import { withMeta } from '../mcp/meta.js';
4
+ import { writableFields } from './describe.js';
5
+ import { compositionErrors, disallowedBlocks, mergePatch } from './guards.js';
6
+ import { blockRegistry, defaultCanUse, refusal, requestAs, unknownCollection, } from './tools.js';
7
+ import { validateBlock } from './validate.js';
8
+ import { openForWrite, saveDraft } from './write.js';
9
+ /*
10
+ One block at a time: insert, change, move or remove a block in a blocks field,
11
+ without resending the whole layout.
12
+
13
+ A blocks field is named by its path: `layout`, or `approach.blocks` for one
14
+ inside a group, as a case study's buckets are. Each operation reads the current
15
+ draft, makes its one change, and checks the result before saving it: a new
16
+ block against the blocks the field offers, a new or changed block against its
17
+ own validation (which a draft save would skip), and the field as a whole
18
+ against the composition rules. Then it saves the draft as `update_draft` does —
19
+ the same lock check, the same audit.
20
+ */
21
+ export const CONTENT_BLOCK_TOOLS = {
22
+ insertBlock: {
23
+ name: 'insert_block',
24
+ description: 'Adds one block to a blocks field of a draft — `layout`, or a field inside a group such as `approach.blocks` — at the end, at the start, or after a given block. The block is { blockType, ...its fields } as get_contract describes it, and is checked against the blocks the field offers, its own validation and the composition rules before anything is saved. Returns the new block\'s id.',
25
+ },
26
+ updateBlock: {
27
+ name: 'update_block',
28
+ description: 'Changes fields of one block in a draft, by the block\'s id from get_document. A group inside the block is merged; an array is replaced. The block type cannot change: remove it and insert another.',
29
+ },
30
+ moveBlock: {
31
+ name: 'move_block',
32
+ description: 'Moves one block within its blocks field: to the start, to the end, or after another block. Checked against the composition rules, which care about order.',
33
+ },
34
+ removeBlock: {
35
+ name: 'remove_block',
36
+ description: 'Removes one block from a draft\'s blocks field, by its id. Checked against the composition rules, since a block may be another\'s required sibling.',
37
+ },
38
+ };
39
+ export const CONTENT_BLOCK_TOOL_DESCRIPTORS = Object.values(CONTENT_BLOCK_TOOLS);
40
+ /**
41
+ * Every blocks field an author may change, by path: a top-level one by its
42
+ * name, and one inside an allow-listed group as `group.field`.
43
+ */
44
+ export function blockFieldPaths(fields) {
45
+ const out = new Map();
46
+ for (const field of fields) {
47
+ if (field.type === 'blocks')
48
+ out.set(field.name, field);
49
+ if (field.type === 'group' && 'name' in field && typeof field.name === 'string') {
50
+ for (const inner of field.fields) {
51
+ if (inner.type === 'blocks')
52
+ out.set(`${field.name}.${inner.name}`, inner);
53
+ }
54
+ }
55
+ }
56
+ return out;
57
+ }
58
+ function rowsAt(doc, path) {
59
+ const [head, tail] = path.split('.');
60
+ const container = tail ? doc[head] : doc;
61
+ const rows = container?.[tail ?? head];
62
+ return Array.isArray(rows) ? rows : [];
63
+ }
64
+ /** The top-level change that puts `rows` at `path`, keeping the rest of a group. */
65
+ function dataFor(current, path, rows) {
66
+ const [head, tail] = path.split('.');
67
+ if (!tail)
68
+ return { [head]: rows };
69
+ const group = current[head] ?? {};
70
+ return { [head]: { ...group, [tail]: rows } };
71
+ }
72
+ /** Block ids Payload would accept: 24 hex characters, as its own are. */
73
+ export function newBlockId() {
74
+ return randomBytes(12).toString('hex');
75
+ }
76
+ function blockConfig(field, slug, registry) {
77
+ return (field.blocks?.find((block) => block.slug === slug) ??
78
+ field.blockReferences
79
+ ?.map((ref) => (typeof ref === 'string' ? registry.get(ref) : ref))
80
+ .find((block) => block?.slug === slug));
81
+ }
82
+ const target = {
83
+ collection: z.string().describe('The content type\'s slug, e.g. "pages".'),
84
+ id: z.union([z.string(), z.number()]).describe('The document id.'),
85
+ field: z.string().describe('The blocks field: "layout", or e.g. "approach.blocks".'),
86
+ };
87
+ const placement = {
88
+ after: z.string().optional().describe('The id of the block to put it after.'),
89
+ position: z.enum(['start', 'end']).optional().describe('Where, when not after a block. Default: end.'),
90
+ };
91
+ const insertInput = withMeta({
92
+ ...target,
93
+ block: z
94
+ .object({ blockType: z.string() })
95
+ .passthrough()
96
+ .describe('The block: { blockType, ...fields }.'),
97
+ ...placement,
98
+ });
99
+ const updateInput = withMeta({
100
+ ...target,
101
+ blockId: z.string().describe('The block\'s id, from get_document.'),
102
+ patch: z.record(z.string(), z.unknown()).describe('The block fields to change.'),
103
+ });
104
+ const moveInput = withMeta({
105
+ ...target,
106
+ blockId: z.string().describe('The block\'s id, from get_document.'),
107
+ ...placement,
108
+ });
109
+ const removeInput = withMeta({
110
+ ...target,
111
+ blockId: z.string().describe('The block\'s id, from get_document.'),
112
+ });
113
+ /**
114
+ * What every block tool does around its one change: who may, which field,
115
+ * read the draft, check the result, save it.
116
+ */
117
+ async function operate(deps, ctx, input, tool, change) {
118
+ const refused = refusal(ctx, deps.canUse ?? defaultCanUse);
119
+ if (refused)
120
+ return refused;
121
+ const options = deps.collections[input.collection];
122
+ const config = deps.payload.collections[input.collection]?.config;
123
+ if (!options || !config)
124
+ return unknownCollection(deps, input.collection);
125
+ const fields = blockFieldPaths(writableFields(config.fields, options.fields));
126
+ const field = fields.get(input.field);
127
+ if (!field) {
128
+ return {
129
+ error: `"${input.field}" is not a blocks field you can change in ${input.collection}. Blocks fields: ${[...fields.keys()].join(', ') || 'none'}.`,
130
+ };
131
+ }
132
+ const opened = await openForWrite(deps, ctx, input.collection, input.id);
133
+ if ('error' in opened)
134
+ return opened;
135
+ const { current } = opened;
136
+ const before = rowsAt(current, input.field);
137
+ const changed = await change(before, field);
138
+ if ('error' in changed)
139
+ return changed;
140
+ const req = await requestAs(deps.payload, ctx);
141
+ const registry = blockRegistry(deps.payload);
142
+ if (changed.added) {
143
+ const disallowed = await disallowedBlocks(field, [changed.added], before, registry, req);
144
+ if (disallowed.length > 0) {
145
+ return {
146
+ error: `${input.field} does not accept ${disallowed.join(', ')}. describe_content_type lists the blocks it does.`,
147
+ disallowed,
148
+ };
149
+ }
150
+ const config = blockConfig(field, String(changed.added['blockType']), registry);
151
+ const problems = config
152
+ ? await validateBlock(config.fields, changed.added, {
153
+ data: { ...current, ...dataFor(current, input.field, changed.rows) },
154
+ req,
155
+ collection: input.collection,
156
+ id: input.id,
157
+ })
158
+ : [];
159
+ if (problems.length > 0) {
160
+ return {
161
+ error: `The ${String(changed.added['blockType'])} block is not valid. Nothing was saved.`,
162
+ problems,
163
+ };
164
+ }
165
+ }
166
+ const issues = await compositionErrors(deps.payload, changed.rows);
167
+ if (issues && issues.length > 0) {
168
+ return {
169
+ error: `${input.field} would break ${issues.length} composition rule${issues.length === 1 ? '' : 's'}. Nothing was saved.`,
170
+ issues,
171
+ };
172
+ }
173
+ const saved = await saveDraft(deps, ctx, {
174
+ collection: input.collection,
175
+ id: input.id,
176
+ data: dataFor(current, input.field, changed.rows),
177
+ tool,
178
+ changed: [input.field],
179
+ meta: input._meta ?? { changesSummary: changed.summary },
180
+ });
181
+ return 'error' in saved ? saved : { ...saved, field: input.field, blockId: changed.blockId };
182
+ }
183
+ function indexOf(rows, blockId) {
184
+ return rows.findIndex((row) => row['id'] === blockId);
185
+ }
186
+ function notFound(field, blockId) {
187
+ return { error: `There is no block "${blockId}" in ${field}. get_document lists the blocks and their ids.` };
188
+ }
189
+ /** Where a block goes: after another, or at an end. `-1` when `after` names no block. */
190
+ function placeAt(rows, placement) {
191
+ if (placement.after !== undefined) {
192
+ const at = indexOf(rows, placement.after);
193
+ return at === -1 ? -1 : at + 1;
194
+ }
195
+ return placement.position === 'start' ? 0 : rows.length;
196
+ }
197
+ /* ------------------------------------------------------------------------ */
198
+ export function createInsertBlockTool(deps) {
199
+ return {
200
+ ...CONTENT_BLOCK_TOOLS.insertBlock,
201
+ inputSchema: insertInput,
202
+ requiredScope: 'content.write',
203
+ handler: (input, ctx) => operate(deps, ctx, input, CONTENT_BLOCK_TOOLS.insertBlock.name, async (rows) => {
204
+ const at = placeAt(rows, input);
205
+ if (at === -1)
206
+ return notFound(input.field, input.after);
207
+ const { id: _ignored, ...fields } = input.block;
208
+ const added = { ...fields, id: newBlockId() };
209
+ return {
210
+ rows: [...rows.slice(0, at), added, ...rows.slice(at)],
211
+ added,
212
+ blockId: added.id,
213
+ summary: `Inserted a ${input.block.blockType} block into ${input.field}.`,
214
+ };
215
+ }),
216
+ };
217
+ }
218
+ export function createUpdateBlockTool(deps) {
219
+ return {
220
+ ...CONTENT_BLOCK_TOOLS.updateBlock,
221
+ inputSchema: updateInput,
222
+ requiredScope: 'content.write',
223
+ handler: (input, ctx) => operate(deps, ctx, input, CONTENT_BLOCK_TOOLS.updateBlock.name, async (rows, field) => {
224
+ const at = indexOf(rows, input.blockId);
225
+ if (at === -1)
226
+ return notFound(input.field, input.blockId);
227
+ const row = rows[at];
228
+ if ('blockType' in input.patch && input.patch['blockType'] !== row['blockType']) {
229
+ return { error: 'A block\'s type cannot change. Remove it and insert another.' };
230
+ }
231
+ if ('id' in input.patch && input.patch['id'] !== row['id']) {
232
+ return { error: 'A block\'s id cannot change.' };
233
+ }
234
+ const config = blockConfig(field, String(row['blockType']), blockRegistry(deps.payload));
235
+ const updated = { ...row, ...mergePatch(row, input.patch, config?.fields ?? []) };
236
+ return {
237
+ rows: rows.map((r, i) => (i === at ? updated : r)),
238
+ // Checked whole, like a new one: a change can make it invalid.
239
+ added: updated,
240
+ blockId: input.blockId,
241
+ summary: `Changed ${Object.keys(input.patch).join(', ')} on a ${String(row['blockType'])} block in ${input.field}.`,
242
+ };
243
+ }),
244
+ };
245
+ }
246
+ export function createMoveBlockTool(deps) {
247
+ return {
248
+ ...CONTENT_BLOCK_TOOLS.moveBlock,
249
+ inputSchema: moveInput,
250
+ requiredScope: 'content.write',
251
+ handler: (input, ctx) => operate(deps, ctx, input, CONTENT_BLOCK_TOOLS.moveBlock.name, async (rows) => {
252
+ const from = indexOf(rows, input.blockId);
253
+ if (from === -1)
254
+ return notFound(input.field, input.blockId);
255
+ if (input.after === input.blockId)
256
+ return { error: 'A block cannot go after itself.' };
257
+ const moving = rows[from];
258
+ const rest = rows.filter((_, i) => i !== from);
259
+ const at = placeAt(rest, input);
260
+ if (at === -1)
261
+ return notFound(input.field, input.after);
262
+ return {
263
+ rows: [...rest.slice(0, at), moving, ...rest.slice(at)],
264
+ blockId: input.blockId,
265
+ summary: `Moved a ${String(moving['blockType'])} block in ${input.field}.`,
266
+ };
267
+ }),
268
+ };
269
+ }
270
+ export function createRemoveBlockTool(deps) {
271
+ return {
272
+ ...CONTENT_BLOCK_TOOLS.removeBlock,
273
+ inputSchema: removeInput,
274
+ requiredScope: 'content.write',
275
+ handler: (input, ctx) => operate(deps, ctx, input, CONTENT_BLOCK_TOOLS.removeBlock.name, async (rows) => {
276
+ const at = indexOf(rows, input.blockId);
277
+ if (at === -1)
278
+ return notFound(input.field, input.blockId);
279
+ return {
280
+ rows: rows.filter((_, i) => i !== at),
281
+ blockId: input.blockId,
282
+ summary: `Removed a ${String(rows[at]['blockType'])} block from ${input.field}.`,
283
+ };
284
+ }),
285
+ };
286
+ }
287
+ export function createContentBlockTools(deps) {
288
+ return [
289
+ createInsertBlockTool(deps),
290
+ createUpdateBlockTool(deps),
291
+ createMoveBlockTool(deps),
292
+ createRemoveBlockTool(deps),
293
+ ];
294
+ }
295
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/content/blocks.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,8 @@ export { CONTENT_WRITE_TOOLS, CONTENT_WRITE_TOOL_DESCRIPTORS, createContentWrite
8
8
  export type { ContentWriteDeps } from './write.js';
9
9
  export { compositionErrors, disallowedBlocks, lockHolder, lockRefusal, mergePatch, refusedFields, } from './guards.js';
10
10
  export type { CompositionIssue, LockHolder, RefusedField } from './guards.js';
11
+ export { CONTENT_BLOCK_TOOLS, CONTENT_BLOCK_TOOL_DESCRIPTORS, blockFieldPaths, createContentBlockTools, createInsertBlockTool, createMoveBlockTool, createRemoveBlockTool, createUpdateBlockTool, newBlockId, } from './blocks.js';
12
+ export { validateBlock } from './validate.js';
13
+ export type { FieldProblem } from './validate.js';
14
+ export { openForWrite, saveDraft } from './write.js';
11
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxF,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"}
@@ -3,4 +3,7 @@ export { describeField, describeFields, topLevelFields, unknownFieldNames, writa
3
3
  export { CONTENT_READ_TOOLS, CONTENT_READ_TOOL_DESCRIPTORS, createContentReadTools, createDescribeContentTypeTool, createFindDocumentsTool, createFindRelatedTool, createGetDocumentTool, toWriteShape, } from './tools.js';
4
4
  export { CONTENT_WRITE_TOOLS, CONTENT_WRITE_TOOL_DESCRIPTORS, createContentWriteTools, createCreateDraftTool, createUpdateDraftTool, } from './write.js';
5
5
  export { compositionErrors, disallowedBlocks, lockHolder, lockRefusal, mergePatch, refusedFields, } from './guards.js';
6
+ export { CONTENT_BLOCK_TOOLS, CONTENT_BLOCK_TOOL_DESCRIPTORS, blockFieldPaths, createContentBlockTools, createInsertBlockTool, createMoveBlockTool, createRemoveBlockTool, createUpdateBlockTool, newBlockId, } from './blocks.js';
7
+ export { validateBlock } from './validate.js';
8
+ export { openForWrite, saveDraft } from './write.js';
6
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMjE,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMjE,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAA;AAEtB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,aAAa,GACd,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,GACX,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/content/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAU,MAAM,EAAE,MAAM,SAAS,CAAA;AAG/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAIxD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAoCnE;AAOD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,GAAG,SAAS,CAAC,EAC9D,WAAW,EAAE,SAAS,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAAC,EAAE,GAChE,IAAI,CAsBN"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/content/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAU,MAAM,EAAE,MAAM,SAAS,CAAA;AAG/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAKxD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAyCnE;AAOD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,aAAa,GAAG,SAAS,CAAC,EAC9D,WAAW,EAAE,SAAS,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAAC,EAAE,GAChE,IAAI,CAsBN"}
@@ -2,6 +2,7 @@ import { findAuditWriter } from '../audit/plugin.js';
2
2
  import { unknownFieldNames } from './describe.js';
3
3
  import { CONTENT_READ_TOOL_DESCRIPTORS, createContentReadTools } from './tools.js';
4
4
  import { CONTENT_WRITE_TOOL_DESCRIPTORS, createContentWriteTools } from './write.js';
5
+ import { CONTENT_BLOCK_TOOL_DESCRIPTORS, createContentBlockTools } from './blocks.js';
5
6
  /**
6
7
  * The content tools: what an agent reads before it writes a draft, and — in
7
8
  * the phases that follow — the drafts themselves. forumone-2026#803.
@@ -26,7 +27,11 @@ export function contentPlugin(options) {
26
27
  if (options.enabled === false)
27
28
  return incoming;
28
29
  // Declared at config time so `mcpPlugin` makes a checkbox per tool; bound at `onInit`.
29
- options.mcpTools?.declare([...CONTENT_READ_TOOL_DESCRIPTORS, ...CONTENT_WRITE_TOOL_DESCRIPTORS], { serverName: 'content' });
30
+ options.mcpTools?.declare([
31
+ ...CONTENT_READ_TOOL_DESCRIPTORS,
32
+ ...CONTENT_WRITE_TOOL_DESCRIPTORS,
33
+ ...CONTENT_BLOCK_TOOL_DESCRIPTORS,
34
+ ], { serverName: 'content' });
30
35
  return {
31
36
  ...incoming,
32
37
  onInit: async (payload) => {
@@ -45,6 +50,7 @@ export function contentPlugin(options) {
45
50
  options.mcpTools.add([
46
51
  ...createContentReadTools(deps),
47
52
  ...createContentWriteTools({ ...deps, ...(audit ? { audit } : {}) }),
53
+ ...createContentBlockTools({ ...deps, ...(audit ? { audit } : {}) }),
48
54
  ], { serverName: 'content', ...(audit ? { audit } : {}) });
49
55
  },
50
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/content/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/content/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Field, PayloadRequest } from 'payload';
2
+ export interface FieldProblem {
3
+ /** Where, inside the block: `heading`, `items.1.label`. */
4
+ path: string;
5
+ message: string;
6
+ }
7
+ interface Walk {
8
+ data: Record<string, unknown>;
9
+ req: PayloadRequest;
10
+ collection: string;
11
+ id: number | string | undefined;
12
+ blockData: Record<string, unknown>;
13
+ }
14
+ /**
15
+ * Every problem Payload's own validation would report for one block, with a
16
+ * path inside the block. Empty when it would save.
17
+ */
18
+ export declare function validateBlock(blockFields: readonly Field[], row: Record<string, unknown>, ctx: Omit<Walk, 'blockData'>): Promise<FieldProblem[]>;
19
+ export {};
20
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/content/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAcpD,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAoED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,SAAS,KAAK,EAAE,EAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,GAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB"}
@@ -0,0 +1,66 @@
1
+ function named(field) {
2
+ return 'name' in field && typeof field.name === 'string' && field.name !== '';
3
+ }
4
+ /** The fields stored under the same object as `field`'s siblings: an unnamed wrapper's, an unnamed tab's. */
5
+ function flatten(fields) {
6
+ return fields.flatMap((field) => {
7
+ if (field.type === 'tabs') {
8
+ return field.tabs.flatMap((tab) => 'name' in tab && tab.name ? [{ ...tab, type: 'group' }] : flatten(tab.fields));
9
+ }
10
+ if (!named(field) && 'fields' in field && Array.isArray(field.fields))
11
+ return flatten(field.fields);
12
+ return [field];
13
+ });
14
+ }
15
+ async function walk(fields, siblingData, path, ctx, problems) {
16
+ for (const field of flatten(fields)) {
17
+ if (!named(field) || field.type === 'ui')
18
+ continue;
19
+ const value = siblingData[field.name];
20
+ const here = path ? `${path}.${field.name}` : field.name;
21
+ const validate = field.validate;
22
+ if (typeof validate === 'function') {
23
+ const verdict = await validate(value, {
24
+ ...field,
25
+ blockData: ctx.blockData,
26
+ collectionSlug: ctx.collection,
27
+ data: ctx.data,
28
+ event: 'submit',
29
+ id: ctx.id,
30
+ operation: ctx.id === undefined ? 'create' : 'update',
31
+ overrideAccess: false,
32
+ path: here.split('.'),
33
+ preferences: { fields: {} },
34
+ previousValue: undefined,
35
+ req: ctx.req,
36
+ siblingData,
37
+ });
38
+ if (verdict !== true && verdict !== undefined) {
39
+ problems.push({ path: here, message: typeof verdict === 'string' ? verdict : 'Invalid.' });
40
+ }
41
+ }
42
+ if (field.type === 'group' && value && typeof value === 'object') {
43
+ await walk(fieldsOf(field), value, here, ctx, problems);
44
+ }
45
+ if (field.type === 'array' && Array.isArray(value)) {
46
+ for (const [index, row] of value.entries()) {
47
+ if (row && typeof row === 'object') {
48
+ await walk(fieldsOf(field), row, `${here}.${index}`, ctx, problems);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ function fieldsOf(field) {
55
+ return 'fields' in field && Array.isArray(field.fields) ? field.fields : [];
56
+ }
57
+ /**
58
+ * Every problem Payload's own validation would report for one block, with a
59
+ * path inside the block. Empty when it would save.
60
+ */
61
+ export async function validateBlock(blockFields, row, ctx) {
62
+ const problems = [];
63
+ await walk(blockFields, row, '', { ...ctx, blockData: row }, problems);
64
+ return problems;
65
+ }
66
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/content/validate.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import type { AuditWriter } from '../audit/writer.js';
3
- import type { McpToolDefinition } from '../plugin-contract/index.js';
3
+ import type { McpToolContext, McpToolDefinition } from '../plugin-contract/index.js';
4
4
  import type { McpToolDescriptor } from '../mcp/collector.js';
5
+ import { type McpMeta } from '../mcp/meta.js';
5
6
  import { type ContentToolDeps } from './tools.js';
6
7
  export declare const CONTENT_WRITE_TOOLS: {
7
8
  readonly createDraft: {
@@ -88,8 +89,31 @@ declare const updateInput: z.ZodObject<{
88
89
  userPrompt?: string | undefined;
89
90
  } | undefined;
90
91
  }>;
92
+ interface Checked {
93
+ error: string;
94
+ [key: string]: unknown;
95
+ }
91
96
  export declare function createCreateDraftTool(deps: ContentWriteDeps): McpToolDefinition<typeof createInput>;
92
97
  export declare function createUpdateDraftTool(deps: ContentWriteDeps): McpToolDefinition<typeof updateInput>;
98
+ /**
99
+ * The document's current draft, as the caller may read it — or why not: it is
100
+ * open in the admin, or there is nothing they can read.
101
+ */
102
+ export declare function openForWrite(deps: ContentWriteDeps, ctx: McpToolContext, collection: string, id: number | string): Promise<{
103
+ current: Record<string, unknown>;
104
+ } | Checked>;
105
+ /**
106
+ * Saves `data` to the document's draft as the caller, records it, and answers
107
+ * with the links. `data` holds only the top-level fields that change.
108
+ */
109
+ export declare function saveDraft(deps: ContentWriteDeps, ctx: McpToolContext, write: {
110
+ collection: string;
111
+ id: number | string;
112
+ data: Record<string, unknown>;
113
+ tool: string;
114
+ changed: readonly string[];
115
+ meta: McpMeta;
116
+ }): Promise<Record<string, unknown>>;
93
117
  export declare function createContentWriteTools(deps: ContentWriteDeps): McpToolDefinition[];
94
118
  export {};
95
119
  //# sourceMappingURL=write.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/content/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAa5D,OAAO,EAUL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAA;AAenB,eAAO,MAAM,mBAAmB;;;;;;;;;CAWsB,CAAA;AAEtD,eAAO,MAAM,8BAA8B,EAAE,SAAS,iBAAiB,EACnC,CAAA;AAEpC,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAKD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKI,CAAA;AAErB,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMI,CAAA;AAgKrB,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAsEvC;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAAC,OAAO,WAAW,CAAC,CA4FvC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAEnF"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/content/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAYvD,OAAO,EAUL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAA;AAenB,eAAO,MAAM,mBAAmB;;;;;;;;;CAWsB,CAAA;AAEtD,eAAO,MAAM,8BAA8B,EAAE,SAAS,iBAAiB,EACnC,CAAA;AAEpC,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AAKD,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKI,CAAA;AAErB,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMI,CAAA;AAErB,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AA2JD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAsEvC;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,gBAAgB,GACrB,iBAAiB,CAAC,OAAO,WAAW,CAAC,CAkDvC;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GAAG,MAAM,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,CAezD;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE;IACL,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,IAAI,EAAE,OAAO,CAAA;CACd,GACA,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAsClC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAEnF"}
@@ -256,23 +256,10 @@ export function createUpdateDraftTool(deps) {
256
256
  refused: allowlisted,
257
257
  };
258
258
  }
259
- const lock = await lockHolder(deps.payload, input.collection, input.id, ctx.user?.id);
260
- if (lock)
261
- return lockRefusal(input.collection, input.id, lock);
262
- const req = await requestAs(deps.payload, ctx);
263
- const current = (await deps.payload.findByID({
264
- collection: input.collection,
265
- id: input.id,
266
- depth: 0,
267
- draft: true,
268
- overrideAccess: false,
269
- user: userOf(ctx),
270
- disableErrors: true,
271
- req,
272
- }));
273
- if (!current) {
274
- return { error: `No ${input.collection} document ${input.id} that you can read.` };
275
- }
259
+ const opened = await openForWrite(deps, ctx, input.collection, input.id);
260
+ if ('error' in opened)
261
+ return opened;
262
+ const { current } = opened;
276
263
  const data = mergePatch(current, input.patch, writableFields(config.fields, options.fields));
277
264
  const checked = await checkWrite(deps, ctx, input.collection, data, current);
278
265
  if (checked)
@@ -283,46 +270,83 @@ export function createUpdateDraftTool(deps) {
283
270
  return taken;
284
271
  data['slug'] = slugify(data['slug']);
285
272
  }
286
- let doc;
287
- try {
288
- doc = (await deps.payload.update({
289
- collection: input.collection,
290
- id: input.id,
291
- data: data,
292
- draft: true,
293
- depth: 0,
294
- overrideAccess: false,
295
- overrideLock: false,
296
- user: userOf(ctx),
297
- req,
298
- }));
299
- }
300
- catch (error) {
301
- const answer = saveRefusal(error);
302
- if (answer)
303
- return answer;
304
- throw error;
305
- }
306
- await record(deps, ctx, {
307
- action: 'content.update',
308
- tool: CONTENT_WRITE_TOOLS.updateDraft.name,
273
+ return saveDraft(deps, ctx, {
309
274
  collection: input.collection,
310
275
  id: input.id,
311
- title: titleIn(deps.payload, input.collection, doc),
276
+ data,
277
+ tool: CONTENT_WRITE_TOOLS.updateDraft.name,
312
278
  changed: Object.keys(input.patch),
313
279
  meta: input._meta,
314
280
  });
315
- return {
316
- collection: input.collection,
317
- id: doc['id'],
318
- status: typeof doc['_status'] === 'string' ? doc['_status'] : 'draft',
319
- changed: Object.keys(input.patch),
320
- adminUrl: adminUrl(deps.payload, input.collection, doc['id']),
321
- previewUrl: await previewUrl(deps.payload, input.collection, doc, req),
322
- };
323
281
  },
324
282
  };
325
283
  }
284
+ /**
285
+ * The document's current draft, as the caller may read it — or why not: it is
286
+ * open in the admin, or there is nothing they can read.
287
+ */
288
+ export async function openForWrite(deps, ctx, collection, id) {
289
+ const lock = await lockHolder(deps.payload, collection, id, ctx.user?.id);
290
+ if (lock)
291
+ return lockRefusal(collection, id, lock);
292
+ const current = (await deps.payload.findByID({
293
+ collection: collection,
294
+ id,
295
+ depth: 0,
296
+ draft: true,
297
+ overrideAccess: false,
298
+ user: userOf(ctx),
299
+ disableErrors: true,
300
+ req: await requestAs(deps.payload, ctx),
301
+ }));
302
+ if (!current)
303
+ return { error: `No ${collection} document ${id} that you can read.` };
304
+ return { current };
305
+ }
306
+ /**
307
+ * Saves `data` to the document's draft as the caller, records it, and answers
308
+ * with the links. `data` holds only the top-level fields that change.
309
+ */
310
+ export async function saveDraft(deps, ctx, write) {
311
+ const req = await requestAs(deps.payload, ctx);
312
+ let doc;
313
+ try {
314
+ doc = (await deps.payload.update({
315
+ collection: write.collection,
316
+ id: write.id,
317
+ data: write.data,
318
+ draft: true,
319
+ depth: 0,
320
+ overrideAccess: false,
321
+ overrideLock: false,
322
+ user: userOf(ctx),
323
+ req,
324
+ }));
325
+ }
326
+ catch (error) {
327
+ const answer = saveRefusal(error);
328
+ if (answer)
329
+ return answer;
330
+ throw error;
331
+ }
332
+ await record(deps, ctx, {
333
+ action: 'content.update',
334
+ tool: write.tool,
335
+ collection: write.collection,
336
+ id: write.id,
337
+ title: titleIn(deps.payload, write.collection, doc),
338
+ changed: write.changed,
339
+ meta: write.meta,
340
+ });
341
+ return {
342
+ collection: write.collection,
343
+ id: doc['id'],
344
+ status: typeof doc['_status'] === 'string' ? doc['_status'] : 'draft',
345
+ changed: write.changed,
346
+ adminUrl: adminUrl(deps.payload, write.collection, doc['id']),
347
+ previewUrl: await previewUrl(deps.payload, write.collection, doc, req),
348
+ };
349
+ }
326
350
  export function createContentWriteTools(deps) {
327
351
  return [createCreateDraftTool(deps), createUpdateDraftTool(deps)];
328
352
  }
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/content/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/content/write.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,8 @@
51
51
  "CHARACTER_COUNT_TEXTAREA_PATH": ["@forumone/throughline/fields"],
52
52
  "CHARACTER_COUNT_TEXT_PATH": ["@forumone/throughline/fields"],
53
53
  "COMMAND_PALETTE_PATH": ["@forumone/throughline/editorial"],
54
+ "CONTENT_BLOCK_TOOLS": ["@forumone/throughline/content"],
55
+ "CONTENT_BLOCK_TOOL_DESCRIPTORS": ["@forumone/throughline/content"],
54
56
  "CONTENT_CALENDAR_VIEW_PATH": ["@forumone/throughline/editorial"],
55
57
  "CONTENT_HEALTH_VIEW_PATH": ["@forumone/throughline/editorial"],
56
58
  "CONTENT_READ_TOOLS": ["@forumone/throughline/content"],
@@ -126,6 +128,7 @@
126
128
  "FailureHandlerOptions": ["@forumone/throughline/jobs"],
127
129
  "FetchSyncStatusArgs": ["@forumone/throughline/client"],
128
130
  "FieldDescription": ["@forumone/throughline/content"],
131
+ "FieldProblem": ["@forumone/throughline/content"],
129
132
  "FindContentNeedingAttentionOptions": ["@forumone/throughline/editorial"],
130
133
  "FindReferencesOptions": ["@forumone/throughline/media"],
131
134
  "FormattedAuditEvent": ["@forumone/throughline/audit"],
@@ -325,6 +328,7 @@
325
328
  "auditEventEchoJob": ["@forumone/throughline/audit"],
326
329
  "auditPlugin": ["@forumone/throughline/audit"],
327
330
  "auditQueryPlugin": ["@forumone/throughline/audit"],
331
+ "blockFieldPaths": ["@forumone/throughline/content"],
328
332
  "blockRegistry": ["@forumone/throughline/media"],
329
333
  "buildActionUrl": ["@forumone/throughline/approvals"],
330
334
  "buildHealthcheckFailureReport": ["@forumone/throughline/observability"],
@@ -353,6 +357,7 @@
353
357
  "createCacheTags": ["@forumone/throughline/cache-tags"],
354
358
  "createCanDeleteTool": ["@forumone/throughline/media"],
355
359
  "createCheckSlugTool": ["@forumone/throughline/fields"],
360
+ "createContentBlockTools": ["@forumone/throughline/content"],
356
361
  "createContentReadTools": ["@forumone/throughline/content"],
357
362
  "createContentWriteTools": ["@forumone/throughline/content"],
358
363
  "createCreateDraftTool": ["@forumone/throughline/content"],
@@ -370,6 +375,7 @@
370
375
  "createGetRecentFailuresTool": ["@forumone/throughline/audit"],
371
376
  "createHealthcheckFailureHandler": ["@forumone/throughline/jobs"],
372
377
  "createInngestClient": ["@forumone/throughline/jobs/inngest"],
378
+ "createInsertBlockTool": ["@forumone/throughline/content"],
373
379
  "createJobFailureWriter": ["@forumone/throughline/observability"],
374
380
  "createJobFailuresCollection": ["@forumone/throughline/observability"],
375
381
  "createListIntegrationTypesTool": ["@forumone/throughline/integrations"],
@@ -377,15 +383,18 @@
377
383
  "createListJobFailuresTool": ["@forumone/throughline/observability"],
378
384
  "createListMyWorkTool": ["@forumone/throughline/editorial"],
379
385
  "createManifestReachableCheck": ["@forumone/throughline/integrations"],
386
+ "createMoveBlockTool": ["@forumone/throughline/content"],
380
387
  "createNamedLogger": ["@forumone/throughline"],
381
388
  "createPayloadReachableCheck": ["@forumone/throughline/integrations"],
382
389
  "createQueryAuditTool": ["@forumone/throughline/audit"],
390
+ "createRemoveBlockTool": ["@forumone/throughline/content"],
383
391
  "createSearchContentTool": ["@forumone/throughline/editorial"],
384
392
  "createSyncEndpoint": ["@forumone/throughline/integrations"],
385
393
  "createTagRevalidationHooks": ["@forumone/throughline/publishing"],
386
394
  "createTerminalFailureHandler": ["@forumone/throughline/jobs"],
387
395
  "createTestIntegrationTool": ["@forumone/throughline/integrations"],
388
396
  "createTriggerSyncTool": ["@forumone/throughline/integrations"],
397
+ "createUpdateBlockTool": ["@forumone/throughline/content"],
389
398
  "createUpdateDraftTool": ["@forumone/throughline/content"],
390
399
  "createWhatChangedInRangeTool": ["@forumone/throughline/audit"],
391
400
  "createWhoChangedWhatTool": ["@forumone/throughline/audit"],
@@ -469,9 +478,11 @@
469
478
  "monthTitle": ["@forumone/throughline/editorial"],
470
479
  "monthsBefore": ["@forumone/throughline/editorial"],
471
480
  "movesToTrash": ["@forumone/throughline/media"],
481
+ "newBlockId": ["@forumone/throughline/content"],
472
482
  "notifyApprovalDecisionJob": ["@forumone/throughline/email"],
473
483
  "notifyApprovalExpiredJob": ["@forumone/throughline/email"],
474
484
  "notifyApprovalRequestJob": ["@forumone/throughline/email"],
485
+ "openForWrite": ["@forumone/throughline/content"],
475
486
  "payloadIdempotencyKey": ["@forumone/throughline/jobs/payload"],
476
487
  "payloadJobs": ["@forumone/throughline/jobs/payload"],
477
488
  "pointsAt": ["@forumone/throughline/media"],
@@ -508,6 +519,7 @@
508
519
  "revisedAtField": ["@forumone/throughline/fields"],
509
520
  "sanitizeStoredSvg": ["@forumone/throughline/media"],
510
521
  "sanitizeSvg": ["@forumone/throughline/media"],
522
+ "saveDraft": ["@forumone/throughline/content"],
511
523
  "scheduleDocument": ["@forumone/throughline/publishing"],
512
524
  "scheduledPublishField": ["@forumone/throughline/fields"],
513
525
  "searchContent": ["@forumone/throughline/editorial"],
@@ -539,6 +551,7 @@
539
551
  "unwrapRelationshipId": ["@forumone/throughline"],
540
552
  "uploadPrefixField": ["@forumone/throughline/media"],
541
553
  "usedBy": ["@forumone/throughline/fields"],
554
+ "validateBlock": ["@forumone/throughline/content"],
542
555
  "verifyActionToken": ["@forumone/throughline/approvals"],
543
556
  "webhookIntegration": ["@forumone/throughline/integrations"],
544
557
  "whereQuery": ["@forumone/throughline/editorial"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forumone/throughline",
3
- "version": "1.4.0-pr-287-01fd93c",
3
+ "version": "1.4.0",
4
4
  "description": "Throughline: an editorial platform for Payload CMS. Publishing, approvals, audit, integrations, email and jobs, with every feature reachable over MCP.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -166,7 +166,7 @@
166
166
  "dependencies": {
167
167
  "zod": "^3.23.0",
168
168
  "zod-to-json-schema": "^3.25.2",
169
- "@forumone/throughline-design-system": "1.4.0-pr-287-01fd93c"
169
+ "@forumone/throughline-design-system": "1.4.0"
170
170
  },
171
171
  "devDependencies": {
172
172
  "@payloadcms/db-sqlite": "^3.83.0",
@@ -189,7 +189,7 @@
189
189
  "typescript": "^5.6.0",
190
190
  "vitest": "^4.1.10",
191
191
  "@forumone/throughline-eslint-config": "0.0.1",
192
- "@forumone/throughline-reference-ds": "0.3.13-pr-287-01fd93c",
192
+ "@forumone/throughline-reference-ds": "0.3.13",
193
193
  "@forumone/throughline-tsconfig": "0.0.1"
194
194
  },
195
195
  "scripts": {