@nebutra/agent-runtime 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +65 -50
- package/.turbo/turbo-test.log +39 -36
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +12 -15
- package/README.md +2 -0
- package/dist/adapters/dispatcher-sse.js +1 -0
- package/dist/adapters/index.js +1 -0
- package/dist/adapters/mcp-catalog.js +1 -0
- package/dist/adapters/prisma-rollout.js +1 -0
- package/dist/chunk-424PT5DM.js +23 -0
- package/dist/chunk-424PT5DM.js.map +1 -0
- package/dist/{chunk-NN7DATXA.js → chunk-4Y25ZTKI.js} +3 -3
- package/dist/chunk-4Y25ZTKI.js.map +1 -0
- package/dist/{chunk-BJBBR3QA.js → chunk-D4YAPLOW.js} +4 -4
- package/dist/chunk-D4YAPLOW.js.map +1 -0
- package/dist/{chunk-ZMYX5VBU.js → chunk-GQZKYWFT.js} +23 -7
- package/dist/chunk-GQZKYWFT.js.map +1 -0
- package/dist/chunk-KCNN4QUQ.js +255 -0
- package/dist/chunk-KCNN4QUQ.js.map +1 -0
- package/dist/chunk-MX2WL43P.js +90 -0
- package/dist/chunk-MX2WL43P.js.map +1 -0
- package/dist/{chunk-PGGWSUTM.js → chunk-NI4EDT4T.js} +2 -2
- package/dist/chunk-NI4EDT4T.js.map +1 -0
- package/dist/{chunk-5N4644PB.js → chunk-SD2ZJ7XG.js} +4 -4
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +52 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.js +1 -0
- package/dist/definitions.js +1 -0
- package/dist/dispatcher.js +1 -0
- package/dist/durable-turn.js +3 -2
- package/dist/hook-pipeline.js +1 -0
- package/dist/index.d.ts +8 -85
- package/dist/index.js +237 -119
- package/dist/index.js.map +1 -1
- package/dist/loop.d.ts +2 -2
- package/dist/loop.js +3 -2
- package/dist/mcp-bridge.d.ts +3 -3
- package/dist/mcp-bridge.js +3 -2
- package/dist/model.js +1 -0
- package/dist/orchestration.d.ts +43 -0
- package/dist/orchestration.js +12 -0
- package/dist/orchestration.js.map +1 -0
- package/dist/policy.js +1 -0
- package/dist/protocol.js +1 -0
- package/dist/pulsar.d.ts +78 -0
- package/dist/pulsar.js +17 -0
- package/dist/pulsar.js.map +1 -0
- package/dist/rollout-store-persistent.js +1 -0
- package/dist/rollout.js +1 -0
- package/dist/sandbox.js +1 -0
- package/dist/skills.js +2 -1
- package/dist/subagents.js +1 -0
- package/dist/tools.d.ts +4 -3
- package/dist/tools.js +5 -3
- package/examples/pulsar-quickstart.ts +35 -0
- package/examples/resume-branch.ts +45 -0
- package/examples/subagent-fanout.ts +20 -0
- package/package.json +12 -5
- package/src/cli.ts +49 -0
- package/src/context-compaction.ts +6 -2
- package/src/index.ts +2 -0
- package/src/loop.ts +2 -2
- package/src/mcp-bridge.ts +8 -3
- package/src/orchestration.test.ts +53 -0
- package/src/orchestration.ts +146 -0
- package/src/permission-ruleset.ts +1 -200
- package/src/pulsar.test.ts +156 -0
- package/src/pulsar.ts +322 -0
- package/src/skills.ts +30 -8
- package/src/tools.test.ts +12 -0
- package/src/tools.ts +5 -2
- package/tsup.config.ts +4 -1
- package/dist/chunk-BJBBR3QA.js.map +0 -1
- package/dist/chunk-NN7DATXA.js.map +0 -1
- package/dist/chunk-PGGWSUTM.js.map +0 -1
- package/dist/chunk-ZMYX5VBU.js.map +0 -1
- /package/dist/{chunk-5N4644PB.js.map → chunk-SD2ZJ7XG.js.map} +0 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,81 +1,94 @@
|
|
|
1
1
|
|
|
2
|
-
> @nebutra/agent-runtime@0.2.
|
|
2
|
+
> @nebutra/agent-runtime@0.2.1 build /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime
|
|
3
3
|
> tsup
|
|
4
4
|
|
|
5
|
-
[34mCLI[39m Building entry: {"index":"src/index.ts","adapters/index":"src/adapters/index.ts","adapters/dispatcher-sse":"src/adapters/dispatcher-sse.ts","adapters/mcp-catalog":"src/adapters/mcp-catalog.ts","adapters/prisma-rollout":"src/adapters/prisma-rollout.ts","commands":"src/commands.ts","definitions":"src/definitions.ts","dispatcher":"src/dispatcher.ts","durable-turn":"src/durable-turn.ts","hook-pipeline":"src/hook-pipeline.ts","loop":"src/loop.ts","mcp-bridge":"src/mcp-bridge.ts","model":"src/model.ts","policy":"src/policy.ts","protocol":"src/protocol.ts","rollout":"src/rollout.ts","rollout-store-persistent":"src/rollout-store-persistent.ts","sandbox":"src/sandbox.ts","skills":"src/skills.ts","subagents":"src/subagents.ts","tools":"src/tools.ts"}
|
|
5
|
+
[34mCLI[39m Building entry: {"index":"src/index.ts","adapters/index":"src/adapters/index.ts","adapters/dispatcher-sse":"src/adapters/dispatcher-sse.ts","adapters/mcp-catalog":"src/adapters/mcp-catalog.ts","adapters/prisma-rollout":"src/adapters/prisma-rollout.ts","commands":"src/commands.ts","cli":"src/cli.ts","definitions":"src/definitions.ts","dispatcher":"src/dispatcher.ts","durable-turn":"src/durable-turn.ts","hook-pipeline":"src/hook-pipeline.ts","loop":"src/loop.ts","mcp-bridge":"src/mcp-bridge.ts","model":"src/model.ts","orchestration":"src/orchestration.ts","policy":"src/policy.ts","protocol":"src/protocol.ts","pulsar":"src/pulsar.ts","rollout":"src/rollout.ts","rollout-store-persistent":"src/rollout-store-persistent.ts","sandbox":"src/sandbox.ts","skills":"src/skills.ts","subagents":"src/subagents.ts","tools":"src/tools.ts"}
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v8.5.1
|
|
8
8
|
[34mCLI[39m Using tsup config: /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime/tsup.config.ts
|
|
9
9
|
[34mCLI[39m Target: es2022
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
|
-
[32mESM[39m [1mdist/
|
|
13
|
-
[32mESM[39m [1mdist/adapters/index.js [22m[
|
|
14
|
-
[32mESM[39m [1mdist/
|
|
15
|
-
[32mESM[39m [1mdist/
|
|
16
|
-
[32mESM[39m [1mdist/
|
|
17
|
-
[32mESM[39m [1mdist/
|
|
18
|
-
[32mESM[39m [1mdist/
|
|
19
|
-
[32mESM[39m [1mdist/
|
|
20
|
-
[32mESM[39m [1mdist/
|
|
21
|
-
[32mESM[39m [1mdist/
|
|
22
|
-
[32mESM[39m [1mdist/
|
|
23
|
-
[32mESM[39m [1mdist/
|
|
24
|
-
[32mESM[39m [1mdist/
|
|
25
|
-
[32mESM[39m [1mdist/
|
|
26
|
-
[32mESM[39m [1mdist/
|
|
12
|
+
[32mESM[39m [1mdist/protocol.js [22m[32m293.00 B[39m
|
|
13
|
+
[32mESM[39m [1mdist/adapters/index.js [22m[32m480.00 B[39m
|
|
14
|
+
[32mESM[39m [1mdist/pulsar.js [22m[32m349.00 B[39m
|
|
15
|
+
[32mESM[39m [1mdist/rollout.js [22m[32m316.00 B[39m
|
|
16
|
+
[32mESM[39m [1mdist/rollout-store-persistent.js [22m[32m219.00 B[39m
|
|
17
|
+
[32mESM[39m [1mdist/sandbox.js [22m[32m348.00 B[39m
|
|
18
|
+
[32mESM[39m [1mdist/skills.js [22m[32m215.00 B[39m
|
|
19
|
+
[32mESM[39m [1mdist/subagents.js [22m[32m404.00 B[39m
|
|
20
|
+
[32mESM[39m [1mdist/tools.js [22m[32m229.00 B[39m
|
|
21
|
+
[32mESM[39m [1mdist/dispatcher.js [22m[32m191.00 B[39m
|
|
22
|
+
[32mESM[39m [1mdist/durable-turn.js [22m[32m221.00 B[39m
|
|
23
|
+
[32mESM[39m [1mdist/hook-pipeline.js [22m[32m244.00 B[39m
|
|
24
|
+
[32mESM[39m [1mdist/loop.js [22m[32m193.00 B[39m
|
|
25
|
+
[32mESM[39m [1mdist/mcp-bridge.js [22m[32m187.00 B[39m
|
|
26
|
+
[32mESM[39m [1mdist/model.js [22m[32m186.00 B[39m
|
|
27
|
+
[32mESM[39m [1mdist/orchestration.js [22m[32m234.00 B[39m
|
|
28
|
+
[32mESM[39m [1mdist/policy.js [22m[32m527.00 B[39m
|
|
29
|
+
[32mESM[39m [1mdist/index.js [22m[32m100.03 KB[39m
|
|
30
|
+
[32mESM[39m [1mdist/chunk-KCNN4QUQ.js [22m[32m6.91 KB[39m
|
|
27
31
|
[32mESM[39m [1mdist/chunk-2DA6Q6TN.js [22m[32m3.42 KB[39m
|
|
28
32
|
[32mESM[39m [1mdist/chunk-MUF7ZZTO.js [22m[32m1.62 KB[39m
|
|
29
|
-
[32mESM[39m [1mdist/chunk-
|
|
30
|
-
[32mESM[39m [1mdist/chunk-5N4644PB.js [22m[32m1.92 KB[39m
|
|
33
|
+
[32mESM[39m [1mdist/chunk-GQZKYWFT.js [22m[32m4.41 KB[39m
|
|
31
34
|
[32mESM[39m [1mdist/chunk-5YS7WAPS.js [22m[32m5.67 KB[39m
|
|
32
|
-
[32mESM[39m [1mdist/chunk-
|
|
35
|
+
[32mESM[39m [1mdist/chunk-RDKYDMXT.js [22m[32m4.08 KB[39m
|
|
36
|
+
[32mESM[39m [1mdist/chunk-FUG5DT2C.js [22m[32m2.45 KB[39m
|
|
37
|
+
[32mESM[39m [1mdist/chunk-SD2ZJ7XG.js [22m[32m1.92 KB[39m
|
|
33
38
|
[32mESM[39m [1mdist/chunk-LO24VOA3.js [22m[32m6.31 KB[39m
|
|
34
|
-
[32mESM[39m [1mdist/chunk-
|
|
35
|
-
[32mESM[39m [1mdist/chunk-
|
|
39
|
+
[32mESM[39m [1mdist/chunk-D4YAPLOW.js [22m[32m4.19 KB[39m
|
|
40
|
+
[32mESM[39m [1mdist/chunk-37BBB2P2.js [22m[32m2.19 KB[39m
|
|
41
|
+
[32mESM[39m [1mdist/chunk-NI4EDT4T.js [22m[32m1.00 KB[39m
|
|
42
|
+
[32mESM[39m [1mdist/chunk-4Y25ZTKI.js [22m[32m1.40 KB[39m
|
|
36
43
|
[32mESM[39m [1mdist/chunk-6EGG2OZC.js [22m[32m324.00 B[39m
|
|
44
|
+
[32mESM[39m [1mdist/chunk-MX2WL43P.js [22m[32m3.28 KB[39m
|
|
37
45
|
[32mESM[39m [1mdist/chunk-CGRCUKGT.js [22m[32m2.38 KB[39m
|
|
38
|
-
[32mESM[39m [1mdist/
|
|
39
|
-
[32mESM[39m [1mdist/adapters/dispatcher-sse.js [22m[32m214.00 B[39m
|
|
46
|
+
[32mESM[39m [1mdist/adapters/dispatcher-sse.js [22m[32m245.00 B[39m
|
|
40
47
|
[32mESM[39m [1mdist/chunk-ZTSKS42I.js [22m[32m3.65 KB[39m
|
|
41
|
-
[32mESM[39m [1mdist/adapters/mcp-catalog.js [22m[
|
|
48
|
+
[32mESM[39m [1mdist/adapters/mcp-catalog.js [22m[32m218.00 B[39m
|
|
42
49
|
[32mESM[39m [1mdist/chunk-24ZXP7FI.js [22m[32m2.47 KB[39m
|
|
43
|
-
[32mESM[39m [1mdist/adapters/prisma-rollout.js [22m[
|
|
50
|
+
[32mESM[39m [1mdist/adapters/prisma-rollout.js [22m[32m191.00 B[39m
|
|
44
51
|
[32mESM[39m [1mdist/chunk-57W3AR43.js [22m[32m1.55 KB[39m
|
|
45
|
-
[32mESM[39m [1mdist/commands.js [22m[
|
|
52
|
+
[32mESM[39m [1mdist/commands.js [22m[32m217.00 B[39m
|
|
46
53
|
[32mESM[39m [1mdist/chunk-YYFPDBJG.js [22m[32m1.86 KB[39m
|
|
47
|
-
[32mESM[39m [1mdist/
|
|
54
|
+
[32mESM[39m [1mdist/cli.js [22m[32m1.30 KB[39m
|
|
55
|
+
[32mESM[39m [1mdist/definitions.js [22m[32m322.00 B[39m
|
|
48
56
|
[32mESM[39m [1mdist/chunk-7BUOF367.js [22m[32m4.13 KB[39m
|
|
49
|
-
[32mESM[39m [1mdist/
|
|
50
|
-
[32mESM[39m [1mdist/
|
|
51
|
-
[32mESM[39m [1mdist/chunk-FUG5DT2C.js [22m[32m2.45 KB[39m
|
|
52
|
-
[32mESM[39m [1mdist/rollout-store-persistent.js.map [22m[32m71.00 B[39m
|
|
57
|
+
[32mESM[39m [1mdist/chunk-424PT5DM.js [22m[32m919.00 B[39m
|
|
58
|
+
[32mESM[39m [1mdist/protocol.js.map [22m[32m71.00 B[39m
|
|
53
59
|
[32mESM[39m [1mdist/adapters/index.js.map [22m[32m71.00 B[39m
|
|
60
|
+
[32mESM[39m [1mdist/pulsar.js.map [22m[32m71.00 B[39m
|
|
61
|
+
[32mESM[39m [1mdist/rollout.js.map [22m[32m71.00 B[39m
|
|
62
|
+
[32mESM[39m [1mdist/rollout-store-persistent.js.map [22m[32m71.00 B[39m
|
|
54
63
|
[32mESM[39m [1mdist/sandbox.js.map [22m[32m71.00 B[39m
|
|
55
64
|
[32mESM[39m [1mdist/skills.js.map [22m[32m71.00 B[39m
|
|
56
65
|
[32mESM[39m [1mdist/subagents.js.map [22m[32m71.00 B[39m
|
|
57
66
|
[32mESM[39m [1mdist/tools.js.map [22m[32m71.00 B[39m
|
|
67
|
+
[32mESM[39m [1mdist/dispatcher.js.map [22m[32m71.00 B[39m
|
|
58
68
|
[32mESM[39m [1mdist/durable-turn.js.map [22m[32m71.00 B[39m
|
|
59
69
|
[32mESM[39m [1mdist/hook-pipeline.js.map [22m[32m71.00 B[39m
|
|
60
70
|
[32mESM[39m [1mdist/loop.js.map [22m[32m71.00 B[39m
|
|
61
71
|
[32mESM[39m [1mdist/mcp-bridge.js.map [22m[32m71.00 B[39m
|
|
62
72
|
[32mESM[39m [1mdist/model.js.map [22m[32m71.00 B[39m
|
|
73
|
+
[32mESM[39m [1mdist/orchestration.js.map [22m[32m71.00 B[39m
|
|
63
74
|
[32mESM[39m [1mdist/policy.js.map [22m[32m71.00 B[39m
|
|
64
|
-
[32mESM[39m [1mdist/
|
|
65
|
-
[32mESM[39m [1mdist/
|
|
66
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m251.69 KB[39m
|
|
75
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m246.22 KB[39m
|
|
76
|
+
[32mESM[39m [1mdist/chunk-KCNN4QUQ.js.map [22m[32m14.41 KB[39m
|
|
67
77
|
[32mESM[39m [1mdist/chunk-2DA6Q6TN.js.map [22m[32m8.01 KB[39m
|
|
68
78
|
[32mESM[39m [1mdist/chunk-MUF7ZZTO.js.map [22m[32m4.91 KB[39m
|
|
69
|
-
[32mESM[39m [1mdist/chunk-
|
|
70
|
-
[32mESM[39m [1mdist/chunk-5N4644PB.js.map [22m[32m6.73 KB[39m
|
|
79
|
+
[32mESM[39m [1mdist/chunk-GQZKYWFT.js.map [22m[32m13.03 KB[39m
|
|
71
80
|
[32mESM[39m [1mdist/chunk-5YS7WAPS.js.map [22m[32m15.75 KB[39m
|
|
72
|
-
[32mESM[39m [1mdist/chunk-
|
|
81
|
+
[32mESM[39m [1mdist/chunk-RDKYDMXT.js.map [22m[32m8.81 KB[39m
|
|
82
|
+
[32mESM[39m [1mdist/chunk-FUG5DT2C.js.map [22m[32m7.87 KB[39m
|
|
83
|
+
[32mESM[39m [1mdist/chunk-SD2ZJ7XG.js.map [22m[32m6.73 KB[39m
|
|
73
84
|
[32mESM[39m [1mdist/chunk-LO24VOA3.js.map [22m[32m17.32 KB[39m
|
|
74
|
-
[32mESM[39m [1mdist/chunk-
|
|
75
|
-
[32mESM[39m [1mdist/chunk-
|
|
85
|
+
[32mESM[39m [1mdist/chunk-D4YAPLOW.js.map [22m[32m10.82 KB[39m
|
|
86
|
+
[32mESM[39m [1mdist/chunk-37BBB2P2.js.map [22m[32m6.88 KB[39m
|
|
87
|
+
[32mESM[39m [1mdist/chunk-NI4EDT4T.js.map [22m[32m3.53 KB[39m
|
|
88
|
+
[32mESM[39m [1mdist/chunk-4Y25ZTKI.js.map [22m[32m5.46 KB[39m
|
|
76
89
|
[32mESM[39m [1mdist/chunk-6EGG2OZC.js.map [22m[32m5.96 KB[39m
|
|
90
|
+
[32mESM[39m [1mdist/chunk-MX2WL43P.js.map [22m[32m6.96 KB[39m
|
|
77
91
|
[32mESM[39m [1mdist/chunk-CGRCUKGT.js.map [22m[32m7.65 KB[39m
|
|
78
|
-
[32mESM[39m [1mdist/chunk-37BBB2P2.js.map [22m[32m6.88 KB[39m
|
|
79
92
|
[32mESM[39m [1mdist/adapters/dispatcher-sse.js.map [22m[32m71.00 B[39m
|
|
80
93
|
[32mESM[39m [1mdist/chunk-ZTSKS42I.js.map [22m[32m10.83 KB[39m
|
|
81
94
|
[32mESM[39m [1mdist/adapters/mcp-catalog.js.map [22m[32m71.00 B[39m
|
|
@@ -84,15 +97,15 @@
|
|
|
84
97
|
[32mESM[39m [1mdist/chunk-57W3AR43.js.map [22m[32m4.88 KB[39m
|
|
85
98
|
[32mESM[39m [1mdist/commands.js.map [22m[32m71.00 B[39m
|
|
86
99
|
[32mESM[39m [1mdist/chunk-YYFPDBJG.js.map [22m[32m6.97 KB[39m
|
|
100
|
+
[32mESM[39m [1mdist/cli.js.map [22m[32m2.29 KB[39m
|
|
87
101
|
[32mESM[39m [1mdist/definitions.js.map [22m[32m71.00 B[39m
|
|
88
102
|
[32mESM[39m [1mdist/chunk-7BUOF367.js.map [22m[32m10.17 KB[39m
|
|
89
|
-
[32mESM[39m [1mdist/
|
|
90
|
-
[32mESM[39m
|
|
91
|
-
[32mESM[39m [1mdist/chunk-FUG5DT2C.js.map [22m[32m7.87 KB[39m
|
|
92
|
-
[32mESM[39m ⚡️ Build success in 132ms
|
|
103
|
+
[32mESM[39m [1mdist/chunk-424PT5DM.js.map [22m[32m71.00 B[39m
|
|
104
|
+
[32mESM[39m ⚡️ Build success in 361ms
|
|
93
105
|
[34mDTS[39m Build start
|
|
94
|
-
[32mDTS[39m ⚡️ Build success in
|
|
106
|
+
[32mDTS[39m ⚡️ Build success in 13376ms
|
|
95
107
|
[32mDTS[39m [1mdist/adapters/index.d.ts [22m[32m581.00 B[39m
|
|
108
|
+
[32mDTS[39m [1mdist/cli.d.ts [22m[32m13.00 B[39m
|
|
96
109
|
[32mDTS[39m [1mdist/adapters/dispatcher-sse.d.ts [22m[32m3.18 KB[39m
|
|
97
110
|
[32mDTS[39m [1mdist/adapters/mcp-catalog.d.ts [22m[32m2.77 KB[39m
|
|
98
111
|
[32mDTS[39m [1mdist/adapters/prisma-rollout.d.ts [22m[32m2.10 KB[39m
|
|
@@ -100,8 +113,10 @@
|
|
|
100
113
|
[32mDTS[39m [1mdist/dispatcher.d.ts [22m[32m1.91 KB[39m
|
|
101
114
|
[32mDTS[39m [1mdist/durable-turn.d.ts [22m[32m2.55 KB[39m
|
|
102
115
|
[32mDTS[39m [1mdist/hook-pipeline.d.ts [22m[32m5.33 KB[39m
|
|
103
|
-
[32mDTS[39m [1mdist/
|
|
104
|
-
[32mDTS[39m [1mdist/
|
|
116
|
+
[32mDTS[39m [1mdist/mcp-bridge.d.ts [22m[32m1.91 KB[39m
|
|
117
|
+
[32mDTS[39m [1mdist/orchestration.d.ts [22m[32m1.64 KB[39m
|
|
118
|
+
[32mDTS[39m [1mdist/pulsar.d.ts [22m[32m2.71 KB[39m
|
|
119
|
+
[32mDTS[39m [1mdist/loop.d.ts [22m[32m3.16 KB[39m
|
|
105
120
|
[32mDTS[39m [1mdist/protocol.d.ts [22m[32m5.32 KB[39m
|
|
106
121
|
[32mDTS[39m [1mdist/rollout-store-persistent.d.ts [22m[32m1.77 KB[39m
|
|
107
122
|
[32mDTS[39m [1mdist/rollout.d.ts [22m[32m3.28 KB[39m
|
|
@@ -111,5 +126,5 @@
|
|
|
111
126
|
[32mDTS[39m [1mdist/subagents.d.ts [22m[32m5.74 KB[39m
|
|
112
127
|
[32mDTS[39m [1mdist/model.d.ts [22m[32m5.79 KB[39m
|
|
113
128
|
[32mDTS[39m [1mdist/definitions.d.ts [22m[32m3.96 KB[39m
|
|
114
|
-
[32mDTS[39m [1mdist/tools.d.ts [22m[
|
|
115
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
129
|
+
[32mDTS[39m [1mdist/tools.d.ts [22m[32m3.01 KB[39m
|
|
130
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m83.11 KB[39m
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,44 +1,47 @@
|
|
|
1
1
|
|
|
2
|
-
> @nebutra/agent-runtime@0.2.
|
|
2
|
+
> @nebutra/agent-runtime@0.2.1 test /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime
|
|
3
3
|
> vitest run
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.4 [39m[90m/home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime[39m
|
|
7
7
|
|
|
8
|
-
[32m✓[39m src/
|
|
9
|
-
[32m✓[39m src/
|
|
10
|
-
[32m✓[39m src/
|
|
11
|
-
[32m✓[39m src/
|
|
12
|
-
[32m✓[39m src/fuzzy-match.test.ts [2m([22m[2m36 tests[22m[2m)[22m[32m
|
|
13
|
-
[32m✓[39m src/
|
|
14
|
-
[32m✓[39m src/session-share.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m
|
|
15
|
-
[32m✓[39m src/artifact-stream.test.ts [2m([22m[2m27 tests[22m[2m)[22m[32m
|
|
16
|
-
[32m✓[39m src/skills.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m
|
|
17
|
-
[32m✓[39m src/command-suggestions.test.ts [2m([22m[2m25 tests[22m[2m)[22m[32m
|
|
18
|
-
[32m✓[39m src/commit-message.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m
|
|
19
|
-
[32m✓[39m src/subagents.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m
|
|
20
|
-
[32m✓[39m src/hook-pipeline.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m
|
|
21
|
-
[32m✓[39m src/memory-provider.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m
|
|
22
|
-
[32m✓[39m src/
|
|
23
|
-
[32m✓[39m src/
|
|
24
|
-
[32m✓[39m src/dispatcher.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m
|
|
25
|
-
[32m✓[39m src/commands.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m
|
|
26
|
-
[32m✓[39m src/workbench.test.ts [2m([22m[2m19 tests[22m[2m)[22m[32m
|
|
27
|
-
[32m✓[39m src/
|
|
28
|
-
[32m✓[39m src/
|
|
29
|
-
[32m✓[39m src/edit-planner.test.ts [2m([22m[2m21 tests[22m[2m)[22m[32m
|
|
30
|
-
[32m✓[39m src/
|
|
31
|
-
[32m✓[39m src/
|
|
32
|
-
[32m✓[39m src/skill-distillation.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m
|
|
33
|
-
[32m✓[39m src/design-context.test.ts [2m([22m[2m17 tests[22m[2m)[22m[32m
|
|
34
|
-
[32m✓[39m src/
|
|
35
|
-
[32m✓[39m src/
|
|
36
|
-
[32m✓[39m src/
|
|
37
|
-
[32m✓[39m src/
|
|
38
|
-
[32m✓[39m src/
|
|
8
|
+
[32m✓[39m src/context-compaction.test.ts [2m([22m[2m38 tests[22m[2m)[22m[32m 131[2mms[22m[39m
|
|
9
|
+
[32m✓[39m src/channel-gateway.test.ts [2m([22m[2m32 tests[22m[2m)[22m[32m 237[2mms[22m[39m
|
|
10
|
+
[32m✓[39m src/code-review.test.ts [2m([22m[2m43 tests[22m[2m)[22m[32m 240[2mms[22m[39m
|
|
11
|
+
[32m✓[39m src/inbound-admission.test.ts [2m([22m[2m45 tests[22m[2m)[22m[32m 214[2mms[22m[39m
|
|
12
|
+
[32m✓[39m src/fuzzy-match.test.ts [2m([22m[2m36 tests[22m[2m)[22m[32m 138[2mms[22m[39m
|
|
13
|
+
[32m✓[39m src/permission-ruleset.test.ts [2m([22m[2m41 tests[22m[2m)[22m[32m 245[2mms[22m[39m
|
|
14
|
+
[32m✓[39m src/session-share.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 136[2mms[22m[39m
|
|
15
|
+
[32m✓[39m src/artifact-stream.test.ts [2m([22m[2m27 tests[22m[2m)[22m[32m 193[2mms[22m[39m
|
|
16
|
+
[32m✓[39m src/skills.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 198[2mms[22m[39m
|
|
17
|
+
[32m✓[39m src/command-suggestions.test.ts [2m([22m[2m25 tests[22m[2m)[22m[32m 157[2mms[22m[39m
|
|
18
|
+
[32m✓[39m src/commit-message.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 173[2mms[22m[39m
|
|
19
|
+
[32m✓[39m src/subagents.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m 74[2mms[22m[39m
|
|
20
|
+
[32m✓[39m src/hook-pipeline.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 289[2mms[22m[39m
|
|
21
|
+
[32m✓[39m src/memory-provider.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 139[2mms[22m[39m
|
|
22
|
+
[32m✓[39m src/project-repo.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 112[2mms[22m[39m
|
|
23
|
+
[32m✓[39m src/adapters/dispatcher-sse.test.ts [2m([22m[2m11 tests[22m[2m)[22m[32m 282[2mms[22m[39m
|
|
24
|
+
[32m✓[39m src/dispatcher.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 213[2mms[22m[39m
|
|
25
|
+
[32m✓[39m src/commands.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 69[2mms[22m[39m
|
|
26
|
+
[32m✓[39m src/workbench.test.ts [2m([22m[2m19 tests[22m[2m)[22m[32m 113[2mms[22m[39m
|
|
27
|
+
[32m✓[39m src/adapters/mcp-catalog.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 126[2mms[22m[39m
|
|
28
|
+
[32m✓[39m src/rollout-store-persistent.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 148[2mms[22m[39m
|
|
29
|
+
[32m✓[39m src/edit-planner.test.ts [2m([22m[2m21 tests[22m[2m)[22m[32m 146[2mms[22m[39m
|
|
30
|
+
[32m✓[39m src/deployment-status.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m 69[2mms[22m[39m
|
|
31
|
+
[32m✓[39m src/durable-turn.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 54[2mms[22m[39m
|
|
32
|
+
[32m✓[39m src/skill-distillation.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 40[2mms[22m[39m
|
|
33
|
+
[32m✓[39m src/design-context.test.ts [2m([22m[2m17 tests[22m[2m)[22m[32m 49[2mms[22m[39m
|
|
34
|
+
[32m✓[39m src/mcp-bridge.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 49[2mms[22m[39m
|
|
35
|
+
[32m✓[39m src/agent-runtime.test.ts [2m([22m[2m15 tests[22m[2m)[22m[32m 98[2mms[22m[39m
|
|
36
|
+
[32m✓[39m src/adapters/prisma-rollout.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 41[2mms[22m[39m
|
|
37
|
+
[32m✓[39m src/loop.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 40[2mms[22m[39m
|
|
38
|
+
[32m✓[39m src/pulsar.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 44[2mms[22m[39m
|
|
39
|
+
[32m✓[39m src/definitions.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 13[2mms[22m[39m
|
|
40
|
+
[32m✓[39m src/orchestration.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 9[2mms[22m[39m
|
|
41
|
+
[32m✓[39m src/tools.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 15[2mms[22m[39m
|
|
39
42
|
|
|
40
|
-
[2m Test Files [22m [1m[
|
|
41
|
-
[2m Tests [22m [1m[
|
|
42
|
-
[2m Start at [22m
|
|
43
|
-
[2m Duration [22m
|
|
43
|
+
[2m Test Files [22m [1m[32m34 passed[39m[22m[90m (34)[39m
|
|
44
|
+
[2m Tests [22m [1m[32m641 passed[39m[22m[90m (641)[39m
|
|
45
|
+
[2m Start at [22m 08:15:22
|
|
46
|
+
[2m Duration [22m 15.08s[2m (transform 4.12s, setup 0ms, import 15.30s, tests 4.29s, environment 6ms)[22m
|
|
44
47
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
# @nebutra/agent-runtime
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Publish registry package metadata under the MIT license.
|
|
8
|
+
|
|
9
|
+
- Updated dependencies []:
|
|
10
|
+
- @nebutra/ai-primitives@0.1.1
|
|
11
|
+
- @nebutra/capability-kit@0.2.1
|
|
12
|
+
- @nebutra/execution-policy@0.1.1
|
|
13
|
+
- @nebutra/mcp@0.1.2
|
|
14
|
+
|
|
3
15
|
## 0.2.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
6
18
|
|
|
7
19
|
- [`fab751f`](https://github.com/Nebutra/Nebutra-Sailor/commit/fab751f39639251bfa006b1bfbcd8cd62f94626a) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - New adapter subpaths inside `@nebutra/agent-runtime`: concrete reusable port
|
|
8
20
|
adapters for the runtime package.
|
|
9
|
-
|
|
10
21
|
- `mcp-catalog`: adapts `@nebutra/mcp` `serverRegistry`/`mcpClient` into the
|
|
11
22
|
`McpServerCatalogPort` / `McpClientLike` ports — plan-gated, tenant
|
|
12
23
|
fail-closed, schema-less MCP tools still yield usable definitions,
|
|
@@ -22,7 +33,6 @@
|
|
|
22
33
|
governance decision — documented in the README).
|
|
23
34
|
|
|
24
35
|
- [`4865ac9`](https://github.com/Nebutra/Nebutra-Sailor/commit/4865ac9bff6dd83635bc33e4aeb348b087dee7c7) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the IDE-coding-agent delta (over the already-absorbed CLI core).
|
|
25
|
-
|
|
26
36
|
- `code-review`: a pure unified-diff parser, branch-base resolution, a
|
|
27
37
|
confidence-banded review prompt (CRITICAL ≥95% / WARNING ≥85% /
|
|
28
38
|
SUGGESTION ≥75% / below → omit) with an untrusted-content injection guard
|
|
@@ -43,7 +53,6 @@
|
|
|
43
53
|
impurity is an injected model/summarize port. 632 package tests.
|
|
44
54
|
|
|
45
55
|
- [`67f9cd0`](https://github.com/Nebutra/Nebutra-Sailor/commit/67f9cd02c0ee908f0579efadc4292d535a758c16) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Durable rollout-store backend (the agent-runtime system-of-record).
|
|
46
|
-
|
|
47
56
|
- New Prisma model `AgentRolloutLine` → table `agent_rollout_lines`, additive
|
|
48
57
|
migration `20260519000000_add_agent_rollout_store` (one CREATE TABLE).
|
|
49
58
|
- `createPrismaRolloutPersistence` in `@nebutra/agent-runtime-adapters`:
|
|
@@ -55,7 +64,6 @@
|
|
|
55
64
|
migrate+generate deploy step (ADR 2026-05-19), not faked durability.
|
|
56
65
|
|
|
57
66
|
- [`bb1b126`](https://github.com/Nebutra/Nebutra-Sailor/commit/bb1b126e82379d88da10f43a86d9d07bccc3a224) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the git-backed-project delta (over the already-absorbed core).
|
|
58
|
-
|
|
59
67
|
- `project-repo`: durable project = git repo. Metadata + per-conversation
|
|
60
68
|
jsonl logs persisted as committed files (one commit per turn); history /
|
|
61
69
|
restore by commit SHA (commit graph IS the history — distinct from
|
|
@@ -71,7 +79,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
71
79
|
renamed `DeploymentCommitRef`). 252 package tests.
|
|
72
80
|
|
|
73
81
|
- [`da6bfea`](https://github.com/Nebutra/Nebutra-Sailor/commit/da6bfeaf6c323a9aecefdd65c481a9852aee25b9) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Add `@nebutra/agent-runtime`: a multi-tenant agent-runtime grammar.
|
|
74
|
-
|
|
75
82
|
- New package re-expresses a coding-agent runtime _design_ in Sailor grammar —
|
|
76
83
|
thread/turn/item model + event lifecycle, two-axis approval/capability
|
|
77
84
|
policy, uniform tool/MCP abstraction, event-sourced rollout with compaction,
|
|
@@ -85,7 +92,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
85
92
|
|
|
86
93
|
- [`3c5c43e`](https://github.com/Nebutra/Nebutra-Sailor/commit/3c5c43e1c07c03da936d2948408f8abb4b113321) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the differentiated coding-agent-harness capabilities (the delta over
|
|
87
94
|
the already-absorbed core).
|
|
88
|
-
|
|
89
95
|
- `definitions`: shared layered-tier resolver (precedence + dual
|
|
90
96
|
availability/enabled gate) + frontmatter parser — backs commands, skills,
|
|
91
97
|
subagents from one kernel.
|
|
@@ -106,7 +112,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
106
112
|
transports deliberately dropped for multi-tenant safety). 135 package tests.
|
|
107
113
|
|
|
108
114
|
- [`a29b2d9`](https://github.com/Nebutra/Nebutra-Sailor/commit/a29b2d997416edc4e421b31b777724ae70e4da54) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Add the agent loop runner — the turn engine.
|
|
109
|
-
|
|
110
115
|
- `runTurn()` drives a turn `loop { model_call → emit items → execute tools
|
|
111
116
|
→ feed results back }` until the model stops requesting tools or a bounded
|
|
112
117
|
step ceiling is hit. Single-threaded (shared context, no conflicting
|
|
@@ -120,7 +125,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
120
125
|
thrown to the caller.
|
|
121
126
|
|
|
122
127
|
- [`cd34724`](https://github.com/Nebutra/Nebutra-Sailor/commit/cd347242ab6874931a74aa72aa9a0d183f7dd5d3) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the multi-channel-gateway delta (over the already-absorbed core).
|
|
123
|
-
|
|
124
128
|
- `channel-gateway`: channel-agnostic `InboundMessage`/`OutboundMessage`
|
|
125
129
|
normalization, a `ChannelAdapter` port (parseInbound returns null for
|
|
126
130
|
non-message events, never throws on junk), tenant-scoped `ChannelRegistry`,
|
|
@@ -138,7 +142,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
138
142
|
- [`447e948`](https://github.com/Nebutra/Nebutra-Sailor/commit/447e948a7153446e7bc3769395c1687c9f27c991) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Close the runtime gap — four capabilities, all tenant-scoped & fail-closed,
|
|
139
143
|
each behind an injectable port so the package keeps zero datastore/queue
|
|
140
144
|
dependency ("no infra change" stays honest):
|
|
141
|
-
|
|
142
145
|
- **Durable / resumable turn** (`durable-turn.ts`): `createDurableTurn` wraps
|
|
143
146
|
`runTurn` behind a `DurableTurnQueuePort`; `resume` replays the rollout and
|
|
144
147
|
re-drives an unfinished turn, idempotent and cross-tenant isolated.
|
|
@@ -155,7 +158,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
155
158
|
seq, faithful round-trip, cross-tenant isolation, typed round-trip errors.
|
|
156
159
|
|
|
157
160
|
- [`b1b9b72`](https://github.com/Nebutra/Nebutra-Sailor/commit/b1b9b7251ef6b1b84e5211dd9b4ae14a1be4b05a) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the self-improving-loop delta (over the already-absorbed core).
|
|
158
|
-
|
|
159
161
|
- `memory-provider`: pluggable cross-session `MemoryProvider` port (full
|
|
160
162
|
lifecycle: initialize/prefetch/syncTurn/onSessionEnd/onSessionSwitch/
|
|
161
163
|
onPreCompress/onDelegation/systemPromptBlock) + a `MemoryManager` that
|
|
@@ -172,7 +174,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
172
174
|
backends are injected ports. 288 package tests.
|
|
173
175
|
|
|
174
176
|
- [`5ed8c38`](https://github.com/Nebutra/Nebutra-Sailor/commit/5ed8c38362e86bad51786383b81cc921b11d1b18) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the coding-agent share/permission delta (over the already-absorbed core).
|
|
175
|
-
|
|
176
177
|
- `permission-ruleset`: `Rule{permission,pattern,action:allow|deny|ask}` +
|
|
177
178
|
`evaluate(...rulesets)` first-match over both dimensions with fail-safe
|
|
178
179
|
`ask` default, a `wildcardMatch` with the faithful trailing `" *"`-optional
|
|
@@ -188,7 +189,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
188
189
|
where stateless; transport/crypto/store injected. 496 package tests.
|
|
189
190
|
|
|
190
191
|
- [`77c0105`](https://github.com/Nebutra/Nebutra-Sailor/commit/77c0105ce89a4ff0f5e86229cce9c2561c1b1c5f) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the site-clone / targeted-edit delta (over the already-absorbed core).
|
|
191
|
-
|
|
192
192
|
- `design-context`: website → structured generation seed
|
|
193
193
|
`{content, brand{colors,fonts}, screenshot, title}` — pure normalizer +
|
|
194
194
|
injected `ScrapeProvider` port (no network/provider lock-in),
|
|
@@ -202,7 +202,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
202
202
|
injected ports. 219 package tests.
|
|
203
203
|
|
|
204
204
|
- [`1e2d929`](https://github.com/Nebutra/Nebutra-Sailor/commit/1e2d9298f4f093cbe81199e7dcd3991116d01ea2) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the terminal-suggestion delta (over the already-absorbed core).
|
|
205
|
-
|
|
206
205
|
- `fuzzy-match`: smart-case subsequence fuzzy match returning
|
|
207
206
|
`{score, indices}` (lowercase query ⇒ case-insensitive; any uppercase ⇒
|
|
208
207
|
case-sensitive), case-insensitive + ignore-spaces variants (indices map to
|
|
@@ -219,7 +218,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
219
218
|
426 package tests.
|
|
220
219
|
|
|
221
220
|
- [`509338e`](https://github.com/Nebutra/Nebutra-Sailor/commit/509338ee5ffc537c108f06cd1fc24a811a5e05b8) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Concrete Track-B coupling for the agent-runtime external-sandbox seam.
|
|
222
|
-
|
|
223
221
|
- Add `createHttpSandbox(baseUrl)`: an `ExternalSandbox` that delegates
|
|
224
222
|
execution over HTTP to the decoupled Rust isolator
|
|
225
223
|
(`backends/rust/sandbox`, `POST /api/v1/sandbox/exec`).
|
|
@@ -231,7 +229,6 @@ failed`), latest-status + timeline-from-commits derivations, explicit
|
|
|
231
229
|
|
|
232
230
|
- [`efe764d`](https://github.com/Nebutra/Nebutra-Sailor/commit/efe764d60085352eae304dc37dc22fda8920e587) Thanks [@TsekaLuk](https://github.com/TsekaLuk)! - Absorb the web-app-builder delta (the differentiated capabilities over the
|
|
233
231
|
already-absorbed harness core).
|
|
234
|
-
|
|
235
232
|
- `artifact-stream`: streaming artifact/action protocol — a chunk-fed
|
|
236
233
|
incremental parser for an `<artifact>` of ordered
|
|
237
234
|
`<action type=file|shell|start|build|data>` blocks (split-tag safe, no
|
package/README.md
CHANGED
package/dist/adapters/index.js
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
__export,
|
|
21
|
+
__reExport
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-424PT5DM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/tools.ts
|
|
2
|
-
var
|
|
2
|
+
var RuntimeToolRegistry = class {
|
|
3
3
|
#tools = /* @__PURE__ */ new Map();
|
|
4
4
|
#hooks;
|
|
5
5
|
constructor(hooks = {}) {
|
|
@@ -40,7 +40,7 @@ function adaptMcpTool(server, definition, client) {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export {
|
|
43
|
-
|
|
43
|
+
RuntimeToolRegistry,
|
|
44
44
|
adaptMcpTool
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-4Y25ZTKI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools.ts"],"sourcesContent":["/**\n * Tool / MCP abstraction (WRAP — capability #9).\n *\n * Faithful re-expression of the upstream uniform tool model: one\n * `ToolDefinition` interface, JSON-schema in/out, a deferred-load flag, and\n * MCP-as-adapter behind the same interface (MCP tools and native tools are\n * indistinguishable at dispatch). Activates `@nebutra/mcp` primitives rather\n * than re-porting them.\n */\n\nimport type { z } from \"zod\";\n\n/** A tool definition — pure data; transport-agnostic. */\nexport interface ToolDefinition<I = unknown, O = unknown> {\n readonly name: string;\n readonly description: string;\n readonly inputSchema: z.ZodType<I>;\n readonly outputSchema?: z.ZodType<O>;\n /**\n * When true, the full schema is withheld until a `tool_search` discovery\n * step lazily loads it (parity with the upstream deferred-tool pattern).\n */\n readonly deferLoading?: boolean;\n}\n\n/** Source provenance — native vs. adapted from an MCP server. */\nexport type ToolOrigin =\n | { readonly kind: \"native\" }\n | { readonly kind: \"mcp\"; readonly server: string };\n\nexport interface RegisteredTool {\n readonly definition: ToolDefinition;\n readonly origin: ToolOrigin;\n}\n\n/** A tool invocation routed through the registry. */\nexport interface ToolDispatchContext {\n /** Mandatory tenant scope — every dispatch is tenant-bound. */\n readonly tenantId: string;\n readonly threadId: string;\n}\n\nexport type ToolHandler<I = unknown, O = unknown> = (\n input: I,\n ctx: ToolDispatchContext,\n) => Promise<O>;\n\n/** Pre/post dispatch hooks (parity with upstream orchestrator hooks). */\nexport interface ToolHooks {\n readonly preToolUse?: (name: string, input: unknown, ctx: ToolDispatchContext) => Promise<void>;\n readonly postToolUse?: (name: string, output: unknown, ctx: ToolDispatchContext) => Promise<void>;\n}\n\n/**\n * runtime registry -> router -> orchestrator pipeline. MCP tools register via\n * {@link adaptMcpTool} and are dispatched identically to native tools.\n */\nexport class RuntimeToolRegistry {\n readonly #tools = new Map<string, { reg: RegisteredTool; handler: ToolHandler }>();\n readonly #hooks: ToolHooks;\n\n constructor(hooks: ToolHooks = {}) {\n this.#hooks = hooks;\n }\n\n register<I, O>(\n definition: ToolDefinition<I, O>,\n handler: ToolHandler<I, O>,\n origin: ToolOrigin = { kind: \"native\" },\n ): void {\n if (this.#tools.has(definition.name)) {\n throw new Error(`Tool already registered: ${definition.name}`);\n }\n this.#tools.set(definition.name, {\n reg: { definition: definition as ToolDefinition, origin },\n handler: handler as ToolHandler,\n });\n }\n\n list(): readonly RegisteredTool[] {\n return [...this.#tools.values()].map((e) => e.reg);\n }\n\n async dispatch(name: string, rawInput: unknown, ctx: ToolDispatchContext): Promise<unknown> {\n const entry = this.#tools.get(name);\n if (!entry) throw new Error(`Unknown tool: ${name}`);\n const input = entry.reg.definition.inputSchema.parse(rawInput);\n await this.#hooks.preToolUse?.(name, input, ctx);\n const output = await entry.handler(input, ctx);\n const validated = entry.reg.definition.outputSchema\n ? entry.reg.definition.outputSchema.parse(output)\n : output;\n await this.#hooks.postToolUse?.(name, validated, ctx);\n return validated;\n }\n}\n\n/** @deprecated Use RuntimeToolRegistry for new code. */\nexport { RuntimeToolRegistry as ToolRegistry };\n\n/** Minimal shape of an MCP client (satisfied by `@nebutra/mcp`'s `mcpClient`). */\nexport interface McpClientLike {\n executeTool(\n name: string,\n args: unknown,\n ctx: { requestId: string; tenantId: string },\n ): Promise<unknown>;\n}\n\n/**\n * Adapt an external MCP tool into the uniform tool model. The resulting\n * handler delegates to the MCP client; callers cannot tell it apart from a\n * native tool.\n */\nexport function adaptMcpTool(\n server: string,\n definition: ToolDefinition,\n client: McpClientLike,\n): { definition: ToolDefinition; handler: ToolHandler; origin: ToolOrigin } {\n return {\n definition,\n origin: { kind: \"mcp\", server },\n handler: async (input, ctx) =>\n client.executeTool(definition.name, input, {\n requestId: globalThis.crypto?.randomUUID?.() ?? `${Date.now()}`,\n tenantId: ctx.tenantId,\n }),\n };\n}\n"],"mappings":";AAyDO,IAAM,sBAAN,MAA0B;AAAA,EACtB,SAAS,oBAAI,IAA2D;AAAA,EACxE;AAAA,EAET,YAAY,QAAmB,CAAC,GAAG;AACjC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,SACE,YACA,SACA,SAAqB,EAAE,MAAM,SAAS,GAChC;AACN,QAAI,KAAK,OAAO,IAAI,WAAW,IAAI,GAAG;AACpC,YAAM,IAAI,MAAM,4BAA4B,WAAW,IAAI,EAAE;AAAA,IAC/D;AACA,SAAK,OAAO,IAAI,WAAW,MAAM;AAAA,MAC/B,KAAK,EAAE,YAA0C,OAAO;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAkC;AAChC,WAAO,CAAC,GAAG,KAAK,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,EACnD;AAAA,EAEA,MAAM,SAAS,MAAc,UAAmB,KAA4C;AAC1F,UAAM,QAAQ,KAAK,OAAO,IAAI,IAAI;AAClC,QAAI,CAAC,MAAO,OAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;AACnD,UAAM,QAAQ,MAAM,IAAI,WAAW,YAAY,MAAM,QAAQ;AAC7D,UAAM,KAAK,OAAO,aAAa,MAAM,OAAO,GAAG;AAC/C,UAAM,SAAS,MAAM,MAAM,QAAQ,OAAO,GAAG;AAC7C,UAAM,YAAY,MAAM,IAAI,WAAW,eACnC,MAAM,IAAI,WAAW,aAAa,MAAM,MAAM,IAC9C;AACJ,UAAM,KAAK,OAAO,cAAc,MAAM,WAAW,GAAG;AACpD,WAAO;AAAA,EACT;AACF;AAmBO,SAAS,aACd,QACA,YACA,QAC0E;AAC1E,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,EAAE,MAAM,OAAO,OAAO;AAAA,IAC9B,SAAS,OAAO,OAAO,QACrB,OAAO,YAAY,WAAW,MAAM,OAAO;AAAA,MACzC,WAAW,WAAW,QAAQ,aAAa,KAAK,GAAG,KAAK,IAAI,CAAC;AAAA,MAC7D,UAAU,IAAI;AAAA,IAChB,CAAC;AAAA,EACL;AACF;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sanitizeForPersist
|
|
3
|
+
} from "./chunk-37BBB2P2.js";
|
|
1
4
|
import {
|
|
2
5
|
DENIED,
|
|
3
6
|
isApproval,
|
|
4
7
|
resolveRuleDecision
|
|
5
8
|
} from "./chunk-CGRCUKGT.js";
|
|
6
|
-
import {
|
|
7
|
-
sanitizeForPersist
|
|
8
|
-
} from "./chunk-37BBB2P2.js";
|
|
9
9
|
|
|
10
10
|
// src/loop.ts
|
|
11
11
|
var DEFAULT_MAX_STEPS = 20;
|
|
@@ -118,4 +118,4 @@ async function gateToolCall(name, args, deps, ruleEvaluator) {
|
|
|
118
118
|
export {
|
|
119
119
|
runTurn
|
|
120
120
|
};
|
|
121
|
-
//# sourceMappingURL=chunk-
|
|
121
|
+
//# sourceMappingURL=chunk-D4YAPLOW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/loop.ts"],"sourcesContent":["/**\n * Agent loop runner (WRAP — the turn engine).\n *\n * Faithful re-expression of the upstream loop: a turn is\n * `loop { model_call → emit items → execute tools → feed results back }`\n * until the model stops requesting tools or a bounded step ceiling is hit.\n * Single-threaded (Cognition teaching: shared context, no conflicting\n * sub-agent decisions). Every item is appended to the tenant-scoped rollout\n * as it reaches a terminal state, so the turn is resumable by replay.\n *\n * The model call is abstracted behind {@link ModelInvoker} so this WRAPs an\n * existing model stack (e.g. `@nebutra/agents`) rather than re-porting\n * provider/routing/fallback. No untrusted code runs here — command items are\n * dispatched through the tool registry / external-sandbox seam.\n */\n\nimport type { AgentMessageItem, ThreadEvent, ThreadItem, TurnConfig, TurnUsage } from \"./model\";\nimport {\n type ApprovalPolicy,\n DENIED,\n isApproval,\n type ReviewDecision,\n type RuleDecision,\n resolveRuleDecision,\n} from \"./policy\";\nimport type { ServerRequest } from \"./protocol\";\nimport { type RolloutLine, type RolloutStore, sanitizeForPersist } from \"./rollout\";\nimport type { RuntimeToolRegistry, ToolDispatchContext } from \"./tools\";\n\n/** A single thing the model emitted in one round. */\nexport type ModelEmission =\n | { readonly kind: \"text\"; readonly text: string }\n | {\n readonly kind: \"tool_call\";\n readonly id: string;\n readonly name: string;\n readonly args: unknown;\n };\n\nexport interface ModelRoundResult {\n readonly emissions: readonly ModelEmission[];\n readonly usage?: Partial<TurnUsage>;\n}\n\nexport interface ModelRoundRequest {\n readonly config: TurnConfig;\n /** Running transcript: user input, agent text, and tool results. */\n readonly history: readonly { readonly role: string; readonly content: string }[];\n readonly toolNames: readonly string[];\n}\n\n/** Abstracts the model stack — implement over `@nebutra/agents`, etc. */\nexport interface ModelInvoker {\n invoke(request: ModelRoundRequest): Promise<ModelRoundResult>;\n}\n\n/** Server-initiated approval transport (see {@link ServerRequest}). */\nexport interface ApprovalGate {\n request(serverRequest: ServerRequest): Promise<ReviewDecision>;\n}\n\n/** Classifies a tool call into a static rule decision before approval. */\nexport type RuleEvaluator = (toolName: string, args: unknown) => RuleDecision;\n\nexport interface RunTurnDeps {\n readonly tenantId: string;\n readonly threadId: string;\n readonly config: TurnConfig;\n readonly approvalPolicy: ApprovalPolicy;\n readonly model: ModelInvoker;\n readonly tools: RuntimeToolRegistry;\n readonly store: RolloutStore;\n readonly approvalGate: ApprovalGate;\n /** Defaults to: everything requires a prompt (safe). */\n readonly ruleEvaluator?: RuleEvaluator;\n /** Bounded steps (parity with upstream step ceiling). Default 20. */\n readonly maxSteps?: number;\n}\n\nconst DEFAULT_MAX_STEPS = 20;\nconst requirePrompt: RuleEvaluator = () => \"prompt\";\n\nfunction newId(prefix: string): string {\n return `${prefix}_${globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`}`;\n}\n\n/**\n * Drive one turn to completion. Yields the {@link ThreadEvent} stream and\n * appends each terminal item + the turn outcome to the rollout store.\n * Never throws to the caller — failures surface as a `turn.failed` event.\n */\nexport async function* runTurn(userInput: string, deps: RunTurnDeps): AsyncGenerator<ThreadEvent> {\n const at = () => new Date().toISOString();\n const ruleEvaluator = deps.ruleEvaluator ?? requirePrompt;\n const maxSteps = deps.maxSteps ?? DEFAULT_MAX_STEPS;\n const ctx: ToolDispatchContext = { tenantId: deps.tenantId, threadId: deps.threadId };\n\n const append = async (line: RolloutLine): Promise<void> => deps.store.append(line);\n const event = async (e: ThreadEvent): Promise<ThreadEvent> => {\n await append({\n tenantId: deps.tenantId,\n threadId: deps.threadId,\n type: \"event\",\n event:\n e.type === \"item.completed\"\n ? { type: \"item.completed\", item: sanitizeForPersist(e.item) }\n : e,\n at: at(),\n });\n return e;\n };\n\n yield await event({ type: \"turn.started\" });\n\n const history: { role: string; content: string }[] = [{ role: \"user\", content: userInput }];\n let usage: TurnUsage = {\n inputTokens: 0,\n cachedInputTokens: 0,\n outputTokens: 0,\n reasoningOutputTokens: 0,\n };\n\n try {\n for (let step = 0; step < maxSteps; step++) {\n const round = await deps.model.invoke({\n config: deps.config,\n history,\n toolNames: deps.tools.list().map((t) => t.definition.name),\n });\n if (round.usage) {\n const u = round.usage;\n usage = {\n inputTokens: usage.inputTokens + (u.inputTokens ?? 0),\n cachedInputTokens: usage.cachedInputTokens + (u.cachedInputTokens ?? 0),\n outputTokens: usage.outputTokens + (u.outputTokens ?? 0),\n reasoningOutputTokens: usage.reasoningOutputTokens + (u.reasoningOutputTokens ?? 0),\n };\n }\n\n const toolCalls = round.emissions.filter(\n (e): e is Extract<ModelEmission, { kind: \"tool_call\" }> => e.kind === \"tool_call\",\n );\n\n for (const e of round.emissions) {\n if (e.kind !== \"text\") continue;\n const item: AgentMessageItem = { id: newId(\"msg\"), type: \"agent_message\", text: e.text };\n history.push({ role: \"assistant\", content: e.text });\n yield await event({ type: \"item.completed\", item });\n }\n\n if (toolCalls.length === 0) break; // model is done\n\n for (const call of toolCalls) {\n const decision = await gateToolCall(call.name, call.args, deps, ruleEvaluator);\n if (!isApproval(decision)) {\n const failed: ThreadItem = {\n id: call.id,\n type: \"error\",\n message: `tool '${call.name}' not approved (${decision.kind})`,\n };\n history.push({ role: \"tool\", content: `DENIED: ${call.name}` });\n yield await event({ type: \"item.completed\", item: failed });\n continue;\n }\n try {\n const output = await deps.tools.dispatch(call.name, call.args, ctx);\n const item: ThreadItem = {\n id: call.id,\n type: \"mcp_tool_call\",\n server: \"native\",\n tool: call.name,\n arguments: call.args,\n result: { content: output },\n status: \"completed\",\n };\n history.push({ role: \"tool\", content: JSON.stringify(output) });\n yield await event({ type: \"item.completed\", item });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n history.push({ role: \"tool\", content: `ERROR: ${message}` });\n yield await event({\n type: \"item.completed\",\n item: { id: call.id, type: \"error\", message },\n });\n }\n }\n }\n\n yield await event({ type: \"turn.completed\", usage });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n yield await event({ type: \"turn.failed\", error: { message } });\n }\n}\n\n/** Resolve a tool call's approval, raising a server-initiated request if asked. */\nasync function gateToolCall(\n name: string,\n args: unknown,\n deps: RunTurnDeps,\n ruleEvaluator: RuleEvaluator,\n): Promise<ReviewDecision> {\n const outcome = resolveRuleDecision(ruleEvaluator(name, args), deps.approvalPolicy);\n if (outcome === \"auto_allow\") return { kind: \"approved\" };\n if (outcome === \"auto_reject\") return DENIED;\n return deps.approvalGate.request({\n type: \"permissions.request_approval\",\n requestId: newId(\"appr\"),\n summary: `tool '${name}'`,\n });\n}\n"],"mappings":"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","names":[]}
|