@matthias-hausberger/beige 0.0.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.
Files changed (194) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +183 -0
  3. package/dist/channels/registry.d.ts +14 -0
  4. package/dist/channels/registry.d.ts.map +1 -0
  5. package/dist/channels/registry.js +14 -0
  6. package/dist/channels/registry.js.map +1 -0
  7. package/dist/channels/telegram.d.ts +92 -0
  8. package/dist/channels/telegram.d.ts.map +1 -0
  9. package/dist/channels/telegram.js +469 -0
  10. package/dist/channels/telegram.js.map +1 -0
  11. package/dist/channels/tui.d.ts +8 -0
  12. package/dist/channels/tui.d.ts.map +1 -0
  13. package/dist/channels/tui.js +574 -0
  14. package/dist/channels/tui.js.map +1 -0
  15. package/dist/cli.d.ts +23 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +571 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config/loader.d.ts +6 -0
  20. package/dist/config/loader.d.ts.map +1 -0
  21. package/dist/config/loader.js +103 -0
  22. package/dist/config/loader.js.map +1 -0
  23. package/dist/config/loader.spec.d.ts +2 -0
  24. package/dist/config/loader.spec.d.ts.map +1 -0
  25. package/dist/config/loader.spec.js +195 -0
  26. package/dist/config/loader.spec.js.map +1 -0
  27. package/dist/config/schema.d.ts +107 -0
  28. package/dist/config/schema.d.ts.map +1 -0
  29. package/dist/config/schema.js +42 -0
  30. package/dist/config/schema.js.map +1 -0
  31. package/dist/config/schema.spec.d.ts +2 -0
  32. package/dist/config/schema.spec.d.ts.map +1 -0
  33. package/dist/config/schema.spec.js +180 -0
  34. package/dist/config/schema.spec.js.map +1 -0
  35. package/dist/gateway/agent-manager.d.ts +138 -0
  36. package/dist/gateway/agent-manager.d.ts.map +1 -0
  37. package/dist/gateway/agent-manager.js +532 -0
  38. package/dist/gateway/agent-manager.js.map +1 -0
  39. package/dist/gateway/api.d.ts +43 -0
  40. package/dist/gateway/api.d.ts.map +1 -0
  41. package/dist/gateway/api.js +256 -0
  42. package/dist/gateway/api.js.map +1 -0
  43. package/dist/gateway/api.spec.d.ts +2 -0
  44. package/dist/gateway/api.spec.d.ts.map +1 -0
  45. package/dist/gateway/api.spec.js +256 -0
  46. package/dist/gateway/api.spec.js.map +1 -0
  47. package/dist/gateway/audit.d.ts +38 -0
  48. package/dist/gateway/audit.d.ts.map +1 -0
  49. package/dist/gateway/audit.js +82 -0
  50. package/dist/gateway/audit.js.map +1 -0
  51. package/dist/gateway/audit.spec.d.ts +2 -0
  52. package/dist/gateway/audit.spec.d.ts.map +1 -0
  53. package/dist/gateway/audit.spec.js +212 -0
  54. package/dist/gateway/audit.spec.js.map +1 -0
  55. package/dist/gateway/gateway.d.ts +27 -0
  56. package/dist/gateway/gateway.d.ts.map +1 -0
  57. package/dist/gateway/gateway.js +158 -0
  58. package/dist/gateway/gateway.js.map +1 -0
  59. package/dist/gateway/policy.d.ts +27 -0
  60. package/dist/gateway/policy.d.ts.map +1 -0
  61. package/dist/gateway/policy.js +40 -0
  62. package/dist/gateway/policy.js.map +1 -0
  63. package/dist/gateway/policy.spec.d.ts +2 -0
  64. package/dist/gateway/policy.spec.d.ts.map +1 -0
  65. package/dist/gateway/policy.spec.js +121 -0
  66. package/dist/gateway/policy.spec.js.map +1 -0
  67. package/dist/gateway/provider-health.d.ts +83 -0
  68. package/dist/gateway/provider-health.d.ts.map +1 -0
  69. package/dist/gateway/provider-health.js +219 -0
  70. package/dist/gateway/provider-health.js.map +1 -0
  71. package/dist/gateway/provider-health.spec.d.ts +2 -0
  72. package/dist/gateway/provider-health.spec.d.ts.map +1 -0
  73. package/dist/gateway/provider-health.spec.js +278 -0
  74. package/dist/gateway/provider-health.spec.js.map +1 -0
  75. package/dist/gateway/session-settings.d.ts +62 -0
  76. package/dist/gateway/session-settings.d.ts.map +1 -0
  77. package/dist/gateway/session-settings.js +91 -0
  78. package/dist/gateway/session-settings.js.map +1 -0
  79. package/dist/gateway/session-settings.spec.d.ts +2 -0
  80. package/dist/gateway/session-settings.spec.d.ts.map +1 -0
  81. package/dist/gateway/session-settings.spec.js +141 -0
  82. package/dist/gateway/session-settings.spec.js.map +1 -0
  83. package/dist/gateway/sessions.d.ts +68 -0
  84. package/dist/gateway/sessions.d.ts.map +1 -0
  85. package/dist/gateway/sessions.js +177 -0
  86. package/dist/gateway/sessions.js.map +1 -0
  87. package/dist/gateway/sessions.spec.d.ts +2 -0
  88. package/dist/gateway/sessions.spec.d.ts.map +1 -0
  89. package/dist/gateway/sessions.spec.js +190 -0
  90. package/dist/gateway/sessions.spec.js.map +1 -0
  91. package/dist/index.d.ts +11 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +10 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/install.d.ts +39 -0
  96. package/dist/install.d.ts.map +1 -0
  97. package/dist/install.js +144 -0
  98. package/dist/install.js.map +1 -0
  99. package/dist/sandbox/manager.d.ts +63 -0
  100. package/dist/sandbox/manager.d.ts.map +1 -0
  101. package/dist/sandbox/manager.js +294 -0
  102. package/dist/sandbox/manager.js.map +1 -0
  103. package/dist/skills/index.d.ts +2 -0
  104. package/dist/skills/index.d.ts.map +1 -0
  105. package/dist/skills/index.js +2 -0
  106. package/dist/skills/index.js.map +1 -0
  107. package/dist/skills/registry.d.ts +11 -0
  108. package/dist/skills/registry.d.ts.map +1 -0
  109. package/dist/skills/registry.js +86 -0
  110. package/dist/skills/registry.js.map +1 -0
  111. package/dist/skills/registry.spec.d.ts +2 -0
  112. package/dist/skills/registry.spec.d.ts.map +1 -0
  113. package/dist/skills/registry.spec.js +220 -0
  114. package/dist/skills/registry.spec.js.map +1 -0
  115. package/dist/socket/protocol.d.ts +21 -0
  116. package/dist/socket/protocol.d.ts.map +1 -0
  117. package/dist/socket/protocol.js +7 -0
  118. package/dist/socket/protocol.js.map +1 -0
  119. package/dist/socket/protocol.spec.d.ts +2 -0
  120. package/dist/socket/protocol.spec.d.ts.map +1 -0
  121. package/dist/socket/protocol.spec.js +135 -0
  122. package/dist/socket/protocol.spec.js.map +1 -0
  123. package/dist/socket/server.d.ts +21 -0
  124. package/dist/socket/server.d.ts.map +1 -0
  125. package/dist/socket/server.js +133 -0
  126. package/dist/socket/server.js.map +1 -0
  127. package/dist/socket/server.spec.d.ts +2 -0
  128. package/dist/socket/server.spec.d.ts.map +1 -0
  129. package/dist/socket/server.spec.js +333 -0
  130. package/dist/socket/server.spec.js.map +1 -0
  131. package/dist/test/fixtures.d.ts +47 -0
  132. package/dist/test/fixtures.d.ts.map +1 -0
  133. package/dist/test/fixtures.js +144 -0
  134. package/dist/test/fixtures.js.map +1 -0
  135. package/dist/toolkit/index.d.ts +4 -0
  136. package/dist/toolkit/index.d.ts.map +1 -0
  137. package/dist/toolkit/index.js +4 -0
  138. package/dist/toolkit/index.js.map +1 -0
  139. package/dist/toolkit/installer.d.ts +26 -0
  140. package/dist/toolkit/installer.d.ts.map +1 -0
  141. package/dist/toolkit/installer.js +247 -0
  142. package/dist/toolkit/installer.js.map +1 -0
  143. package/dist/toolkit/registry.d.ts +19 -0
  144. package/dist/toolkit/registry.d.ts.map +1 -0
  145. package/dist/toolkit/registry.js +119 -0
  146. package/dist/toolkit/registry.js.map +1 -0
  147. package/dist/toolkit/registry.spec.d.ts +2 -0
  148. package/dist/toolkit/registry.spec.d.ts.map +1 -0
  149. package/dist/toolkit/registry.spec.js +194 -0
  150. package/dist/toolkit/registry.spec.js.map +1 -0
  151. package/dist/toolkit/schema.d.ts +61 -0
  152. package/dist/toolkit/schema.d.ts.map +1 -0
  153. package/dist/toolkit/schema.js +116 -0
  154. package/dist/toolkit/schema.js.map +1 -0
  155. package/dist/toolkit/schema.spec.d.ts +2 -0
  156. package/dist/toolkit/schema.spec.d.ts.map +1 -0
  157. package/dist/toolkit/schema.spec.js +202 -0
  158. package/dist/toolkit/schema.spec.js.map +1 -0
  159. package/dist/tools/core.d.ts +10 -0
  160. package/dist/tools/core.d.ts.map +1 -0
  161. package/dist/tools/core.js +246 -0
  162. package/dist/tools/core.js.map +1 -0
  163. package/dist/tools/core.spec.d.ts +2 -0
  164. package/dist/tools/core.spec.d.ts.map +1 -0
  165. package/dist/tools/core.spec.js +315 -0
  166. package/dist/tools/core.spec.js.map +1 -0
  167. package/dist/tools/registry.d.ts +15 -0
  168. package/dist/tools/registry.d.ts.map +1 -0
  169. package/dist/tools/registry.js +62 -0
  170. package/dist/tools/registry.js.map +1 -0
  171. package/dist/tools/registry.spec.d.ts +2 -0
  172. package/dist/tools/registry.spec.d.ts.map +1 -0
  173. package/dist/tools/registry.spec.js +228 -0
  174. package/dist/tools/registry.spec.js.map +1 -0
  175. package/dist/tools/runner.d.ts +25 -0
  176. package/dist/tools/runner.d.ts.map +1 -0
  177. package/dist/tools/runner.js +35 -0
  178. package/dist/tools/runner.js.map +1 -0
  179. package/dist/tools/runner.spec.d.ts +2 -0
  180. package/dist/tools/runner.spec.d.ts.map +1 -0
  181. package/dist/tools/runner.spec.js +129 -0
  182. package/dist/tools/runner.spec.js.map +1 -0
  183. package/dist/types/session.d.ts +8 -0
  184. package/dist/types/session.d.ts.map +1 -0
  185. package/dist/types/session.js +23 -0
  186. package/dist/types/session.js.map +1 -0
  187. package/package.json +76 -0
  188. package/tools/README.md +1 -0
  189. package/tools/kv/README.md +150 -0
  190. package/tools/kv/index.ts +149 -0
  191. package/tools/kv/tool.json +23 -0
  192. package/tools/message/README.md +53 -0
  193. package/tools/message/index.ts +183 -0
  194. package/tools/message/tool.json +11 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.spec.d.ts","sourceRoot":"","sources":["../../src/skills/registry.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,220 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { writeFileSync, mkdirSync, rmSync } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { loadSkillManifest, loadSkills, buildSkillContext, validateSkillDeps, } from "./registry.js";
