@smartspec/cli 0.0.0-stage → 0.1.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 +51 -2
- package/cli.js +37 -0
- package/lib/agents.js +89 -0
- package/lib/apps.js +38 -0
- package/lib/bridge.js +136 -0
- package/lib/claude-code.js +35 -0
- package/lib/commands.js +180 -0
- package/lib/install.js +118 -0
- package/lib/launch.js +96 -0
- package/lib/platform.js +42 -0
- package/lib/server.json +1066 -0
- package/lib/wait.js +84 -0
- package/mcp.js +20 -0
- package/package.json +28 -4
package/lib/server.json
ADDED
|
@@ -0,0 +1,1066 @@
|
|
|
1
|
+
{
|
|
2
|
+
"protocolVersions": [
|
|
3
|
+
"2025-11-25",
|
|
4
|
+
"2025-06-18",
|
|
5
|
+
"2025-03-26",
|
|
6
|
+
"2024-11-05",
|
|
7
|
+
"2024-10-07"
|
|
8
|
+
],
|
|
9
|
+
"capabilities": {
|
|
10
|
+
"tools": {
|
|
11
|
+
"listChanged": true
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"instructions": "This server is SmartSpec: a desktop app holding the design of a system as schematics, for the user and for other agents to act on. It's about system design at any scale: a schematic can describe a whole business, one service, or one module inside a single application.\nA schematic has a name, a summary and a contract, which are what show when it's collapsed inside another schematic, so write them to stand on their own. The contract is its boundary: what it promises and what it needs.\nA schematic's design is a set of items, each of a kind: document (Markdown), flow (a diagram of nodes and connections), sequence (a diagram of participants and messages), table, or image. Use whichever explain it best, and as many as it needs. Diagrams are data, not a text language: the app lays them out and draws them. Give a description to anything in a diagram whose reason isn't obvious from its label, especially loops, alternatives and activations.\nItems link to each other, so a schematic is a connected graph. A link is an item's id, or item#part for a part inside it: a document's heading (as a slug), a flow's node or connection, a sequence's participant or message, or a table's row. In Markdown, write [text](item#part). Nodes, connections, participants, messages and rows can each have a link. Any item can list links too, which is the way to link from an image. A link can reach the contract, and the schematics this one embeds, but not inside them. Links that go nowhere are refused.\nSchematics embed other schematics: a standard structure, such as machine to machine auth, is one schematic, and shows as a single element in each schematic that uses it. Each use is pinned to a draft and can only set the parameters the embedded schematic declares. To change anything else, propose a new draft of that schematic, or a separate schematic.\nRead only what you need: get_schematic lists a schematic's items and links without their content, with its uses collapsed. Fetch an item with get_schematic_item when you need it, and open further levels by asking for them.\nA focus is what the user wants this work to be for: their prompt may say \"focusing on\" a goal. Keep to it, and pass it to propose_schematic as goal, with a short goal_title if you're given one or can name it, so the app can show it. If the user's prompt names a window, call use_window with it first, so that window becomes yours.\nOnly the user accepts what you propose: propose_schematic creates a proposal, and it becomes a draft once they accept it in the app. Send only what changes: the rest carries over. Tell the user straight away to switch to SmartSpec and review it. Each reply gives a wait command, a shell command that ends when they have answered: run it in the background if you can, or call get_schematic later to see where it stands. A schematic you embed must have an accepted draft, so wait for the acceptance before building on it.\nSchematics are organised into groups, such as a team, a department or a set like \"Auth\"; a schematic in none is Ungrouped. list_groups shows them. create_group, rename_group and move_schematic take effect straight away, so only use them when the user asks. A new schematic can go straight into a group with propose_schematic's group_id.\nThe user comments on what you propose, and on drafts: get_schematic and get_proposal say how many comments there are, and get_comments reads them, each on an item, a part of it or words they quoted. Answer each one with reply_to_comment, saying what you changed or why you didn't. A comment whose target has card: true is about the item's card, what shows for it around the schematic: answer it by changing the item's title, description or card lines. Comments on a proposal stay with it as you revise it.",
|
|
15
|
+
"tools": [
|
|
16
|
+
{
|
|
17
|
+
"name": "use_window",
|
|
18
|
+
"description": "Takes over a SmartSpec window, when the user's prompt names one: this session then works in it. Call it first, before any other tool, or SmartSpec opens a new window for this session.",
|
|
19
|
+
"inputSchema": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"window_id": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "The window named in the prompt, such as w-7f3a"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"required": [
|
|
28
|
+
"window_id"
|
|
29
|
+
],
|
|
30
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
31
|
+
},
|
|
32
|
+
"annotations": {
|
|
33
|
+
"readOnlyHint": false,
|
|
34
|
+
"destructiveHint": false,
|
|
35
|
+
"openWorldHint": false
|
|
36
|
+
},
|
|
37
|
+
"execution": {
|
|
38
|
+
"taskSupport": "forbidden"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"name": "list_schematics",
|
|
43
|
+
"description": "Every schematic, most recently changed first: its id, name, summary, number of accepted drafts, status, the group it's in (null for Ungrouped), and any proposal waiting for the user.",
|
|
44
|
+
"inputSchema": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"properties": {},
|
|
47
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
48
|
+
},
|
|
49
|
+
"annotations": {
|
|
50
|
+
"readOnlyHint": true,
|
|
51
|
+
"destructiveHint": false,
|
|
52
|
+
"openWorldHint": false
|
|
53
|
+
},
|
|
54
|
+
"execution": {
|
|
55
|
+
"taskSupport": "forbidden"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "list_groups",
|
|
60
|
+
"description": "The groups schematics are organised into, by name: each with its id, name and how many schematics are in it, and how many schematics are Ungrouped.",
|
|
61
|
+
"inputSchema": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"properties": {},
|
|
64
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
65
|
+
},
|
|
66
|
+
"annotations": {
|
|
67
|
+
"readOnlyHint": true,
|
|
68
|
+
"destructiveHint": false,
|
|
69
|
+
"openWorldHint": false
|
|
70
|
+
},
|
|
71
|
+
"execution": {
|
|
72
|
+
"taskSupport": "forbidden"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "create_group",
|
|
77
|
+
"description": "Makes a group to organise schematics into, such as a team, a department or a set like \"Auth\", straight away. Only use it when the user asks.",
|
|
78
|
+
"inputSchema": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"properties": {
|
|
81
|
+
"name": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"minLength": 1,
|
|
84
|
+
"maxLength": 80
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"required": [
|
|
88
|
+
"name"
|
|
89
|
+
],
|
|
90
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
91
|
+
},
|
|
92
|
+
"annotations": {
|
|
93
|
+
"readOnlyHint": false,
|
|
94
|
+
"destructiveHint": false,
|
|
95
|
+
"openWorldHint": false
|
|
96
|
+
},
|
|
97
|
+
"execution": {
|
|
98
|
+
"taskSupport": "forbidden"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "rename_group",
|
|
103
|
+
"description": "Renames a group, straight away. Only use it when the user asks.",
|
|
104
|
+
"inputSchema": {
|
|
105
|
+
"type": "object",
|
|
106
|
+
"properties": {
|
|
107
|
+
"group_id": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"description": "From list_groups"
|
|
110
|
+
},
|
|
111
|
+
"name": {
|
|
112
|
+
"type": "string",
|
|
113
|
+
"minLength": 1,
|
|
114
|
+
"maxLength": 80
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"required": [
|
|
118
|
+
"group_id",
|
|
119
|
+
"name"
|
|
120
|
+
],
|
|
121
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
122
|
+
},
|
|
123
|
+
"annotations": {
|
|
124
|
+
"readOnlyHint": false,
|
|
125
|
+
"destructiveHint": false,
|
|
126
|
+
"openWorldHint": false
|
|
127
|
+
},
|
|
128
|
+
"execution": {
|
|
129
|
+
"taskSupport": "forbidden"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "move_schematic",
|
|
134
|
+
"description": "Puts a schematic in a group, or back in Ungrouped, straight away. Only its place on the list changes: its drafts stay as they are. Only use it when the user asks.",
|
|
135
|
+
"inputSchema": {
|
|
136
|
+
"type": "object",
|
|
137
|
+
"properties": {
|
|
138
|
+
"schematic_id": {
|
|
139
|
+
"type": "string"
|
|
140
|
+
},
|
|
141
|
+
"group_id": {
|
|
142
|
+
"description": "From list_groups, or null for Ungrouped",
|
|
143
|
+
"type": [
|
|
144
|
+
"string",
|
|
145
|
+
"null"
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"required": [
|
|
150
|
+
"schematic_id",
|
|
151
|
+
"group_id"
|
|
152
|
+
],
|
|
153
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
154
|
+
},
|
|
155
|
+
"annotations": {
|
|
156
|
+
"readOnlyHint": false,
|
|
157
|
+
"destructiveHint": false,
|
|
158
|
+
"openWorldHint": false
|
|
159
|
+
},
|
|
160
|
+
"execution": {
|
|
161
|
+
"taskSupport": "forbidden"
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"name": "get_schematic",
|
|
166
|
+
"description": "One schematic's accepted draft: its name, summary, contract and parameters; its items listed with their id, kind, title and description but not their content; every link between them; and the schematics it embeds, each collapsed to its name, summary, contract and pinned draft, saying if a newer draft exists. Fetch an item with get_schematic_item. Open further levels with depth, or by calling this for an embedded schematic's id and draft. proposal says if a change is waiting for the user.",
|
|
167
|
+
"inputSchema": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"properties": {
|
|
170
|
+
"schematic_id": {
|
|
171
|
+
"type": "string"
|
|
172
|
+
},
|
|
173
|
+
"draft_id": {
|
|
174
|
+
"description": "The draft to read (default: the latest)",
|
|
175
|
+
"type": "string"
|
|
176
|
+
},
|
|
177
|
+
"depth": {
|
|
178
|
+
"description": "How many levels of embedded schematics to open (default 0: all collapsed)",
|
|
179
|
+
"type": "integer",
|
|
180
|
+
"minimum": 0,
|
|
181
|
+
"maximum": 10
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
"required": [
|
|
185
|
+
"schematic_id"
|
|
186
|
+
],
|
|
187
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
188
|
+
},
|
|
189
|
+
"annotations": {
|
|
190
|
+
"readOnlyHint": true,
|
|
191
|
+
"destructiveHint": false,
|
|
192
|
+
"openWorldHint": false
|
|
193
|
+
},
|
|
194
|
+
"execution": {
|
|
195
|
+
"taskSupport": "forbidden"
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "get_schematic_item",
|
|
200
|
+
"description": "One item's full content, with the links out of it and into it.",
|
|
201
|
+
"inputSchema": {
|
|
202
|
+
"type": "object",
|
|
203
|
+
"properties": {
|
|
204
|
+
"schematic_id": {
|
|
205
|
+
"type": "string"
|
|
206
|
+
},
|
|
207
|
+
"item_id": {
|
|
208
|
+
"type": "string"
|
|
209
|
+
},
|
|
210
|
+
"draft_id": {
|
|
211
|
+
"description": "The draft to read (default: the latest)",
|
|
212
|
+
"type": "string"
|
|
213
|
+
},
|
|
214
|
+
"proposal": {
|
|
215
|
+
"description": "Read it from the proposal waiting on the schematic instead",
|
|
216
|
+
"type": "boolean"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"required": [
|
|
220
|
+
"schematic_id",
|
|
221
|
+
"item_id"
|
|
222
|
+
],
|
|
223
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
224
|
+
},
|
|
225
|
+
"annotations": {
|
|
226
|
+
"readOnlyHint": true,
|
|
227
|
+
"destructiveHint": false,
|
|
228
|
+
"openWorldHint": false
|
|
229
|
+
},
|
|
230
|
+
"execution": {
|
|
231
|
+
"taskSupport": "forbidden"
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"name": "get_proposal",
|
|
236
|
+
"description": "The change waiting for the user on a schematic, in the same form as get_schematic, with which items it adds, changes and removes. Fetch an item from it with get_schematic_item and proposal. Null if nothing is waiting.",
|
|
237
|
+
"inputSchema": {
|
|
238
|
+
"type": "object",
|
|
239
|
+
"properties": {
|
|
240
|
+
"schematic_id": {
|
|
241
|
+
"type": "string"
|
|
242
|
+
},
|
|
243
|
+
"depth": {
|
|
244
|
+
"description": "How many levels of embedded schematics to open (default 0: all collapsed)",
|
|
245
|
+
"type": "integer",
|
|
246
|
+
"minimum": 0,
|
|
247
|
+
"maximum": 10
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"required": [
|
|
251
|
+
"schematic_id"
|
|
252
|
+
],
|
|
253
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
254
|
+
},
|
|
255
|
+
"annotations": {
|
|
256
|
+
"readOnlyHint": true,
|
|
257
|
+
"destructiveHint": false,
|
|
258
|
+
"openWorldHint": false
|
|
259
|
+
},
|
|
260
|
+
"execution": {
|
|
261
|
+
"taskSupport": "forbidden"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "get_comments",
|
|
266
|
+
"description": "The user's comments on a schematic's draft (the latest unless you name one) or on the proposal waiting on it, oldest first. Each says what it's on (target: the item and its title, the part and its name, any words the user quoted, or card: true for the item's card; missing or partMissing if that's no longer there), what the user said, and the replies so far.",
|
|
267
|
+
"inputSchema": {
|
|
268
|
+
"type": "object",
|
|
269
|
+
"properties": {
|
|
270
|
+
"schematic_id": {
|
|
271
|
+
"type": "string"
|
|
272
|
+
},
|
|
273
|
+
"draft_id": {
|
|
274
|
+
"description": "The draft whose comments to read (default: the latest)",
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"proposal": {
|
|
278
|
+
"description": "Read the comments on the proposal waiting on the schematic instead",
|
|
279
|
+
"type": "boolean"
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
"required": [
|
|
283
|
+
"schematic_id"
|
|
284
|
+
],
|
|
285
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
286
|
+
},
|
|
287
|
+
"annotations": {
|
|
288
|
+
"readOnlyHint": true,
|
|
289
|
+
"destructiveHint": false,
|
|
290
|
+
"openWorldHint": false
|
|
291
|
+
},
|
|
292
|
+
"execution": {
|
|
293
|
+
"taskSupport": "forbidden"
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
"name": "reply_to_comment",
|
|
298
|
+
"description": "Answers one of the user's comments, shown under it in the app: say what you changed, or why you didn't. A comment can have several replies, so reply again after a further revision.",
|
|
299
|
+
"inputSchema": {
|
|
300
|
+
"type": "object",
|
|
301
|
+
"properties": {
|
|
302
|
+
"schematic_id": {
|
|
303
|
+
"type": "string"
|
|
304
|
+
},
|
|
305
|
+
"comment_id": {
|
|
306
|
+
"type": "string"
|
|
307
|
+
},
|
|
308
|
+
"text": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"minLength": 1,
|
|
311
|
+
"description": "Your reply, in a sentence or two"
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"required": [
|
|
315
|
+
"schematic_id",
|
|
316
|
+
"comment_id",
|
|
317
|
+
"text"
|
|
318
|
+
],
|
|
319
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
320
|
+
},
|
|
321
|
+
"annotations": {
|
|
322
|
+
"readOnlyHint": false,
|
|
323
|
+
"destructiveHint": false,
|
|
324
|
+
"openWorldHint": false
|
|
325
|
+
},
|
|
326
|
+
"execution": {
|
|
327
|
+
"taskSupport": "forbidden"
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"name": "propose_schematic",
|
|
332
|
+
"description": "Proposes a new schematic, or with schematic_id a change to one, and shows it in the app for the user to accept or discard. For a change, send only what changes: everything else carries over, from the proposal already waiting (which this replaces) or else the latest draft. Links are checked, and the proposal is refused if one goes nowhere.",
|
|
333
|
+
"inputSchema": {
|
|
334
|
+
"type": "object",
|
|
335
|
+
"properties": {
|
|
336
|
+
"schematic_id": {
|
|
337
|
+
"description": "The schematic to change (leave out to propose a new one)",
|
|
338
|
+
"type": "string"
|
|
339
|
+
},
|
|
340
|
+
"name": {
|
|
341
|
+
"description": "Needed for a new schematic",
|
|
342
|
+
"type": "string",
|
|
343
|
+
"minLength": 1,
|
|
344
|
+
"maxLength": 200
|
|
345
|
+
},
|
|
346
|
+
"summary": {
|
|
347
|
+
"description": "What this is, in a sentence or two. Shows when it's collapsed. Needed for a new schematic.",
|
|
348
|
+
"type": "string",
|
|
349
|
+
"minLength": 1
|
|
350
|
+
},
|
|
351
|
+
"contract": {
|
|
352
|
+
"description": "Markdown: what it promises and what it needs. Shows when it's collapsed.",
|
|
353
|
+
"type": "string"
|
|
354
|
+
},
|
|
355
|
+
"items": {
|
|
356
|
+
"description": "Items to add, or to replace by id",
|
|
357
|
+
"type": "array",
|
|
358
|
+
"items": {
|
|
359
|
+
"oneOf": [
|
|
360
|
+
{
|
|
361
|
+
"type": "object",
|
|
362
|
+
"properties": {
|
|
363
|
+
"id": {
|
|
364
|
+
"type": "string",
|
|
365
|
+
"description": "Its id within this schematic. Sending an id that exists replaces that item."
|
|
366
|
+
},
|
|
367
|
+
"title": {
|
|
368
|
+
"type": "string",
|
|
369
|
+
"minLength": 1
|
|
370
|
+
},
|
|
371
|
+
"description": {
|
|
372
|
+
"description": "One line saying what it is, listed by get_schematic",
|
|
373
|
+
"type": "string"
|
|
374
|
+
},
|
|
375
|
+
"links": {
|
|
376
|
+
"description": "Links from the item as a whole",
|
|
377
|
+
"type": "array",
|
|
378
|
+
"items": {
|
|
379
|
+
"type": "object",
|
|
380
|
+
"properties": {
|
|
381
|
+
"to": {
|
|
382
|
+
"type": "string"
|
|
383
|
+
},
|
|
384
|
+
"label": {
|
|
385
|
+
"type": "string"
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
"required": [
|
|
389
|
+
"to"
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
},
|
|
393
|
+
"card": {
|
|
394
|
+
"description": "Up to 4 short lines for the item's card, the summary shown wherever it appears around the schematic, below its title and description. Instead of what the app works out (such as a table's row count), so write them when the user asks for details there, or when a few facts say more. Leave out to let the app summarise.",
|
|
395
|
+
"maxItems": 4,
|
|
396
|
+
"type": "array",
|
|
397
|
+
"items": {
|
|
398
|
+
"type": "string"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"kind": {
|
|
402
|
+
"type": "string",
|
|
403
|
+
"const": "document"
|
|
404
|
+
},
|
|
405
|
+
"markdown": {
|
|
406
|
+
"type": "string"
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
"required": [
|
|
410
|
+
"id",
|
|
411
|
+
"title",
|
|
412
|
+
"kind",
|
|
413
|
+
"markdown"
|
|
414
|
+
]
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"type": "object",
|
|
418
|
+
"properties": {
|
|
419
|
+
"id": {
|
|
420
|
+
"type": "string",
|
|
421
|
+
"description": "Its id within this schematic. Sending an id that exists replaces that item."
|
|
422
|
+
},
|
|
423
|
+
"title": {
|
|
424
|
+
"type": "string",
|
|
425
|
+
"minLength": 1
|
|
426
|
+
},
|
|
427
|
+
"description": {
|
|
428
|
+
"description": "One line saying what it is, listed by get_schematic",
|
|
429
|
+
"type": "string"
|
|
430
|
+
},
|
|
431
|
+
"links": {
|
|
432
|
+
"description": "Links from the item as a whole",
|
|
433
|
+
"type": "array",
|
|
434
|
+
"items": {
|
|
435
|
+
"type": "object",
|
|
436
|
+
"properties": {
|
|
437
|
+
"to": {
|
|
438
|
+
"type": "string"
|
|
439
|
+
},
|
|
440
|
+
"label": {
|
|
441
|
+
"type": "string"
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
"required": [
|
|
445
|
+
"to"
|
|
446
|
+
]
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
"card": {
|
|
450
|
+
"description": "Up to 4 short lines for the item's card, the summary shown wherever it appears around the schematic, below its title and description. Instead of what the app works out (such as a table's row count), so write them when the user asks for details there, or when a few facts say more. Leave out to let the app summarise.",
|
|
451
|
+
"maxItems": 4,
|
|
452
|
+
"type": "array",
|
|
453
|
+
"items": {
|
|
454
|
+
"type": "string"
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
"kind": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"const": "flow"
|
|
460
|
+
},
|
|
461
|
+
"direction": {
|
|
462
|
+
"description": "Top to bottom (the default, and almost always best: the diagram shares the page with cards either side). Left to right only if it truly reads better.",
|
|
463
|
+
"type": "string",
|
|
464
|
+
"enum": [
|
|
465
|
+
"TB",
|
|
466
|
+
"LR"
|
|
467
|
+
]
|
|
468
|
+
},
|
|
469
|
+
"nodes": {
|
|
470
|
+
"type": "array",
|
|
471
|
+
"items": {
|
|
472
|
+
"type": "object",
|
|
473
|
+
"properties": {
|
|
474
|
+
"id": {
|
|
475
|
+
"type": "string"
|
|
476
|
+
},
|
|
477
|
+
"label": {
|
|
478
|
+
"type": "string"
|
|
479
|
+
},
|
|
480
|
+
"description": {
|
|
481
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
482
|
+
"type": "string"
|
|
483
|
+
},
|
|
484
|
+
"link": {
|
|
485
|
+
"description": "Where it links: an item id, or item#part",
|
|
486
|
+
"type": "string"
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"required": [
|
|
490
|
+
"id",
|
|
491
|
+
"label"
|
|
492
|
+
]
|
|
493
|
+
}
|
|
494
|
+
},
|
|
495
|
+
"edges": {
|
|
496
|
+
"type": "array",
|
|
497
|
+
"items": {
|
|
498
|
+
"type": "object",
|
|
499
|
+
"properties": {
|
|
500
|
+
"id": {
|
|
501
|
+
"description": "Needed if two connections join the same nodes. Default: from-to",
|
|
502
|
+
"type": "string"
|
|
503
|
+
},
|
|
504
|
+
"from": {
|
|
505
|
+
"type": "string"
|
|
506
|
+
},
|
|
507
|
+
"to": {
|
|
508
|
+
"type": "string"
|
|
509
|
+
},
|
|
510
|
+
"label": {
|
|
511
|
+
"type": "string"
|
|
512
|
+
},
|
|
513
|
+
"description": {
|
|
514
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
515
|
+
"type": "string"
|
|
516
|
+
},
|
|
517
|
+
"link": {
|
|
518
|
+
"description": "Where it links: an item id, or item#part",
|
|
519
|
+
"type": "string"
|
|
520
|
+
}
|
|
521
|
+
},
|
|
522
|
+
"required": [
|
|
523
|
+
"from",
|
|
524
|
+
"to"
|
|
525
|
+
]
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
"required": [
|
|
530
|
+
"id",
|
|
531
|
+
"title",
|
|
532
|
+
"kind",
|
|
533
|
+
"nodes"
|
|
534
|
+
]
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
"type": "object",
|
|
538
|
+
"properties": {
|
|
539
|
+
"id": {
|
|
540
|
+
"type": "string",
|
|
541
|
+
"description": "Its id within this schematic. Sending an id that exists replaces that item."
|
|
542
|
+
},
|
|
543
|
+
"title": {
|
|
544
|
+
"type": "string",
|
|
545
|
+
"minLength": 1
|
|
546
|
+
},
|
|
547
|
+
"description": {
|
|
548
|
+
"description": "One line saying what it is, listed by get_schematic",
|
|
549
|
+
"type": "string"
|
|
550
|
+
},
|
|
551
|
+
"links": {
|
|
552
|
+
"description": "Links from the item as a whole",
|
|
553
|
+
"type": "array",
|
|
554
|
+
"items": {
|
|
555
|
+
"type": "object",
|
|
556
|
+
"properties": {
|
|
557
|
+
"to": {
|
|
558
|
+
"type": "string"
|
|
559
|
+
},
|
|
560
|
+
"label": {
|
|
561
|
+
"type": "string"
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
"required": [
|
|
565
|
+
"to"
|
|
566
|
+
]
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
"card": {
|
|
570
|
+
"description": "Up to 4 short lines for the item's card, the summary shown wherever it appears around the schematic, below its title and description. Instead of what the app works out (such as a table's row count), so write them when the user asks for details there, or when a few facts say more. Leave out to let the app summarise.",
|
|
571
|
+
"maxItems": 4,
|
|
572
|
+
"type": "array",
|
|
573
|
+
"items": {
|
|
574
|
+
"type": "string"
|
|
575
|
+
}
|
|
576
|
+
},
|
|
577
|
+
"kind": {
|
|
578
|
+
"type": "string",
|
|
579
|
+
"const": "sequence"
|
|
580
|
+
},
|
|
581
|
+
"participants": {
|
|
582
|
+
"type": "array",
|
|
583
|
+
"items": {
|
|
584
|
+
"type": "object",
|
|
585
|
+
"properties": {
|
|
586
|
+
"id": {
|
|
587
|
+
"type": "string"
|
|
588
|
+
},
|
|
589
|
+
"label": {
|
|
590
|
+
"type": "string"
|
|
591
|
+
},
|
|
592
|
+
"description": {
|
|
593
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
594
|
+
"type": "string"
|
|
595
|
+
},
|
|
596
|
+
"link": {
|
|
597
|
+
"description": "Where it links: an item id, or item#part",
|
|
598
|
+
"type": "string"
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
"required": [
|
|
602
|
+
"id",
|
|
603
|
+
"label"
|
|
604
|
+
]
|
|
605
|
+
}
|
|
606
|
+
},
|
|
607
|
+
"messages": {
|
|
608
|
+
"type": "array",
|
|
609
|
+
"items": {
|
|
610
|
+
"type": "object",
|
|
611
|
+
"properties": {
|
|
612
|
+
"id": {
|
|
613
|
+
"type": "string"
|
|
614
|
+
},
|
|
615
|
+
"from": {
|
|
616
|
+
"type": "string"
|
|
617
|
+
},
|
|
618
|
+
"to": {
|
|
619
|
+
"type": "string"
|
|
620
|
+
},
|
|
621
|
+
"label": {
|
|
622
|
+
"type": "string"
|
|
623
|
+
},
|
|
624
|
+
"reply": {
|
|
625
|
+
"description": "Drawn dashed, as a reply",
|
|
626
|
+
"type": "boolean"
|
|
627
|
+
},
|
|
628
|
+
"description": {
|
|
629
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
630
|
+
"type": "string"
|
|
631
|
+
},
|
|
632
|
+
"link": {
|
|
633
|
+
"description": "Where it links: an item id, or item#part",
|
|
634
|
+
"type": "string"
|
|
635
|
+
}
|
|
636
|
+
},
|
|
637
|
+
"required": [
|
|
638
|
+
"id",
|
|
639
|
+
"from",
|
|
640
|
+
"to",
|
|
641
|
+
"label"
|
|
642
|
+
]
|
|
643
|
+
}
|
|
644
|
+
},
|
|
645
|
+
"groups": {
|
|
646
|
+
"description": "Boxes wrapped around messages. They can nest.",
|
|
647
|
+
"type": "array",
|
|
648
|
+
"items": {
|
|
649
|
+
"type": "object",
|
|
650
|
+
"properties": {
|
|
651
|
+
"id": {
|
|
652
|
+
"type": "string"
|
|
653
|
+
},
|
|
654
|
+
"kind": {
|
|
655
|
+
"type": "string",
|
|
656
|
+
"enum": [
|
|
657
|
+
"loop",
|
|
658
|
+
"alt",
|
|
659
|
+
"opt",
|
|
660
|
+
"par",
|
|
661
|
+
"critical",
|
|
662
|
+
"break",
|
|
663
|
+
"group"
|
|
664
|
+
],
|
|
665
|
+
"description": "loop: repeats. alt: one of several sections happens. opt: may not happen. par: sections happen at the same time. critical: must finish as a whole. break: stops the rest. group: just a named set of steps."
|
|
666
|
+
},
|
|
667
|
+
"label": {
|
|
668
|
+
"description": "The condition or name, such as \"up to five times\"",
|
|
669
|
+
"type": "string"
|
|
670
|
+
},
|
|
671
|
+
"from": {
|
|
672
|
+
"type": "string",
|
|
673
|
+
"description": "The first message inside it"
|
|
674
|
+
},
|
|
675
|
+
"to": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"description": "The last message inside it"
|
|
678
|
+
},
|
|
679
|
+
"sections": {
|
|
680
|
+
"description": "For alt and par: where each further section starts",
|
|
681
|
+
"type": "array",
|
|
682
|
+
"items": {
|
|
683
|
+
"type": "object",
|
|
684
|
+
"properties": {
|
|
685
|
+
"at": {
|
|
686
|
+
"type": "string",
|
|
687
|
+
"description": "The message that starts this section"
|
|
688
|
+
},
|
|
689
|
+
"label": {
|
|
690
|
+
"type": "string"
|
|
691
|
+
}
|
|
692
|
+
},
|
|
693
|
+
"required": [
|
|
694
|
+
"at"
|
|
695
|
+
]
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
"description": {
|
|
699
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
700
|
+
"type": "string"
|
|
701
|
+
},
|
|
702
|
+
"link": {
|
|
703
|
+
"description": "Where it links: an item id, or item#part",
|
|
704
|
+
"type": "string"
|
|
705
|
+
}
|
|
706
|
+
},
|
|
707
|
+
"required": [
|
|
708
|
+
"id",
|
|
709
|
+
"kind",
|
|
710
|
+
"from",
|
|
711
|
+
"to"
|
|
712
|
+
]
|
|
713
|
+
}
|
|
714
|
+
},
|
|
715
|
+
"activations": {
|
|
716
|
+
"description": "Bars on a lifeline: this participant is busy from one message to another",
|
|
717
|
+
"type": "array",
|
|
718
|
+
"items": {
|
|
719
|
+
"type": "object",
|
|
720
|
+
"properties": {
|
|
721
|
+
"id": {
|
|
722
|
+
"type": "string"
|
|
723
|
+
},
|
|
724
|
+
"participant": {
|
|
725
|
+
"type": "string"
|
|
726
|
+
},
|
|
727
|
+
"from": {
|
|
728
|
+
"type": "string"
|
|
729
|
+
},
|
|
730
|
+
"to": {
|
|
731
|
+
"type": "string"
|
|
732
|
+
},
|
|
733
|
+
"description": {
|
|
734
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
735
|
+
"type": "string"
|
|
736
|
+
},
|
|
737
|
+
"link": {
|
|
738
|
+
"description": "Where it links: an item id, or item#part",
|
|
739
|
+
"type": "string"
|
|
740
|
+
}
|
|
741
|
+
},
|
|
742
|
+
"required": [
|
|
743
|
+
"id",
|
|
744
|
+
"participant",
|
|
745
|
+
"from",
|
|
746
|
+
"to"
|
|
747
|
+
]
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
"boxes": {
|
|
751
|
+
"description": "Boxes around participants that belong together, such as those in one service",
|
|
752
|
+
"type": "array",
|
|
753
|
+
"items": {
|
|
754
|
+
"type": "object",
|
|
755
|
+
"properties": {
|
|
756
|
+
"id": {
|
|
757
|
+
"type": "string"
|
|
758
|
+
},
|
|
759
|
+
"label": {
|
|
760
|
+
"type": "string"
|
|
761
|
+
},
|
|
762
|
+
"participants": {
|
|
763
|
+
"type": "array",
|
|
764
|
+
"items": {
|
|
765
|
+
"type": "string"
|
|
766
|
+
},
|
|
767
|
+
"description": "Next to each other in participants"
|
|
768
|
+
},
|
|
769
|
+
"description": {
|
|
770
|
+
"description": "What this one does here and why, which the diagram can't show by itself, for agents reading the schematic. Don't repeat what the diagram already shows: who it joins and what it wraps.",
|
|
771
|
+
"type": "string"
|
|
772
|
+
},
|
|
773
|
+
"link": {
|
|
774
|
+
"description": "Where it links: an item id, or item#part",
|
|
775
|
+
"type": "string"
|
|
776
|
+
}
|
|
777
|
+
},
|
|
778
|
+
"required": [
|
|
779
|
+
"id",
|
|
780
|
+
"participants"
|
|
781
|
+
]
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
},
|
|
785
|
+
"required": [
|
|
786
|
+
"id",
|
|
787
|
+
"title",
|
|
788
|
+
"kind",
|
|
789
|
+
"participants"
|
|
790
|
+
]
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"type": "object",
|
|
794
|
+
"properties": {
|
|
795
|
+
"id": {
|
|
796
|
+
"type": "string",
|
|
797
|
+
"description": "Its id within this schematic. Sending an id that exists replaces that item."
|
|
798
|
+
},
|
|
799
|
+
"title": {
|
|
800
|
+
"type": "string",
|
|
801
|
+
"minLength": 1
|
|
802
|
+
},
|
|
803
|
+
"description": {
|
|
804
|
+
"description": "One line saying what it is, listed by get_schematic",
|
|
805
|
+
"type": "string"
|
|
806
|
+
},
|
|
807
|
+
"links": {
|
|
808
|
+
"description": "Links from the item as a whole",
|
|
809
|
+
"type": "array",
|
|
810
|
+
"items": {
|
|
811
|
+
"type": "object",
|
|
812
|
+
"properties": {
|
|
813
|
+
"to": {
|
|
814
|
+
"type": "string"
|
|
815
|
+
},
|
|
816
|
+
"label": {
|
|
817
|
+
"type": "string"
|
|
818
|
+
}
|
|
819
|
+
},
|
|
820
|
+
"required": [
|
|
821
|
+
"to"
|
|
822
|
+
]
|
|
823
|
+
}
|
|
824
|
+
},
|
|
825
|
+
"card": {
|
|
826
|
+
"description": "Up to 4 short lines for the item's card, the summary shown wherever it appears around the schematic, below its title and description. Instead of what the app works out (such as a table's row count), so write them when the user asks for details there, or when a few facts say more. Leave out to let the app summarise.",
|
|
827
|
+
"maxItems": 4,
|
|
828
|
+
"type": "array",
|
|
829
|
+
"items": {
|
|
830
|
+
"type": "string"
|
|
831
|
+
}
|
|
832
|
+
},
|
|
833
|
+
"kind": {
|
|
834
|
+
"type": "string",
|
|
835
|
+
"const": "table"
|
|
836
|
+
},
|
|
837
|
+
"columns": {
|
|
838
|
+
"type": "array",
|
|
839
|
+
"items": {
|
|
840
|
+
"type": "object",
|
|
841
|
+
"properties": {
|
|
842
|
+
"id": {
|
|
843
|
+
"type": "string"
|
|
844
|
+
},
|
|
845
|
+
"label": {
|
|
846
|
+
"type": "string"
|
|
847
|
+
}
|
|
848
|
+
},
|
|
849
|
+
"required": [
|
|
850
|
+
"id",
|
|
851
|
+
"label"
|
|
852
|
+
]
|
|
853
|
+
}
|
|
854
|
+
},
|
|
855
|
+
"rows": {
|
|
856
|
+
"type": "array",
|
|
857
|
+
"items": {
|
|
858
|
+
"type": "object",
|
|
859
|
+
"properties": {
|
|
860
|
+
"id": {
|
|
861
|
+
"type": "string"
|
|
862
|
+
},
|
|
863
|
+
"cells": {
|
|
864
|
+
"type": "object",
|
|
865
|
+
"propertyNames": {
|
|
866
|
+
"type": "string"
|
|
867
|
+
},
|
|
868
|
+
"additionalProperties": {
|
|
869
|
+
"type": "string"
|
|
870
|
+
},
|
|
871
|
+
"description": "Column id to value. Values can hold Markdown links."
|
|
872
|
+
},
|
|
873
|
+
"link": {
|
|
874
|
+
"description": "Where it links: an item id, or item#part",
|
|
875
|
+
"type": "string"
|
|
876
|
+
}
|
|
877
|
+
},
|
|
878
|
+
"required": [
|
|
879
|
+
"id",
|
|
880
|
+
"cells"
|
|
881
|
+
]
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
},
|
|
885
|
+
"required": [
|
|
886
|
+
"id",
|
|
887
|
+
"title",
|
|
888
|
+
"kind",
|
|
889
|
+
"columns"
|
|
890
|
+
]
|
|
891
|
+
},
|
|
892
|
+
{
|
|
893
|
+
"type": "object",
|
|
894
|
+
"properties": {
|
|
895
|
+
"id": {
|
|
896
|
+
"type": "string",
|
|
897
|
+
"description": "Its id within this schematic. Sending an id that exists replaces that item."
|
|
898
|
+
},
|
|
899
|
+
"title": {
|
|
900
|
+
"type": "string",
|
|
901
|
+
"minLength": 1
|
|
902
|
+
},
|
|
903
|
+
"description": {
|
|
904
|
+
"description": "One line saying what it is, listed by get_schematic",
|
|
905
|
+
"type": "string"
|
|
906
|
+
},
|
|
907
|
+
"links": {
|
|
908
|
+
"description": "Links from the item as a whole",
|
|
909
|
+
"type": "array",
|
|
910
|
+
"items": {
|
|
911
|
+
"type": "object",
|
|
912
|
+
"properties": {
|
|
913
|
+
"to": {
|
|
914
|
+
"type": "string"
|
|
915
|
+
},
|
|
916
|
+
"label": {
|
|
917
|
+
"type": "string"
|
|
918
|
+
}
|
|
919
|
+
},
|
|
920
|
+
"required": [
|
|
921
|
+
"to"
|
|
922
|
+
]
|
|
923
|
+
}
|
|
924
|
+
},
|
|
925
|
+
"card": {
|
|
926
|
+
"description": "Up to 4 short lines for the item's card, the summary shown wherever it appears around the schematic, below its title and description. Instead of what the app works out (such as a table's row count), so write them when the user asks for details there, or when a few facts say more. Leave out to let the app summarise.",
|
|
927
|
+
"maxItems": 4,
|
|
928
|
+
"type": "array",
|
|
929
|
+
"items": {
|
|
930
|
+
"type": "string"
|
|
931
|
+
}
|
|
932
|
+
},
|
|
933
|
+
"kind": {
|
|
934
|
+
"type": "string",
|
|
935
|
+
"const": "image"
|
|
936
|
+
},
|
|
937
|
+
"mediaType": {
|
|
938
|
+
"type": "string",
|
|
939
|
+
"description": "image/svg+xml, image/png, image/jpeg or image/webp"
|
|
940
|
+
},
|
|
941
|
+
"data": {
|
|
942
|
+
"type": "string",
|
|
943
|
+
"description": "The image as base64, up to 5 MB"
|
|
944
|
+
},
|
|
945
|
+
"alt": {
|
|
946
|
+
"description": "What it shows",
|
|
947
|
+
"type": "string"
|
|
948
|
+
}
|
|
949
|
+
},
|
|
950
|
+
"required": [
|
|
951
|
+
"id",
|
|
952
|
+
"title",
|
|
953
|
+
"kind",
|
|
954
|
+
"mediaType",
|
|
955
|
+
"data"
|
|
956
|
+
]
|
|
957
|
+
}
|
|
958
|
+
]
|
|
959
|
+
}
|
|
960
|
+
},
|
|
961
|
+
"remove_items": {
|
|
962
|
+
"description": "The ids of items to remove",
|
|
963
|
+
"type": "array",
|
|
964
|
+
"items": {
|
|
965
|
+
"type": "string"
|
|
966
|
+
}
|
|
967
|
+
},
|
|
968
|
+
"item_order": {
|
|
969
|
+
"description": "Item ids in the order to show them. Any left out follow.",
|
|
970
|
+
"type": "array",
|
|
971
|
+
"items": {
|
|
972
|
+
"type": "string"
|
|
973
|
+
}
|
|
974
|
+
},
|
|
975
|
+
"parameters": {
|
|
976
|
+
"description": "What each use of this schematic can set. Replaces the list.",
|
|
977
|
+
"type": "array",
|
|
978
|
+
"items": {
|
|
979
|
+
"type": "object",
|
|
980
|
+
"properties": {
|
|
981
|
+
"name": {
|
|
982
|
+
"type": "string",
|
|
983
|
+
"minLength": 1
|
|
984
|
+
},
|
|
985
|
+
"description": {
|
|
986
|
+
"type": "string"
|
|
987
|
+
}
|
|
988
|
+
},
|
|
989
|
+
"required": [
|
|
990
|
+
"name"
|
|
991
|
+
]
|
|
992
|
+
}
|
|
993
|
+
},
|
|
994
|
+
"uses": {
|
|
995
|
+
"description": "The schematics this one embeds. Replaces the list.",
|
|
996
|
+
"type": "array",
|
|
997
|
+
"items": {
|
|
998
|
+
"type": "object",
|
|
999
|
+
"properties": {
|
|
1000
|
+
"id": {
|
|
1001
|
+
"type": "string",
|
|
1002
|
+
"description": "Its name within this schematic, which links use"
|
|
1003
|
+
},
|
|
1004
|
+
"schematic_id": {
|
|
1005
|
+
"type": "string",
|
|
1006
|
+
"description": "The schematic to embed, which must have an accepted draft"
|
|
1007
|
+
},
|
|
1008
|
+
"draft_id": {
|
|
1009
|
+
"description": "The draft to pin to (default: its latest)",
|
|
1010
|
+
"type": "string"
|
|
1011
|
+
},
|
|
1012
|
+
"with": {
|
|
1013
|
+
"description": "Values for the parameters it declares",
|
|
1014
|
+
"type": "object",
|
|
1015
|
+
"propertyNames": {
|
|
1016
|
+
"type": "string"
|
|
1017
|
+
},
|
|
1018
|
+
"additionalProperties": {
|
|
1019
|
+
"type": "string"
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
"required": [
|
|
1024
|
+
"id",
|
|
1025
|
+
"schematic_id"
|
|
1026
|
+
]
|
|
1027
|
+
}
|
|
1028
|
+
},
|
|
1029
|
+
"group_id": {
|
|
1030
|
+
"description": "For a new schematic: the group to put it in, from list_groups (default: Ungrouped)",
|
|
1031
|
+
"type": "string"
|
|
1032
|
+
},
|
|
1033
|
+
"goal": {
|
|
1034
|
+
"description": "The focus the user gave you for this work, in their words",
|
|
1035
|
+
"type": "string",
|
|
1036
|
+
"minLength": 1
|
|
1037
|
+
},
|
|
1038
|
+
"goal_title": {
|
|
1039
|
+
"description": "A short name for that focus",
|
|
1040
|
+
"type": "string",
|
|
1041
|
+
"minLength": 1,
|
|
1042
|
+
"maxLength": 60
|
|
1043
|
+
},
|
|
1044
|
+
"note": {
|
|
1045
|
+
"type": "string",
|
|
1046
|
+
"minLength": 1,
|
|
1047
|
+
"description": "What this proposes and why, for the user reviewing it, in a plain sentence or two. The app already says it is a proposal, so no label such as \"Proposed change:\""
|
|
1048
|
+
}
|
|
1049
|
+
},
|
|
1050
|
+
"required": [
|
|
1051
|
+
"note"
|
|
1052
|
+
],
|
|
1053
|
+
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
1054
|
+
},
|
|
1055
|
+
"annotations": {
|
|
1056
|
+
"readOnlyHint": false,
|
|
1057
|
+
"destructiveHint": false,
|
|
1058
|
+
"openWorldHint": false
|
|
1059
|
+
},
|
|
1060
|
+
"execution": {
|
|
1061
|
+
"taskSupport": "forbidden"
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
],
|
|
1065
|
+
"prompts": []
|
|
1066
|
+
}
|