@nebutra/agent-runtime 0.2.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.
Files changed (179) hide show
  1. package/.turbo/turbo-build.log +115 -0
  2. package/.turbo/turbo-test.log +44 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/CHANGELOG.md +253 -0
  5. package/LICENSE +676 -0
  6. package/README.md +50 -0
  7. package/dist/adapters/dispatcher-sse.d.ts +68 -0
  8. package/dist/adapters/dispatcher-sse.js +11 -0
  9. package/dist/adapters/dispatcher-sse.js.map +1 -0
  10. package/dist/adapters/index.d.ts +12 -0
  11. package/dist/adapters/index.js +21 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/mcp-catalog.d.ts +58 -0
  14. package/dist/adapters/mcp-catalog.js +9 -0
  15. package/dist/adapters/mcp-catalog.js.map +1 -0
  16. package/dist/adapters/prisma-rollout.d.ts +60 -0
  17. package/dist/adapters/prisma-rollout.js +7 -0
  18. package/dist/adapters/prisma-rollout.js.map +1 -0
  19. package/dist/chunk-24ZXP7FI.js +93 -0
  20. package/dist/chunk-24ZXP7FI.js.map +1 -0
  21. package/dist/chunk-2DA6Q6TN.js +126 -0
  22. package/dist/chunk-2DA6Q6TN.js.map +1 -0
  23. package/dist/chunk-37BBB2P2.js +73 -0
  24. package/dist/chunk-37BBB2P2.js.map +1 -0
  25. package/dist/chunk-57W3AR43.js +52 -0
  26. package/dist/chunk-57W3AR43.js.map +1 -0
  27. package/dist/chunk-5N4644PB.js +67 -0
  28. package/dist/chunk-5N4644PB.js.map +1 -0
  29. package/dist/chunk-5YS7WAPS.js +177 -0
  30. package/dist/chunk-5YS7WAPS.js.map +1 -0
  31. package/dist/chunk-6EGG2OZC.js +13 -0
  32. package/dist/chunk-6EGG2OZC.js.map +1 -0
  33. package/dist/chunk-7BUOF367.js +126 -0
  34. package/dist/chunk-7BUOF367.js.map +1 -0
  35. package/dist/chunk-BJBBR3QA.js +121 -0
  36. package/dist/chunk-BJBBR3QA.js.map +1 -0
  37. package/dist/chunk-CGRCUKGT.js +73 -0
  38. package/dist/chunk-CGRCUKGT.js.map +1 -0
  39. package/dist/chunk-FUG5DT2C.js +75 -0
  40. package/dist/chunk-FUG5DT2C.js.map +1 -0
  41. package/dist/chunk-LO24VOA3.js +199 -0
  42. package/dist/chunk-LO24VOA3.js.map +1 -0
  43. package/dist/chunk-MUF7ZZTO.js +57 -0
  44. package/dist/chunk-MUF7ZZTO.js.map +1 -0
  45. package/dist/chunk-NN7DATXA.js +46 -0
  46. package/dist/chunk-NN7DATXA.js.map +1 -0
  47. package/dist/chunk-PGGWSUTM.js +33 -0
  48. package/dist/chunk-PGGWSUTM.js.map +1 -0
  49. package/dist/chunk-RDKYDMXT.js +135 -0
  50. package/dist/chunk-RDKYDMXT.js.map +1 -0
  51. package/dist/chunk-YYFPDBJG.js +63 -0
  52. package/dist/chunk-YYFPDBJG.js.map +1 -0
  53. package/dist/chunk-ZMYX5VBU.js +135 -0
  54. package/dist/chunk-ZMYX5VBU.js.map +1 -0
  55. package/dist/chunk-ZTSKS42I.js +131 -0
  56. package/dist/chunk-ZTSKS42I.js.map +1 -0
  57. package/dist/commands.d.ts +74 -0
  58. package/dist/commands.js +10 -0
  59. package/dist/commands.js.map +1 -0
  60. package/dist/definitions.d.ts +94 -0
  61. package/dist/definitions.js +15 -0
  62. package/dist/definitions.js.map +1 -0
  63. package/dist/dispatcher.d.ts +50 -0
  64. package/dist/dispatcher.js +8 -0
  65. package/dist/dispatcher.js.map +1 -0
  66. package/dist/durable-turn.d.ts +58 -0
  67. package/dist/durable-turn.js +9 -0
  68. package/dist/durable-turn.js.map +1 -0
  69. package/dist/hook-pipeline.d.ts +114 -0
  70. package/dist/hook-pipeline.js +13 -0
  71. package/dist/hook-pipeline.js.map +1 -0
  72. package/dist/index.d.ts +1874 -0
  73. package/dist/index.js +3117 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/loop.d.ts +78 -0
  76. package/dist/loop.js +9 -0
  77. package/dist/loop.js.map +1 -0
  78. package/dist/mcp-bridge.d.ts +48 -0
  79. package/dist/mcp-bridge.js +8 -0
  80. package/dist/mcp-bridge.js.map +1 -0
  81. package/dist/model.d.ts +154 -0
  82. package/dist/model.js +9 -0
  83. package/dist/model.js.map +1 -0
  84. package/dist/policy.d.ts +130 -0
  85. package/dist/policy.js +23 -0
  86. package/dist/policy.js.map +1 -0
  87. package/dist/protocol.d.ts +170 -0
  88. package/dist/protocol.js +15 -0
  89. package/dist/protocol.js.map +1 -0
  90. package/dist/rollout-store-persistent.d.ts +48 -0
  91. package/dist/rollout-store-persistent.js +9 -0
  92. package/dist/rollout-store-persistent.js.map +1 -0
  93. package/dist/rollout.d.ts +82 -0
  94. package/dist/rollout.js +15 -0
  95. package/dist/rollout.js.map +1 -0
  96. package/dist/sandbox.d.ts +65 -0
  97. package/dist/sandbox.js +15 -0
  98. package/dist/sandbox.js.map +1 -0
  99. package/dist/skills.d.ts +93 -0
  100. package/dist/skills.js +10 -0
  101. package/dist/skills.js.map +1 -0
  102. package/dist/subagents.d.ts +129 -0
  103. package/dist/subagents.js +21 -0
  104. package/dist/subagents.js.map +1 -0
  105. package/dist/tools.d.ts +77 -0
  106. package/dist/tools.js +9 -0
  107. package/dist/tools.js.map +1 -0
  108. package/package.json +74 -0
  109. package/src/adapters/dispatcher-sse.test.ts +218 -0
  110. package/src/adapters/dispatcher-sse.ts +222 -0
  111. package/src/adapters/index.ts +18 -0
  112. package/src/adapters/mcp-catalog.test.ts +213 -0
  113. package/src/adapters/mcp-catalog.ts +188 -0
  114. package/src/adapters/prisma-rollout.test.ts +153 -0
  115. package/src/adapters/prisma-rollout.ts +104 -0
  116. package/src/agent-runtime.test.ts +176 -0
  117. package/src/artifact-stream.test.ts +330 -0
  118. package/src/artifact-stream.ts +453 -0
  119. package/src/channel-gateway.test.ts +432 -0
  120. package/src/channel-gateway.ts +357 -0
  121. package/src/code-review.test.ts +501 -0
  122. package/src/code-review.ts +495 -0
  123. package/src/command-suggestions.test.ts +251 -0
  124. package/src/command-suggestions.ts +338 -0
  125. package/src/commands.test.ts +184 -0
  126. package/src/commands.ts +140 -0
  127. package/src/commit-message.test.ts +249 -0
  128. package/src/commit-message.ts +180 -0
  129. package/src/context-compaction.test.ts +522 -0
  130. package/src/context-compaction.ts +434 -0
  131. package/src/definitions.test.ts +78 -0
  132. package/src/definitions.ts +190 -0
  133. package/src/deployment-status.test.ts +215 -0
  134. package/src/deployment-status.ts +227 -0
  135. package/src/design-context.test.ts +195 -0
  136. package/src/design-context.ts +198 -0
  137. package/src/dispatcher.test.ts +234 -0
  138. package/src/dispatcher.ts +189 -0
  139. package/src/durable-turn.test.ts +209 -0
  140. package/src/durable-turn.ts +135 -0
  141. package/src/edit-planner.test.ts +204 -0
  142. package/src/edit-planner.ts +325 -0
  143. package/src/fuzzy-match.test.ts +311 -0
  144. package/src/fuzzy-match.ts +444 -0
  145. package/src/hook-pipeline.test.ts +279 -0
  146. package/src/hook-pipeline.ts +373 -0
  147. package/src/inbound-admission.test.ts +394 -0
  148. package/src/inbound-admission.ts +246 -0
  149. package/src/index.ts +47 -0
  150. package/src/loop.test.ts +161 -0
  151. package/src/loop.ts +211 -0
  152. package/src/mcp-bridge.test.ts +165 -0
  153. package/src/mcp-bridge.ts +76 -0
  154. package/src/memory-provider.test.ts +232 -0
  155. package/src/memory-provider.ts +257 -0
  156. package/src/model.ts +168 -0
  157. package/src/permission-ruleset.test.ts +301 -0
  158. package/src/permission-ruleset.ts +200 -0
  159. package/src/policy.ts +151 -0
  160. package/src/project-repo.test.ts +232 -0
  161. package/src/project-repo.ts +311 -0
  162. package/src/protocol.ts +159 -0
  163. package/src/rollout-store-persistent.test.ts +217 -0
  164. package/src/rollout-store-persistent.ts +166 -0
  165. package/src/rollout.ts +150 -0
  166. package/src/sandbox.ts +113 -0
  167. package/src/session-share.test.ts +360 -0
  168. package/src/session-share.ts +310 -0
  169. package/src/skill-distillation.test.ts +177 -0
  170. package/src/skill-distillation.ts +369 -0
  171. package/src/skills.test.ts +277 -0
  172. package/src/skills.ts +255 -0
  173. package/src/subagents.test.ts +290 -0
  174. package/src/subagents.ts +332 -0
  175. package/src/tools.ts +126 -0
  176. package/src/workbench.test.ts +0 -0
  177. package/src/workbench.ts +0 -0
  178. package/tsconfig.json +12 -0
  179. package/tsup.config.ts +33 -0
