@corenel/harness 0.20.0 → 0.22.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/dist/chat/engine.d.ts +53 -0
- package/dist/chat/engine.d.ts.map +1 -0
- package/dist/chat/engine.js +885 -0
- package/dist/chat/engine.js.map +1 -0
- package/dist/chat/events.d.ts +5 -0
- package/dist/chat/events.d.ts.map +1 -0
- package/dist/chat/events.js +100 -0
- package/dist/chat/events.js.map +1 -0
- package/dist/chat/index.d.ts +9 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +9 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/liveFold.d.ts +10 -0
- package/dist/chat/liveFold.d.ts.map +1 -0
- package/dist/chat/liveFold.js +31 -0
- package/dist/chat/liveFold.js.map +1 -0
- package/dist/chat/messages.d.ts +20 -0
- package/dist/chat/messages.d.ts.map +1 -0
- package/dist/chat/messages.js +56 -0
- package/dist/chat/messages.js.map +1 -0
- package/dist/chat/persist.d.ts +47 -0
- package/dist/chat/persist.d.ts.map +1 -0
- package/dist/chat/persist.js +118 -0
- package/dist/chat/persist.js.map +1 -0
- package/dist/chat/runWatchdog.d.ts +21 -0
- package/dist/chat/runWatchdog.d.ts.map +1 -0
- package/dist/chat/runWatchdog.js +92 -0
- package/dist/chat/runWatchdog.js.map +1 -0
- package/dist/chat/stitch.d.ts +26 -0
- package/dist/chat/stitch.d.ts.map +1 -0
- package/dist/chat/stitch.js +40 -0
- package/dist/chat/stitch.js.map +1 -0
- package/dist/chat/types.d.ts +163 -0
- package/dist/chat/types.d.ts.map +1 -0
- package/dist/chat/types.js +2 -0
- package/dist/chat/types.js.map +1 -0
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +50 -15
- package/dist/core/loop.js.map +1 -1
- package/dist/core/spawn.d.ts +10 -0
- package/dist/core/spawn.d.ts.map +1 -1
- package/dist/core/spawn.js +28 -5
- package/dist/core/spawn.js.map +1 -1
- package/dist/fileSchema.js +1 -1
- package/dist/guardrail/builtins.d.ts.map +1 -1
- package/dist/guardrail/builtins.js +11 -6
- package/dist/guardrail/builtins.js.map +1 -1
- package/dist/guardrail/guardrail.d.ts +8 -0
- package/dist/guardrail/guardrail.d.ts.map +1 -1
- package/dist/guardrail/guardrail.js +12 -0
- package/dist/guardrail/guardrail.js.map +1 -1
- package/dist/guardrail/index.d.ts +1 -1
- package/dist/guardrail/index.d.ts.map +1 -1
- package/dist/guardrail/index.js +1 -1
- package/dist/guardrail/index.js.map +1 -1
- package/dist/guardrail/serialize.d.ts.map +1 -1
- package/dist/guardrail/serialize.js +3 -0
- package/dist/guardrail/serialize.js.map +1 -1
- package/dist/guardrail/validate.d.ts.map +1 -1
- package/dist/guardrail/validate.js +4 -0
- package/dist/guardrail/validate.js.map +1 -1
- package/dist/orchestrator/sidecarTools.d.ts.map +1 -1
- package/dist/orchestrator/sidecarTools.js +8 -4
- package/dist/orchestrator/sidecarTools.js.map +1 -1
- package/dist/prompts/fitProject.d.ts +6 -0
- package/dist/prompts/fitProject.d.ts.map +1 -0
- package/dist/prompts/fitProject.js +6 -0
- package/dist/prompts/fitProject.js.map +1 -0
- package/dist/prompts/library/defaults.generated.js +9 -9
- package/dist/prompts/library/defaults.generated.js.map +1 -1
- package/dist/prompts/library/index.d.ts +2 -1
- package/dist/prompts/library/index.d.ts.map +1 -1
- package/dist/prompts/library/index.js +11 -16
- package/dist/prompts/library/index.js.map +1 -1
- package/dist/providers/gateway.d.ts +1 -0
- package/dist/providers/gateway.d.ts.map +1 -1
- package/dist/providers/gateway.js +1 -0
- package/dist/providers/gateway.js.map +1 -1
- package/dist/sessions/fileSessionStore.d.ts.map +1 -1
- package/dist/sessions/fileSessionStore.js.map +1 -1
- package/dist/sidecar/askUserBroker.d.ts +40 -0
- package/dist/sidecar/askUserBroker.d.ts.map +1 -0
- package/dist/sidecar/askUserBroker.js +103 -0
- package/dist/sidecar/askUserBroker.js.map +1 -0
- package/dist/sidecar/fleetJwe.d.ts +25 -0
- package/dist/sidecar/fleetJwe.d.ts.map +1 -0
- package/dist/sidecar/fleetJwe.js +115 -0
- package/dist/sidecar/fleetJwe.js.map +1 -0
- package/dist/sidecar/fsChanges.d.ts +23 -0
- package/dist/sidecar/fsChanges.d.ts.map +1 -0
- package/dist/sidecar/fsChanges.js +77 -0
- package/dist/sidecar/fsChanges.js.map +1 -0
- package/dist/sidecar/host.d.ts +91 -1
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +269 -6
- package/dist/sidecar/host.js.map +1 -1
- package/dist/sidecar/identity.d.ts +4 -0
- package/dist/sidecar/identity.d.ts.map +1 -1
- package/dist/sidecar/memberGate.d.ts.map +1 -1
- package/dist/sidecar/memberGate.js +5 -0
- package/dist/sidecar/memberGate.js.map +1 -1
- package/dist/sidecar/server.d.ts +61 -4
- package/dist/sidecar/server.d.ts.map +1 -1
- package/dist/sidecar/server.js +583 -13
- package/dist/sidecar/server.js.map +1 -1
- package/dist/systemParts.d.ts +0 -1
- package/dist/systemParts.d.ts.map +1 -1
- package/dist/systemParts.js +6 -2
- package/dist/systemParts.js.map +1 -1
- package/dist/todos.d.ts +8 -0
- package/dist/todos.d.ts.map +1 -1
- package/dist/todos.js +21 -17
- package/dist/todos.js.map +1 -1
- package/dist/tools/builtins.d.ts +14 -1
- package/dist/tools/builtins.d.ts.map +1 -1
- package/dist/tools/builtins.js +27 -3
- package/dist/tools/builtins.js.map +1 -1
- package/dist/tools/namespaces.d.ts +8 -0
- package/dist/tools/namespaces.d.ts.map +1 -1
- package/dist/tools/namespaces.js +18 -0
- package/dist/tools/namespaces.js.map +1 -1
- package/dist/tools/skillTool.d.ts.map +1 -1
- package/dist/tools/skillTool.js +22 -1
- package/dist/tools/skillTool.js.map +1 -1
- package/dist/tools/toolFacts.d.ts +9 -0
- package/dist/tools/toolFacts.d.ts.map +1 -0
- package/dist/tools/toolFacts.js +19 -0
- package/dist/tools/toolFacts.js.map +1 -0
- package/dist/tools/toolSearch.d.ts +25 -6
- package/dist/tools/toolSearch.d.ts.map +1 -1
- package/dist/tools/toolSearch.js +62 -14
- package/dist/tools/toolSearch.js.map +1 -1
- package/dist/tools/workflowTool.d.ts +34 -0
- package/dist/tools/workflowTool.d.ts.map +1 -0
- package/dist/tools/workflowTool.js +122 -0
- package/dist/tools/workflowTool.js.map +1 -0
- package/package.json +6 -3
package/dist/tools/toolSearch.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { parseMcpWireName } from '@corenel/protocol';
|
|
2
|
-
import { resolveNamespace } from './namespaces.js';
|
|
2
|
+
import { isListedTool, resolveNamespace } from './namespaces.js';
|
|
3
3
|
export const TOOL_SEARCH_NAME = 'tool_search';
|
|
4
4
|
/** Most tools one conversation keeps loaded. Least recently used goes first.
|
|
5
5
|
* Large enough for a real multi-service task, small enough that the loaded set
|
|
@@ -7,16 +7,38 @@ export const TOOL_SEARCH_NAME = 'tool_search';
|
|
|
7
7
|
export const LOADED_TOOLS_CAP = 24;
|
|
8
8
|
const DEFAULT_LIMIT = 8;
|
|
9
9
|
const MAX_LIMIT = 20;
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
export function isDeferredTool(tool) {
|
|
10
|
+
/** A tool from a connected MCP server. Use this, not isDeferredTool, where the
|
|
11
|
+
* question is about MCP itself (the daemon's credential, outside content). */
|
|
12
|
+
export function isMcpTool(tool) {
|
|
14
13
|
return resolveNamespace(tool) === 'mcp';
|
|
15
14
|
}
|
|
16
|
-
/**
|
|
15
|
+
/** Deferred = reached by search. Every MCP tool and every Listed built-in; the
|
|
16
|
+
* rest of the builtins are the agent's own competence and are used on most
|
|
17
|
+
* turns. Two table-driven rules rather than a size threshold, so there is one
|
|
18
|
+
* behaviour to reason about. */
|
|
19
|
+
export function isDeferredTool(tool) {
|
|
20
|
+
return isMcpTool(tool) || isListedTool(tool);
|
|
21
|
+
}
|
|
22
|
+
/** The server a deferred tool belongs to, from its wire name. A Listed built-in
|
|
23
|
+
* has no server: it is grouped as 'built-in'. */
|
|
17
24
|
export function serverOf(tool) {
|
|
25
|
+
if (isListedTool(tool))
|
|
26
|
+
return BUILT_IN_GROUP;
|
|
18
27
|
return parseMcpWireName(tool.name)?.server ?? 'mcp';
|
|
19
28
|
}
|
|
29
|
+
/** The group name `serverOf` gives a Listed built-in, and the `server` value that
|
|
30
|
+
* searches only them. Not an MCP server. */
|
|
31
|
+
export const BUILT_IN_GROUP = 'built-in';
|
|
32
|
+
/** A run's tools split by tier, as every host hands them to the loop: Loaded
|
|
33
|
+
* tools (sent as functions on every request) in `tools`, MCP tools and Listed
|
|
34
|
+
* built-ins (reached by `tool_search`) in `deferredTools`. Order is kept. */
|
|
35
|
+
export function splitByTier(all) {
|
|
36
|
+
const tools = [];
|
|
37
|
+
const deferredTools = [];
|
|
38
|
+
for (const t of all)
|
|
39
|
+
(isDeferredTool(t) ? deferredTools : tools).push(t);
|
|
40
|
+
return { tools, deferredTools };
|
|
41
|
+
}
|
|
20
42
|
function words(s) {
|
|
21
43
|
return s.toLowerCase().split(/[^a-z0-9]+/).filter((w) => w.length > 1);
|
|
22
44
|
}
|
|
@@ -36,12 +58,14 @@ export function rankTools(query, tools, opts = {}) {
|
|
|
36
58
|
const limit = Math.min(MAX_LIMIT, Math.max(1, Math.floor(opts.limit ?? DEFAULT_LIMIT)));
|
|
37
59
|
const pool = opts.server ? tools.filter((t) => serverOf(t) === opts.server) : tools;
|
|
38
60
|
const q = words(query);
|
|
61
|
+
const exact = query.trim().toLowerCase();
|
|
39
62
|
const scored = pool.map((tool, i) => {
|
|
40
63
|
const parsed = parseMcpWireName(tool.name);
|
|
41
64
|
const nameWords = words(parsed?.tool ?? tool.name);
|
|
42
65
|
const serverWords = words(parsed?.server ?? '');
|
|
43
66
|
const descWords = words(tool.description ?? '');
|
|
44
|
-
|
|
67
|
+
// A query that is exactly a tool's name is the model asking for that tool.
|
|
68
|
+
let score = exact && tool.name.toLowerCase() === exact ? 1000 : 0;
|
|
45
69
|
for (const w of q) {
|
|
46
70
|
if (nameWords.includes(w))
|
|
47
71
|
score += 3;
|
|
@@ -62,9 +86,12 @@ export function rankTools(query, tools, opts = {}) {
|
|
|
62
86
|
.slice(0, limit)
|
|
63
87
|
.map((s) => s.tool);
|
|
64
88
|
}
|
|
65
|
-
/** One line per server the run can reach by search
|
|
66
|
-
* so the model knows a capability exists before
|
|
89
|
+
/** One line per MCP server the run can reach by search (pass MCP tools only).
|
|
90
|
+
* Goes in the system prompt, so the model knows a capability exists before
|
|
91
|
+
* deciding it does not. */
|
|
67
92
|
export function serverIndex(deferred) {
|
|
93
|
+
if (!deferred.length)
|
|
94
|
+
return '';
|
|
68
95
|
const counts = new Map();
|
|
69
96
|
for (const t of deferred)
|
|
70
97
|
counts.set(serverOf(t), (counts.get(serverOf(t)) ?? 0) + 1);
|
|
@@ -74,6 +101,20 @@ export function serverIndex(deferred) {
|
|
|
74
101
|
...lines,
|
|
75
102
|
].join('\n');
|
|
76
103
|
}
|
|
104
|
+
/** What a search that found nothing says. Listed built-ins are grouped as
|
|
105
|
+
* 'built-in' for search, but they are not a connected server, so they are
|
|
106
|
+
* named apart from the MCP servers. */
|
|
107
|
+
function noMatchNote(deferred) {
|
|
108
|
+
const groups = [...new Set(deferred.map(serverOf))];
|
|
109
|
+
const servers = groups.filter((g) => g !== BUILT_IN_GROUP);
|
|
110
|
+
const parts = ['No tools matched.'];
|
|
111
|
+
if (servers.length)
|
|
112
|
+
parts.push(`Connected servers: ${servers.join(', ')}.`);
|
|
113
|
+
if (groups.includes(BUILT_IN_GROUP))
|
|
114
|
+
parts.push(`To search only the listed built-in tools, pass server "${BUILT_IN_GROUP}".`);
|
|
115
|
+
parts.push(servers.length ? 'Try other words or name a server.' : 'Try other words.');
|
|
116
|
+
return parts.join(' ');
|
|
117
|
+
}
|
|
77
118
|
export function createToolLoader(opts) {
|
|
78
119
|
const cap = opts.cap ?? LOADED_TOOLS_CAP;
|
|
79
120
|
const byName = new Map(opts.deferred.map((t) => [t.name, t]));
|
|
@@ -98,7 +139,7 @@ export function createToolLoader(opts) {
|
|
|
98
139
|
const searchTool = {
|
|
99
140
|
name: TOOL_SEARCH_NAME,
|
|
100
141
|
namespace: 'agent',
|
|
101
|
-
description: 'Find tools on connected services
|
|
142
|
+
description: 'Find listed tools and tools on connected services by what you want to do (or by exact tool name). Returns matching tools with their input schemas and makes them callable from your next step. Search before concluding a tool or service cannot do something.',
|
|
102
143
|
parameters: {
|
|
103
144
|
type: 'object',
|
|
104
145
|
properties: {
|
|
@@ -109,6 +150,10 @@ export function createToolLoader(opts) {
|
|
|
109
150
|
required: ['query'],
|
|
110
151
|
},
|
|
111
152
|
mutates: false,
|
|
153
|
+
// A read that loads nothing it could not already call by name, so it never
|
|
154
|
+
// stops for a person under a policy's defaultPermission: ask. A policy that
|
|
155
|
+
// names tool_search, and the ceiling, still decide.
|
|
156
|
+
permission: 'allow',
|
|
112
157
|
// The schemas ARE the answer; offloading them behind a pointer would hide
|
|
113
158
|
// exactly what the model searched for.
|
|
114
159
|
noOffload: true,
|
|
@@ -120,12 +165,9 @@ export function createToolLoader(opts) {
|
|
|
120
165
|
const limit = typeof args.limit === 'number' ? args.limit : undefined;
|
|
121
166
|
const found = rankTools(query, opts.deferred, { server, limit });
|
|
122
167
|
add(found.map((t) => t.name));
|
|
123
|
-
const servers = [...new Set(opts.deferred.map(serverOf))];
|
|
124
168
|
return JSON.stringify({
|
|
125
169
|
tools: found.map((t) => ({ name: t.name, server: serverOf(t), description: t.description, inputSchema: t.parameters })),
|
|
126
|
-
note: found.length
|
|
127
|
-
? 'These tools are now loaded; call them directly.'
|
|
128
|
-
: `No tools matched. Connected servers: ${servers.join(', ') || '(none)'}. Try other words or name a server.`,
|
|
170
|
+
note: found.length ? 'These tools are now loaded; call them directly.' : noMatchNote(opts.deferred),
|
|
129
171
|
});
|
|
130
172
|
},
|
|
131
173
|
};
|
|
@@ -138,6 +180,12 @@ export function createToolLoader(opts) {
|
|
|
138
180
|
return;
|
|
139
181
|
order = [...order.filter((n) => n !== name), name];
|
|
140
182
|
},
|
|
183
|
+
load: (name) => {
|
|
184
|
+
const tool = byName.get(name);
|
|
185
|
+
if (tool)
|
|
186
|
+
add([name]);
|
|
187
|
+
return tool;
|
|
188
|
+
},
|
|
141
189
|
};
|
|
142
190
|
}
|
|
143
191
|
//# sourceMappingURL=toolSearch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolSearch.js","sourceRoot":"","sources":["../../tools/toolSearch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toolSearch.js","sourceRoot":"","sources":["../../tools/toolSearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { AgentTool, WorkflowCallInputs } from '@corenel/protocol';
|
|
2
|
+
export declare const RUN_WORKFLOW_NAME = "run_workflow";
|
|
3
|
+
/** The most of a run's final output the tool returns; the rest is cut with a note. */
|
|
4
|
+
export declare const RUN_WORKFLOW_OUTPUT_MAX_BYTES: number;
|
|
5
|
+
/** One declared parameter of a workflow, as an agent sees it. */
|
|
6
|
+
export interface CallableParameter {
|
|
7
|
+
name: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
/** The declared type: string, number, integer, boolean, date, datetime, array or object. */
|
|
11
|
+
type: string;
|
|
12
|
+
required: boolean;
|
|
13
|
+
default?: unknown;
|
|
14
|
+
enum?: string[];
|
|
15
|
+
}
|
|
16
|
+
/** One workflow the agent may run: its installed name, its description and its parameters. */
|
|
17
|
+
export interface CallableWorkflow {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
parameters: CallableParameter[];
|
|
21
|
+
}
|
|
22
|
+
/** The tool description (O5): one block per workflow from its metadata.description and its parameters. */
|
|
23
|
+
export declare function runWorkflowDescription(workflows: readonly CallableWorkflow[]): string;
|
|
24
|
+
/** R18. Defaults are NOT filled here (the run fills them); only given values are checked. */
|
|
25
|
+
export declare function checkWorkflowInputs(w: CallableWorkflow, inputs: unknown): {
|
|
26
|
+
ok: true;
|
|
27
|
+
value: WorkflowCallInputs;
|
|
28
|
+
} | {
|
|
29
|
+
ok: false;
|
|
30
|
+
error: string;
|
|
31
|
+
};
|
|
32
|
+
/** `run` returns the text the model reads (output, busy refusal, failure). */
|
|
33
|
+
export declare function createRunWorkflowTool(workflows: readonly CallableWorkflow[], run: (name: string, inputs: WorkflowCallInputs, signal: AbortSignal) => Promise<string>): AgentTool;
|
|
34
|
+
//# sourceMappingURL=workflowTool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowTool.d.ts","sourceRoot":"","sources":["../../tools/workflowTool.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,sFAAsF;AACtF,eAAO,MAAM,6BAA6B,QAAY,CAAC;AAEvD,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,8FAA8F;AAC9F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAsBD,0GAA0G;AAC1G,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAWrF;AAkBD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,GACnC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA0BxE;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,gBAAgB,EAAE,EACtC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,GACtF,SAAS,CA2BX"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export const RUN_WORKFLOW_NAME = 'run_workflow';
|
|
2
|
+
/** The most of a run's final output the tool returns; the rest is cut with a note. */
|
|
3
|
+
export const RUN_WORKFLOW_OUTPUT_MAX_BYTES = 64 * 1024;
|
|
4
|
+
const LEAD = "Run one workflow this fleet deployed to this sidecar and wait for its final output. Its spend counts against the workflow's own limits. "
|
|
5
|
+
+ 'A workflow that is already running cannot be started again until it finishes.';
|
|
6
|
+
/** Text from a package, laid out on one line so it cannot break the list it sits in. */
|
|
7
|
+
const oneLine = (s) => s.replace(/\s+/g, ' ').trim();
|
|
8
|
+
function parameterLine(p) {
|
|
9
|
+
const label = p.label !== undefined && oneLine(p.label) !== '' && oneLine(p.label) !== p.name ? ` (${oneLine(p.label)})` : '';
|
|
10
|
+
let line = ` - ${p.name}${label}: ${p.type}, ${p.required ? 'required' : 'optional'}`;
|
|
11
|
+
if (p.default !== undefined) {
|
|
12
|
+
let shown;
|
|
13
|
+
try {
|
|
14
|
+
shown = JSON.stringify(p.default);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
shown = undefined;
|
|
18
|
+
}
|
|
19
|
+
if (shown !== undefined)
|
|
20
|
+
line += `, default ${shown}`;
|
|
21
|
+
}
|
|
22
|
+
if (p.enum && p.enum.length)
|
|
23
|
+
line += `, one of ${p.enum.join(', ')}`;
|
|
24
|
+
const description = p.description !== undefined ? oneLine(p.description) : '';
|
|
25
|
+
if (description)
|
|
26
|
+
line += `. ${description}`;
|
|
27
|
+
return line;
|
|
28
|
+
}
|
|
29
|
+
/** The tool description (O5): one block per workflow from its metadata.description and its parameters. */
|
|
30
|
+
export function runWorkflowDescription(workflows) {
|
|
31
|
+
const lines = [LEAD, '', 'Workflows:'];
|
|
32
|
+
for (const w of workflows) {
|
|
33
|
+
const description = oneLine(w.description);
|
|
34
|
+
lines.push(description ? `- ${w.name}: ${description}` : `- ${w.name}`);
|
|
35
|
+
if (w.parameters.length) {
|
|
36
|
+
lines.push(' Inputs:');
|
|
37
|
+
for (const p of w.parameters)
|
|
38
|
+
lines.push(parameterLine(p));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return lines.join('\n');
|
|
42
|
+
}
|
|
43
|
+
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
44
|
+
const hasOwn = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
|
45
|
+
/** What a value of `type` must be, in the words the refusal uses; null for a list or an object. */
|
|
46
|
+
function expected(type) {
|
|
47
|
+
switch (type) {
|
|
48
|
+
case 'number': return { words: 'a number', ok: (v) => typeof v === 'number' && Number.isFinite(v) };
|
|
49
|
+
case 'integer': return { words: 'a whole number', ok: (v) => typeof v === 'number' && Number.isInteger(v) };
|
|
50
|
+
case 'boolean': return { words: 'true or false', ok: (v) => typeof v === 'boolean' };
|
|
51
|
+
case 'array':
|
|
52
|
+
case 'object': return null;
|
|
53
|
+
// string, date, datetime, and any type a newer workflow declares: text.
|
|
54
|
+
default: return { words: 'a string', ok: (v) => typeof v === 'string' };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** R18. Defaults are NOT filled here (the run fills them); only given values are checked. */
|
|
58
|
+
export function checkWorkflowInputs(w, inputs) {
|
|
59
|
+
if (inputs === undefined || inputs === null)
|
|
60
|
+
inputs = {};
|
|
61
|
+
if (!isRecord(inputs))
|
|
62
|
+
return { ok: false, error: `The inputs of ${w.name} must be an object of values by input name.` };
|
|
63
|
+
const byName = new Map(w.parameters.map((p) => [p.name, p]));
|
|
64
|
+
for (const name of Object.keys(inputs)) {
|
|
65
|
+
if (!byName.has(name))
|
|
66
|
+
return { ok: false, error: `${w.name} has no input named "${name}".` };
|
|
67
|
+
}
|
|
68
|
+
const value = {};
|
|
69
|
+
for (const p of w.parameters) {
|
|
70
|
+
if (!hasOwn(inputs, p.name) || inputs[p.name] === undefined)
|
|
71
|
+
continue;
|
|
72
|
+
const given = inputs[p.name];
|
|
73
|
+
const kind = expected(p.type);
|
|
74
|
+
if (kind === null)
|
|
75
|
+
return { ok: false, error: `The input "${p.name}" of ${w.name} is a list or an object, which an agent cannot give.` };
|
|
76
|
+
if (!kind.ok(given))
|
|
77
|
+
return { ok: false, error: `The input "${p.name}" of ${w.name} must be ${kind.words}.` };
|
|
78
|
+
const scalar = given;
|
|
79
|
+
if (p.enum && p.enum.length && !p.enum.includes(String(scalar))) {
|
|
80
|
+
return { ok: false, error: `The input "${p.name}" of ${w.name} must be one of: ${p.enum.join(', ')}.` };
|
|
81
|
+
}
|
|
82
|
+
Object.defineProperty(value, p.name, { value: scalar, enumerable: true, writable: true, configurable: true });
|
|
83
|
+
}
|
|
84
|
+
for (const p of w.parameters) {
|
|
85
|
+
if (p.required && !hasOwn(value, p.name) && p.default === undefined) {
|
|
86
|
+
return { ok: false, error: `${w.name} needs the input "${p.name}".` };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return { ok: true, value };
|
|
90
|
+
}
|
|
91
|
+
/** `run` returns the text the model reads (output, busy refusal, failure). */
|
|
92
|
+
export function createRunWorkflowTool(workflows, run) {
|
|
93
|
+
const byName = new Map(workflows.map((w) => [w.name, w]));
|
|
94
|
+
const names = workflows.map((w) => w.name);
|
|
95
|
+
return {
|
|
96
|
+
name: RUN_WORKFLOW_NAME,
|
|
97
|
+
means: 'run a workflow the fleet deployed to this sidecar',
|
|
98
|
+
// A workflow calls models and can fetch and write its results: never assumed harmless. No roomSafe: a room
|
|
99
|
+
// turn is for deciding, and drops this tool.
|
|
100
|
+
mutates: true,
|
|
101
|
+
description: runWorkflowDescription(workflows),
|
|
102
|
+
parameters: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
properties: {
|
|
105
|
+
name: { type: 'string', enum: names, description: 'The workflow to run, from the Workflows list.' },
|
|
106
|
+
inputs: { type: 'object', description: 'Its inputs by name: text, numbers or true/false. Leave out an optional input to use its default.' },
|
|
107
|
+
},
|
|
108
|
+
required: ['name'],
|
|
109
|
+
},
|
|
110
|
+
async run(args, ctx) {
|
|
111
|
+
const name = typeof args.name === 'string' ? args.name : '';
|
|
112
|
+
const w = byName.get(name);
|
|
113
|
+
if (!w)
|
|
114
|
+
return `No workflow named "${name}". Available: ${names.join(', ')}.`;
|
|
115
|
+
const checked = checkWorkflowInputs(w, args.inputs);
|
|
116
|
+
if (!checked.ok)
|
|
117
|
+
return checked.error;
|
|
118
|
+
return run(w.name, checked.value, ctx.signal);
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=workflowTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflowTool.js","sourceRoot":"","sources":["../../tools/workflowTool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corenel/harness",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"license": "Elastic-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Corenel — host-agnostic agent harness (kernel). The app resolves it via the `corenel` path alias (bypasses these exports entirely); vitest aliases it to source too. Everything else — node consumers like @corenel/cli, @corenel/term, @corenel/sidecar — resolves it through this workspace package via the exports map below, which points at dist/ unconditionally (not just at publish) so in-repo and published resolution are identical: a bundle that treats @corenel/harness as external (see packages/term/build.mjs) must see the SAME module instance node sees when it later resolves this package at runtime, and plain node cannot execute the raw .ts sources at all. Run `pnpm build` here (or let a dependent's prebuild do it) before relying on this package outside the app/vitest. NOTE: @xyflow/react and dagre are NOT dependencies here at all — this package has no .tsx files and imports neither. `react` IS a real (small) runtime dependency: `todos.ts` uses `useSyncExternalStore`. It is declared below as an OPTIONAL peer, not a hard dependency, so node-only consumers (cli/term/sidecar) aren't forced to install react; node consumers hoist it today only because something else in the tree happens to pull it in. Do not add @xyflow/react or dagre as dependencies/peers without testing a packed install end to end — an earlier attempt at that (before this package had any .tsx files) failed npm's peer resolution with ERESOLVE.",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"openai": "^4.77.0",
|
|
35
35
|
"yaml": "^2.8.3",
|
|
36
|
-
"@corenel/protocol": "0.
|
|
36
|
+
"@corenel/protocol": "0.20.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"react": "^18.0.0 || ^19.0.0"
|
|
@@ -44,9 +44,12 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
+
"@types/node": "^24.13.1",
|
|
47
48
|
"@prompd/core": "0.7.0",
|
|
49
|
+
"@types/react": "^18.3.5",
|
|
48
50
|
"@types/ws": "^8.5.13",
|
|
49
|
-
"jszip": "^3.10.1"
|
|
51
|
+
"jszip": "^3.10.1",
|
|
52
|
+
"typescript": "^5.9.3"
|
|
50
53
|
},
|
|
51
54
|
"publishConfig": {
|
|
52
55
|
"access": "public"
|