6
+ describe("skills/registry", () => {
7
+ let tempDir;
8
+ beforeEach(() => {
9
+ tempDir = join(tmpdir(), `beige-skill-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
10
+ mkdirSync(tempDir, { recursive: true });
11
+ });
12
+ afterEach(() => {
13
+ try {
14
+ rmSync(tempDir, { recursive: true, force: true });
15
+ }
16
+ catch {
17
+ // Ignore cleanup errors
18
+ }
19
+ });
20
+ describe("loadSkillManifest", () => {
21
+ it("loads a valid skill manifest", () => {
22
+ const skillDir = join(tempDir, "test-skill");
23
+ mkdirSync(skillDir);
24
+ writeFileSync(join(skillDir, "skill.json"), JSON.stringify({
25
+ name: "test-skill",
26
+ description: "A test skill",
27
+ }));
28
+ const manifest = loadSkillManifest(skillDir);
29
+ expect(manifest.name).toBe("test-skill");
30
+ expect(manifest.description).toBe("A test skill");
31
+ });
32
+ it("loads manifest with optional fields", () => {
33
+ const skillDir = join(tempDir, "test-skill");
34
+ mkdirSync(skillDir);
35
+ writeFileSync(join(skillDir, "skill.json"), JSON.stringify({
36
+ name: "test-skill",
37
+ description: "A test skill",
38
+ contextFile: "GUIDE.md",
39
+ requires: {
40
+ tools: ["git"],
41
+ skills: ["basics"],
42
+ },
43
+ }));
44
+ const manifest = loadSkillManifest(skillDir);
45
+ expect(manifest.contextFile).toBe("GUIDE.md");
46
+ expect(manifest.requires?.tools).toEqual(["git"]);
47
+ expect(manifest.requires?.skills).toEqual(["basics"]);
48
+ });
49
+ it("throws when skill.json is missing", () => {
50
+ const skillDir = join(tempDir, "missing-manifest");
51
+ mkdirSync(skillDir);
52
+ expect(() => loadSkillManifest(skillDir)).toThrow("Skill manifest not found");
53
+ });
54
+ it("throws when skill.json has invalid JSON", () => {
55
+ const skillDir = join(tempDir, "invalid-json");
56
+ mkdirSync(skillDir);
57
+ writeFileSync(join(skillDir, "skill.json"), "not valid json {");
58
+ expect(() => loadSkillManifest(skillDir)).toThrow("Invalid JSON in skill manifest");
59
+ });
60
+ it("throws when name is missing", () => {
61
+ const skillDir = join(tempDir, "missing-name");
62
+ mkdirSync(skillDir);
63
+ writeFileSync(join(skillDir, "skill.json"), JSON.stringify({
64
+ description: "A test skill",
65
+ }));
66
+ expect(() => loadSkillManifest(skillDir)).toThrow("requires 'name' and 'description'");
67
+ });
68
+ it("throws when description is missing", () => {
69
+ const skillDir = join(tempDir, "missing-desc");
70
+ mkdirSync(skillDir);
71
+ writeFileSync(join(skillDir, "skill.json"), JSON.stringify({
72
+ name: "test-skill",
73
+ }));
74
+ expect(() => loadSkillManifest(skillDir)).toThrow("requires 'name' and 'description'");
75
+ });
76
+ });
77
+ describe("loadSkills", () => {
78
+ it("returns empty map when no skills in config", async () => {
79
+ const config = {
80
+ llm: { providers: {} },
81
+ tools: {},
82
+ agents: {},
83
+ channels: {},
84
+ };
85
+ const skills = await loadSkills(config);
86
+ expect(skills.size).toBe(0);
87
+ });
88
+ it("loads multiple skills from config", async () => {
89
+ // Create skill directories
90
+ const skill1Dir = join(tempDir, "skill1");
91
+ const skill2Dir = join(tempDir, "skill2");
92
+ mkdirSync(skill1Dir);
93
+ mkdirSync(skill2Dir);
94
+ writeFileSync(join(skill1Dir, "skill.json"), JSON.stringify({
95
+ name: "skill1",
96
+ description: "First skill",
97
+ }));
98
+ writeFileSync(join(skill2Dir, "skill.json"), JSON.stringify({
99
+ name: "skill2",
100
+ description: "Second skill",
101
+ requires: { tools: ["git"] },
102
+ }));
103
+ const config = {
104
+ llm: { providers: {} },
105
+ tools: {},
106
+ agents: {},
107
+ channels: {},
108
+ skills: {
109
+ "my-skill1": { path: skill1Dir },
110
+ "my-skill2": { path: skill2Dir },
111
+ },
112
+ };
113
+ const skills = await loadSkills(config);
114
+ expect(skills.size).toBe(2);
115
+ expect(skills.get("my-skill1")?.manifest.description).toBe("First skill");
116
+ expect(skills.get("my-skill2")?.manifest.requires?.tools).toEqual(["git"]);
117
+ });
118
+ });
119
+ describe("buildSkillContext", () => {
120
+ function createLoadedSkill(name, description) {
121
+ return {
122
+ name,
123
+ path: `/skills/${name}`,
124
+ manifest: {
125
+ name,
126
+ description,
127
+ },
128
+ };
129
+ }
130
+ it("returns empty string for empty skill list", () => {
131
+ const context = buildSkillContext([], new Map());
132
+ expect(context).toBe("");
133
+ });
134
+ it("builds context for single skill", () => {
135
+ const skills = new Map([
136
+ ["review", createLoadedSkill("review", "Code review guidelines")],
137
+ ]);
138
+ const context = buildSkillContext(["review"], skills);
139
+ expect(context).toContain("## Available Skills");
140
+ expect(context).toContain("### review");
141
+ expect(context).toContain("Code review guidelines");
142
+ expect(context).toContain("/skills/review/");
143
+ });
144
+ it("builds context for multiple skills", () => {
145
+ const skills = new Map([
146
+ ["review", createLoadedSkill("review", "Code review guidelines")],
147
+ ["testing", createLoadedSkill("testing", "Testing best practices")],
148
+ ]);
149
+ const context = buildSkillContext(["review", "testing"], skills);
150
+ expect(context).toContain("### review");
151
+ expect(context).toContain("### testing");
152
+ expect(context).toContain("Code review guidelines");
153
+ expect(context).toContain("Testing best practices");
154
+ });
155
+ it("skips skills not in loaded map", () => {
156
+ const skills = new Map([
157
+ ["review", createLoadedSkill("review", "Code review guidelines")],
158
+ ]);
159
+ const context = buildSkillContext(["review", "missing"], skills);
160
+ expect(context).toContain("### review");
161
+ expect(context).not.toContain("### missing");
162
+ });
163
+ });
164
+ describe("validateSkillDeps", () => {
165
+ function createSkillWithDeps(name, requires) {
166
+ return {
167
+ name,
168
+ path: `/skills/${name}`,
169
+ manifest: {
170
+ name,
171
+ description: `${name} skill`,
172
+ requires,
173
+ },
174
+ };
175
+ }
176
+ it("passes when no dependencies required", () => {
177
+ const skills = new Map([
178
+ ["skill1", createSkillWithDeps("skill1")],
179
+ ]);
180
+ expect(() => validateSkillDeps(["skill1"], [], skills)).not.toThrow();
181
+ });
182
+ it("passes when tool dependencies are satisfied", () => {
183
+ const skills = new Map([
184
+ ["skill1", createSkillWithDeps("skill1", { tools: ["git", "exec"] })],
185
+ ]);
186
+ expect(() => validateSkillDeps(["skill1"], ["git", "exec"], skills)).not.toThrow();
187
+ });
188
+ it("passes when skill dependencies are satisfied", () => {
189
+ const skills = new Map([
190
+ ["basics", createSkillWithDeps("basics")],
191
+ ["advanced", createSkillWithDeps("advanced", { skills: ["basics"] })],
192
+ ]);
193
+ expect(() => validateSkillDeps(["basics", "advanced"], [], skills)).not.toThrow();
194
+ });
195
+ it("throws when required tool is missing", () => {
196
+ const skills = new Map([
197
+ ["skill1", createSkillWithDeps("skill1", { tools: ["git"] })],
198
+ ]);
199
+ expect(() => validateSkillDeps(["skill1"], [], skills)).toThrow("Skill 'skill1' requires tool 'git' but it's not available to this agent");
200
+ });
201
+ it("throws when required skill is missing", () => {
202
+ const skills = new Map([
203
+ ["advanced", createSkillWithDeps("advanced", { skills: ["basics"] })],
204
+ ]);
205
+ expect(() => validateSkillDeps(["advanced"], [], skills)).toThrow("Skill 'advanced' requires skill 'basics' but it's not available to this agent");
206
+ });
207
+ it("validates multiple dependencies", () => {
208
+ const skills = new Map([
209
+ ["skill1", createSkillWithDeps("skill1", {
210
+ tools: ["git", "kv"],
211
+ skills: ["basics"],
212
+ })],
213
+ ["basics", createSkillWithDeps("basics")],
214
+ ]);
215
+ // Missing 'kv' tool
216
+ expect(() => validateSkillDeps(["skill1", "basics"], ["git"], skills)).toThrow("Skill 'skill1' requires tool 'kv' but it's not available to this agent");
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=registry.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.spec.js","sourceRoot":"","sources":["../../src/skills/registry.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,eAAe,CAAC;AAGvB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,OAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClG,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC7C,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACzD,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC,CAAC;YAEJ,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC7C,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACzD,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,cAAc;gBAC3B,WAAW,EAAE,UAAU;gBACvB,QAAQ,EAAE;oBACR,KAAK,EAAE,CAAC,KAAK,CAAC;oBACd,MAAM,EAAE,CAAC,QAAQ,CAAC;iBACnB;aACF,CAAC,CAAC,CAAC;YAEJ,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACnD,SAAS,CAAC,QAAQ,CAAC,CAAC;YAEpB,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAEhE,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACzD,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBACzD,IAAI,EAAE,YAAY;aACnB,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAgB;gBAC1B,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;gBACtB,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,EAAE;aACb,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,2BAA2B;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1C,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,SAAS,CAAC,SAAS,CAAC,CAAC;YAErB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC1D,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,aAAa;aAC3B,CAAC,CAAC,CAAC;YACJ,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC1D,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,cAAc;gBAC3B,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;aAC7B,CAAC,CAAC,CAAC;YAEJ,MAAM,MAAM,GAAgB;gBAC1B,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;gBACtB,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE;oBACN,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBAChC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBACjC;aACF,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,SAAS,iBAAiB,CAAC,IAAY,EAAE,WAAmB;YAC1D,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,WAAW,IAAI,EAAE;gBACvB,QAAQ,EAAE;oBACR,IAAI;oBACJ,WAAW;iBACZ;aACF,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;aAClE,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;gBACjE,CAAC,SAAS,EAAE,iBAAiB,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;aACpE,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;aAClE,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,SAAS,mBAAmB,CAC1B,IAAY,EACZ,QAAkD;YAElD,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,WAAW,IAAI,EAAE;gBACvB,QAAQ,EAAE;oBACR,IAAI;oBACJ,WAAW,EAAE,GAAG,IAAI,QAAQ;oBAC5B,QAAQ;iBACT;aACF,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;aAC1C,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;aACtE,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBACzC,CAAC,UAAU,EAAE,mBAAmB,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACtE,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aAC9D,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAC7D,yEAAyE,CAC1E,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,UAAU,EAAE,mBAAmB,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aACtE,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAC/D,+EAA+E,CAChF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;gBACrB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,EAAE;wBACvC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;wBACpB,MAAM,EAAE,CAAC,QAAQ,CAAC;qBACnB,CAAC,CAAC;gBACH,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;aAC1C,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAC5E,wEAAwE,CACzE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { SessionContext } from "../types/session.js";
2
+ /**
3
+ * Socket protocol between sandbox tool launchers and the gateway.
4
+ * Messages are newline-delimited JSON over Unix domain socket.
5
+ */
6
+ export interface ToolRequest {
7
+ type: "tool_request";
8
+ tool: string;
9
+ args: string[];
10
+ sessionContext?: SessionContext;
11
+ }
12
+ export interface ToolResponse {
13
+ type: "tool_response";
14
+ success: boolean;
15
+ output?: string;
16
+ error?: string;
17
+ exitCode: number;
18
+ }
19
+ export declare function encodeMessage(msg: ToolRequest | ToolResponse): Buffer;
20
+ export declare function decodeMessage(data: string): ToolRequest | ToolResponse;
21
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/socket/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,GAAG,MAAM,CAErE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,CAEtE"}
@@ -0,0 +1,7 @@
1
+ export function encodeMessage(msg) {
2
+ return Buffer.from(JSON.stringify(msg) + "\n");
3
+ }
4
+ export function decodeMessage(data) {
5
+ return JSON.parse(data.trim());
6
+ }
7
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/socket/protocol.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,aAAa,CAAC,GAA+B;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.spec.d.ts","sourceRoot":"","sources":["../../src/socket/protocol.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { encodeMessage, decodeMessage, } from "./protocol.js";
3
+ describe("protocol", () => {
4
+ describe("encodeMessage", () => {
5
+ it("encodes ToolRequest with newline suffix", () => {
6
+ const msg = {
7
+ type: "tool_request",
8
+ tool: "kv",
9
+ args: ["set", "mykey", "myvalue"],
10
+ };
11
+ const encoded = encodeMessage(msg);
12
+ expect(encoded.toString()).toBe(JSON.stringify(msg) + "\n");
13
+ });
14
+ it("encodes successful ToolResponse", () => {
15
+ const msg = {
16
+ type: "tool_response",
17
+ success: true,
18
+ output: "OK",
19
+ exitCode: 0,
20
+ };
21
+ const encoded = encodeMessage(msg);
22
+ expect(encoded.toString()).toBe(JSON.stringify(msg) + "\n");
23
+ });
24
+ it("encodes error ToolResponse", () => {
25
+ const msg = {
26
+ type: "tool_response",
27
+ success: false,
28
+ error: "Permission denied",
29
+ exitCode: 1,
30
+ };
31
+ const encoded = encodeMessage(msg);
32
+ expect(encoded.toString()).toBe(JSON.stringify(msg) + "\n");
33
+ });
34
+ it("encodes ToolResponse with all fields", () => {
35
+ const msg = {
36
+ type: "tool_response",
37
+ success: true,
38
+ output: "result data",
39
+ error: undefined,
40
+ exitCode: 0,
41
+ };
42
+ const encoded = encodeMessage(msg);
43
+ expect(encoded.toString()).toContain("tool_response");
44
+ expect(encoded.toString()).toContain("result data");
45
+ });
46
+ it("returns a Buffer", () => {
47
+ const msg = {
48
+ type: "tool_request",
49
+ tool: "test",
50
+ args: [],
51
+ };
52
+ const encoded = encodeMessage(msg);
53
+ expect(encoded).toBeInstanceOf(Buffer);
54
+ });
55
+ });
56
+ describe("decodeMessage", () => {
57
+ it("decodes ToolRequest", () => {
58
+ const json = '{"type":"tool_request","tool":"kv","args":["get","key"]}';
59
+ const msg = decodeMessage(json);
60
+ expect(msg.type).toBe("tool_request");
61
+ expect(msg.tool).toBe("kv");
62
+ expect(msg.args).toEqual(["get", "key"]);
63
+ });
64
+ it("decodes successful ToolResponse", () => {
65
+ const json = '{"type":"tool_response","success":true,"output":"value","exitCode":0}';
66
+ const msg = decodeMessage(json);
67
+ expect(msg.type).toBe("tool_response");
68
+ expect(msg.success).toBe(true);
69
+ expect(msg.output).toBe("value");
70
+ expect(msg.exitCode).toBe(0);
71
+ });
72
+ it("decodes error ToolResponse", () => {
73
+ const json = '{"type":"tool_response","success":false,"error":"Not found","exitCode":1}';
74
+ const msg = decodeMessage(json);
75
+ expect(msg.type).toBe("tool_response");
76
+ expect(msg.success).toBe(false);
77
+ expect(msg.error).toBe("Not found");
78
+ expect(msg.exitCode).toBe(1);
79
+ });
80
+ it("handles whitespace in input", () => {
81
+ const json = ' {"type":"tool_request","tool":"test","args":[]} ';
82
+ const msg = decodeMessage(json);
83
+ expect(msg.type).toBe("tool_request");
84
+ expect(msg.tool).toBe("test");
85
+ });
86
+ it("throws on invalid JSON", () => {
87
+ expect(() => decodeMessage("not json")).toThrow();
88
+ });
89
+ });
90
+ describe("roundtrip encode/decode", () => {
91
+ it("roundtrips ToolRequest with empty args", () => {
92
+ const original = {
93
+ type: "tool_request",
94
+ tool: "status",
95
+ args: [],
96
+ };
97
+ const encoded = encodeMessage(original);
98
+ const decoded = decodeMessage(encoded.toString().trim());
99
+ expect(decoded).toEqual(original);
100
+ });
101
+ it("roundtrips ToolRequest with multiple args", () => {
102
+ const original = {
103
+ type: "tool_request",
104
+ tool: "kv",
105
+ args: ["set", "key1", "value with spaces", "more"],
106
+ };
107
+ const encoded = encodeMessage(original);
108
+ const decoded = decodeMessage(encoded.toString().trim());
109
+ expect(decoded).toEqual(original);
110
+ });
111
+ it("roundtrips ToolResponse with special characters in output", () => {
112
+ const original = {
113
+ type: "tool_response",
114
+ success: true,
115
+ output: "Line 1\nLine 2\tTabbed \"quoted\"",
116
+ exitCode: 0,
117
+ };
118
+ const encoded = encodeMessage(original);
119
+ const decoded = decodeMessage(encoded.toString().trim());
120
+ expect(decoded).toEqual(original);
121
+ });
122
+ it("roundtrips ToolResponse with unicode", () => {
123
+ const original = {
124
+ type: "tool_response",
125
+ success: true,
126
+ output: "Hello 🌍 世界",
127
+ exitCode: 0,
128
+ };
129
+ const encoded = encodeMessage(original);
130
+ const decoded = decodeMessage(encoded.toString().trim());
131
+ expect(decoded).toEqual(original);
132
+ });
133
+ });
134
+ });
135
+ //# sourceMappingURL=protocol.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.spec.js","sourceRoot":"","sources":["../../src/socket/protocol.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { AuditLogger } from "../gateway/audit.js";
2
+ import type { PolicyEngine } from "../gateway/policy.js";
3
+ import type { ToolRunner } from "../tools/runner.js";
4
+ /**
5
+ * Unix domain socket server for a single agent.
6
+ * Listens on a socket file, handles tool requests from sandbox launchers.
7
+ */
8
+ export declare class AgentSocketServer {
9
+ private agentName;
10
+ private socketPath;
11
+ private audit;
12
+ private policy;
13
+ private toolRunner;
14
+ private server;
15
+ constructor(agentName: string, socketPath: string, audit: AuditLogger, policy: PolicyEngine, toolRunner: ToolRunner);
16
+ start(): Promise<void>;
17
+ stop(): Promise<void>;
18
+ private handleConnection;
19
+ private handleToolRequest;
20
+ }
21
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/socket/server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;GAGG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAPpB,OAAO,CAAC,MAAM,CAAuB;gBAG3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,UAAU;IAGhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,OAAO,CAAC,gBAAgB;YA8CV,iBAAiB;CAgDhC"}
@@ -0,0 +1,133 @@
1
+ import { createServer } from "net";
2
+ import { mkdirSync, unlinkSync, existsSync } from "fs";
3
+ import { dirname } from "path";
4
+ import { encodeMessage, decodeMessage, } from "./protocol.js";
5
+ /**
6
+ * Unix domain socket server for a single agent.
7
+ * Listens on a socket file, handles tool requests from sandbox launchers.
8
+ */
9
+ export class AgentSocketServer {
10
+ agentName;
11
+ socketPath;
12
+ audit;
13
+ policy;
14
+ toolRunner;
15
+ server = null;
16
+ constructor(agentName, socketPath, audit, policy, toolRunner) {
17
+ this.agentName = agentName;
18
+ this.socketPath = socketPath;
19
+ this.audit = audit;
20
+ this.policy = policy;
21
+ this.toolRunner = toolRunner;
22
+ }
23
+ start() {
24
+ return new Promise((resolve, reject) => {
25
+ // Clean up stale socket file
26
+ if (existsSync(this.socketPath)) {
27
+ unlinkSync(this.socketPath);
28
+ }
29
+ mkdirSync(dirname(this.socketPath), { recursive: true });
30
+ this.server = createServer((socket) => {
31
+ this.handleConnection(socket);
32
+ });
33
+ this.server.on("error", reject);
34
+ this.server.listen(this.socketPath, () => {
35
+ console.log(`[SOCKET] Agent '${this.agentName}' listening on ${this.socketPath}`);
36
+ resolve();
37
+ });
38
+ });
39
+ }
40
+ stop() {
41
+ return new Promise((resolve) => {
42
+ if (this.server) {
43
+ this.server.close(() => {
44
+ if (existsSync(this.socketPath)) {
45
+ unlinkSync(this.socketPath);
46
+ }
47
+ resolve();
48
+ });
49
+ }
50
+ else {
51
+ resolve();
52
+ }
53
+ });
54
+ }
55
+ handleConnection(socket) {
56
+ let buffer = "";
57
+ socket.on("data", async (data) => {
58
+ buffer += data.toString();
59
+ // Process complete messages (newline-delimited)
60
+ const lines = buffer.split("\n");
61
+ buffer = lines.pop() ?? ""; // Keep incomplete line in buffer
62
+ for (const line of lines) {
63
+ if (!line.trim())
64
+ continue;
65
+ try {
66
+ const msg = decodeMessage(line);
67
+ if (msg.type !== "tool_request") {
68
+ socket.write(encodeMessage({
69
+ type: "tool_response",
70
+ success: false,
71
+ error: `Unknown message type: ${msg.type}`,
72
+ exitCode: 1,
73
+ }));
74
+ continue;
75
+ }
76
+ const response = await this.handleToolRequest(msg);
77
+ socket.write(encodeMessage(response));
78
+ }
79
+ catch (err) {
80
+ socket.write(encodeMessage({
81
+ type: "tool_response",
82
+ success: false,
83
+ error: `Invalid request: ${err instanceof Error ? err.message : String(err)}`,
84
+ exitCode: 1,
85
+ }));
86
+ }
87
+ }
88
+ });
89
+ socket.on("error", (err) => {
90
+ console.error(`[SOCKET] Connection error for agent '${this.agentName}':`, err.message);
91
+ });
92
+ }
93
+ async handleToolRequest(req) {
94
+ const { tool, args } = req;
95
+ // Check policy
96
+ if (!this.policy.isToolAllowed(this.agentName, tool)) {
97
+ const timer = this.audit.start(this.agentName, "tool", tool, args, "denied");
98
+ timer.finish({ exitCode: 1, error: "Permission denied" });
99
+ return {
100
+ type: "tool_response",
101
+ success: false,
102
+ error: `Permission denied: tool '${tool}' is not allowed for agent '${this.agentName}'`,
103
+ exitCode: 1,
104
+ };
105
+ }
106
+ // Execute tool
107
+ const timer = this.audit.start(this.agentName, "tool", tool, args, "allowed", this.policy.getToolTarget(tool));
108
+ try {
109
+ const result = await this.toolRunner.run(tool, args, req.sessionContext);
110
+ timer.finish({
111
+ exitCode: result.exitCode,
112
+ outputBytes: Buffer.byteLength(result.output ?? ""),
113
+ });
114
+ return {
115
+ type: "tool_response",
116
+ success: result.exitCode === 0,
117
+ output: result.output,
118
+ exitCode: result.exitCode,
119
+ };
120
+ }
121
+ catch (err) {
122
+ const errorMsg = err instanceof Error ? err.message : String(err);
123
+ timer.finish({ exitCode: 1, error: errorMsg });
124
+ return {
125
+ type: "tool_response",
126
+ success: false,
127
+ error: errorMsg,
128
+ exitCode: 1,
129
+ };
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/socket/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.spec.d.ts","sourceRoot":"","sources":["../../src/socket/server.spec.ts"],"names":[],"mappings":""}