@exaudeus/workrail 3.79.1 → 3.79.2
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/console-ui/assets/{index-DOM4l2VE.js → index-aaVieSSm.js} +1 -1
- package/dist/console-ui/index.html +1 -1
- package/dist/daemon/agent-loop.d.ts +1 -1
- package/dist/daemon/agent-loop.js +1 -1
- package/dist/daemon/daemon-events.d.ts +1 -0
- package/dist/daemon/daemon-events.js +2 -2
- package/dist/daemon/tools/bash.js +7 -4
- package/dist/daemon/tools/continue-workflow.js +2 -2
- package/dist/daemon/tools/file-tools.js +3 -3
- package/dist/daemon/tools/glob-grep.js +2 -2
- package/dist/daemon/tools/report-issue.js +1 -1
- package/dist/daemon/tools/signal-coordinator.js +1 -1
- package/dist/daemon/tools/spawn-agent.js +1 -1
- package/dist/manifest.json +25 -25
- package/docs/ideas/backlog.md +491 -0
- package/docs/vision.md +10 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ function makeBashTool(workspacePath, schemas, sessionId, emitter, workrailSessio
|
|
|
14
14
|
`Maximum execution time: ${_shared_js_1.BASH_TIMEOUT_MS / 1000}s.`,
|
|
15
15
|
inputSchema: schemas['BashParams'],
|
|
16
16
|
label: 'Bash',
|
|
17
|
-
execute: async (_toolCallId, params) => {
|
|
17
|
+
execute: async (_toolCallId, params, signal) => {
|
|
18
18
|
if (typeof params.command !== 'string' || !params.command)
|
|
19
19
|
throw new Error('Bash: command must be a non-empty string');
|
|
20
20
|
console.log(`[WorkflowRunner] Tool: bash "${String(params.command).slice(0, 80)}"`);
|
|
@@ -26,6 +26,7 @@ function makeBashTool(workspacePath, schemas, sessionId, emitter, workrailSessio
|
|
|
26
26
|
cwd,
|
|
27
27
|
timeout: _shared_js_1.BASH_TIMEOUT_MS,
|
|
28
28
|
shell: '/bin/bash',
|
|
29
|
+
signal,
|
|
29
30
|
});
|
|
30
31
|
const output = [stdout, stderr].filter(Boolean).join('\n');
|
|
31
32
|
return {
|
|
@@ -34,11 +35,13 @@ function makeBashTool(workspacePath, schemas, sessionId, emitter, workrailSessio
|
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
37
|
catch (err) {
|
|
38
|
+
if (err.code === 'ABORT_ERR')
|
|
39
|
+
throw err;
|
|
37
40
|
const e = err;
|
|
38
41
|
const stdout = String(e.stdout ?? '');
|
|
39
42
|
const stderr = String(e.stderr ?? '');
|
|
40
43
|
const rawCode = e.code;
|
|
41
|
-
const
|
|
44
|
+
const killSignal = e.signal;
|
|
42
45
|
if (rawCode === 1 && !stderr.trim()) {
|
|
43
46
|
return {
|
|
44
47
|
content: [{ type: 'text', text: stdout || '(no output)' }],
|
|
@@ -47,8 +50,8 @@ function makeBashTool(workspacePath, schemas, sessionId, emitter, workrailSessio
|
|
|
47
50
|
}
|
|
48
51
|
const exitInfo = rawCode != null
|
|
49
52
|
? `exit ${String(rawCode)}`
|
|
50
|
-
:
|
|
51
|
-
? `signal ${String(
|
|
53
|
+
: killSignal
|
|
54
|
+
? `signal ${String(killSignal)}`
|
|
52
55
|
: 'exit unknown';
|
|
53
56
|
throw new Error(`Command failed: ${params.command} (${exitInfo})\nSTDOUT:\n${stdout}\nSTDERR:\n${stderr}`);
|
|
54
57
|
}
|
|
@@ -13,7 +13,7 @@ function makeContinueWorkflowTool(sessionId, ctx, onAdvance, onComplete, schemas
|
|
|
13
13
|
'When the step requires an assessment gate, include wr.assessment objects in artifacts.',
|
|
14
14
|
inputSchema: schemas['ContinueWorkflowParams'],
|
|
15
15
|
label: 'Continue Workflow',
|
|
16
|
-
execute: async (_toolCallId, params) => {
|
|
16
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
17
17
|
console.log(`[WorkflowRunner] Tool: continue_workflow sessionId=${sessionId}`);
|
|
18
18
|
emitter?.emit({ kind: 'tool_called', sessionId, toolName: 'continue_workflow', summary: params.intent ?? 'advance', ...(0, _shared_js_1.withWorkrailSession)(workrailSessionId) });
|
|
19
19
|
const result = await _executeContinueWorkflowFn({
|
|
@@ -110,7 +110,7 @@ function makeCompleteStepTool(sessionId, ctx, getCurrentToken, onAdvance, onComp
|
|
|
110
110
|
'When the step requires an assessment gate, include wr.assessment objects in artifacts.',
|
|
111
111
|
inputSchema: schemas['CompleteStepParams'],
|
|
112
112
|
label: 'Complete Step',
|
|
113
|
-
execute: async (_toolCallId, params) => {
|
|
113
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
114
114
|
console.log(`[WorkflowRunner] Tool: complete_step sessionId=${sessionId}`);
|
|
115
115
|
emitter?.emit({ kind: 'tool_called', sessionId, toolName: 'complete_step', summary: 'advance', ...(0, _shared_js_1.withWorkrailSession)(workrailSessionId) });
|
|
116
116
|
const notes = params.notes;
|
|
@@ -56,7 +56,7 @@ function makeReadTool(workspacePath, readFileState, schemas, sessionId, emitter,
|
|
|
56
56
|
'Use offset (0-indexed start line) and limit (max lines) to read a slice of a large file.',
|
|
57
57
|
inputSchema: schemas['ReadParams'],
|
|
58
58
|
label: 'Read',
|
|
59
|
-
execute: async (_toolCallId, params) => {
|
|
59
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
60
60
|
if (typeof params.filePath !== 'string' || !params.filePath)
|
|
61
61
|
throw new Error('Read: filePath must be a non-empty string');
|
|
62
62
|
const filePath = resolveWithinWorkspace(params.filePath, workspacePath, 'Read');
|
|
@@ -96,7 +96,7 @@ function makeWriteTool(workspacePath, readFileState, schemas, sessionId, emitter
|
|
|
96
96
|
'For new files (path does not exist): no prior read is required.',
|
|
97
97
|
inputSchema: schemas['WriteParams'],
|
|
98
98
|
label: 'Write',
|
|
99
|
-
execute: async (_toolCallId, params) => {
|
|
99
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
100
100
|
if (typeof params.filePath !== 'string' || !params.filePath)
|
|
101
101
|
throw new Error('Write: filePath must be a non-empty string');
|
|
102
102
|
if (typeof params.content !== 'string')
|
|
@@ -141,7 +141,7 @@ function makeEditTool(workspacePath, readFileState, schemas, sessionId, emitter,
|
|
|
141
141
|
'Do NOT include line-number prefixes (e.g. "1\\t") from Read output in old_string or new_string.',
|
|
142
142
|
inputSchema: schemas['EditParams'],
|
|
143
143
|
label: 'Edit',
|
|
144
|
-
execute: async (_toolCallId, params) => {
|
|
144
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
145
145
|
if (typeof params.file_path !== 'string' || !params.file_path)
|
|
146
146
|
throw new Error('Edit: file_path must be a non-empty string');
|
|
147
147
|
if (typeof params.old_string !== 'string')
|
|
@@ -50,7 +50,7 @@ function makeGlobTool(workspacePath, schemas, sessionId, emitter, workrailSessio
|
|
|
50
50
|
'Results are capped at 100 files.',
|
|
51
51
|
inputSchema: schemas['GlobParams'],
|
|
52
52
|
label: 'Glob',
|
|
53
|
-
execute: async (_toolCallId, params) => {
|
|
53
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
54
54
|
if (typeof params.pattern !== 'string' || !params.pattern)
|
|
55
55
|
throw new Error('Glob: pattern must be a non-empty string');
|
|
56
56
|
const pattern = params.pattern;
|
|
@@ -101,7 +101,7 @@ function makeGrepTool(workspacePath, schemas, sessionId, emitter, workrailSessio
|
|
|
101
101
|
'node_modules and .git are always excluded.',
|
|
102
102
|
inputSchema: schemas['GrepParams'],
|
|
103
103
|
label: 'Grep',
|
|
104
|
-
execute: async (_toolCallId, params) => {
|
|
104
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
105
105
|
if (typeof params.pattern !== 'string' || !params.pattern)
|
|
106
106
|
throw new Error('Grep: pattern must be a non-empty string');
|
|
107
107
|
const pattern = params.pattern;
|
|
@@ -86,7 +86,7 @@ function makeReportIssueTool(sessionId, emitter, workrailSessionId, issuesDirOve
|
|
|
86
86
|
additionalProperties: false,
|
|
87
87
|
},
|
|
88
88
|
label: 'report_issue',
|
|
89
|
-
execute: async (_toolCallId, params) => {
|
|
89
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
90
90
|
if (typeof params.kind !== 'string' || !params.kind)
|
|
91
91
|
throw new Error('report_issue: kind must be a non-empty string');
|
|
92
92
|
if (typeof params.severity !== 'string' || !params.severity)
|
|
@@ -69,7 +69,7 @@ function makeSignalCoordinatorTool(sessionId, emitter, workrailSessionId, signal
|
|
|
69
69
|
additionalProperties: false,
|
|
70
70
|
},
|
|
71
71
|
label: 'signal_coordinator',
|
|
72
|
-
execute: async (_toolCallId, params) => {
|
|
72
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
73
73
|
if (typeof params.signalKind !== 'string' || !params.signalKind)
|
|
74
74
|
throw new Error('signal_coordinator: signalKind must be a non-empty string');
|
|
75
75
|
const signalId = 'sig_' + (0, node_crypto_1.randomUUID)().replace(/-/g, '').slice(0, 8);
|
|
@@ -19,7 +19,7 @@ function makeSpawnAgentTool(sessionId, ctx, apiKey, thisWorkrailSessionId, curre
|
|
|
19
19
|
'Check outcome before using notes -- on error/timeout, notes contains the error message.',
|
|
20
20
|
inputSchema: schemas['SpawnAgentParams'],
|
|
21
21
|
label: 'Spawn Agent',
|
|
22
|
-
execute: async (_toolCallId, params) => {
|
|
22
|
+
execute: async (_toolCallId, params, _signal) => {
|
|
23
23
|
if (typeof params.workflowId !== 'string' || !params.workflowId)
|
|
24
24
|
throw new Error('spawn_agent: workflowId must be a non-empty string');
|
|
25
25
|
if (typeof params.goal !== 'string' || !params.goal)
|
package/dist/manifest.json
CHANGED
|
@@ -477,12 +477,12 @@
|
|
|
477
477
|
"sha256": "40290b50e21ee7e82433efe13b1aa31c1ea608bd057a5c4e324982f284bc928b",
|
|
478
478
|
"bytes": 60673
|
|
479
479
|
},
|
|
480
|
-
"console-ui/assets/index-
|
|
481
|
-
"sha256": "
|
|
480
|
+
"console-ui/assets/index-aaVieSSm.js": {
|
|
481
|
+
"sha256": "3b99dd98e6839030bde2a1673e51afc1237a68c5dcd0bd5f80a6b13d3516002a",
|
|
482
482
|
"bytes": 768377
|
|
483
483
|
},
|
|
484
484
|
"console-ui/index.html": {
|
|
485
|
-
"sha256": "
|
|
485
|
+
"sha256": "c3f59569f41ed0e2e61d4209213db743a3f216c935ed42478e119b99e3dc0d57",
|
|
486
486
|
"bytes": 417
|
|
487
487
|
},
|
|
488
488
|
"console/standalone-console.d.ts": {
|
|
@@ -630,12 +630,12 @@
|
|
|
630
630
|
"bytes": 1330
|
|
631
631
|
},
|
|
632
632
|
"daemon/agent-loop.d.ts": {
|
|
633
|
-
"sha256": "
|
|
634
|
-
"bytes":
|
|
633
|
+
"sha256": "b24e3a615f0058165cd06251835baec3b810da2b92c061aea278fbc72deae5a0",
|
|
634
|
+
"bytes": 3912
|
|
635
635
|
},
|
|
636
636
|
"daemon/agent-loop.js": {
|
|
637
|
-
"sha256": "
|
|
638
|
-
"bytes":
|
|
637
|
+
"sha256": "5b0b6114cb9858776baff31a66ba6c8ad79392d1cb66ce951b929a07f8f16115",
|
|
638
|
+
"bytes": 10849
|
|
639
639
|
},
|
|
640
640
|
"daemon/context-loader.d.ts": {
|
|
641
641
|
"sha256": "73992e98475c16b94b880c1daac1da0d0650adfb895d1415ac18e73606f99a5c",
|
|
@@ -694,12 +694,12 @@
|
|
|
694
694
|
"bytes": 1216
|
|
695
695
|
},
|
|
696
696
|
"daemon/daemon-events.d.ts": {
|
|
697
|
-
"sha256": "
|
|
698
|
-
"bytes":
|
|
697
|
+
"sha256": "264cf0ec4ed8af828ce735b34e3310e662cf6d5502200d4be5b5c4491de0bcdc",
|
|
698
|
+
"bytes": 5398
|
|
699
699
|
},
|
|
700
700
|
"daemon/daemon-events.js": {
|
|
701
|
-
"sha256": "
|
|
702
|
-
"bytes":
|
|
701
|
+
"sha256": "ac8e2f94608c11ac758e38959339b0056eb18fa91912ae8a5f89609a8799a123",
|
|
702
|
+
"bytes": 2315
|
|
703
703
|
},
|
|
704
704
|
"daemon/io/conversation-log.d.ts": {
|
|
705
705
|
"sha256": "eff40d1f2f707469b94665741de33ca3a505863d5b97aa8a73f070458e3cf5b5",
|
|
@@ -898,56 +898,56 @@
|
|
|
898
898
|
"bytes": 301
|
|
899
899
|
},
|
|
900
900
|
"daemon/tools/bash.js": {
|
|
901
|
-
"sha256": "
|
|
902
|
-
"bytes":
|
|
901
|
+
"sha256": "94d1d76a86b5f1e1a78f69c93e77d5c10e8f6378f186d0c336831b844f953095",
|
|
902
|
+
"bytes": 2966
|
|
903
903
|
},
|
|
904
904
|
"daemon/tools/continue-workflow.d.ts": {
|
|
905
905
|
"sha256": "592de45416a858a30069b4d55ef69f456c0da476122735918783f76838b49c75",
|
|
906
906
|
"bytes": 1124
|
|
907
907
|
},
|
|
908
908
|
"daemon/tools/continue-workflow.js": {
|
|
909
|
-
"sha256": "
|
|
910
|
-
"bytes":
|
|
909
|
+
"sha256": "17389b3356a17d8e82acb6a86260cc82586ff9cdcbb52b93248b42f83ccdc3bd",
|
|
910
|
+
"bytes": 11395
|
|
911
911
|
},
|
|
912
912
|
"daemon/tools/file-tools.d.ts": {
|
|
913
913
|
"sha256": "5ae91a3fab8cd1e42817af93532e135d7a0bfd1efe7ac7d31337376a739c9646",
|
|
914
914
|
"bytes": 855
|
|
915
915
|
},
|
|
916
916
|
"daemon/tools/file-tools.js": {
|
|
917
|
-
"sha256": "
|
|
918
|
-
"bytes":
|
|
917
|
+
"sha256": "b90b2976e07b06427c6886e48a5bb4e267dd0834c6bf00d3c20ba0a640beb2d0",
|
|
918
|
+
"bytes": 11075
|
|
919
919
|
},
|
|
920
920
|
"daemon/tools/glob-grep.d.ts": {
|
|
921
921
|
"sha256": "13b79eae6df2fa4b736543b821d868399a1659f3b05c60e5efac63fc5ea41b46",
|
|
922
922
|
"bytes": 488
|
|
923
923
|
},
|
|
924
924
|
"daemon/tools/glob-grep.js": {
|
|
925
|
-
"sha256": "
|
|
926
|
-
"bytes":
|
|
925
|
+
"sha256": "a124b6ab639e774e152e521931a93291513ad824968cdd871190d9d630719c26",
|
|
926
|
+
"bytes": 7881
|
|
927
927
|
},
|
|
928
928
|
"daemon/tools/report-issue.d.ts": {
|
|
929
929
|
"sha256": "5f405011b3db32c72c6459912d698b2dcca50c81d224e18c8abd7db0fa876de0",
|
|
930
930
|
"bytes": 326
|
|
931
931
|
},
|
|
932
932
|
"daemon/tools/report-issue.js": {
|
|
933
|
-
"sha256": "
|
|
934
|
-
"bytes":
|
|
933
|
+
"sha256": "cd59afdc1224590a116faff6454fec36f2ab20a42fc8a318155836243f3a3b2d",
|
|
934
|
+
"bytes": 6294
|
|
935
935
|
},
|
|
936
936
|
"daemon/tools/signal-coordinator.d.ts": {
|
|
937
937
|
"sha256": "63e5a2bdfd6260a57365ae74aeb9d566c3233e52da36e246212b5ac9ab9ffbb8",
|
|
938
938
|
"bytes": 338
|
|
939
939
|
},
|
|
940
940
|
"daemon/tools/signal-coordinator.js": {
|
|
941
|
-
"sha256": "
|
|
942
|
-
"bytes":
|
|
941
|
+
"sha256": "e17b38f0109d505f1d27418d777bf73797036efa5354b2e867df2c9fd910d58f",
|
|
942
|
+
"bytes": 4952
|
|
943
943
|
},
|
|
944
944
|
"daemon/tools/spawn-agent.d.ts": {
|
|
945
945
|
"sha256": "fc6f2f4403c96597041f81abb656fb3499a5d0e9a6f0800f273e444b60912d71",
|
|
946
946
|
"bytes": 605
|
|
947
947
|
},
|
|
948
948
|
"daemon/tools/spawn-agent.js": {
|
|
949
|
-
"sha256": "
|
|
950
|
-
"bytes":
|
|
949
|
+
"sha256": "ff46faa59257609b391a181706afd5e162b5413645938a0e77a486f3e57725b8",
|
|
950
|
+
"bytes": 7881
|
|
951
951
|
},
|
|
952
952
|
"daemon/turn-end/conversation-flusher.d.ts": {
|
|
953
953
|
"sha256": "5a8c1666ad18c31f49cb34ad2f4b5f134437bfb902dc5f89ea3db568ca44976d",
|