@corenel/harness 0.19.0 → 0.21.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 +47 -0
- package/dist/chat/engine.d.ts.map +1 -0
- package/dist/chat/engine.js +803 -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 +39 -0
- package/dist/chat/persist.d.ts.map +1 -0
- package/dist/chat/persist.js +107 -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 +17 -0
- package/dist/core/spawn.d.ts.map +1 -1
- package/dist/core/spawn.js +48 -14
- 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/glob.d.ts +1 -2
- package/dist/guardrail/glob.d.ts.map +1 -1
- package/dist/guardrail/glob.js +4 -29
- package/dist/guardrail/glob.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/install/lockfile.d.ts +25 -5
- package/dist/install/lockfile.d.ts.map +1 -1
- package/dist/install/lockfile.js +60 -4
- package/dist/install/lockfile.js.map +1 -1
- package/dist/install/nameEntries.d.ts +28 -0
- package/dist/install/nameEntries.d.ts.map +1 -0
- package/dist/install/nameEntries.js +198 -0
- package/dist/install/nameEntries.js.map +1 -0
- package/dist/install/pinRefusal.d.ts +4 -0
- package/dist/install/pinRefusal.d.ts.map +1 -0
- package/dist/install/pinRefusal.js +19 -0
- package/dist/install/pinRefusal.js.map +1 -0
- package/dist/install/requirements.d.ts +7 -0
- package/dist/install/requirements.d.ts.map +1 -0
- package/dist/install/requirements.js +23 -0
- package/dist/install/requirements.js.map +1 -0
- 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 +7 -7
- 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/egressGuard.d.ts +17 -0
- package/dist/providers/egressGuard.d.ts.map +1 -0
- package/dist/providers/egressGuard.js +26 -0
- package/dist/providers/egressGuard.js.map +1 -0
- package/dist/providers/gateway.d.ts +34 -0
- package/dist/providers/gateway.d.ts.map +1 -1
- package/dist/providers/gateway.js +43 -2
- package/dist/providers/gateway.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/fleetJws.d.ts +15 -0
- package/dist/sidecar/fleetJws.d.ts.map +1 -0
- package/dist/sidecar/fleetJws.js +47 -0
- package/dist/sidecar/fleetJws.js.map +1 -0
- package/dist/sidecar/host.d.ts +81 -1
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +227 -6
- package/dist/sidecar/host.js.map +1 -1
- package/dist/sidecar/identity.d.ts +9 -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 -10
- package/dist/sidecar/server.d.ts.map +1 -1
- package/dist/sidecar/server.js +592 -15
- package/dist/sidecar/server.js.map +1 -1
- package/dist/skills.d.ts +18 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +93 -12
- package/dist/skills.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 +8 -0
- package/dist/tools/builtins.d.ts.map +1 -1
- package/dist/tools/builtins.js +21 -1
- 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 +8 -4
package/dist/tools/namespaces.js
CHANGED
|
@@ -73,6 +73,24 @@ const BUILTIN_NAMESPACES = {
|
|
|
73
73
|
// deny; listing what is running carries none of spawn/kill's risk.
|
|
74
74
|
proc_start: 'shell', proc_stop: 'shell', proc_list: 'sidecar',
|
|
75
75
|
};
|
|
76
|
+
/** THE LISTED TIER. Built-ins the model rarely needs on a given turn. They are
|
|
77
|
+
* not sent as functions on every request: like MCP tools they are found with
|
|
78
|
+
* `tool_search` (toolSearch.ts), which loads their schemas from then on. This
|
|
79
|
+
* table is the one place the tier is decided. A name not in it is Loaded (sent in
|
|
80
|
+
* full), so a new tool is never hidden by accident. Search is not a permission:
|
|
81
|
+
* a Listed tool dispatches through the same policy gates as any other. */
|
|
82
|
+
export const LISTED_TOOLS = new Set([
|
|
83
|
+
'browser_open', 'browser_read', 'browser_reload',
|
|
84
|
+
'create_crew_agent', 'find_agent', 'list_crew',
|
|
85
|
+
'create_strategy', 'edit_strategy', 'view_strategy', 'run_strategy',
|
|
86
|
+
'list_strategies', 'list_saved_strategies', 'orchestrate',
|
|
87
|
+
'kv_get', 'kv_set', 'recall_result', 'search_sessions',
|
|
88
|
+
'list_tools', 'project_graph', 'related_files', 'run_tests', 'search_packages',
|
|
89
|
+
'sidecar_git_branch', 'sidecar_git_commit', 'sidecar_git_push', 'sidecar_open_pr', 'sidecar_remember',
|
|
90
|
+
]);
|
|
91
|
+
export function isListedTool(tool) {
|
|
92
|
+
return LISTED_TOOLS.has(tool.name);
|
|
93
|
+
}
|
|
76
94
|
/** Resolve a tool's namespace: explicit field > built-in table > wire prefix > 'other'. */
|
|
77
95
|
export function resolveNamespace(tool) {
|
|
78
96
|
if (tool.namespace)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../tools/namespaces.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../tools/namespaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;0EAkB0E;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAuBrE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAA2C;IACtE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;IAC5B,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE;IACxC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAC3B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/B,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAC3B,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;CAChC,CAAC;AAEF;sDACsD;AACtD,MAAM,kBAAkB,GAAkC;IACxD,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;IACtE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI;IACzE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ;IAC3E,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ;IACvE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ;IAC7D,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;IACxG,6EAA6E;IAC7E,6EAA6E;IAC7E,WAAW,EAAE,OAAO;IACpB,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,oBAAoB,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS;IACjE,qBAAqB,EAAE,SAAS,EAAE,sBAAsB,EAAE,SAAS,EAAE,mBAAmB,EAAE,SAAS;IACnG,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS;IAC3D,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS;IAC1F,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS;IACvD,6EAA6E;IAC7E,6EAA6E;IAC7E,iEAAiE;IACjE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO;IAC/F,eAAe,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO;IACxD,2EAA2E;IAC3E,6EAA6E;IAC7E,SAAS,EAAE,OAAO;IAClB,6EAA6E;IAC7E,UAAU,EAAE,OAAO;IACnB,mFAAmF;IACnF,6EAA6E;IAC7E,8EAA8E;IAC9E,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,mEAAmE;IACnE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;CAC9D,CAAC;AAEF;;;;;0EAK0E;AAC1E,MAAM,CAAC,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC;IACvD,cAAc,EAAE,cAAc,EAAE,gBAAgB;IAChD,mBAAmB,EAAE,YAAY,EAAE,WAAW;IAC9C,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc;IACnE,iBAAiB,EAAE,uBAAuB,EAAE,aAAa;IACzD,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB;IACtD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB;IAC9E,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB;CACtG,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,IAAoB;IAC/C,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AASD,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAA0B,CAAC;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;IACtD,CAAC;IACD,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,yEAAyE;IACzE,oDAAoD;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;0EAqB0E;AAC1E,MAAM,UAAU,WAAW,CAAC,IAAoB;IAC9C,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACrB,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM;YAAE,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,kEAAkE;IAClE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,wEAAwE;IACxE,uEAAuE;IACvE,6EAA6E;IAC7E,qDAAqD;IACrD,IAAI,EAAE,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW,CAAC;QAAE,IAAI,GAAG,OAAO,CAAC;IACtF,OAAO,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAAC,IAAoB,EAAE,KAAwB;IAC/E,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,aAAa,CAAC,EAAiB;IAC7C,OAAO,GAAG,EAAE,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillTool.d.ts","sourceRoot":"","sources":["../../tools/skillTool.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,2FAA2F;AAC3F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"skillTool.d.ts","sourceRoot":"","sources":["../../tools/skillTool.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C,2FAA2F;AAC3F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;CACd;AAoBD,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAkBvD;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,CAqB/D"}
|
package/dist/tools/skillTool.js
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
export const USE_SKILL_NAME = 'use_skill';
|
|
2
|
+
/** The index shows one line per skill; the full description still loads with `use_skill`. */
|
|
3
|
+
/** Abbreviations whose dot is not a sentence end: "e.g." and "i.e." never end
|
|
4
|
+
* one; "etc." does only when a capital letter starts what follows. */
|
|
5
|
+
const NEVER_ENDS = /(?:^|[\s(])(?:e\.g|i\.e)$/i;
|
|
6
|
+
const ETC = /(?:^|[\s(])etc$/i;
|
|
7
|
+
function firstSentence(text) {
|
|
8
|
+
const trimmed = text.trim();
|
|
9
|
+
for (const m of trimmed.matchAll(/[.!?](?=\s|$)/g)) {
|
|
10
|
+
const at = m.index ?? 0;
|
|
11
|
+
const before = trimmed.slice(0, at);
|
|
12
|
+
if (m[0] === '.' && NEVER_ENDS.test(before))
|
|
13
|
+
continue;
|
|
14
|
+
if (m[0] === '.' && ETC.test(before) && /^\s+[a-z]/.test(trimmed.slice(at + 1)))
|
|
15
|
+
continue;
|
|
16
|
+
return trimmed.slice(0, at + 1);
|
|
17
|
+
}
|
|
18
|
+
return trimmed;
|
|
19
|
+
}
|
|
2
20
|
/** The system-prompt block: which skills exist and when to load one. '' for none. */
|
|
3
21
|
export function skillIndex(skills) {
|
|
4
22
|
if (!skills.length)
|
|
@@ -14,7 +32,10 @@ export function skillIndex(skills) {
|
|
|
14
32
|
+ `When one covers the work, call \`${USE_SKILL_NAME}\` with its name to load its instructions, then follow them in place of how you would otherwise go about it, and say which you are following. `
|
|
15
33
|
+ 'When none does, proceed normally and say nothing about them.',
|
|
16
34
|
'',
|
|
17
|
-
...skills.map((s) =>
|
|
35
|
+
...skills.map((s) => {
|
|
36
|
+
const line = firstSentence(s.description);
|
|
37
|
+
return line ? `- ${s.name}: ${line}` : `- ${s.name}`;
|
|
38
|
+
}),
|
|
18
39
|
].join('\n');
|
|
19
40
|
}
|
|
20
41
|
/** `use_skill` over exactly `skills`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillTool.js","sourceRoot":"","sources":["../../tools/skillTool.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAW1C,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,OAAO;QACL,WAAW;QACX,2EAA2E;QAC3E,yEAAyE;QACzE,8CAA8C;QAC9C,2FAA2F;cACvF,0JAA0J;cAC1J,4EAA4E;cAC5E,oCAAoC,cAAc,gJAAgJ;cAClM,8DAA8D;QAClE,EAAE;QACF,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"skillTool.js","sourceRoot":"","sources":["../../tools/skillTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentTool } from '@corenel/protocol';
|
|
2
|
+
/** Tools that run a command line. The first one present is the one named. */
|
|
3
|
+
export declare const SHELL_TOOLS: readonly ["sidecar_shell_exec", "shell", "proc_start"];
|
|
4
|
+
/** One line naming the Listed built-ins the run can reach by search. Empty when
|
|
5
|
+
* there are none. MCP tools are named by serverIndex, never here. */
|
|
6
|
+
export declare function listedIndex(deferred: AgentTool[]): string;
|
|
7
|
+
/** Whether this run can run commands, from the tools it actually holds. */
|
|
8
|
+
export declare function shellToolLine(toolNames: readonly string[]): string;
|
|
9
|
+
//# sourceMappingURL=toolFacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolFacts.d.ts","sourceRoot":"","sources":["../../tools/toolFacts.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,6EAA6E;AAC7E,eAAO,MAAM,WAAW,wDAAyD,CAAC;AAElF;sEACsE;AACtE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAIzD;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAKlE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TOOL_SEARCH_NAME, isMcpTool } from './toolSearch.js';
|
|
2
|
+
/** Tools that run a command line. The first one present is the one named. */
|
|
3
|
+
export const SHELL_TOOLS = ['sidecar_shell_exec', 'shell', 'proc_start'];
|
|
4
|
+
/** One line naming the Listed built-ins the run can reach by search. Empty when
|
|
5
|
+
* there are none. MCP tools are named by serverIndex, never here. */
|
|
6
|
+
export function listedIndex(deferred) {
|
|
7
|
+
const names = deferred.filter((t) => !isMcpTool(t)).map((t) => t.name);
|
|
8
|
+
if (!names.length)
|
|
9
|
+
return '';
|
|
10
|
+
return `More built-in tools are not loaded until you find them: call \`${TOOL_SEARCH_NAME}\` with what you want to do before concluding something is unavailable. Available by search: ${names.join(', ')}.`;
|
|
11
|
+
}
|
|
12
|
+
/** Whether this run can run commands, from the tools it actually holds. */
|
|
13
|
+
export function shellToolLine(toolNames) {
|
|
14
|
+
const found = SHELL_TOOLS.find((n) => toolNames.includes(n));
|
|
15
|
+
return found
|
|
16
|
+
? `You can run commands with \`${found}\`.`
|
|
17
|
+
: 'This run has no tool that runs commands, so do not offer to run, build or install anything.';
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=toolFacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolFacts.js","sourceRoot":"","sources":["../../tools/toolFacts.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,oBAAoB,EAAE,OAAO,EAAE,YAAY,CAAU,CAAC;AAElF;sEACsE;AACtE,MAAM,UAAU,WAAW,CAAC,QAAqB;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,kEAAkE,gBAAgB,gGAAgG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/M,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,KAAK;QACV,CAAC,CAAC,+BAA+B,KAAK,KAAK;QAC3C,CAAC,CAAC,6FAA6F,CAAC;AACpG,CAAC"}
|
|
@@ -5,12 +5,27 @@ export declare const TOOL_SEARCH_NAME = "tool_search";
|
|
|
5
5
|
* Large enough for a real multi-service task, small enough that the loaded set
|
|
6
6
|
* can never approach the provider's per-request limit on its own. */
|
|
7
7
|
export declare const LOADED_TOOLS_CAP = 24;
|
|
8
|
-
/**
|
|
9
|
-
*
|
|
10
|
-
|
|
8
|
+
/** A tool from a connected MCP server. Use this, not isDeferredTool, where the
|
|
9
|
+
* question is about MCP itself (the daemon's credential, outside content). */
|
|
10
|
+
export declare function isMcpTool(tool: NamespacedTool): boolean;
|
|
11
|
+
/** Deferred = reached by search. Every MCP tool and every Listed built-in; the
|
|
12
|
+
* rest of the builtins are the agent's own competence and are used on most
|
|
13
|
+
* turns. Two table-driven rules rather than a size threshold, so there is one
|
|
14
|
+
* behaviour to reason about. */
|
|
11
15
|
export declare function isDeferredTool(tool: NamespacedTool): boolean;
|
|
12
|
-
/** The server a deferred tool belongs to, from its wire name.
|
|
16
|
+
/** The server a deferred tool belongs to, from its wire name. A Listed built-in
|
|
17
|
+
* has no server: it is grouped as 'built-in'. */
|
|
13
18
|
export declare function serverOf(tool: NamespacedTool): string;
|
|
19
|
+
/** The group name `serverOf` gives a Listed built-in, and the `server` value that
|
|
20
|
+
* searches only them. Not an MCP server. */
|
|
21
|
+
export declare const BUILT_IN_GROUP = "built-in";
|
|
22
|
+
/** A run's tools split by tier, as every host hands them to the loop: Loaded
|
|
23
|
+
* tools (sent as functions on every request) in `tools`, MCP tools and Listed
|
|
24
|
+
* built-ins (reached by `tool_search`) in `deferredTools`. Order is kept. */
|
|
25
|
+
export declare function splitByTier<T extends NamespacedTool>(all: readonly T[]): {
|
|
26
|
+
tools: T[];
|
|
27
|
+
deferredTools: T[];
|
|
28
|
+
};
|
|
14
29
|
/**
|
|
15
30
|
* Lexical ranking over name, description and server.
|
|
16
31
|
*
|
|
@@ -27,8 +42,9 @@ export declare function rankTools(query: string, tools: AgentTool[], opts?: {
|
|
|
27
42
|
server?: string;
|
|
28
43
|
limit?: number;
|
|
29
44
|
}): AgentTool[];
|
|
30
|
-
/** One line per server the run can reach by search
|
|
31
|
-
* so the model knows a capability exists before
|
|
45
|
+
/** One line per MCP server the run can reach by search (pass MCP tools only).
|
|
46
|
+
* Goes in the system prompt, so the model knows a capability exists before
|
|
47
|
+
* deciding it does not. */
|
|
32
48
|
export declare function serverIndex(deferred: AgentTool[]): string;
|
|
33
49
|
export interface ToolLoader {
|
|
34
50
|
/** The `tool_search` tool for this run. */
|
|
@@ -38,6 +54,9 @@ export interface ToolLoader {
|
|
|
38
54
|
loadedNames(): string[];
|
|
39
55
|
/** Mark a loaded tool as just used, so eviction takes something else. */
|
|
40
56
|
touch(name: string): void;
|
|
57
|
+
/** Load one tool by exact name, as a search that found it would. Undefined
|
|
58
|
+
* when the name is not in this run's deferred pool. */
|
|
59
|
+
load(name: string): AgentTool | undefined;
|
|
41
60
|
}
|
|
42
61
|
export declare function createToolLoader(opts: {
|
|
43
62
|
deferred: AgentTool[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolSearch.d.ts","sourceRoot":"","sources":["../../tools/toolSearch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toolSearch.d.ts","sourceRoot":"","sources":["../../tools/toolSearch.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnF,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C;;sEAEsE;AACtE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAKnC;+EAC+E;AAC/E,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAEvD;AAED;;;iCAGiC;AACjC,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAE5D;AAED;kDACkD;AAClD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAGrD;AAED;6CAC6C;AAC7C,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;8EAE8E;AAC9E,wBAAgB,WAAW,CAAC,CAAC,SAAS,cAAc,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,aAAa,EAAE,CAAC,EAAE,CAAA;CAAE,CAK3G;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,EAAE,EAClB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7C,SAAS,EAAE,CA0Bb;AAED;;4BAE4B;AAC5B,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CASzD;AAeD,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,UAAU,EAAE,SAAS,CAAC;IACtB,+CAA+C;IAC/C,MAAM,IAAI,SAAS,EAAE,CAAC;IACtB,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,yEAAyE;IACzE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;4DACwD;IACxD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC,GAAG,UAAU,CAsEb"}
|
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.21.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.19.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"react": "^18.0.0 || ^19.0.0"
|
|
@@ -44,8 +44,12 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@
|
|
48
|
-
"@
|
|
47
|
+
"@types/node": "^24.13.1",
|
|
48
|
+
"@prompd/core": "0.7.0",
|
|
49
|
+
"@types/react": "^18.3.5",
|
|
50
|
+
"@types/ws": "^8.5.13",
|
|
51
|
+
"jszip": "^3.10.1",
|
|
52
|
+
"typescript": "^5.9.3"
|
|
49
53
|
},
|
|
50
54
|
"publishConfig": {
|
|
51
55
|
"access": "public"
|