@camerontaylor/paseo-protocol 0.12.0-beta.1.fork.1 → 0.13.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.
- package/dist/addresses.d.ts +6 -0
- package/dist/addresses.js +2 -0
- package/dist/agent-labels.d.ts +4 -0
- package/dist/agent-labels.js +17 -0
- package/dist/agent-message.d.ts +1 -0
- package/dist/agent-message.js +1 -0
- package/dist/binary-frames/demux.d.ts +4 -0
- package/dist/binary-frames/demux.js +5 -0
- package/dist/binary-frames/host-route.d.ts +12 -0
- package/dist/binary-frames/host-route.js +36 -0
- package/dist/binary-frames/index.d.ts +1 -0
- package/dist/binary-frames/index.js +1 -0
- package/dist/browser-automation/capabilities.d.ts +1 -1
- package/dist/browser-automation/rpc-schemas.d.ts +1 -1
- package/dist/client-capabilities.d.ts +1 -0
- package/dist/client-capabilities.js +1 -0
- package/dist/connection-offer.d.ts +2 -0
- package/dist/connection-offer.js +3 -0
- package/dist/daemon-endpoints.js +8 -0
- package/dist/generated/validation/ws-outbound-schema-metadata.d.ts +858 -341
- package/dist/generated/validation/ws-outbound-schema-metadata.js +10 -0
- package/dist/generated/validation/ws-outbound.aot.d.ts +20 -0
- package/dist/generated/validation/ws-outbound.aot.js +117355 -115207
- package/dist/host-target.d.ts +18 -0
- package/dist/host-target.js +118 -0
- package/dist/hosts.d.ts +303 -0
- package/dist/hosts.js +117 -0
- package/dist/messages.d.ts +2698 -540
- package/dist/messages.js +83 -9
- package/dist/paseo-tool-call-detail.d.ts +1 -14
- package/dist/paseo-tool-call-detail.js +2 -306
- package/dist/paseo-tool-presentation/agent-message.d.ts +10 -0
- package/dist/paseo-tool-presentation/agent-message.js +22 -0
- package/dist/paseo-tool-presentation/catalog.d.ts +312 -0
- package/dist/paseo-tool-presentation/catalog.js +316 -0
- package/dist/paseo-tool-presentation/detail-sections.d.ts +15 -0
- package/dist/paseo-tool-presentation/detail-sections.js +161 -0
- package/dist/paseo-tool-presentation/index.d.ts +22 -0
- package/dist/paseo-tool-presentation/index.js +62 -0
- package/dist/paseo-tool-presentation/summary-text.d.ts +7 -0
- package/dist/paseo-tool-presentation/summary-text.js +22 -0
- package/dist/plugin-registry.d.ts +21 -0
- package/dist/plugin-registry.js +11 -1
- package/dist/provider-icon-names.js +3 -0
- package/dist/schedule/rpc-schemas.d.ts +4 -4
- package/dist/schedule/types.d.ts +1 -1
- package/dist/tool-call-display.d.ts +2 -0
- package/dist/tool-call-display.js +15 -11
- package/dist/validation/ws-outbound-envelope.d.ts +587 -100
- package/package.json +5 -1
- package/dist/agent-message-display.d.ts +0 -8
- package/dist/agent-message-display.js +0 -20
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { getPaseoToolLeafName } from "../tool-name-normalization.js";
|
|
2
|
+
import { getPaseoToolEntry } from "./catalog.js";
|
|
3
|
+
const FIELD_LABELS = {
|
|
4
|
+
agentId: "Agent",
|
|
5
|
+
archivedAgentIds: "Archived agents",
|
|
6
|
+
baseBranch: "Base branch",
|
|
7
|
+
branchName: "New branch",
|
|
8
|
+
browserId: "Browser tab",
|
|
9
|
+
clearExpires: "Clear expiry",
|
|
10
|
+
currentModeId: "Current mode",
|
|
11
|
+
cwd: "Working directory",
|
|
12
|
+
deltaX: "Horizontal delta",
|
|
13
|
+
deltaY: "Vertical delta",
|
|
14
|
+
doubleClick: "Double click",
|
|
15
|
+
expiresIn: "Expires in",
|
|
16
|
+
expiresAt: "Expires",
|
|
17
|
+
filePaths: "Files",
|
|
18
|
+
fullPage: "Full page",
|
|
19
|
+
initialPrompt: "Prompt",
|
|
20
|
+
id: "ID",
|
|
21
|
+
lastMessage: "Last message",
|
|
22
|
+
maxEntries: "Maximum entries",
|
|
23
|
+
maxRuns: "Maximum runs",
|
|
24
|
+
modeId: "Mode",
|
|
25
|
+
newMode: "New mode",
|
|
26
|
+
nextRunAt: "Next run",
|
|
27
|
+
notifyOnFinish: "Notify on finish",
|
|
28
|
+
internal: "Internal",
|
|
29
|
+
prNumber: "Change request",
|
|
30
|
+
projectId: "Project",
|
|
31
|
+
removedDirectory: "Removed directory",
|
|
32
|
+
requestId: "Request",
|
|
33
|
+
scriptName: "Script",
|
|
34
|
+
sessionMode: "Session mode",
|
|
35
|
+
sinceHours: "Since (hours)",
|
|
36
|
+
sourceRef: "Source",
|
|
37
|
+
targetRef: "Target",
|
|
38
|
+
terminalId: "Terminal",
|
|
39
|
+
thinkingOptionId: "Thinking",
|
|
40
|
+
timeoutMs: "Timeout (ms)",
|
|
41
|
+
updateCount: "Updates",
|
|
42
|
+
workspaceId: "Workspace",
|
|
43
|
+
worktreeSlug: "Worktree",
|
|
44
|
+
};
|
|
45
|
+
function isRecord(value) {
|
|
46
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
47
|
+
}
|
|
48
|
+
function humanizeKey(key) {
|
|
49
|
+
const known = FIELD_LABELS[key];
|
|
50
|
+
if (known)
|
|
51
|
+
return known;
|
|
52
|
+
const words = key
|
|
53
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
54
|
+
.replace(/[._-]+/g, " ")
|
|
55
|
+
.split(" ")
|
|
56
|
+
.filter(Boolean);
|
|
57
|
+
const sentence = words.join(" ").toLowerCase();
|
|
58
|
+
return `${sentence[0]?.toUpperCase() ?? ""}${sentence.slice(1)}`;
|
|
59
|
+
}
|
|
60
|
+
function formatValue(value, depth = 0) {
|
|
61
|
+
if (value === null)
|
|
62
|
+
return "None";
|
|
63
|
+
if (value === undefined)
|
|
64
|
+
return "";
|
|
65
|
+
if (typeof value === "boolean")
|
|
66
|
+
return value ? "Yes" : "No";
|
|
67
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint") {
|
|
68
|
+
return String(value);
|
|
69
|
+
}
|
|
70
|
+
if (Array.isArray(value)) {
|
|
71
|
+
if (value.length === 0)
|
|
72
|
+
return "None";
|
|
73
|
+
return value.map((item) => `• ${indentMultiline(formatValue(item, depth + 1), 2)}`).join("\n");
|
|
74
|
+
}
|
|
75
|
+
if (isRecord(value)) {
|
|
76
|
+
const entries = Object.entries(value).filter(([, child]) => child !== undefined);
|
|
77
|
+
if (entries.length === 0)
|
|
78
|
+
return "None";
|
|
79
|
+
return entries
|
|
80
|
+
.map(([key, child]) => {
|
|
81
|
+
const formatted = formatValue(child, depth + 1);
|
|
82
|
+
return `${humanizeKey(key)}: ${indentMultiline(formatted, 2)}`;
|
|
83
|
+
})
|
|
84
|
+
.join("\n");
|
|
85
|
+
}
|
|
86
|
+
return String(value);
|
|
87
|
+
}
|
|
88
|
+
function indentMultiline(value, spaces) {
|
|
89
|
+
const indentation = " ".repeat(spaces);
|
|
90
|
+
return value.replace(/\n/g, `\n${indentation}`);
|
|
91
|
+
}
|
|
92
|
+
function orderedEntries(value, order = [], omittedKey, includedKeys) {
|
|
93
|
+
const included = includedKeys ? new Set(includedKeys) : null;
|
|
94
|
+
const keys = Object.keys(value).filter((key) => key !== omittedKey && value[key] !== undefined && (!included || included.has(key)));
|
|
95
|
+
const rank = new Map(order.map((key, index) => [key, index]));
|
|
96
|
+
keys.sort((left, right) => {
|
|
97
|
+
const leftRank = rank.get(left) ?? Number.MAX_SAFE_INTEGER;
|
|
98
|
+
const rightRank = rank.get(right) ?? Number.MAX_SAFE_INTEGER;
|
|
99
|
+
return leftRank - rightRank || left.localeCompare(right);
|
|
100
|
+
});
|
|
101
|
+
return keys.map((key) => [key, value[key]]);
|
|
102
|
+
}
|
|
103
|
+
function fieldsFromValue(value, order, omittedKey, includedKeys) {
|
|
104
|
+
if (value === null || value === undefined)
|
|
105
|
+
return [];
|
|
106
|
+
if (!isRecord(value)) {
|
|
107
|
+
const formatted = formatValue(value);
|
|
108
|
+
return formatted ? [{ label: "Value", value: formatted }] : [];
|
|
109
|
+
}
|
|
110
|
+
return orderedEntries(value, order, omittedKey, includedKeys).map(([key, child]) => ({
|
|
111
|
+
label: humanizeKey(key),
|
|
112
|
+
value: formatValue(child),
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
function parseJsonText(value) {
|
|
116
|
+
if (typeof value !== "string")
|
|
117
|
+
return undefined;
|
|
118
|
+
try {
|
|
119
|
+
return JSON.parse(value);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function unwrapMcpResult(output) {
|
|
126
|
+
if (!isRecord(output))
|
|
127
|
+
return output;
|
|
128
|
+
if (output.structuredContent !== undefined) {
|
|
129
|
+
return output.structuredContent;
|
|
130
|
+
}
|
|
131
|
+
if (Array.isArray(output.content) && output.content.length === 1) {
|
|
132
|
+
const item = output.content[0];
|
|
133
|
+
if (isRecord(item) && item.type === "text") {
|
|
134
|
+
return parseJsonText(item.text) ?? item.text;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return output;
|
|
138
|
+
}
|
|
139
|
+
export function buildPaseoToolDetailSections(toolName, input, output) {
|
|
140
|
+
const leafName = getPaseoToolLeafName(toolName);
|
|
141
|
+
if (!leafName)
|
|
142
|
+
return null;
|
|
143
|
+
const spec = getPaseoToolEntry(leafName)?.detail ?? {};
|
|
144
|
+
const sections = [];
|
|
145
|
+
if (spec.promptField && isRecord(input)) {
|
|
146
|
+
const prompt = input[spec.promptField];
|
|
147
|
+
if (typeof prompt === "string" && prompt.length > 0) {
|
|
148
|
+
sections.push({ kind: "prose", title: "Prompt", text: prompt });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const inputFields = fieldsFromValue(input, spec.inputOrder, spec.promptField);
|
|
152
|
+
if (inputFields.length > 0) {
|
|
153
|
+
sections.push({ kind: "fields", title: "Details", fields: inputFields });
|
|
154
|
+
}
|
|
155
|
+
const outputFields = fieldsFromValue(unwrapMcpResult(output), spec.outputFields, undefined, spec.outputFields);
|
|
156
|
+
if (outputFields.length > 0) {
|
|
157
|
+
sections.push({ kind: "fields", title: "Result", fields: outputFields });
|
|
158
|
+
}
|
|
159
|
+
return sections;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=detail-sections.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ToolCallDetail } from "../agent-types.js";
|
|
2
|
+
import { type PaseoToolName } from "./catalog.js";
|
|
3
|
+
export { buildAgentMessageDisplay, type AgentMessageDisplay } from "./agent-message.js";
|
|
4
|
+
export { buildPaseoToolDetailSections, type PaseoToolDetailField, type PaseoToolDetailSection, } from "./detail-sections.js";
|
|
5
|
+
export { MAX_SUMMARY_CHARS } from "./summary-text.js";
|
|
6
|
+
export type { PaseoToolName };
|
|
7
|
+
export interface PaseoToolDisplayInput {
|
|
8
|
+
toolName: string;
|
|
9
|
+
detail: ToolCallDetail;
|
|
10
|
+
/** Title of the agent named by the call's `agentId`, when the caller knows it. */
|
|
11
|
+
targetAgentTitle?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface PaseoToolDisplay {
|
|
14
|
+
displayName: string;
|
|
15
|
+
summary?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const PASEO_TOOL_NAMES: readonly PaseoToolName[];
|
|
18
|
+
/** Returns null for tools outside the Paseo namespace. */
|
|
19
|
+
export declare function buildPaseoToolDisplay(input: PaseoToolDisplayInput): PaseoToolDisplay | null;
|
|
20
|
+
/** The agent a Paseo call acts on, so callers can resolve its title. */
|
|
21
|
+
export declare function getPaseoToolTargetAgentId(toolName: string, detail: ToolCallDetail | undefined): string | null;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getPaseoToolLeafName, isPaseoToolName } from "../tool-name-normalization.js";
|
|
2
|
+
import { getPaseoToolEntry, PASEO_TOOL_CATALOG } from "./catalog.js";
|
|
3
|
+
import { toSummaryText } from "./summary-text.js";
|
|
4
|
+
export { buildAgentMessageDisplay } from "./agent-message.js";
|
|
5
|
+
export { buildPaseoToolDetailSections, } from "./detail-sections.js";
|
|
6
|
+
export { MAX_SUMMARY_CHARS } from "./summary-text.js";
|
|
7
|
+
export const PASEO_TOOL_NAMES = Object.keys(PASEO_TOOL_CATALOG);
|
|
8
|
+
/** Returns null for tools outside the Paseo namespace. */
|
|
9
|
+
export function buildPaseoToolDisplay(input) {
|
|
10
|
+
const leafName = paseoLeafName(input.toolName);
|
|
11
|
+
if (!leafName)
|
|
12
|
+
return null;
|
|
13
|
+
const entry = getPaseoToolEntry(leafName);
|
|
14
|
+
if (!entry)
|
|
15
|
+
return { displayName: humanizeLeafName(leafName) };
|
|
16
|
+
const toolInput = readToolInput(input.detail);
|
|
17
|
+
const targetAgent = input.targetAgentTitle ?? readString(toolInput.agentId);
|
|
18
|
+
const summary = formatContext(entry.context?.(toolInput, targetAgent));
|
|
19
|
+
return { displayName: entry.label, ...(summary ? { summary } : {}) };
|
|
20
|
+
}
|
|
21
|
+
/** The agent a Paseo call acts on, so callers can resolve its title. */
|
|
22
|
+
export function getPaseoToolTargetAgentId(toolName, detail) {
|
|
23
|
+
if (!detail || !paseoLeafName(toolName))
|
|
24
|
+
return null;
|
|
25
|
+
return readString(readToolInput(detail).agentId) ?? null;
|
|
26
|
+
}
|
|
27
|
+
function paseoLeafName(toolName) {
|
|
28
|
+
return isPaseoToolName(toolName) ? getPaseoToolLeafName(toolName) : null;
|
|
29
|
+
}
|
|
30
|
+
function readToolInput(detail) {
|
|
31
|
+
if (detail.type !== "unknown")
|
|
32
|
+
return {};
|
|
33
|
+
const value = detail.input;
|
|
34
|
+
return typeof value === "object" && value !== null && !Array.isArray(value)
|
|
35
|
+
? value
|
|
36
|
+
: {};
|
|
37
|
+
}
|
|
38
|
+
function readString(value) {
|
|
39
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
40
|
+
}
|
|
41
|
+
function formatContext(value) {
|
|
42
|
+
if (typeof value === "string")
|
|
43
|
+
return toSummaryText(value);
|
|
44
|
+
if (typeof value === "number")
|
|
45
|
+
return String(value);
|
|
46
|
+
if (Array.isArray(value)) {
|
|
47
|
+
const [first, ...rest] = value;
|
|
48
|
+
const head = typeof first === "string" ? toSummaryText(first) : undefined;
|
|
49
|
+
if (!head)
|
|
50
|
+
return undefined;
|
|
51
|
+
return rest.length > 0 ? `${head} +${rest.length}` : head;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
function humanizeLeafName(leafName) {
|
|
56
|
+
const sentence = leafName
|
|
57
|
+
.replace(/[._-]+/g, " ")
|
|
58
|
+
.trim()
|
|
59
|
+
.toLowerCase();
|
|
60
|
+
return `${sentence[0]?.toUpperCase() ?? ""}${sentence.slice(1)}`;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts and results can be one enormous line. Summaries are capped here so no
|
|
3
|
+
* consumer relies on its renderer to clip them.
|
|
4
|
+
*/
|
|
5
|
+
export declare const MAX_SUMMARY_CHARS = 120;
|
|
6
|
+
export declare function toSummaryText(value: string): string | undefined;
|
|
7
|
+
//# sourceMappingURL=summary-text.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts and results can be one enormous line. Summaries are capped here so no
|
|
3
|
+
* consumer relies on its renderer to clip them.
|
|
4
|
+
*/
|
|
5
|
+
export const MAX_SUMMARY_CHARS = 120;
|
|
6
|
+
// Bounds the whitespace scan: inputs can be megabytes.
|
|
7
|
+
const SCAN_WINDOW_CHARS = MAX_SUMMARY_CHARS * 4;
|
|
8
|
+
export function toSummaryText(value) {
|
|
9
|
+
const isPartial = value.length > SCAN_WINDOW_CHARS;
|
|
10
|
+
const collapsed = value.slice(0, SCAN_WINDOW_CHARS).replace(/\s+/g, " ").trim();
|
|
11
|
+
if (!collapsed)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (collapsed.length <= MAX_SUMMARY_CHARS && !isPartial)
|
|
14
|
+
return collapsed;
|
|
15
|
+
const kept = dropTrailingHighSurrogate(collapsed.slice(0, MAX_SUMMARY_CHARS - 1)).trimEnd();
|
|
16
|
+
return `${kept}…`;
|
|
17
|
+
}
|
|
18
|
+
function dropTrailingHighSurrogate(text) {
|
|
19
|
+
const last = text.charCodeAt(text.length - 1);
|
|
20
|
+
return last >= 0xd800 && last <= 0xdbff ? text.slice(0, -1) : text;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=summary-text.js.map
|
|
@@ -19,10 +19,22 @@ export declare const PluginRegistryArtifactSchema: z.ZodDiscriminatedUnion<[z.Zo
|
|
|
19
19
|
commit: z.ZodString;
|
|
20
20
|
pluginPath: z.ZodOptional<z.ZodString>;
|
|
21
21
|
}, z.core.$strip>], "kind">;
|
|
22
|
+
/**
|
|
23
|
+
* Listing text in other languages, keyed by language tag such as `zh-CN`. A missing field falls back
|
|
24
|
+
* to the English `name` or `description`, which stay required so older clients keep working.
|
|
25
|
+
*/
|
|
26
|
+
export declare const PluginListingTranslationsSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
27
|
+
name: z.ZodOptional<z.ZodString>;
|
|
28
|
+
description: z.ZodOptional<z.ZodString>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
22
30
|
export declare const PublishedPluginSchema: z.ZodObject<{
|
|
23
31
|
id: z.ZodString;
|
|
24
32
|
name: z.ZodString;
|
|
25
33
|
description: z.ZodString;
|
|
34
|
+
translations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
35
|
+
name: z.ZodOptional<z.ZodString>;
|
|
36
|
+
description: z.ZodOptional<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>>>;
|
|
26
38
|
license: z.ZodOptional<z.ZodString>;
|
|
27
39
|
categories: z.ZodArray<z.ZodString>;
|
|
28
40
|
author: z.ZodObject<{
|
|
@@ -60,6 +72,10 @@ export declare const PublishedPluginDetailSchema: z.ZodObject<{
|
|
|
60
72
|
id: z.ZodString;
|
|
61
73
|
name: z.ZodString;
|
|
62
74
|
description: z.ZodString;
|
|
75
|
+
translations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
76
|
+
name: z.ZodOptional<z.ZodString>;
|
|
77
|
+
description: z.ZodOptional<z.ZodString>;
|
|
78
|
+
}, z.core.$strip>>>;
|
|
63
79
|
license: z.ZodOptional<z.ZodString>;
|
|
64
80
|
categories: z.ZodArray<z.ZodString>;
|
|
65
81
|
author: z.ZodObject<{
|
|
@@ -91,6 +107,7 @@ export declare const PublishedPluginDetailSchema: z.ZodObject<{
|
|
|
91
107
|
publishedAt: z.ZodString;
|
|
92
108
|
installs: z.ZodOptional<z.ZodNumber>;
|
|
93
109
|
readme: z.ZodString;
|
|
110
|
+
overviewTranslations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
94
111
|
}, z.core.$strip>;
|
|
95
112
|
export declare const PluginRegistryIndexSchema: z.ZodObject<{
|
|
96
113
|
schemaVersion: z.ZodLiteral<1>;
|
|
@@ -107,6 +124,10 @@ export declare const PluginRegistryIndexSchema: z.ZodObject<{
|
|
|
107
124
|
id: z.ZodString;
|
|
108
125
|
name: z.ZodString;
|
|
109
126
|
description: z.ZodString;
|
|
127
|
+
translations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
128
|
+
name: z.ZodOptional<z.ZodString>;
|
|
129
|
+
description: z.ZodOptional<z.ZodString>;
|
|
130
|
+
}, z.core.$strip>>>;
|
|
110
131
|
license: z.ZodOptional<z.ZodString>;
|
|
111
132
|
categories: z.ZodArray<z.ZodString>;
|
|
112
133
|
author: z.ZodObject<{
|
package/dist/plugin-registry.js
CHANGED
|
@@ -25,10 +25,16 @@ export const PluginRegistryArtifactSchema = z.discriminatedUnion("kind", [
|
|
|
25
25
|
.optional(),
|
|
26
26
|
}),
|
|
27
27
|
]);
|
|
28
|
+
/**
|
|
29
|
+
* Listing text in other languages, keyed by language tag such as `zh-CN`. A missing field falls back
|
|
30
|
+
* to the English `name` or `description`, which stay required so older clients keep working.
|
|
31
|
+
*/
|
|
32
|
+
export const PluginListingTranslationsSchema = z.record(z.string(), z.object({ name: z.string().optional(), description: z.string().optional() }));
|
|
28
33
|
export const PublishedPluginSchema = z.object({
|
|
29
34
|
id: PluginRegistryIdSchema,
|
|
30
35
|
name: z.string(),
|
|
31
36
|
description: z.string(),
|
|
37
|
+
translations: PluginListingTranslationsSchema.optional(),
|
|
32
38
|
license: z.string().optional(),
|
|
33
39
|
categories: z.array(z.string()),
|
|
34
40
|
author: z.object({ github: z.string(), name: z.string().optional(), npm: z.string().optional() }),
|
|
@@ -49,7 +55,11 @@ export function pluginMediaKind(url) {
|
|
|
49
55
|
const extension = new URL(url).pathname.split(".").pop()?.toLowerCase() ?? "";
|
|
50
56
|
return VIDEO_EXTENSIONS.has(extension) ? "video" : "image";
|
|
51
57
|
}
|
|
52
|
-
export const PublishedPluginDetailSchema = PublishedPluginSchema.extend({
|
|
58
|
+
export const PublishedPluginDetailSchema = PublishedPluginSchema.extend({
|
|
59
|
+
readme: z.string(),
|
|
60
|
+
/** The overview in other languages, keyed like `translations`. Each one replaces `readme` whole. */
|
|
61
|
+
overviewTranslations: z.record(z.string(), z.string()).optional(),
|
|
62
|
+
});
|
|
53
63
|
export const PluginRegistryIndexSchema = z.object({
|
|
54
64
|
schemaVersion: z.literal(1),
|
|
55
65
|
registry: z.object({ name: z.string(), url: z.string().url() }),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export const BUILTIN_PROVIDER_ICON_NAMES = [
|
|
2
|
+
"antigravity",
|
|
2
3
|
"claude",
|
|
3
4
|
"codex",
|
|
4
5
|
"copilot",
|
|
@@ -21,6 +22,7 @@ export const ACP_PROVIDER_ICON_NAMES = [
|
|
|
21
22
|
"crow-cli",
|
|
22
23
|
"cursor",
|
|
23
24
|
"deepagents",
|
|
25
|
+
"devin",
|
|
24
26
|
"dimcode",
|
|
25
27
|
"dirac",
|
|
26
28
|
"factory-droid",
|
|
@@ -30,6 +32,7 @@ export const ACP_PROVIDER_ICON_NAMES = [
|
|
|
30
32
|
"glm-acp-agent",
|
|
31
33
|
"goose",
|
|
32
34
|
"grok",
|
|
35
|
+
"hermes",
|
|
33
36
|
"hoplite",
|
|
34
37
|
"junie",
|
|
35
38
|
"kilo",
|
|
@@ -112,12 +112,12 @@ export declare const ScheduleCreateResponseSchema: z.ZodObject<{
|
|
|
112
112
|
schedule: z.ZodNullable<z.ZodObject<{
|
|
113
113
|
name: z.ZodNullable<z.ZodString>;
|
|
114
114
|
id: z.ZodString;
|
|
115
|
-
updatedAt: z.ZodString;
|
|
116
115
|
status: z.ZodEnum<{
|
|
117
116
|
completed: "completed";
|
|
118
117
|
active: "active";
|
|
119
118
|
paused: "paused";
|
|
120
119
|
}>;
|
|
120
|
+
updatedAt: z.ZodString;
|
|
121
121
|
createdAt: z.ZodString;
|
|
122
122
|
cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
123
123
|
type: z.ZodLiteral<"every">;
|
|
@@ -167,12 +167,12 @@ export declare const ScheduleListResponseSchema: z.ZodObject<{
|
|
|
167
167
|
schedules: z.ZodArray<z.ZodObject<{
|
|
168
168
|
name: z.ZodNullable<z.ZodString>;
|
|
169
169
|
id: z.ZodString;
|
|
170
|
-
updatedAt: z.ZodString;
|
|
171
170
|
status: z.ZodEnum<{
|
|
172
171
|
completed: "completed";
|
|
173
172
|
active: "active";
|
|
174
173
|
paused: "paused";
|
|
175
174
|
}>;
|
|
175
|
+
updatedAt: z.ZodString;
|
|
176
176
|
createdAt: z.ZodString;
|
|
177
177
|
cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
178
178
|
type: z.ZodLiteral<"every">;
|
|
@@ -314,12 +314,12 @@ export declare const SchedulePauseResponseSchema: z.ZodObject<{
|
|
|
314
314
|
schedule: z.ZodNullable<z.ZodObject<{
|
|
315
315
|
name: z.ZodNullable<z.ZodString>;
|
|
316
316
|
id: z.ZodString;
|
|
317
|
-
updatedAt: z.ZodString;
|
|
318
317
|
status: z.ZodEnum<{
|
|
319
318
|
completed: "completed";
|
|
320
319
|
active: "active";
|
|
321
320
|
paused: "paused";
|
|
322
321
|
}>;
|
|
322
|
+
updatedAt: z.ZodString;
|
|
323
323
|
createdAt: z.ZodString;
|
|
324
324
|
cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
325
325
|
type: z.ZodLiteral<"every">;
|
|
@@ -369,12 +369,12 @@ export declare const ScheduleResumeResponseSchema: z.ZodObject<{
|
|
|
369
369
|
schedule: z.ZodNullable<z.ZodObject<{
|
|
370
370
|
name: z.ZodNullable<z.ZodString>;
|
|
371
371
|
id: z.ZodString;
|
|
372
|
-
updatedAt: z.ZodString;
|
|
373
372
|
status: z.ZodEnum<{
|
|
374
373
|
completed: "completed";
|
|
375
374
|
active: "active";
|
|
376
375
|
paused: "paused";
|
|
377
376
|
}>;
|
|
377
|
+
updatedAt: z.ZodString;
|
|
378
378
|
createdAt: z.ZodString;
|
|
379
379
|
cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
380
380
|
type: z.ZodLiteral<"every">;
|
package/dist/schedule/types.d.ts
CHANGED
|
@@ -121,12 +121,12 @@ export type StoredSchedule = z.infer<typeof StoredScheduleSchema>;
|
|
|
121
121
|
export declare const ScheduleSummarySchema: z.ZodObject<{
|
|
122
122
|
name: z.ZodNullable<z.ZodString>;
|
|
123
123
|
id: z.ZodString;
|
|
124
|
-
updatedAt: z.ZodString;
|
|
125
124
|
status: z.ZodEnum<{
|
|
126
125
|
completed: "completed";
|
|
127
126
|
active: "active";
|
|
128
127
|
paused: "paused";
|
|
129
128
|
}>;
|
|
129
|
+
updatedAt: z.ZodString;
|
|
130
130
|
createdAt: z.ZodString;
|
|
131
131
|
cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
132
132
|
type: z.ZodLiteral<"every">;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ToolCallTimelineItem } from "./agent-types.js";
|
|
2
2
|
export type ToolCallDisplayInput = Pick<ToolCallTimelineItem, "name" | "status" | "error" | "metadata" | "detail" | "agentMessage"> & {
|
|
3
3
|
cwd?: string;
|
|
4
|
+
/** Title of the agent a Paseo call targets, when the caller knows it. */
|
|
5
|
+
targetAgentTitle?: string;
|
|
4
6
|
};
|
|
5
7
|
export interface ToolCallDisplayModel {
|
|
6
8
|
displayName: string;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { buildAgentMessageDisplay } from "./
|
|
2
|
-
import { getPaseoToolLeafName, isPaseoToolName } from "./tool-name-normalization.js";
|
|
1
|
+
import { buildAgentMessageDisplay, buildPaseoToolDisplay, } from "./paseo-tool-presentation/index.js";
|
|
3
2
|
import { stripCwdPrefix } from "./path-utils.js";
|
|
4
3
|
function isRecord(value) {
|
|
5
4
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -12,12 +11,6 @@ function humanizeToolName(name) {
|
|
|
12
11
|
if (!trimmed) {
|
|
13
12
|
return name;
|
|
14
13
|
}
|
|
15
|
-
if (isPaseoToolName(trimmed)) {
|
|
16
|
-
const leaf = getPaseoToolLeafName(trimmed);
|
|
17
|
-
if (leaf) {
|
|
18
|
-
return humanizeToolName(leaf);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
14
|
if (/[:./]/.test(trimmed) || trimmed.includes("__")) {
|
|
22
15
|
return trimmed;
|
|
23
16
|
}
|
|
@@ -121,8 +114,20 @@ function buildUnknownDetailOverride(input) {
|
|
|
121
114
|
return {};
|
|
122
115
|
}
|
|
123
116
|
export function buildToolCallDisplayModel(input) {
|
|
124
|
-
|
|
125
|
-
|
|
117
|
+
const errorText = input.status === "failed" ? formatErrorText(input.error) : undefined;
|
|
118
|
+
const paseoDisplay = input.agentMessage
|
|
119
|
+
? buildAgentMessageDisplay(input.agentMessage)
|
|
120
|
+
: buildPaseoToolDisplay({
|
|
121
|
+
toolName: input.name,
|
|
122
|
+
detail: input.detail,
|
|
123
|
+
targetAgentTitle: input.targetAgentTitle,
|
|
124
|
+
});
|
|
125
|
+
if (paseoDisplay) {
|
|
126
|
+
return {
|
|
127
|
+
displayName: paseoDisplay.displayName,
|
|
128
|
+
...(paseoDisplay.summary ? { summary: paseoDisplay.summary } : {}),
|
|
129
|
+
...(errorText ? { errorText } : {}),
|
|
130
|
+
};
|
|
126
131
|
}
|
|
127
132
|
const canonicalDisplay = buildCanonicalDetailDisplay(input);
|
|
128
133
|
const unknownDetailOverride = buildUnknownDetailOverride(input);
|
|
@@ -130,7 +135,6 @@ export function buildToolCallDisplayModel(input) {
|
|
|
130
135
|
canonicalDisplay.displayName ??
|
|
131
136
|
humanizeToolName(input.name);
|
|
132
137
|
const summary = unknownDetailOverride.summary ?? canonicalDisplay.summary;
|
|
133
|
-
const errorText = input.status === "failed" ? formatErrorText(input.error) : undefined;
|
|
134
138
|
return {
|
|
135
139
|
displayName,
|
|
136
140
|
...(summary ? { summary } : {}),
|