@camerontaylor/paseo-protocol 0.11.2-fork.2 → 0.12.0-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/agent-message.d.ts +18 -0
  2. package/dist/agent-message.js +11 -0
  3. package/dist/agent-types.d.ts +2 -0
  4. package/dist/browser-automation/rpc-schemas.d.ts +3 -3
  5. package/dist/generated/validation/ws-outbound-schema-metadata.d.ts +16984 -0
  6. package/dist/generated/validation/ws-outbound-schema-metadata.js +246 -0
  7. package/dist/generated/validation/ws-outbound.aot.d.ts +487 -1
  8. package/dist/generated/validation/ws-outbound.aot.js +121459 -108058
  9. package/dist/messages.d.ts +971 -24
  10. package/dist/messages.js +59 -8
  11. package/dist/paseo-tool-call-detail.d.ts +1 -14
  12. package/dist/paseo-tool-call-detail.js +2 -304
  13. package/dist/paseo-tool-presentation/agent-message.d.ts +10 -0
  14. package/dist/paseo-tool-presentation/agent-message.js +22 -0
  15. package/dist/paseo-tool-presentation/catalog.d.ts +309 -0
  16. package/dist/paseo-tool-presentation/catalog.js +315 -0
  17. package/dist/paseo-tool-presentation/detail-sections.d.ts +15 -0
  18. package/dist/paseo-tool-presentation/detail-sections.js +161 -0
  19. package/dist/paseo-tool-presentation/index.d.ts +22 -0
  20. package/dist/paseo-tool-presentation/index.js +62 -0
  21. package/dist/paseo-tool-presentation/summary-text.d.ts +7 -0
  22. package/dist/paseo-tool-presentation/summary-text.js +22 -0
  23. package/dist/provider-icon-names.js +4 -0
  24. package/dist/tool-call-display.d.ts +3 -1
  25. package/dist/tool-call-display.js +16 -8
  26. package/dist/validation/ws-outbound-envelope.d.ts +16258 -0
  27. package/dist/validation/ws-outbound-envelope.js +17 -0
  28. package/dist/validation/ws-outbound.d.ts +3 -3
  29. package/dist/validation/ws-outbound.js +34 -4
  30. package/dist/websocket-message-limit.d.ts +5 -0
  31. package/dist/websocket-message-limit.js +5 -0
  32. package/package.json +1 -1
  33. package/dist/validation/ws-outbound-schema-metadata.d.ts +0 -16062
  34. package/dist/validation/ws-outbound-schema-metadata.js +0 -3
