@exaudeus/workrail 3.12.0 → 3.13.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/console/assets/{index-CRgjJiMS.js → index-EsSXrC_a.js} +11 -11
- package/dist/console/index.html +1 -1
- package/dist/di/container.js +8 -0
- package/dist/di/tokens.d.ts +1 -0
- package/dist/di/tokens.js +1 -0
- package/dist/infrastructure/session/HttpServer.js +2 -14
- package/dist/manifest.json +83 -43
- package/dist/mcp/boundary-coercion.d.ts +2 -0
- package/dist/mcp/boundary-coercion.js +73 -0
- package/dist/mcp/handler-factory.d.ts +1 -1
- package/dist/mcp/handler-factory.js +13 -6
- package/dist/mcp/handlers/v2-manage-workflow-source.d.ts +7 -0
- package/dist/mcp/handlers/v2-manage-workflow-source.js +50 -0
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/tool-descriptions.js +20 -0
- package/dist/mcp/tools.js +6 -0
- package/dist/mcp/types/tool-description-types.d.ts +1 -1
- package/dist/mcp/types/tool-description-types.js +1 -0
- package/dist/mcp/types/workflow-tool-edition.d.ts +1 -1
- package/dist/mcp/types.d.ts +2 -0
- package/dist/mcp/v2/tool-registry.js +8 -0
- package/dist/mcp/v2/tools.d.ts +12 -0
- package/dist/mcp/v2/tools.js +7 -1
- package/dist/v2/infra/in-memory/managed-source-store/index.d.ts +8 -0
- package/dist/v2/infra/in-memory/managed-source-store/index.js +33 -0
- package/dist/v2/infra/local/data-dir/index.d.ts +2 -0
- package/dist/v2/infra/local/data-dir/index.js +6 -0
- package/dist/v2/infra/local/managed-source-store/index.d.ts +15 -0
- package/dist/v2/infra/local/managed-source-store/index.js +164 -0
- package/dist/v2/ports/data-dir.port.d.ts +2 -0
- package/dist/v2/ports/managed-source-store.port.d.ts +25 -0
- package/dist/v2/ports/managed-source-store.port.js +2 -0
- package/package.json +1 -1
- package/workflows/adaptive-ticket-creation.json +276 -282
- package/workflows/document-creation-workflow.json +70 -191
- package/workflows/documentation-update-workflow.json +59 -309
- package/workflows/intelligent-test-case-generation.json +37 -212
- package/workflows/personal-learning-materials-creation-branched.json +1 -21
- package/workflows/presentation-creation.json +143 -308
- package/workflows/relocation-workflow-us.json +161 -535
- package/workflows/scoped-documentation-workflow.json +110 -181
- package/workflows/workflow-for-workflows.v2.json +21 -5
- package/workflows/CHANGELOG-bug-investigation.md +0 -298
- package/workflows/bug-investigation.agentic.json +0 -212
- package/workflows/bug-investigation.json +0 -112
- package/workflows/mr-review-workflow.agentic.json +0 -538
- package/workflows/mr-review-workflow.json +0 -277
package/dist/console/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>WorkRail Console</title>
|
|
7
|
-
<script type="module" crossorigin src="/console/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/console/assets/index-EsSXrC_a.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/console/assets/index-DW78t31j.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
package/dist/di/container.js
CHANGED
|
@@ -224,6 +224,7 @@ async function registerV2Services() {
|
|
|
224
224
|
const { LocalKeyringV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/keyring/index.js')));
|
|
225
225
|
const { LocalTokenAliasStoreV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/token-alias-store/index.js')));
|
|
226
226
|
const { LocalRememberedRootsStoreV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/remembered-roots-store/index.js')));
|
|
227
|
+
const { LocalManagedSourceStoreV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/managed-source-store/index.js')));
|
|
227
228
|
const { LocalSessionEventLogStoreV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/session-store/index.js')));
|
|
228
229
|
const { LocalSnapshotStoreV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/snapshot-store/index.js')));
|
|
229
230
|
const { LocalPinnedWorkflowStoreV2 } = await Promise.resolve().then(() => __importStar(require('../v2/infra/local/pinned-workflow-store/index.js')));
|
|
@@ -251,6 +252,13 @@ async function registerV2Services() {
|
|
|
251
252
|
return new LocalRememberedRootsStoreV2(dataDir, fs);
|
|
252
253
|
}),
|
|
253
254
|
});
|
|
255
|
+
tsyringe_1.container.register(tokens_js_1.DI.V2.ManagedSourceStore, {
|
|
256
|
+
useFactory: (0, tsyringe_1.instanceCachingFactory)((c) => {
|
|
257
|
+
const dataDir = c.resolve(tokens_js_1.DI.V2.DataDir);
|
|
258
|
+
const fs = c.resolve(tokens_js_1.DI.V2.FileSystem);
|
|
259
|
+
return new LocalManagedSourceStoreV2(dataDir, fs);
|
|
260
|
+
}),
|
|
261
|
+
});
|
|
254
262
|
tsyringe_1.container.register(tokens_js_1.DI.V2.SessionStore, {
|
|
255
263
|
useFactory: (0, tsyringe_1.instanceCachingFactory)((c) => {
|
|
256
264
|
const dataDir = c.resolve(tokens_js_1.DI.V2.DataDir);
|
package/dist/di/tokens.d.ts
CHANGED
package/dist/di/tokens.js
CHANGED
|
@@ -43,6 +43,7 @@ exports.DI = {
|
|
|
43
43
|
SessionLock: Symbol('V2.SessionLock'),
|
|
44
44
|
TokenAliasStore: Symbol('V2.TokenAliasStore'),
|
|
45
45
|
RememberedRootsStore: Symbol('V2.RememberedRootsStore'),
|
|
46
|
+
ManagedSourceStore: Symbol('V2.ManagedSourceStore'),
|
|
46
47
|
ExecutionGate: Symbol('V2.ExecutionGate'),
|
|
47
48
|
},
|
|
48
49
|
Runtime: {
|
|
@@ -77,20 +77,8 @@ let HttpServer = class HttpServer {
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
setupRoutes() {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
this.app.get('/', async (req, res) => {
|
|
83
|
-
try {
|
|
84
|
-
const indexPath = path_1.default.join(webDir, 'index.html');
|
|
85
|
-
res.sendFile(indexPath);
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
res.status(500).json({
|
|
89
|
-
error: 'Dashboard UI not found',
|
|
90
|
-
message: 'The dashboard web files are not yet built. This is expected during development.',
|
|
91
|
-
details: 'Web files will be available in a future step.'
|
|
92
|
-
});
|
|
93
|
-
}
|
|
80
|
+
this.app.get('/', (_req, res) => {
|
|
81
|
+
res.redirect('/console');
|
|
94
82
|
});
|
|
95
83
|
this.app.get('/api/sessions', async (req, res) => {
|
|
96
84
|
try {
|
package/dist/manifest.json
CHANGED
|
@@ -361,16 +361,16 @@
|
|
|
361
361
|
"sha256": "aabbaca7582a27fb7e2b47df88218e6e96d26b8fb8799cab6d25808685bd9196",
|
|
362
362
|
"bytes": 7686
|
|
363
363
|
},
|
|
364
|
-
"console/assets/index-CRgjJiMS.js": {
|
|
365
|
-
"sha256": "3bfebdb0b5533a1732425549ee1f5d86a82164c4e9b2b93dcb630c5fe962ce08",
|
|
366
|
-
"bytes": 553514
|
|
367
|
-
},
|
|
368
364
|
"console/assets/index-DW78t31j.css": {
|
|
369
365
|
"sha256": "cf0b93064dfb0ad9193a55abc50b7c81317bf50c0af6d510928504983a73cf8f",
|
|
370
366
|
"bytes": 37845
|
|
371
367
|
},
|
|
368
|
+
"console/assets/index-EsSXrC_a.js": {
|
|
369
|
+
"sha256": "a40c36894f529d9acee0c29946fe258fd73f7c5c61691be3d37dcc1da5881713",
|
|
370
|
+
"bytes": 553811
|
|
371
|
+
},
|
|
372
372
|
"console/index.html": {
|
|
373
|
-
"sha256": "
|
|
373
|
+
"sha256": "ffcfb5709926caf13817ad5d1a84d06ef0556e764ae191786f2e432742e5904f",
|
|
374
374
|
"bytes": 417
|
|
375
375
|
},
|
|
376
376
|
"core/error-handler.d.ts": {
|
|
@@ -386,16 +386,16 @@
|
|
|
386
386
|
"bytes": 565
|
|
387
387
|
},
|
|
388
388
|
"di/container.js": {
|
|
389
|
-
"sha256": "
|
|
390
|
-
"bytes":
|
|
389
|
+
"sha256": "ab1879b48037c59cf362749e2183913db5f476d820534b525a2c86f7a29cde5f",
|
|
390
|
+
"bytes": 21038
|
|
391
391
|
},
|
|
392
392
|
"di/tokens.d.ts": {
|
|
393
|
-
"sha256": "
|
|
394
|
-
"bytes":
|
|
393
|
+
"sha256": "04db6db34348aa36d897c85ab07eb1a386cb04e3595dbcb33525bd33974111ef",
|
|
394
|
+
"bytes": 2083
|
|
395
395
|
},
|
|
396
396
|
"di/tokens.js": {
|
|
397
|
-
"sha256": "
|
|
398
|
-
"bytes":
|
|
397
|
+
"sha256": "a1c92d99ea499260dedfcdad612873b92be7a8f02dca5dcb0be3ec5a9daf87cc",
|
|
398
|
+
"bytes": 2584
|
|
399
399
|
},
|
|
400
400
|
"domain/execution/error.d.ts": {
|
|
401
401
|
"sha256": "2eac85c42ec399a23724f868641eeadd0d196b4d324ee4caaff82a6b46155bd9",
|
|
@@ -538,8 +538,8 @@
|
|
|
538
538
|
"bytes": 1975
|
|
539
539
|
},
|
|
540
540
|
"infrastructure/session/HttpServer.js": {
|
|
541
|
-
"sha256": "
|
|
542
|
-
"bytes":
|
|
541
|
+
"sha256": "9746196db40493db69e8d5dc6fbfa84c08a17783516664178e3527ba05d7c8f7",
|
|
542
|
+
"bytes": 31947
|
|
543
543
|
},
|
|
544
544
|
"infrastructure/session/SessionDataNormalizer.d.ts": {
|
|
545
545
|
"sha256": "c89bb5e00d7d01fb4aa6d0095602541de53c425c6b99b67fa8367eb29cb63e9e",
|
|
@@ -669,6 +669,14 @@
|
|
|
669
669
|
"sha256": "a825b696428c32b87fdef23722574acb965d8319928b121a287800991a715172",
|
|
670
670
|
"bytes": 1599
|
|
671
671
|
},
|
|
672
|
+
"mcp/boundary-coercion.d.ts": {
|
|
673
|
+
"sha256": "04f8a7bc0f65d43e05b54970c58a997f638a919114816d816ba0a4de7db8eaa7",
|
|
674
|
+
"bytes": 189
|
|
675
|
+
},
|
|
676
|
+
"mcp/boundary-coercion.js": {
|
|
677
|
+
"sha256": "4ab9ca177bef34188bd7e49841e8e653e65ae08cea6d44b6408eaf5d06508f17",
|
|
678
|
+
"bytes": 2280
|
|
679
|
+
},
|
|
672
680
|
"mcp/error-mapper.d.ts": {
|
|
673
681
|
"sha256": "c6e9db65c565063726442b73a4a0cf1a1c07d54c778a85cf0122c4c04ea6a5a9",
|
|
674
682
|
"bytes": 268
|
|
@@ -678,12 +686,12 @@
|
|
|
678
686
|
"bytes": 3982
|
|
679
687
|
},
|
|
680
688
|
"mcp/handler-factory.d.ts": {
|
|
681
|
-
"sha256": "
|
|
682
|
-
"bytes":
|
|
689
|
+
"sha256": "61e6baa759f61fef0b01858c0d0ffbc3fb59bbd6b23311971e119aed125cface",
|
|
690
|
+
"bytes": 970
|
|
683
691
|
},
|
|
684
692
|
"mcp/handler-factory.js": {
|
|
685
|
-
"sha256": "
|
|
686
|
-
"bytes":
|
|
693
|
+
"sha256": "c92ad6b90896e0ac3fa72074bb68684631fa3bcf9504d2f823681e37e1b62aff",
|
|
694
|
+
"bytes": 5897
|
|
687
695
|
},
|
|
688
696
|
"mcp/handlers/session.d.ts": {
|
|
689
697
|
"sha256": "38926e69a0e4935d1dbcdc53848be9fff0e4d8f96827883da3216f217918fa82",
|
|
@@ -885,6 +893,14 @@
|
|
|
885
893
|
"sha256": "2ed3b7b6245688aaf6f6011e00e8c42f8300134ba8fad179a04a6785553f6f4f",
|
|
886
894
|
"bytes": 18983
|
|
887
895
|
},
|
|
896
|
+
"mcp/handlers/v2-manage-workflow-source.d.ts": {
|
|
897
|
+
"sha256": "778de2201125a1c334522c9bcc760f9314289ef152e1e95c9629060bb086ba4e",
|
|
898
|
+
"bytes": 401
|
|
899
|
+
},
|
|
900
|
+
"mcp/handlers/v2-manage-workflow-source.js": {
|
|
901
|
+
"sha256": "0d854cf7adbfcfe60749875b82f615fc085c950c0aff23969ef24ab9e6654d7d",
|
|
902
|
+
"bytes": 2690
|
|
903
|
+
},
|
|
888
904
|
"mcp/handlers/v2-reference-resolver.d.ts": {
|
|
889
905
|
"sha256": "0b1d2640306b6a0c1067ca66bb20e6ec35d291b33dc328a78d5bfa8006394234",
|
|
890
906
|
"bytes": 756
|
|
@@ -986,8 +1002,8 @@
|
|
|
986
1002
|
"bytes": 960
|
|
987
1003
|
},
|
|
988
1004
|
"mcp/server.js": {
|
|
989
|
-
"sha256": "
|
|
990
|
-
"bytes":
|
|
1005
|
+
"sha256": "15b090e4e5faf6c8b3d6fc56cf527a400b229d66cec8cfdf6e292e225c560509",
|
|
1006
|
+
"bytes": 11977
|
|
991
1007
|
},
|
|
992
1008
|
"mcp/step-content-envelope.d.ts": {
|
|
993
1009
|
"sha256": "19bd63c4d4de1d5d93393d346625d28ffd1bebdc320d4ba4e694cb740ec97d3b",
|
|
@@ -1010,8 +1026,8 @@
|
|
|
1010
1026
|
"bytes": 132
|
|
1011
1027
|
},
|
|
1012
1028
|
"mcp/tool-descriptions.js": {
|
|
1013
|
-
"sha256": "
|
|
1014
|
-
"bytes":
|
|
1029
|
+
"sha256": "94aef95e6def1d74e025b3b817c14a625e5683b53ac3f8ceca52c271f864c525",
|
|
1030
|
+
"bytes": 10944
|
|
1015
1031
|
},
|
|
1016
1032
|
"mcp/tool-factory.d.ts": {
|
|
1017
1033
|
"sha256": "0fe3c6b863b2d7aef0c3d659ff54f3a9ee8a0a3c2005b6565d2f8ad517bc7211",
|
|
@@ -1026,8 +1042,8 @@
|
|
|
1026
1042
|
"bytes": 5976
|
|
1027
1043
|
},
|
|
1028
1044
|
"mcp/tools.js": {
|
|
1029
|
-
"sha256": "
|
|
1030
|
-
"bytes":
|
|
1045
|
+
"sha256": "bdea37dfe3f2ef98be01899b067f841c645bda69c23dddd9e181f94b4b157c5e",
|
|
1046
|
+
"bytes": 8822
|
|
1031
1047
|
},
|
|
1032
1048
|
"mcp/transports/http-entry.d.ts": {
|
|
1033
1049
|
"sha256": "35d313b120dcf38643de9462559163581b89943fe432706986252e8b698b9507",
|
|
@@ -1070,24 +1086,24 @@
|
|
|
1070
1086
|
"bytes": 747
|
|
1071
1087
|
},
|
|
1072
1088
|
"mcp/types.d.ts": {
|
|
1073
|
-
"sha256": "
|
|
1074
|
-
"bytes":
|
|
1089
|
+
"sha256": "26de47115c67e38a7e3659bc404c60b3259b9bf5351286281876ebcaeea8a4ab",
|
|
1090
|
+
"bytes": 5100
|
|
1075
1091
|
},
|
|
1076
1092
|
"mcp/types.js": {
|
|
1077
1093
|
"sha256": "d10c4070e4c3454d80f0fa9cdc0e978c69c53c13fd09baa8710fcd802fed8926",
|
|
1078
1094
|
"bytes": 1608
|
|
1079
1095
|
},
|
|
1080
1096
|
"mcp/types/tool-description-types.d.ts": {
|
|
1081
|
-
"sha256": "
|
|
1082
|
-
"bytes":
|
|
1097
|
+
"sha256": "564cea96c0329903b1351fda5585918b9e1db4ad062ce7e06a4e4de832c1cdcc",
|
|
1098
|
+
"bytes": 849
|
|
1083
1099
|
},
|
|
1084
1100
|
"mcp/types/tool-description-types.js": {
|
|
1085
|
-
"sha256": "
|
|
1086
|
-
"bytes":
|
|
1101
|
+
"sha256": "f21fce6922daff41454d8f14c1e2776fbc8a043e50f4e91b0d61b7a4c47a06d3",
|
|
1102
|
+
"bytes": 829
|
|
1087
1103
|
},
|
|
1088
1104
|
"mcp/types/workflow-tool-edition.d.ts": {
|
|
1089
|
-
"sha256": "
|
|
1090
|
-
"bytes":
|
|
1105
|
+
"sha256": "cb8d9b05cf0d695d9d118296c822dfe50948ca9c84c4e84b1a327c052eafc216",
|
|
1106
|
+
"bytes": 1540
|
|
1091
1107
|
},
|
|
1092
1108
|
"mcp/types/workflow-tool-edition.js": {
|
|
1093
1109
|
"sha256": "2dfd26acd3da2c249b728e7fc48c7eab3dc675f786e7689dbdeec53c25589369",
|
|
@@ -1114,16 +1130,16 @@
|
|
|
1114
1130
|
"bytes": 408
|
|
1115
1131
|
},
|
|
1116
1132
|
"mcp/v2/tool-registry.js": {
|
|
1117
|
-
"sha256": "
|
|
1118
|
-
"bytes":
|
|
1133
|
+
"sha256": "f8e4fea08086b04161cd57a179ebc564b22002d8b498558787293d7f0089856e",
|
|
1134
|
+
"bytes": 3832
|
|
1119
1135
|
},
|
|
1120
1136
|
"mcp/v2/tools.d.ts": {
|
|
1121
|
-
"sha256": "
|
|
1122
|
-
"bytes":
|
|
1137
|
+
"sha256": "fe2cd956084dcdfe5fd992f7458cd58fa583711e20561b5ff46ea67e2e3ad6e5",
|
|
1138
|
+
"bytes": 7796
|
|
1123
1139
|
},
|
|
1124
1140
|
"mcp/v2/tools.js": {
|
|
1125
|
-
"sha256": "
|
|
1126
|
-
"bytes":
|
|
1141
|
+
"sha256": "a10837cfbcecf8d4bb7bd430e2895523094518bf066d803850eab1889e14c4f0",
|
|
1142
|
+
"bytes": 11831
|
|
1127
1143
|
},
|
|
1128
1144
|
"mcp/validation/bounded-json.d.ts": {
|
|
1129
1145
|
"sha256": "82203ac6123d5c6989606c3b5405aaea99ab829c8958835f9ae3ba45b8bc8fd5",
|
|
@@ -2077,6 +2093,14 @@
|
|
|
2077
2093
|
"sha256": "15a8f8b7dac5ab4449f389c75ce7c13a163f639ade481c3890a7f527d23f500d",
|
|
2078
2094
|
"bytes": 3441
|
|
2079
2095
|
},
|
|
2096
|
+
"v2/infra/in-memory/managed-source-store/index.d.ts": {
|
|
2097
|
+
"sha256": "fe06e50f66f9b542704884e0a4dd491e0380270ee41c52feb1217d327c37604e",
|
|
2098
|
+
"bytes": 544
|
|
2099
|
+
},
|
|
2100
|
+
"v2/infra/in-memory/managed-source-store/index.js": {
|
|
2101
|
+
"sha256": "14285880fd2ded3791039fb2fb9489ae7898ef9e0073cfb1b633097522ddcd09",
|
|
2102
|
+
"bytes": 1265
|
|
2103
|
+
},
|
|
2080
2104
|
"v2/infra/in-memory/token-alias-store/index.d.ts": {
|
|
2081
2105
|
"sha256": "8a1fcaa5fe230987df979a6653e88851c23e8376bb62e3dc306ec477cde207a7",
|
|
2082
2106
|
"bytes": 786
|
|
@@ -2118,12 +2142,12 @@
|
|
|
2118
2142
|
"bytes": 457
|
|
2119
2143
|
},
|
|
2120
2144
|
"v2/infra/local/data-dir/index.d.ts": {
|
|
2121
|
-
"sha256": "
|
|
2122
|
-
"bytes":
|
|
2145
|
+
"sha256": "082fce7c347f0e9fade727365c84010afce4cb1c10a56c31cd5598ba029a6f59",
|
|
2146
|
+
"bytes": 993
|
|
2123
2147
|
},
|
|
2124
2148
|
"v2/infra/local/data-dir/index.js": {
|
|
2125
|
-
"sha256": "
|
|
2126
|
-
"bytes":
|
|
2149
|
+
"sha256": "79543d5c1797c34e171a848fd6c4bcef3c5f8aa76fbe58aa5ae68cfa9aca6d18",
|
|
2150
|
+
"bytes": 3602
|
|
2127
2151
|
},
|
|
2128
2152
|
"v2/infra/local/directory-listing/index.d.ts": {
|
|
2129
2153
|
"sha256": "3139014cb738db3b0f10beca01a3a4a35b9ab8e72c8889b3bbff204fdbcb6b6c",
|
|
@@ -2165,6 +2189,14 @@
|
|
|
2165
2189
|
"sha256": "cb8a95f098350689004cda4cd638b1ea640fd283705e505ad99c4a20726da321",
|
|
2166
2190
|
"bytes": 4548
|
|
2167
2191
|
},
|
|
2192
|
+
"v2/infra/local/managed-source-store/index.d.ts": {
|
|
2193
|
+
"sha256": "4179aaf5e9286a86e1043887fec715adf45effebd83be4c3347f5cdf968cc7b9",
|
|
2194
|
+
"bytes": 834
|
|
2195
|
+
},
|
|
2196
|
+
"v2/infra/local/managed-source-store/index.js": {
|
|
2197
|
+
"sha256": "3de9c9c58a7661c7b3da4f1735fcc54aadf049c06acdeca8fc1b8061c8e86130",
|
|
2198
|
+
"bytes": 6966
|
|
2199
|
+
},
|
|
2168
2200
|
"v2/infra/local/pinned-workflow-store/index.d.ts": {
|
|
2169
2201
|
"sha256": "5f7d831fceb44ded4ae7e153bed882aa63816c01c54732d30e6a89dae8bfd8d0",
|
|
2170
2202
|
"bytes": 917
|
|
@@ -2286,8 +2318,8 @@
|
|
|
2286
2318
|
"bytes": 77
|
|
2287
2319
|
},
|
|
2288
2320
|
"v2/ports/data-dir.port.d.ts": {
|
|
2289
|
-
"sha256": "
|
|
2290
|
-
"bytes":
|
|
2321
|
+
"sha256": "6f028592ad207b522e2b00be1d7252004595d48354a0a4d95a6be575c876ac59",
|
|
2322
|
+
"bytes": 756
|
|
2291
2323
|
},
|
|
2292
2324
|
"v2/ports/data-dir.port.js": {
|
|
2293
2325
|
"sha256": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
|
|
@@ -2325,6 +2357,14 @@
|
|
|
2325
2357
|
"sha256": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
|
|
2326
2358
|
"bytes": 77
|
|
2327
2359
|
},
|
|
2360
|
+
"v2/ports/managed-source-store.port.d.ts": {
|
|
2361
|
+
"sha256": "4f34014c17fddd049d622682fe67ceda1424d0ad7197c767ee03e7bd817b4cb2",
|
|
2362
|
+
"bytes": 839
|
|
2363
|
+
},
|
|
2364
|
+
"v2/ports/managed-source-store.port.js": {
|
|
2365
|
+
"sha256": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
|
|
2366
|
+
"bytes": 77
|
|
2367
|
+
},
|
|
2328
2368
|
"v2/ports/pinned-workflow-store.port.d.ts": {
|
|
2329
2369
|
"sha256": "5105f42539f6ad813d468fc5c7f3c17648855731bb1b5f088354afae1856dac1",
|
|
2330
2370
|
"bytes": 608
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.coerceJsonStringObjectFields = coerceJsonStringObjectFields;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
function unwrapToBaseType(schema) {
|
|
6
|
+
let current = schema;
|
|
7
|
+
for (;;) {
|
|
8
|
+
if (current instanceof zod_1.z.ZodOptional || current instanceof zod_1.z.ZodDefault) {
|
|
9
|
+
current = current._def.innerType;
|
|
10
|
+
}
|
|
11
|
+
else if (current instanceof zod_1.z.ZodEffects) {
|
|
12
|
+
current = current._def.schema;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return current;
|
|
19
|
+
}
|
|
20
|
+
function expectsObjectValue(fieldSchema) {
|
|
21
|
+
const base = unwrapToBaseType(fieldSchema);
|
|
22
|
+
return base instanceof zod_1.z.ZodObject || base instanceof zod_1.z.ZodRecord;
|
|
23
|
+
}
|
|
24
|
+
function tryParseJsonObject(value) {
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(value);
|
|
27
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
28
|
+
return null;
|
|
29
|
+
return parsed;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function coerceJsonStringObjectFields(args, shapeSchema, aliasMap) {
|
|
36
|
+
if (typeof args !== 'object' || args === null)
|
|
37
|
+
return args;
|
|
38
|
+
const input = args;
|
|
39
|
+
const shape = shapeSchema._def.shape();
|
|
40
|
+
const objectFields = new Set();
|
|
41
|
+
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
42
|
+
if (expectsObjectValue(fieldSchema)) {
|
|
43
|
+
objectFields.add(key);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const aliasesToCoerce = new Set();
|
|
47
|
+
if (aliasMap) {
|
|
48
|
+
for (const [alias, canonical] of Object.entries(aliasMap)) {
|
|
49
|
+
if (objectFields.has(canonical)) {
|
|
50
|
+
aliasesToCoerce.add(alias);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (objectFields.size === 0 && aliasesToCoerce.size === 0)
|
|
55
|
+
return args;
|
|
56
|
+
let result = null;
|
|
57
|
+
const coerceField = (key) => {
|
|
58
|
+
const value = input[key];
|
|
59
|
+
if (typeof value !== 'string')
|
|
60
|
+
return;
|
|
61
|
+
const parsed = tryParseJsonObject(value);
|
|
62
|
+
if (parsed === null)
|
|
63
|
+
return;
|
|
64
|
+
if (result === null)
|
|
65
|
+
result = { ...input };
|
|
66
|
+
result[key] = parsed;
|
|
67
|
+
};
|
|
68
|
+
for (const key of objectFields)
|
|
69
|
+
coerceField(key);
|
|
70
|
+
for (const alias of aliasesToCoerce)
|
|
71
|
+
coerceField(alias);
|
|
72
|
+
return result ?? args;
|
|
73
|
+
}
|
|
@@ -4,4 +4,4 @@ import type { PreValidateResult } from './validation/workflow-next-prevalidate.j
|
|
|
4
4
|
import type { WrappedToolHandler, McpCallToolResult } from './types/workflow-tool-edition.js';
|
|
5
5
|
export declare function toMcpResult<T>(result: ToolResult<T>): McpCallToolResult;
|
|
6
6
|
export declare function createHandler<TInput extends z.ZodType, TOutput>(schema: TInput, handler: (input: z.infer<TInput>, ctx: ToolContext) => Promise<ToolResult<TOutput>>, shapeSchema?: z.ZodObject<z.ZodRawShape>, aliasMap?: Readonly<Record<string, string>>): WrappedToolHandler;
|
|
7
|
-
export declare function createValidatingHandler<TInput extends z.ZodType, TOutput>(schema: TInput, preValidate: (args: unknown) => PreValidateResult, handler: (input: z.infer<TInput>, ctx: ToolContext) => Promise<ToolResult<TOutput>>): WrappedToolHandler;
|
|
7
|
+
export declare function createValidatingHandler<TInput extends z.ZodType, TOutput>(schema: TInput, preValidate: (args: unknown) => PreValidateResult, handler: (input: z.infer<TInput>, ctx: ToolContext) => Promise<ToolResult<TOutput>>, shapeSchema?: z.ZodObject<z.ZodRawShape>, aliasMap?: Readonly<Record<string, string>>): WrappedToolHandler;
|
|
@@ -4,6 +4,7 @@ exports.toMcpResult = toMcpResult;
|
|
|
4
4
|
exports.createHandler = createHandler;
|
|
5
5
|
exports.createValidatingHandler = createValidatingHandler;
|
|
6
6
|
const types_js_1 = require("./types.js");
|
|
7
|
+
const boundary_coercion_js_1 = require("./boundary-coercion.js");
|
|
7
8
|
const index_js_1 = require("./validation/index.js");
|
|
8
9
|
const bounded_json_js_1 = require("./validation/bounded-json.js");
|
|
9
10
|
const v2_execution_helpers_js_1 = require("./handlers/v2-execution-helpers.js");
|
|
@@ -56,12 +57,15 @@ function toMcpResult(result) {
|
|
|
56
57
|
}
|
|
57
58
|
function createHandler(schema, handler, shapeSchema, aliasMap) {
|
|
58
59
|
return async (args, ctx) => {
|
|
59
|
-
const
|
|
60
|
+
const normalizedArgs = shapeSchema !== undefined
|
|
61
|
+
? (0, boundary_coercion_js_1.coerceJsonStringObjectFields)(args, shapeSchema, aliasMap)
|
|
62
|
+
: args;
|
|
63
|
+
const parseResult = schema.safeParse(normalizedArgs);
|
|
60
64
|
if (!parseResult.success) {
|
|
61
65
|
const introspectionSchema = shapeSchema ?? schema;
|
|
62
|
-
const suggestionResult = (0, index_js_1.generateSuggestions)(
|
|
66
|
+
const suggestionResult = (0, index_js_1.generateSuggestions)(normalizedArgs, introspectionSchema, index_js_1.DEFAULT_SUGGESTION_CONFIG, aliasMap);
|
|
63
67
|
const suggestionDetails = (0, index_js_1.formatSuggestionDetails)(suggestionResult);
|
|
64
|
-
const patchedTemplate = (0, index_js_1.patchTemplateForFailedOptionals)(suggestionDetails.correctTemplate ?? null,
|
|
68
|
+
const patchedTemplate = (0, index_js_1.patchTemplateForFailedOptionals)(suggestionDetails.correctTemplate ?? null, normalizedArgs, parseResult.error.errors, introspectionSchema, index_js_1.DEFAULT_SUGGESTION_CONFIG.maxTemplateDepth);
|
|
65
69
|
const patchedDetails = patchedTemplate !== suggestionDetails.correctTemplate
|
|
66
70
|
? { ...suggestionDetails, correctTemplate: patchedTemplate }
|
|
67
71
|
: suggestionDetails;
|
|
@@ -82,9 +86,12 @@ function createHandler(schema, handler, shapeSchema, aliasMap) {
|
|
|
82
86
|
}
|
|
83
87
|
};
|
|
84
88
|
}
|
|
85
|
-
function createValidatingHandler(schema, preValidate, handler) {
|
|
89
|
+
function createValidatingHandler(schema, preValidate, handler, shapeSchema, aliasMap) {
|
|
86
90
|
return async (args, ctx) => {
|
|
87
|
-
const
|
|
91
|
+
const normalizedArgs = shapeSchema !== undefined
|
|
92
|
+
? (0, boundary_coercion_js_1.coerceJsonStringObjectFields)(args, shapeSchema, aliasMap)
|
|
93
|
+
: args;
|
|
94
|
+
const pre = preValidate(normalizedArgs);
|
|
88
95
|
if (!pre.ok) {
|
|
89
96
|
const error = pre.error;
|
|
90
97
|
const details = error.details && typeof error.details === 'object' ? error.details : {};
|
|
@@ -103,6 +110,6 @@ function createValidatingHandler(schema, preValidate, handler) {
|
|
|
103
110
|
}
|
|
104
111
|
return toMcpResult(error);
|
|
105
112
|
}
|
|
106
|
-
return createHandler(schema, handler)(
|
|
113
|
+
return createHandler(schema, handler, shapeSchema, aliasMap)(normalizedArgs, ctx);
|
|
107
114
|
};
|
|
108
115
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToolContext, ToolResult } from '../types.js';
|
|
2
|
+
import type { V2ManageWorkflowSourceInput } from '../v2/tools.js';
|
|
3
|
+
export interface ManageWorkflowSourceOutput {
|
|
4
|
+
readonly action: 'attach' | 'detach';
|
|
5
|
+
readonly path: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleV2ManageWorkflowSource(input: V2ManageWorkflowSourceInput, ctx: ToolContext): Promise<ToolResult<ManageWorkflowSourceOutput>>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.handleV2ManageWorkflowSource = handleV2ManageWorkflowSource;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const assert_never_js_1 = require("../../runtime/assert-never.js");
|
|
9
|
+
const types_js_1 = require("../types.js");
|
|
10
|
+
function mapManagedSourceErrorToToolError(error) {
|
|
11
|
+
switch (error.code) {
|
|
12
|
+
case 'MANAGED_SOURCE_BUSY':
|
|
13
|
+
return (0, types_js_1.errRetryAfterMs)('INTERNAL_ERROR', 'WorkRail is temporarily busy updating managed workflow sources.', error.retry.afterMs, {
|
|
14
|
+
suggestion: 'Wait a moment and retry. Another WorkRail process may be updating managed workflow sources.',
|
|
15
|
+
});
|
|
16
|
+
case 'MANAGED_SOURCE_IO_ERROR':
|
|
17
|
+
return (0, types_js_1.errNotRetryable)('INTERNAL_ERROR', 'WorkRail could not update the managed workflow sources store.', {
|
|
18
|
+
suggestion: 'Fix WorkRail local storage access and retry. Check that the ~/.workrail data directory exists and is writable.',
|
|
19
|
+
details: { errorMessage: error.message },
|
|
20
|
+
});
|
|
21
|
+
case 'MANAGED_SOURCE_CORRUPTION':
|
|
22
|
+
return (0, types_js_1.errNotRetryable)('INTERNAL_ERROR', 'WorkRail managed workflow sources store is corrupted.', {
|
|
23
|
+
suggestion: 'The managed sources file may need to be deleted and re-created. Check the ~/.workrail/data/managed-sources directory.',
|
|
24
|
+
details: { errorMessage: error.message },
|
|
25
|
+
});
|
|
26
|
+
default: {
|
|
27
|
+
const _exhaustive = error;
|
|
28
|
+
return (0, assert_never_js_1.assertNever)(_exhaustive);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function handleV2ManageWorkflowSource(input, ctx) {
|
|
33
|
+
const guard = (0, types_js_1.requireV2Context)(ctx);
|
|
34
|
+
if (!guard.ok)
|
|
35
|
+
return guard.error;
|
|
36
|
+
const { managedSourceStore } = guard.ctx.v2;
|
|
37
|
+
if (!managedSourceStore) {
|
|
38
|
+
return (0, types_js_1.errNotRetryable)('PRECONDITION_FAILED', 'Managed workflow source store is not available.', {
|
|
39
|
+
suggestion: 'Ensure WorkRail v2 is fully initialized. The managedSourceStore dependency may not be wired in this environment.',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
const operation = input.action === 'attach'
|
|
43
|
+
? managedSourceStore.attach(input.path)
|
|
44
|
+
: managedSourceStore.detach(input.path);
|
|
45
|
+
const result = await operation;
|
|
46
|
+
if (result.isErr()) {
|
|
47
|
+
return mapManagedSourceErrorToToolError(result.error);
|
|
48
|
+
}
|
|
49
|
+
return (0, types_js_1.success)({ action: input.action, path: path_1.default.resolve(input.path) });
|
|
50
|
+
}
|
package/dist/mcp/server.js
CHANGED
|
@@ -110,6 +110,7 @@ async function createToolContext() {
|
|
|
110
110
|
console.error(`[V2Init] Token alias index load warning: ${aliasLoadResult.error.message}`);
|
|
111
111
|
}
|
|
112
112
|
const rememberedRootsStore = container_js_1.container.resolve(tokens_js_1.DI.V2.RememberedRootsStore);
|
|
113
|
+
const managedSourceStore = container_js_1.container.resolve(tokens_js_1.DI.V2.ManagedSourceStore);
|
|
113
114
|
v2 = {
|
|
114
115
|
gate,
|
|
115
116
|
sessionStore,
|
|
@@ -122,6 +123,7 @@ async function createToolContext() {
|
|
|
122
123
|
tokenCodecPorts,
|
|
123
124
|
tokenAliasStore,
|
|
124
125
|
rememberedRootsStore,
|
|
126
|
+
managedSourceStore,
|
|
125
127
|
validationPipelineDeps,
|
|
126
128
|
resolvedRootUris: [],
|
|
127
129
|
workspaceResolver: new index_js_1.LocalWorkspaceAnchorV2(process.cwd()),
|
|
@@ -73,6 +73,16 @@ Remember: inspecting is read-only. Call start_workflow when ready to begin.`,
|
|
|
73
73
|
continue_workflow: (0, workflow_protocol_contracts_js_1.renderProtocolDescription)(workflow_protocol_contracts_js_1.CONTINUE_WORKFLOW_PROTOCOL, 'standard'),
|
|
74
74
|
checkpoint_workflow: (0, workflow_protocol_contracts_js_1.renderProtocolDescription)(workflow_protocol_contracts_js_1.CHECKPOINT_WORKFLOW_PROTOCOL, 'standard'),
|
|
75
75
|
resume_session: (0, workflow_protocol_contracts_js_1.renderProtocolDescription)(workflow_protocol_contracts_js_1.RESUME_SESSION_PROTOCOL, 'standard'),
|
|
76
|
+
manage_workflow_source: `Attach or detach a workflow directory as a managed source.
|
|
77
|
+
|
|
78
|
+
Use this to explicitly add a directory containing workflow files so its workflows appear in list_workflows as managed entries.
|
|
79
|
+
|
|
80
|
+
Parameters:
|
|
81
|
+
- action: "attach" to add a directory, "detach" to remove it. Both are idempotent.
|
|
82
|
+
- path: absolute filesystem path to the workflow directory
|
|
83
|
+
|
|
84
|
+
Attach is idempotent: attaching an already-attached path is a no-op.
|
|
85
|
+
Detach is idempotent: detaching an absent path is a no-op.`,
|
|
76
86
|
},
|
|
77
87
|
authoritative: {
|
|
78
88
|
discover_workflows: `Check for workflows that apply to the user's request. Workflows are the user's pre-defined instructions that you MUST follow when they exist.
|
|
@@ -150,5 +160,15 @@ This is read-only. Call start_workflow when ready to commit to following the wor
|
|
|
150
160
|
continue_workflow: (0, workflow_protocol_contracts_js_1.renderProtocolDescription)(workflow_protocol_contracts_js_1.CONTINUE_WORKFLOW_PROTOCOL, 'authoritative'),
|
|
151
161
|
checkpoint_workflow: (0, workflow_protocol_contracts_js_1.renderProtocolDescription)(workflow_protocol_contracts_js_1.CHECKPOINT_WORKFLOW_PROTOCOL, 'authoritative'),
|
|
152
162
|
resume_session: (0, workflow_protocol_contracts_js_1.renderProtocolDescription)(workflow_protocol_contracts_js_1.RESUME_SESSION_PROTOCOL, 'authoritative'),
|
|
163
|
+
manage_workflow_source: `Attach or detach a workflow directory as a managed source.
|
|
164
|
+
|
|
165
|
+
When the user wants to register an external workflow directory, use attach. When they want to remove it, use detach. Both are idempotent.
|
|
166
|
+
|
|
167
|
+
Parameters:
|
|
168
|
+
- action: "attach" to add a directory, "detach" to remove it. Both are idempotent.
|
|
169
|
+
- path: absolute filesystem path to the workflow directory
|
|
170
|
+
|
|
171
|
+
Attach is idempotent: attaching an already-attached path is a no-op.
|
|
172
|
+
Detach is idempotent: detaching an absent path is a no-op.`,
|
|
153
173
|
},
|
|
154
174
|
};
|
package/dist/mcp/tools.js
CHANGED
|
@@ -92,6 +92,11 @@ exports.WORKFLOW_TOOL_ANNOTATIONS = {
|
|
|
92
92
|
destructiveHint: false,
|
|
93
93
|
idempotentHint: true,
|
|
94
94
|
},
|
|
95
|
+
manage_workflow_source: {
|
|
96
|
+
readOnlyHint: false,
|
|
97
|
+
destructiveHint: false,
|
|
98
|
+
idempotentHint: true,
|
|
99
|
+
},
|
|
95
100
|
};
|
|
96
101
|
exports.WORKFLOW_TOOL_TITLES = {
|
|
97
102
|
discover_workflows: 'Discover Available Workflows',
|
|
@@ -105,6 +110,7 @@ exports.WORKFLOW_TOOL_TITLES = {
|
|
|
105
110
|
continue_workflow: 'Continue Workflow (v2)',
|
|
106
111
|
checkpoint_workflow: 'Checkpoint Workflow (v2)',
|
|
107
112
|
resume_session: 'Resume Session (v2)',
|
|
113
|
+
manage_workflow_source: 'Manage Workflow Source (v2)',
|
|
108
114
|
};
|
|
109
115
|
exports.CreateSessionInput = zod_1.z.object({
|
|
110
116
|
workflowId: zod_1.z
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const DESCRIPTION_MODES: readonly ["standard", "authoritative"];
|
|
2
2
|
export type DescriptionMode = typeof DESCRIPTION_MODES[number];
|
|
3
|
-
export declare const WORKFLOW_TOOL_NAMES: readonly ["discover_workflows", "preview_workflow", "advance_workflow", "validate_workflow", "get_workflow_schema", "list_workflows", "inspect_workflow", "start_workflow", "continue_workflow", "checkpoint_workflow", "resume_session"];
|
|
3
|
+
export declare const WORKFLOW_TOOL_NAMES: readonly ["discover_workflows", "preview_workflow", "advance_workflow", "validate_workflow", "get_workflow_schema", "list_workflows", "inspect_workflow", "start_workflow", "continue_workflow", "checkpoint_workflow", "resume_session", "manage_workflow_source"];
|
|
4
4
|
export type WorkflowToolName = typeof WORKFLOW_TOOL_NAMES[number];
|
|
5
5
|
export type ToolDescriptionMap = Readonly<Record<WorkflowToolName, string>>;
|
|
6
6
|
export type DescriptionsByMode = Readonly<Record<DescriptionMode, ToolDescriptionMap>>;
|
|
@@ -2,7 +2,7 @@ import type { z } from 'zod';
|
|
|
2
2
|
import type { ToolDefinition } from '../tool-factory.js';
|
|
3
3
|
import type { ToolContext } from '../types.js';
|
|
4
4
|
export type V1WorkflowToolName = 'discover_workflows' | 'preview_workflow' | 'advance_workflow' | 'validate_workflow' | 'get_workflow_schema';
|
|
5
|
-
export type V2WorkflowToolName = 'list_workflows' | 'inspect_workflow' | 'start_workflow' | 'continue_workflow' | 'checkpoint_workflow' | 'resume_session';
|
|
5
|
+
export type V2WorkflowToolName = 'list_workflows' | 'inspect_workflow' | 'start_workflow' | 'continue_workflow' | 'checkpoint_workflow' | 'resume_session' | 'manage_workflow_source';
|
|
6
6
|
export type McpCallToolResult = {
|
|
7
7
|
readonly content: ReadonlyArray<{
|
|
8
8
|
readonly type: 'text';
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ import type { ValidationPipelineDepsPhase1a } from '../application/services/work
|
|
|
20
20
|
import type { TokenAliasStorePortV2 } from '../v2/ports/token-alias-store.port.js';
|
|
21
21
|
import type { RandomEntropyPortV2 } from '../v2/ports/random-entropy.port.js';
|
|
22
22
|
import type { RememberedRootsStorePortV2 } from '../v2/ports/remembered-roots-store.port.js';
|
|
23
|
+
import type { ManagedSourceStorePortV2 } from '../v2/ports/managed-source-store.port.js';
|
|
23
24
|
export interface SessionHealthDetails {
|
|
24
25
|
readonly health: SessionHealthV2;
|
|
25
26
|
}
|
|
@@ -61,6 +62,7 @@ export interface V2Dependencies {
|
|
|
61
62
|
readonly tokenCodecPorts: TokenCodecPorts;
|
|
62
63
|
readonly tokenAliasStore: TokenAliasStorePortV2;
|
|
63
64
|
readonly rememberedRootsStore?: RememberedRootsStorePortV2;
|
|
65
|
+
readonly managedSourceStore?: ManagedSourceStorePortV2;
|
|
64
66
|
readonly entropy: RandomEntropyPortV2;
|
|
65
67
|
readonly validationPipelineDeps: ValidationPipelineDepsPhase1a;
|
|
66
68
|
readonly resolvedRootUris?: readonly string[];
|