@@ -0,0 +1,115 @@
1
+
2
+ > @nebutra/agent-runtime@0.2.0 build /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime
3
+ > tsup
4
+
5
+ CLI 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"}
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.1
8
+ CLI Using tsup config: /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime/tsup.config.ts
9
+ CLI Target: es2022
10
+ CLI Cleaning output folder
11
+ ESM Build start
12
+ ESM dist/rollout-store-persistent.js 189.00 B
13
+ ESM dist/adapters/index.js 449.00 B
14
+ ESM dist/sandbox.js 318.00 B
15
+ ESM dist/skills.js 185.00 B
16
+ ESM dist/subagents.js 374.00 B
17
+ ESM dist/tools.js 146.00 B
18
+ ESM dist/durable-turn.js 191.00 B
19
+ ESM dist/hook-pipeline.js 214.00 B
20
+ ESM dist/loop.js 163.00 B
21
+ ESM dist/mcp-bridge.js 157.00 B
22
+ ESM dist/model.js 156.00 B
23
+ ESM dist/policy.js 497.00 B
24
+ ESM dist/protocol.js 263.00 B
25
+ ESM dist/rollout.js 286.00 B
26
+ ESM dist/index.js 93.88 KB
27
+ ESM dist/chunk-2DA6Q6TN.js 3.42 KB
28
+ ESM dist/chunk-MUF7ZZTO.js 1.62 KB
29
+ ESM dist/chunk-ZMYX5VBU.js 4.14 KB
30
+ ESM dist/chunk-5N4644PB.js 1.92 KB
31
+ ESM dist/chunk-5YS7WAPS.js 5.67 KB
32
+ ESM dist/chunk-BJBBR3QA.js 4.19 KB
33
+ ESM dist/chunk-LO24VOA3.js 6.31 KB
34
+ ESM dist/chunk-PGGWSUTM.js 1.00 KB
35
+ ESM dist/chunk-NN7DATXA.js 1.38 KB
36
+ ESM dist/chunk-6EGG2OZC.js 324.00 B
37
+ ESM dist/chunk-CGRCUKGT.js 2.38 KB
38
+ ESM dist/chunk-37BBB2P2.js 2.19 KB
39
+ ESM dist/adapters/dispatcher-sse.js 214.00 B
40
+ ESM dist/chunk-ZTSKS42I.js 3.65 KB
41
+ ESM dist/adapters/mcp-catalog.js 187.00 B
42
+ ESM dist/chunk-24ZXP7FI.js 2.47 KB
43
+ ESM dist/adapters/prisma-rollout.js 160.00 B
44
+ ESM dist/chunk-57W3AR43.js 1.55 KB
45
+ ESM dist/commands.js 187.00 B
46
+ ESM dist/chunk-YYFPDBJG.js 1.86 KB
47
+ ESM dist/definitions.js 292.00 B
48
+ ESM dist/chunk-7BUOF367.js 4.13 KB
49
+ ESM dist/dispatcher.js 161.00 B
50
+ ESM dist/chunk-RDKYDMXT.js 4.08 KB
51
+ ESM dist/chunk-FUG5DT2C.js 2.45 KB
52
+ ESM dist/rollout-store-persistent.js.map 71.00 B
53
+ ESM dist/adapters/index.js.map 71.00 B
54
+ ESM dist/sandbox.js.map 71.00 B
55
+ ESM dist/skills.js.map 71.00 B
56
+ ESM dist/subagents.js.map 71.00 B
57
+ ESM dist/tools.js.map 71.00 B
58
+ ESM dist/durable-turn.js.map 71.00 B
59
+ ESM dist/hook-pipeline.js.map 71.00 B
60
+ ESM dist/loop.js.map 71.00 B
61
+ ESM dist/mcp-bridge.js.map 71.00 B
62
+ ESM dist/model.js.map 71.00 B
63
+ ESM dist/policy.js.map 71.00 B
64
+ ESM dist/protocol.js.map 71.00 B
65
+ ESM dist/rollout.js.map 71.00 B
66
+ ESM dist/index.js.map 251.69 KB
67
+ ESM dist/chunk-2DA6Q6TN.js.map 8.01 KB
68
+ ESM dist/chunk-MUF7ZZTO.js.map 4.91 KB
69
+ ESM dist/chunk-ZMYX5VBU.js.map 12.29 KB
70
+ ESM dist/chunk-5N4644PB.js.map 6.73 KB
71
+ ESM dist/chunk-5YS7WAPS.js.map 15.75 KB
72
+ ESM dist/chunk-BJBBR3QA.js.map 10.81 KB
73
+ ESM dist/chunk-LO24VOA3.js.map 17.32 KB
74
+ ESM dist/chunk-PGGWSUTM.js.map 3.50 KB
75
+ ESM dist/chunk-NN7DATXA.js.map 5.34 KB
76
+ ESM dist/chunk-6EGG2OZC.js.map 5.96 KB
77
+ ESM dist/chunk-CGRCUKGT.js.map 7.65 KB
78
+ ESM dist/chunk-37BBB2P2.js.map 6.88 KB
79
+ ESM dist/adapters/dispatcher-sse.js.map 71.00 B
80
+ ESM dist/chunk-ZTSKS42I.js.map 10.83 KB
81
+ ESM dist/adapters/mcp-catalog.js.map 71.00 B
82
+ ESM dist/chunk-24ZXP7FI.js.map 8.26 KB
83
+ ESM dist/adapters/prisma-rollout.js.map 71.00 B
84
+ ESM dist/chunk-57W3AR43.js.map 4.88 KB
85
+ ESM dist/commands.js.map 71.00 B
86
+ ESM dist/chunk-YYFPDBJG.js.map 6.97 KB
87
+ ESM dist/definitions.js.map 71.00 B
88
+ ESM dist/chunk-7BUOF367.js.map 10.17 KB
89
+ ESM dist/dispatcher.js.map 71.00 B
90
+ ESM dist/chunk-RDKYDMXT.js.map 8.81 KB
91
+ ESM dist/chunk-FUG5DT2C.js.map 7.87 KB
92
+ ESM ⚡️ Build success in 132ms
93
+ DTS Build start
94
+ DTS ⚡️ Build success in 8571ms
95
+ DTS dist/adapters/index.d.ts 581.00 B
96
+ DTS dist/adapters/dispatcher-sse.d.ts 3.18 KB
97
+ DTS dist/adapters/mcp-catalog.d.ts 2.77 KB
98
+ DTS dist/adapters/prisma-rollout.d.ts 2.10 KB
99
+ DTS dist/commands.d.ts 3.64 KB
100
+ DTS dist/dispatcher.d.ts 1.91 KB
101
+ DTS dist/durable-turn.d.ts 2.55 KB
102
+ DTS dist/hook-pipeline.d.ts 5.33 KB
103
+ DTS dist/loop.d.ts 3.15 KB
104
+ DTS dist/mcp-bridge.d.ts 1.89 KB
105
+ DTS dist/protocol.d.ts 5.32 KB
106
+ DTS dist/rollout-store-persistent.d.ts 1.77 KB
107
+ DTS dist/rollout.d.ts 3.28 KB
108
+ DTS dist/sandbox.d.ts 2.80 KB
109
+ DTS dist/policy.d.ts 5.59 KB
110
+ DTS dist/skills.d.ts 4.40 KB
111
+ DTS dist/subagents.d.ts 5.74 KB
112
+ DTS dist/model.d.ts 5.79 KB
113
+ DTS dist/definitions.d.ts 3.96 KB
114
+ DTS dist/tools.d.ts 2.95 KB
115
+ DTS dist/index.d.ts 86.35 KB
@@ -0,0 +1,44 @@
1
+
2
+ > @nebutra/agent-runtime@0.2.0 test /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime
3
+ > vitest run
4
+
5
+
6
+  RUN  v4.1.4 /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime
7
+
8
+ ✓ src/code-review.test.ts (43 tests) 183ms
9
+ ✓ src/context-compaction.test.ts (38 tests) 154ms
10
+ ✓ src/channel-gateway.test.ts (32 tests) 172ms
11
+ ✓ src/permission-ruleset.test.ts (41 tests) 70ms
12
+ ✓ src/fuzzy-match.test.ts (36 tests) 77ms
13
+ ✓ src/inbound-admission.test.ts (45 tests) 61ms
14
+ ✓ src/session-share.test.ts (29 tests) 101ms
15
+ ✓ src/artifact-stream.test.ts (27 tests) 120ms
16
+ ✓ src/skills.test.ts (16 tests) 96ms
17
+ ✓ src/command-suggestions.test.ts (25 tests) 69ms
18
+ ✓ src/commit-message.test.ts (29 tests) 98ms
19
+ ✓ src/subagents.test.ts (20 tests) 82ms
20
+ ✓ src/hook-pipeline.test.ts (18 tests) 165ms
21
+ ✓ src/memory-provider.test.ts (18 tests) 100ms
22
+ ✓ src/adapters/dispatcher-sse.test.ts (11 tests) 194ms
23
+ ✓ src/project-repo.test.ts (13 tests) 35ms
24
+ ✓ src/dispatcher.test.ts (16 tests) 190ms
25
+ ✓ src/commands.test.ts (16 tests) 52ms
26
+ ✓ src/workbench.test.ts (19 tests) 42ms
27
+ ✓ src/rollout-store-persistent.test.ts (12 tests) 41ms
28
+ ✓ src/adapters/mcp-catalog.test.ts (9 tests) 48ms
29
+ ✓ src/edit-planner.test.ts (21 tests) 33ms
30
+ ✓ src/durable-turn.test.ts (5 tests) 31ms
31
+ ✓ src/deployment-status.test.ts (20 tests) 73ms
32
+ ✓ src/skill-distillation.test.ts (18 tests) 108ms
33
+ ✓ src/design-context.test.ts (17 tests) 47ms
34
+ ✓ src/agent-runtime.test.ts (15 tests) 112ms
35
+ ✓ src/mcp-bridge.test.ts (7 tests) 41ms
36
+ ✓ src/definitions.test.ts (6 tests) 18ms
37
+ ✓ src/adapters/prisma-rollout.test.ts (6 tests) 21ms
38
+ ✓ src/loop.test.ts (4 tests) 21ms
39
+
40
+  Test Files  31 passed (31)
41
+  Tests  632 passed (632)
42
+  Start at  16:51:20
43
+  Duration  9.97s (transform 4.25s, setup 0ms, import 10.84s, tests 2.65s, environment 12ms)
44
+
@@ -0,0 +1,4 @@
1
+
2
+ > @nebutra/agent-runtime@0.2.0 typecheck /home/runner/work/Nebutra-Sailor/Nebutra-Sailor/packages/ai/agent-runtime
3
+ > tsc --noEmit
4
+
package/CHANGELOG.md ADDED
@@ -0,0 +1,253 @@
1
+ # @nebutra/agent-runtime
2
+
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`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
+ adapters for the runtime package.
9
+
10
+ - `mcp-catalog`: adapts `@nebutra/mcp` `serverRegistry`/`mcpClient` into the
11
+ `McpServerCatalogPort` / `McpClientLike` ports — plan-gated, tenant
12
+ fail-closed, schema-less MCP tools still yield usable definitions,
13
+ composes with `activateMcpTools`.
14
+ - `dispatcher-sse`: runtime-agnostic transport for `ProtocolDispatcher` using
15
+ only Web-standard `Request`/`Response` — JSON-RPC handler (never throws),
16
+ incremental `text/event-stream` SSE with error-frame + `AbortSignal`
17
+ cancellation, listener→async-iterable notification bridge.
18
+
19
+ Dependency-injected (no hidden globals), tenant fail-closed, zero framework
20
+ lock-in. The durable rollout-store backend adapter is intentionally not
21
+ included (a correct system-of-record needs a fail-loud datastore; pending a
22
+ governance decision — documented in the README).
23
+
24
+ - [`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
+ - `code-review`: a pure unified-diff parser, branch-base resolution, a
27
+ confidence-banded review prompt (CRITICAL ≥95% / WARNING ≥85% /
28
+ SUGGESTION ≥75% / below → omit) with an untrusted-content injection guard
29
+ over diff + commit messages, an advisory/no-edit invariant, a fail-closed
30
+ finding parser (`ReviewParseError` rather than a fabricated empty result),
31
+ and a deterministic post-review mode handoff.
32
+ - `context-compaction`: in-session, mid-turn context-overflow recovery — a
33
+ 1.3× token-correction estimator, a 60%-floored budget, greedy whole-message
34
+ packing with an oversized-message clipped-transcript fallback,
35
+ bounded-concurrency chunk summarization with a preserve-rubric prompt, a
36
+ recursive binary reduce capped at an output token limit, and a fail-closed
37
+ `"compact"` retry sentinel (never silently drops context).
38
+ - `commit-message` (WRAP): a Conventional-Commits prompt + git-context shape +
39
+ "regenerate materially different" negative constraint + fence/quote
40
+ stripping + bounded retry over the existing injected small-model seam.
41
+
42
+ Tenant-scoped / fail-closed where stateful; pure where stateless; the only
43
+ impurity is an injected model/summarize port. 632 package tests.
44
+
45
+ - [`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
+ - New Prisma model `AgentRolloutLine` → table `agent_rollout_lines`, additive
48
+ migration `20260519000000_add_agent_rollout_store` (one CREATE TABLE).
49
+ - `createPrismaRolloutPersistence` in `@nebutra/agent-runtime-adapters`:
50
+ fail-loud `RolloutPersistencePort` over a minimal injected
51
+ `PrismaRolloutDelegate` (no generated-client / `@nebutra/db` dependency;
52
+ per-tenant resolver for RLS). 6 TDD tests.
53
+ - Gateway route store is env-gated: `AGENT_ROLLOUT_DURABLE=1` selects the
54
+ durable Postgres store, default stays in-memory. Activation is a standard
55
+ migrate+generate deploy step (ADR 2026-05-19), not faked durability.
56
+
57
+ - [`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
+ - `project-repo`: durable project = git repo. Metadata + per-conversation
60
+ jsonl logs persisted as committed files (one commit per turn); history /
61
+ restore by commit SHA (commit graph IS the history — distinct from
62
+ workbench's in-memory snapshot ring); injected `GitHostPort` (no git
63
+ vendor lock-in); tenant ownership gate (`ownsRepo`, default-deny).
64
+ - `deployment-status`: commit-keyed lifecycle (`idle|deploying|live|
65
+ failed`), latest-status + timeline-from-commits derivations, explicit
66
+ `advanceState` machine; preview domain from an injected suffix (no
67
+ hardcoded host).
68
+
69
+ Tenant-scoped & fail-closed; pure data/logic; git + deploy hosts injected.
70
+ Resolved a `CommitRef` barrel collision (deployment-status structural type
71
+ renamed `DeploymentCommitRef`). 252 package tests.
72
+
73
+ - [`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
+ - New package re-expresses a coding-agent runtime _design_ in Sailor grammar —
76
+ thread/turn/item model + event lifecycle, two-axis approval/capability
77
+ policy, uniform tool/MCP abstraction, event-sourced rollout with compaction,
78
+ and an external-sandbox delegation seam.
79
+ - Every serialization scope, store key, and dispatch is tenant-scoped;
80
+ cross-tenant requests can never share a serial lane.
81
+ - No infra change and no in-process untrusted-code execution: the default
82
+ executor fails closed; real execution is delegated behind `ExternalSandbox`.
83
+ - Adds an off-by-default `agent-runtime-demo` feature flag gating a demo route
84
+ in `apps/web`.
85
+
86
+ - [`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
+ the already-absorbed core).
88
+
89
+ - `definitions`: shared layered-tier resolver (precedence + dual
90
+ availability/enabled gate) + frontmatter parser — backs commands, skills,
91
+ subagents from one kernel.
92
+ - `skills`: two-phase progressive disclosure (token-budget listing,
93
+ first-party never-truncated, path-activation), lazy body expansion,
94
+ per-skill model/tool override merge.
95
+ - `hook-pipeline`: 18-event taxonomy, config matcher/`if` resolver,
96
+ structured decision protocol, multi-transport (function/http/prompt),
97
+ parallel fan-out with deterministic precedence merge; wraps the bare
98
+ `ToolHooks` as the in-process transport.
99
+ - `commands`: unified command=skill model with dual user/model front-doors
100
+ and a pure arg-substitution + templating expander.
101
+ - `subagents`: definition resolver (tool allow−deny), fork-vs-spawn
102
+ context-boundary contract, typed terminal-envelope result contract, and a
103
+ tenant-scoped Task lifecycle registry.
104
+
105
+ All tenant-scoped & fail-closed; pure data/logic (no FS/shell/TUI — those
106
+ transports deliberately dropped for multi-tenant safety). 135 package tests.
107
+
108
+ - [`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
+ - `runTurn()` drives a turn `loop { model_call → emit items → execute tools
111
+ → feed results back }` until the model stops requesting tools or a bounded
112
+ step ceiling is hit. Single-threaded (shared context, no conflicting
113
+ sub-agent decisions).
114
+ - The model call is abstracted behind `ModelInvoker`, WRAPping an existing
115
+ model stack rather than re-porting provider/routing/fallback.
116
+ - Every terminal item and the turn outcome are appended to the tenant-scoped
117
+ rollout (resumable by replay); tool calls pass the approval gate
118
+ (`resolveRuleDecision` + server-initiated `ApprovalGate`); unapproved tools
119
+ are never dispatched. Internal failures surface as `turn.failed`, never
120
+ thrown to the caller.
121
+
122
+ - [`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
+ - `channel-gateway`: channel-agnostic `InboundMessage`/`OutboundMessage`
125
+ normalization, a `ChannelAdapter` port (parseInbound returns null for
126
+ non-message events, never throws on junk), tenant-scoped `ChannelRegistry`,
127
+ and outbound route-back through the originating channel.
128
+ - `inbound-admission`: deterministic tenant-prefixed `resolveSessionKey`
129
+ (group/DM/thread bindings, cross-tenant non-colliding), allowlist gating
130
+ (exact / `*` / `prefix:*`, closed-by-default), mention gating (group
131
+ requires @mention or reply-to-assistant; DM never), a time-injected
132
+ `InboundDebouncer`, composed by `admitInbound`.
133
+
134
+ Tenant-scoped & fail-closed; pure data/logic; transport + time injected.
135
+ Only the clean contracts were re-expressed (the messy source impl is not
136
+ ported). 365 package tests.
137
+
138
+ - [`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
+ each behind an injectable port so the package keeps zero datastore/queue
140
+ dependency ("no infra change" stays honest):
141
+
142
+ - **Durable / resumable turn** (`durable-turn.ts`): `createDurableTurn` wraps
143
+ `runTurn` behind a `DurableTurnQueuePort`; `resume` replays the rollout and
144
+ re-drives an unfinished turn, idempotent and cross-tenant isolated.
145
+ - **Protocol dispatcher** (`dispatcher.ts`): transport-agnostic JSON-RPC
146
+ dispatcher serving the method registry — envelope validation fail-closed,
147
+ per-`scopeKey` serialization (cross-tenant never shares a lane), errors
148
+ mapped to JSON-RPC codes, validated notification stream.
149
+ - **MCP activation** (`mcp-bridge.ts`): `activateMcpTools` adapts tenant/plan
150
+ -visible MCP-server tools into the uniform `ToolRegistry` via an injectable
151
+ `McpServerCatalogPort`; duplicate names skipped, empty tenant fails closed.
152
+ - **Persistent rollout store** (`rollout-store-persistent.ts`):
153
+ `PersistentRolloutStore` over a `RolloutPersistencePort` (satisfiable by an
154
+ `@nebutra/audit`/`@nebutra/db` adapter) — monotonic per-(tenant,thread)
155
+ seq, faithful round-trip, cross-tenant isolation, typed round-trip errors.
156
+
157
+ - [`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
+ - `memory-provider`: pluggable cross-session `MemoryProvider` port (full
160
+ lifecycle: initialize/prefetch/syncTurn/onSessionEnd/onSessionSwitch/
161
+ onPreCompress/onDelegation/systemPromptBlock) + a `MemoryManager` that
162
+ degrades safely + memory-context injection defense (recalled text
163
+ banner-wrapped as reference-not-instructions; a split-safe streaming
164
+ scrubber strips model-forged memory banners). Vendor backends injected.
165
+ - `skill-distillation`: the learning loop — eligibility gate (only
166
+ non-trivial successful trajectories), `distillSkill` (deterministic
167
+ prompt → injected synthesize → skill record with `allowedTools` clamped
168
+ to tools the experience actually used = least privilege), `improveSkill`
169
+ (versioned, tenant-locked), pure `shouldNudgePersist` heuristic.
170
+
171
+ Tenant-scoped & fail-closed; pure data/logic; LLM synthesis + memory
172
+ backends are injected ports. 288 package tests.
173
+
174
+ - [`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
+ - `permission-ruleset`: `Rule{permission,pattern,action:allow|deny|ask}` +
177
+ `evaluate(...rulesets)` first-match over both dimensions with fail-safe
178
+ `ask` default, a `wildcardMatch` with the faithful trailing `" *"`-optional
179
+ rule (no catastrophic backtracking), and a bash-command-prefix/arity
180
+ extractor (`commandPrefix`/`commandPermissionKey`).
181
+ - `session-share`: mint a read-only `ShareRecord{id,url,secret}` for a
182
+ session, revoke it, public secret-gated `verifyViewer` (no tenantId —
183
+ constant-time compare; documented threat model). Injected id-mint /
184
+ url-builder / sync-sink / store ports; kill-switch; persist-first
185
+ best-effort sync.
186
+
187
+ Owner plane tenant-scoped & fail-closed; viewer plane secret-gated; pure
188
+ where stateless; transport/crypto/store injected. 496 package tests.
189
+
190
+ - [`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
+ - `design-context`: website → structured generation seed
193
+ `{content, brand{colors,fonts}, screenshot, title}` — pure normalizer +
194
+ injected `ScrapeProvider` port (no network/provider lock-in),
195
+ `toGenerationSeed` bounded deterministic prompt block.
196
+ - `edit-planner`: pattern-driven `analyzeEditIntent` (7 EditTypes) +
197
+ `selectFilesForEdit` (primary/context split + deterministic system-prompt
198
+ builder) + generalised fast-apply (`parseEditBlocks` / `applyEditBlock`
199
+ with an injected merger). Targeted edit planning vs regenerate-all.
200
+
201
+ Tenant-scoped & fail-closed; pure data/logic; scrape + LLM-merge are
202
+ injected ports. 219 package tests.
203
+
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
+ - `fuzzy-match`: smart-case subsequence fuzzy match returning
207
+ `{score, indices}` (lowercase query ⇒ case-insensitive; any uppercase ⇒
208
+ case-sensitive), case-insensitive + ignore-spaces variants (indices map to
209
+ original text), anchored glob-wildcard (`* ? [a-z] \`, no catastrophic
210
+ backtracking), stable `rankByFuzzy`. Pure, dependency-free.
211
+ - `command-suggestions`: `classifyMatch` with deterministic
212
+ exact > prefix > fuzzy score banding, `rankSuggestions` (history-boost +
213
+ shorter-text + stable tie-breaks), `dedupeByText` (history-wins,
214
+ case-insensitive), tenant-scoped `SuggestionHistoryStore` (recency ring,
215
+ cross-tenant isolation). Fuzzy matcher injected.
216
+
217
+ Tenant-scoped & fail-closed where stateful; pure data/logic. The source's
218
+ generated `command-signatures-v2` JS bundle was deliberately not ported.
219
+ 426 package tests.
220
+
221
+ - [`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
+ - Add `createHttpSandbox(baseUrl)`: an `ExternalSandbox` that delegates
224
+ execution over HTTP to the decoupled Rust isolator
225
+ (`backends/rust/sandbox`, `POST /api/v1/sandbox/exec`).
226
+ - Non-2xx isolator responses (e.g. a fail-closed 403 refusal) surface as
227
+ `SandboxDelegationError` and are never coerced into a fabricated result.
228
+ - The Rust isolator now mirrors the `SandboxExecRequest` /
229
+ `SandboxExecResult` / `CapabilityPolicy` wire shapes and is fail-closed
230
+ until a real isolation backend (Wasmtime/Firecracker) is wired.
231
+
232
+ - [`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
+ already-absorbed harness core).
234
+
235
+ - `artifact-stream`: streaming artifact/action protocol — a chunk-fed
236
+ incremental parser for an `<artifact>` of ordered
237
+ `<action type=file|shell|start|build|data>` blocks (split-tag safe, no
238
+ duplicate emit), plus an action runner with a
239
+ `pending→running→complete|aborted|failed` state-machine, submission-order
240
+ queue, halt-on-failure, and execution delegated through injected ports
241
+ (no in-process exec / host FS). Distinct from tool-calling.
242
+ - `workbench`: tenant-scoped project-state model — immutable FileMap with
243
+ auto-derived folders, apply-file-mutation, snapshot/restore with
244
+ deep-copy isolation, bounded snapshot history, project diff; behind a
245
+ `ProjectPersistencePort` (in-memory ref impl mirroring the rollout-store
246
+ seam).
247
+
248
+ All tenant-scoped & fail-closed, pure data/logic. 181 package tests.
249
+
250
+ ### Patch Changes
251
+
252
+ - Updated dependencies [[`5d3d7e6`](https://github.com/Nebutra/Nebutra-Sailor/commit/5d3d7e6c59cae5aa242bb988b75a9888cfd0db39)]:
253
+ - @nebutra/mcp@0.1.1