@@ -0,0 +1,309 @@
1
+ /**
2
+ * One entry per Paseo MCP tool: the timeline label, the context shown after it,
3
+ * and how the expanded details lay out the call.
4
+ *
5
+ * Labels are fixed text so truncation never hides them. Actions read verb-first
6
+ * ("Send message"); the context goes in the summary.
7
+ */
8
+ type ToolInput = Readonly<Record<string, unknown>>;
9
+ /** `targetAgent` is the target agent's title when known, else its ID. */
10
+ export type PaseoToolContext = (input: ToolInput, targetAgent: string | undefined) => unknown;
11
+ export interface PaseoToolDetailSpec {
12
+ promptField?: string;
13
+ inputOrder?: readonly string[];
14
+ outputFields?: readonly string[];
15
+ }
16
+ export interface PaseoToolEntry {
17
+ label: string;
18
+ context?: PaseoToolContext;
19
+ detail?: PaseoToolDetailSpec;
20
+ }
21
+ export declare const PASEO_TOOL_CATALOG: {
22
+ create_agent: {
23
+ label: string;
24
+ context: PaseoToolContext;
25
+ detail: {
26
+ promptField: string;
27
+ inputOrder: readonly ["title", "agentId", "provider", "workspaceId", "cwd", "sessionMode", "modeId", "background", "notifyOnFinish", "internal", "settings", "labels"];
28
+ outputFields: string[];
29
+ };
30
+ };
31
+ send_agent_prompt: {
32
+ label: string;
33
+ context: PaseoToolContext;
34
+ detail: {
35
+ promptField: string;
36
+ inputOrder: readonly ["title", "agentId", "provider", "workspaceId", "cwd", "sessionMode", "modeId", "background", "notifyOnFinish", "internal", "settings", "labels"];
37
+ outputFields: string[];
38
+ };
39
+ };
40
+ get_agent_status: {
41
+ label: string;
42
+ context: PaseoToolContext;
43
+ detail: {
44
+ inputOrder: string[];
45
+ };
46
+ };
47
+ get_agent_activity: {
48
+ label: string;
49
+ context: PaseoToolContext;
50
+ detail: {
51
+ inputOrder: string[];
52
+ };
53
+ };
54
+ list_agents: {
55
+ label: string;
56
+ detail: {
57
+ inputOrder: string[];
58
+ };
59
+ };
60
+ update_agent: {
61
+ label: string;
62
+ context: PaseoToolContext;
63
+ detail: {
64
+ inputOrder: readonly ["title", "agentId", "provider", "workspaceId", "cwd", "sessionMode", "modeId", "background", "notifyOnFinish", "internal", "settings", "labels"];
65
+ };
66
+ };
67
+ set_agent_mode: {
68
+ label: string;
69
+ context: PaseoToolContext;
70
+ detail: {
71
+ inputOrder: string[];
72
+ };
73
+ };
74
+ cancel_agent: {
75
+ label: string;
76
+ context: PaseoToolContext;
77
+ detail: {
78
+ inputOrder: string[];
79
+ };
80
+ };
81
+ archive_agent: {
82
+ label: string;
83
+ context: PaseoToolContext;
84
+ detail: {
85
+ inputOrder: string[];
86
+ };
87
+ };
88
+ kill_agent: {
89
+ label: string;
90
+ context: PaseoToolContext;
91
+ detail: {
92
+ inputOrder: string[];
93
+ };
94
+ };
95
+ list_pending_permissions: {
96
+ label: string;
97
+ };
98
+ respond_to_permission: {
99
+ label: string;
100
+ context: PaseoToolContext;
101
+ detail: {
102
+ inputOrder: string[];
103
+ };
104
+ };
105
+ create_workspace: {
106
+ label: string;
107
+ context: PaseoToolContext;
108
+ detail: {
109
+ inputOrder: readonly ["title", "workspaceId", "projectId", "isolation", "path", "mode", "worktreeSlug", "branchName", "baseBranch", "branch", "prNumber", "forge"];
110
+ outputFields: string[];
111
+ };
112
+ };
113
+ list_workspaces: {
114
+ label: string;
115
+ };
116
+ rename_workspace: {
117
+ label: string;
118
+ context: PaseoToolContext;
119
+ detail: {
120
+ inputOrder: string[];
121
+ };
122
+ };
123
+ archive_workspace: {
124
+ label: string;
125
+ context: PaseoToolContext;
126
+ detail: {
127
+ inputOrder: string[];
128
+ outputFields: string[];
129
+ };
130
+ };
131
+ list_workspace_scripts: {
132
+ label: string;
133
+ detail: {
134
+ inputOrder: string[];
135
+ };
136
+ };
137
+ start_workspace_script: {
138
+ label: string;
139
+ context: PaseoToolContext;
140
+ detail: {
141
+ inputOrder: string[];
142
+ };
143
+ };
144
+ stop_workspace_script: {
145
+ label: string;
146
+ context: PaseoToolContext;
147
+ detail: {
148
+ inputOrder: string[];
149
+ };
150
+ };
151
+ create_terminal: {
152
+ label: string;
153
+ context: PaseoToolContext;
154
+ detail: {
155
+ inputOrder: string[];
156
+ };
157
+ };
158
+ list_terminals: {
159
+ label: string;
160
+ detail: {
161
+ inputOrder: string[];
162
+ };
163
+ };
164
+ capture_terminal: {
165
+ label: string;
166
+ context: PaseoToolContext;
167
+ detail: {
168
+ inputOrder: string[];
169
+ };
170
+ };
171
+ send_terminal_keys: {
172
+ label: string;
173
+ context: PaseoToolContext;
174
+ detail: {
175
+ inputOrder: string[];
176
+ };
177
+ };
178
+ kill_terminal: {
179
+ label: string;
180
+ context: PaseoToolContext;
181
+ detail: {
182
+ inputOrder: string[];
183
+ };
184
+ };
185
+ create_schedule: {
186
+ label: string;
187
+ context: PaseoToolContext;
188
+ detail: {
189
+ promptField: string;
190
+ inputOrder: readonly ["name", "id", "cron", "timezone", "provider", "cwd", "isolation", "maxRuns", "expiresIn", "clearExpires"];
191
+ outputFields: readonly ["id", "status", "nextRunAt", "expiresAt"];
192
+ };
193
+ };
194
+ create_heartbeat: {
195
+ label: string;
196
+ context: PaseoToolContext;
197
+ detail: {
198
+ promptField: string;
199
+ inputOrder: readonly ["name", "id", "cron", "timezone", "provider", "cwd", "isolation", "maxRuns", "expiresIn", "clearExpires"];
200
+ outputFields: readonly ["id", "status", "nextRunAt", "expiresAt"];
201
+ };
202
+ };
203
+ update_schedule: {
204
+ label: string;
205
+ context: PaseoToolContext;
206
+ detail: {
207
+ promptField: string;
208
+ inputOrder: readonly ["name", "id", "cron", "timezone", "provider", "cwd", "isolation", "maxRuns", "expiresIn", "clearExpires"];
209
+ };
210
+ };
211
+ list_schedules: {
212
+ label: string;
213
+ };
214
+ inspect_schedule: {
215
+ label: string;
216
+ context: PaseoToolContext;
217
+ detail: {
218
+ inputOrder: string[];
219
+ };
220
+ };
221
+ schedule_logs: {
222
+ label: string;
223
+ context: PaseoToolContext;
224
+ detail: {
225
+ inputOrder: string[];
226
+ };
227
+ };
228
+ run_schedule_once: {
229
+ label: string;
230
+ context: PaseoToolContext;
231
+ detail: {
232
+ inputOrder: string[];
233
+ };
234
+ };
235
+ pause_schedule: {
236
+ label: string;
237
+ context: PaseoToolContext;
238
+ detail: {
239
+ inputOrder: string[];
240
+ };
241
+ };
242
+ resume_schedule: {
243
+ label: string;
244
+ context: PaseoToolContext;
245
+ detail: {
246
+ inputOrder: string[];
247
+ };
248
+ };
249
+ delete_schedule: {
250
+ label: string;
251
+ context: PaseoToolContext;
252
+ detail: {
253
+ inputOrder: string[];
254
+ };
255
+ };
256
+ delete_heartbeat: {
257
+ label: string;
258
+ context: PaseoToolContext;
259
+ detail: {
260
+ inputOrder: string[];
261
+ };
262
+ };
263
+ list_providers: {
264
+ label: string;
265
+ };
266
+ list_models: {
267
+ label: string;
268
+ context: PaseoToolContext;
269
+ detail: {
270
+ inputOrder: string[];
271
+ };
272
+ };
273
+ list_profiles: {
274
+ label: string;
275
+ };
276
+ inspect_provider: {
277
+ label: string;
278
+ context: PaseoToolContext;
279
+ detail: {
280
+ inputOrder: string[];
281
+ };
282
+ };
283
+ browser_list_tabs: PaseoToolEntry;
284
+ browser_new_tab: PaseoToolEntry;
285
+ browser_close_tab: PaseoToolEntry;
286
+ browser_navigate: PaseoToolEntry;
287
+ browser_back: PaseoToolEntry;
288
+ browser_forward: PaseoToolEntry;
289
+ browser_reload: PaseoToolEntry;
290
+ browser_snapshot: PaseoToolEntry;
291
+ browser_screenshot: PaseoToolEntry;
292
+ browser_click: PaseoToolEntry;
293
+ browser_hover: PaseoToolEntry;
294
+ browser_drag: PaseoToolEntry;
295
+ browser_fill: PaseoToolEntry;
296
+ browser_select: PaseoToolEntry;
297
+ browser_type: PaseoToolEntry;
298
+ browser_keypress: PaseoToolEntry;
299
+ browser_upload: PaseoToolEntry;
300
+ browser_wait: PaseoToolEntry;
301
+ browser_scroll: PaseoToolEntry;
302
+ browser_resize: PaseoToolEntry;
303
+ browser_logs: PaseoToolEntry;
304
+ browser_evaluate: PaseoToolEntry;
305
+ };
306
+ export type PaseoToolName = keyof typeof PASEO_TOOL_CATALOG;
307
+ export declare function getPaseoToolEntry(leafName: string): PaseoToolEntry | undefined;
308
+ export {};
309
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1,315 @@
1
+ /**
2
+ * One entry per Paseo MCP tool: the timeline label, the context shown after it,
3
+ * and how the expanded details lay out the call.
4
+ *
5
+ * Labels are fixed text so truncation never hides them. Actions read verb-first
6
+ * ("Send message"); the context goes in the summary.
7
+ */
8
+ const WORKSPACE_FIELDS = [
9
+ "title",
10
+ "workspaceId",
11
+ "projectId",
12
+ "isolation",
13
+ "path",
14
+ "mode",
15
+ "worktreeSlug",
16
+ "branchName",
17
+ "baseBranch",
18
+ "branch",
19
+ "prNumber",
20
+ "forge",
21
+ ];
22
+ const AGENT_FIELDS = [
23
+ "title",
24
+ "agentId",
25
+ "provider",
26
+ "workspaceId",
27
+ "cwd",
28
+ "sessionMode",
29
+ "modeId",
30
+ "background",
31
+ "notifyOnFinish",
32
+ "internal",
33
+ "settings",
34
+ "labels",
35
+ ];
36
+ const AUTOMATION_FIELDS = [
37
+ "name",
38
+ "id",
39
+ "cron",
40
+ "timezone",
41
+ "provider",
42
+ "cwd",
43
+ "isolation",
44
+ "maxRuns",
45
+ "expiresIn",
46
+ "clearExpires",
47
+ ];
48
+ const BROWSER_FIELDS = [
49
+ "browserId",
50
+ "url",
51
+ "ref",
52
+ "sourceRef",
53
+ "targetRef",
54
+ "value",
55
+ "text",
56
+ "key",
57
+ "button",
58
+ "doubleClick",
59
+ "modifiers",
60
+ "filePaths",
61
+ "fullPage",
62
+ "maxEntries",
63
+ "timeoutMs",
64
+ "deltaX",
65
+ "deltaY",
66
+ "width",
67
+ "height",
68
+ "function",
69
+ ];
70
+ const AUTOMATION_OUTPUT = ["id", "status", "nextRunAt", "expiresAt"];
71
+ function field(...keys) {
72
+ return (input) => keys.map((key) => input[key]).find(isPresent);
73
+ }
74
+ function targetAgent() {
75
+ return (_input, agent) => agent;
76
+ }
77
+ function fieldOrTargetAgent(key) {
78
+ return (input, agent) => (isPresent(input[key]) ? input[key] : agent);
79
+ }
80
+ function workspaceContext() {
81
+ return (input) => [input.title, input.branchName, input.branch, baseName(input.path)].find(isPresent);
82
+ }
83
+ function viewportContext() {
84
+ return (input) => typeof input.width === "number" && typeof input.height === "number"
85
+ ? `${input.width}×${input.height}`
86
+ : undefined;
87
+ }
88
+ function isPresent(value) {
89
+ if (typeof value === "string")
90
+ return value.trim().length > 0;
91
+ if (Array.isArray(value))
92
+ return value.length > 0;
93
+ return typeof value === "number";
94
+ }
95
+ function baseName(value) {
96
+ if (typeof value !== "string")
97
+ return undefined;
98
+ return value.split(/[\\/]/).findLast((segment) => segment.length > 0);
99
+ }
100
+ function browser(label, context) {
101
+ return { label, ...(context ? { context } : {}), detail: { inputOrder: BROWSER_FIELDS } };
102
+ }
103
+ export const PASEO_TOOL_CATALOG = {
104
+ // Agents
105
+ create_agent: {
106
+ label: "Create agent",
107
+ context: field("title", "initialPrompt"),
108
+ detail: {
109
+ promptField: "initialPrompt",
110
+ inputOrder: AGENT_FIELDS,
111
+ outputFields: ["agentId", "status", "currentModeId", "cwd"],
112
+ },
113
+ },
114
+ send_agent_prompt: {
115
+ label: "Send message",
116
+ context: field("prompt"),
117
+ detail: {
118
+ promptField: "prompt",
119
+ inputOrder: AGENT_FIELDS,
120
+ outputFields: ["status", "lastMessage", "permission"],
121
+ },
122
+ },
123
+ get_agent_status: {
124
+ label: "Check agent",
125
+ context: targetAgent(),
126
+ detail: { inputOrder: ["agentId"] },
127
+ },
128
+ get_agent_activity: {
129
+ label: "Read agent activity",
130
+ context: targetAgent(),
131
+ detail: { inputOrder: ["agentId", "limit"] },
132
+ },
133
+ list_agents: {
134
+ label: "List agents",
135
+ detail: { inputOrder: ["cwd", "statuses", "sinceHours", "limit", "includeArchived"] },
136
+ },
137
+ update_agent: {
138
+ label: "Update agent",
139
+ context: fieldOrTargetAgent("name"),
140
+ detail: { inputOrder: AGENT_FIELDS },
141
+ },
142
+ set_agent_mode: {
143
+ label: "Set agent mode",
144
+ context: field("modeId"),
145
+ detail: { inputOrder: ["agentId", "modeId"] },
146
+ },
147
+ cancel_agent: {
148
+ label: "Cancel agent",
149
+ context: targetAgent(),
150
+ detail: { inputOrder: ["agentId"] },
151
+ },
152
+ archive_agent: {
153
+ label: "Archive agent",
154
+ context: targetAgent(),
155
+ detail: { inputOrder: ["agentId"] },
156
+ },
157
+ kill_agent: { label: "Kill agent", context: targetAgent(), detail: { inputOrder: ["agentId"] } },
158
+ list_pending_permissions: { label: "List permissions" },
159
+ respond_to_permission: {
160
+ label: "Respond to permission",
161
+ context: targetAgent(),
162
+ detail: { inputOrder: ["agentId", "requestId", "response"] },
163
+ },
164
+ // Workspaces and scripts
165
+ create_workspace: {
166
+ label: "Create workspace",
167
+ context: workspaceContext(),
168
+ detail: { inputOrder: WORKSPACE_FIELDS, outputFields: ["workspaceId", "projectId"] },
169
+ },
170
+ list_workspaces: { label: "List workspaces" },
171
+ rename_workspace: {
172
+ label: "Rename workspace",
173
+ context: field("title"),
174
+ detail: { inputOrder: ["title", "workspaceId"] },
175
+ },
176
+ archive_workspace: {
177
+ label: "Archive workspace",
178
+ context: field("workspaceId"),
179
+ detail: {
180
+ inputOrder: ["workspaceId"],
181
+ outputFields: ["workspaceId", "archivedAgentIds", "removedDirectory"],
182
+ },
183
+ },
184
+ list_workspace_scripts: { label: "List scripts", detail: { inputOrder: ["workspaceId"] } },
185
+ start_workspace_script: {
186
+ label: "Start script",
187
+ context: field("scriptName"),
188
+ detail: { inputOrder: ["workspaceId", "scriptName"] },
189
+ },
190
+ stop_workspace_script: {
191
+ label: "Stop script",
192
+ context: field("scriptName"),
193
+ detail: { inputOrder: ["workspaceId", "scriptName"] },
194
+ },
195
+ // Terminals
196
+ create_terminal: {
197
+ label: "Create terminal",
198
+ context: field("name", "command"),
199
+ detail: { inputOrder: ["cwd", "workspaceId", "name", "command"] },
200
+ },
201
+ list_terminals: { label: "List terminals", detail: { inputOrder: ["cwd", "all"] } },
202
+ capture_terminal: {
203
+ label: "Read terminal",
204
+ context: field("terminalId"),
205
+ detail: { inputOrder: ["terminalId", "lines"] },
206
+ },
207
+ send_terminal_keys: {
208
+ label: "Send keys",
209
+ context: field("keys"),
210
+ detail: { inputOrder: ["terminalId", "keys", "literal"] },
211
+ },
212
+ kill_terminal: {
213
+ label: "Kill terminal",
214
+ context: field("terminalId"),
215
+ detail: { inputOrder: ["terminalId"] },
216
+ },
217
+ // Schedules and heartbeats
218
+ create_schedule: {
219
+ label: "Create schedule",
220
+ context: field("name", "cron"),
221
+ detail: {
222
+ promptField: "prompt",
223
+ inputOrder: AUTOMATION_FIELDS,
224
+ outputFields: AUTOMATION_OUTPUT,
225
+ },
226
+ },
227
+ create_heartbeat: {
228
+ label: "Create heartbeat",
229
+ context: field("name", "cron"),
230
+ detail: {
231
+ promptField: "prompt",
232
+ inputOrder: AUTOMATION_FIELDS,
233
+ outputFields: AUTOMATION_OUTPUT,
234
+ },
235
+ },
236
+ update_schedule: {
237
+ label: "Update schedule",
238
+ context: field("name", "id"),
239
+ detail: { promptField: "prompt", inputOrder: AUTOMATION_FIELDS },
240
+ },
241
+ list_schedules: { label: "List schedules" },
242
+ inspect_schedule: {
243
+ label: "Inspect schedule",
244
+ context: field("id"),
245
+ detail: { inputOrder: ["id"] },
246
+ },
247
+ schedule_logs: {
248
+ label: "Read schedule logs",
249
+ context: field("id"),
250
+ detail: { inputOrder: ["id"] },
251
+ },
252
+ run_schedule_once: {
253
+ label: "Run schedule",
254
+ context: field("id"),
255
+ detail: { inputOrder: ["id"] },
256
+ },
257
+ pause_schedule: { label: "Pause schedule", context: field("id"), detail: { inputOrder: ["id"] } },
258
+ resume_schedule: {
259
+ label: "Resume schedule",
260
+ context: field("id"),
261
+ detail: { inputOrder: ["id"] },
262
+ },
263
+ delete_schedule: {
264
+ label: "Delete schedule",
265
+ context: field("id"),
266
+ detail: { inputOrder: ["id"] },
267
+ },
268
+ delete_heartbeat: {
269
+ label: "Delete heartbeat",
270
+ context: field("id"),
271
+ detail: { inputOrder: ["id"] },
272
+ },
273
+ // Providers
274
+ list_providers: { label: "List providers" },
275
+ list_models: {
276
+ label: "List models",
277
+ context: field("provider"),
278
+ detail: { inputOrder: ["provider"] },
279
+ },
280
+ list_profiles: { label: "List profiles" },
281
+ inspect_provider: {
282
+ label: "Inspect provider",
283
+ context: field("provider"),
284
+ detail: { inputOrder: ["provider", "cwd", "settings"] },
285
+ },
286
+ // Browser
287
+ browser_list_tabs: browser("List browser tabs"),
288
+ browser_new_tab: browser("Open browser tab", field("url")),
289
+ browser_close_tab: browser("Close browser tab", field("browserId")),
290
+ browser_navigate: browser("Navigate", field("url")),
291
+ browser_back: browser("Go back"),
292
+ browser_forward: browser("Go forward"),
293
+ browser_reload: browser("Reload page"),
294
+ browser_snapshot: browser("Snapshot page"),
295
+ browser_screenshot: browser("Take screenshot"),
296
+ browser_click: browser("Click element", field("ref")),
297
+ browser_hover: browser("Hover element", field("ref")),
298
+ browser_drag: browser("Drag element", field("sourceRef")),
299
+ browser_fill: browser("Fill field", field("ref")),
300
+ browser_select: browser("Select option", field("value", "ref")),
301
+ browser_type: browser("Type text", field("text")),
302
+ browser_keypress: browser("Press key", field("key")),
303
+ browser_upload: browser("Upload files", field("filePaths")),
304
+ browser_wait: browser("Wait for page", field("text", "url")),
305
+ browser_scroll: browser("Scroll page"),
306
+ browser_resize: browser("Resize browser", viewportContext()),
307
+ browser_logs: browser("Read browser logs"),
308
+ browser_evaluate: browser("Run JavaScript", field("function")),
309
+ };
310
+ export function getPaseoToolEntry(leafName) {
311
+ return Object.prototype.hasOwnProperty.call(PASEO_TOOL_CATALOG, leafName)
312
+ ? PASEO_TOOL_CATALOG[leafName]
313
+ : undefined;
314
+ }
315
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1,15 @@
1
+ export interface PaseoToolDetailField {
2
+ label: string;
3
+ value: string;
4
+ }
5
+ export type PaseoToolDetailSection = {
6
+ kind: "prose";
7
+ title: string;
8
+ text: string;
9
+ } | {
10
+ kind: "fields";
11
+ title: string;
12
+ fields: PaseoToolDetailField[];
13
+ };
14
+ export declare function buildPaseoToolDetailSections(toolName: string, input: unknown, output: unknown): PaseoToolDetailSection[] | null;
15
+ //# sourceMappingURL=detail-sections.d.ts.map