@tpsdev-ai/cli 0.2.0 → 0.3.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 (228) hide show
  1. package/README.md +65 -0
  2. package/bin/tps.cjs +22 -0
  3. package/bin/tps.ts +435 -0
  4. package/package.json +29 -5
  5. package/dist/bin/tps.d.ts +0 -3
  6. package/dist/bin/tps.d.ts.map +0 -1
  7. package/dist/bin/tps.js +0 -414
  8. package/dist/bin/tps.js.map +0 -1
  9. package/dist/src/cli/hire.d.ts +0 -16
  10. package/dist/src/cli/hire.d.ts.map +0 -1
  11. package/dist/src/cli/hire.js +0 -176
  12. package/dist/src/cli/hire.js.map +0 -1
  13. package/dist/src/cli/office.d.ts +0 -7
  14. package/dist/src/cli/office.d.ts.map +0 -1
  15. package/dist/src/cli/office.js +0 -51
  16. package/dist/src/cli/office.js.map +0 -1
  17. package/dist/src/cli/review.d.ts +0 -9
  18. package/dist/src/cli/review.d.ts.map +0 -1
  19. package/dist/src/cli/review.js +0 -109
  20. package/dist/src/cli/review.js.map +0 -1
  21. package/dist/src/cli/roster.d.ts +0 -6
  22. package/dist/src/cli/roster.d.ts.map +0 -1
  23. package/dist/src/cli/roster.js +0 -60
  24. package/dist/src/cli/roster.js.map +0 -1
  25. package/dist/src/commands/backup.d.ts +0 -19
  26. package/dist/src/commands/backup.d.ts.map +0 -1
  27. package/dist/src/commands/backup.js +0 -595
  28. package/dist/src/commands/backup.js.map +0 -1
  29. package/dist/src/commands/bootstrap.d.ts +0 -7
  30. package/dist/src/commands/bootstrap.d.ts.map +0 -1
  31. package/dist/src/commands/bootstrap.js +0 -255
  32. package/dist/src/commands/bootstrap.js.map +0 -1
  33. package/dist/src/commands/branch.d.ts +0 -14
  34. package/dist/src/commands/branch.d.ts.map +0 -1
  35. package/dist/src/commands/branch.js +0 -395
  36. package/dist/src/commands/branch.js.map +0 -1
  37. package/dist/src/commands/context.d.ts +0 -9
  38. package/dist/src/commands/context.d.ts.map +0 -1
  39. package/dist/src/commands/context.js +0 -57
  40. package/dist/src/commands/context.js.map +0 -1
  41. package/dist/src/commands/git.d.ts +0 -8
  42. package/dist/src/commands/git.d.ts.map +0 -1
  43. package/dist/src/commands/git.js +0 -53
  44. package/dist/src/commands/git.js.map +0 -1
  45. package/dist/src/commands/identity.d.ts +0 -13
  46. package/dist/src/commands/identity.d.ts.map +0 -1
  47. package/dist/src/commands/identity.js +0 -231
  48. package/dist/src/commands/identity.js.map +0 -1
  49. package/dist/src/commands/mail.d.ts +0 -12
  50. package/dist/src/commands/mail.d.ts.map +0 -1
  51. package/dist/src/commands/mail.js +0 -251
  52. package/dist/src/commands/mail.js.map +0 -1
  53. package/dist/src/commands/office-manager.d.ts +0 -147
  54. package/dist/src/commands/office-manager.d.ts.map +0 -1
  55. package/dist/src/commands/office-manager.js +0 -171
  56. package/dist/src/commands/office-manager.js.map +0 -1
  57. package/dist/src/commands/office.d.ts +0 -12
  58. package/dist/src/commands/office.d.ts.map +0 -1
  59. package/dist/src/commands/office.js +0 -480
  60. package/dist/src/commands/office.js.map +0 -1
  61. package/dist/src/commands/roster.d.ts +0 -10
  62. package/dist/src/commands/roster.d.ts.map +0 -1
  63. package/dist/src/commands/roster.js +0 -143
  64. package/dist/src/commands/roster.js.map +0 -1
  65. package/dist/src/commands/secrets.d.ts +0 -9
  66. package/dist/src/commands/secrets.d.ts.map +0 -1
  67. package/dist/src/commands/secrets.js +0 -54
  68. package/dist/src/commands/secrets.js.map +0 -1
  69. package/dist/src/commands/status.d.ts +0 -33
  70. package/dist/src/commands/status.d.ts.map +0 -1
  71. package/dist/src/commands/status.js +0 -407
  72. package/dist/src/commands/status.js.map +0 -1
  73. package/dist/src/generators/brief.d.ts +0 -6
  74. package/dist/src/generators/brief.d.ts.map +0 -1
  75. package/dist/src/generators/brief.js +0 -33
  76. package/dist/src/generators/brief.js.map +0 -1
  77. package/dist/src/generators/claude-code.d.ts +0 -18
  78. package/dist/src/generators/claude-code.d.ts.map +0 -1
  79. package/dist/src/generators/claude-code.js +0 -85
  80. package/dist/src/generators/claude-code.js.map +0 -1
  81. package/dist/src/generators/codex.d.ts +0 -23
  82. package/dist/src/generators/codex.d.ts.map +0 -1
  83. package/dist/src/generators/codex.js +0 -83
  84. package/dist/src/generators/codex.js.map +0 -1
  85. package/dist/src/generators/ollama.d.ts +0 -18
  86. package/dist/src/generators/ollama.d.ts.map +0 -1
  87. package/dist/src/generators/ollama.js +0 -97
  88. package/dist/src/generators/ollama.js.map +0 -1
  89. package/dist/src/generators/openclaw.d.ts +0 -15
  90. package/dist/src/generators/openclaw.d.ts.map +0 -1
  91. package/dist/src/generators/openclaw.js +0 -107
  92. package/dist/src/generators/openclaw.js.map +0 -1
  93. package/dist/src/generators/registry.d.ts +0 -36
  94. package/dist/src/generators/registry.d.ts.map +0 -1
  95. package/dist/src/generators/registry.js +0 -99
  96. package/dist/src/generators/registry.js.map +0 -1
  97. package/dist/src/schema/manifest.d.ts +0 -287
  98. package/dist/src/schema/manifest.d.ts.map +0 -1
  99. package/dist/src/schema/manifest.js +0 -65
  100. package/dist/src/schema/manifest.js.map +0 -1
  101. package/dist/src/schema/report.d.ts +0 -166
  102. package/dist/src/schema/report.d.ts.map +0 -1
  103. package/dist/src/schema/report.js +0 -90
  104. package/dist/src/schema/report.js.map +0 -1
  105. package/dist/src/schema/sanitizer.d.ts +0 -30
  106. package/dist/src/schema/sanitizer.d.ts.map +0 -1
  107. package/dist/src/schema/sanitizer.js +0 -99
  108. package/dist/src/schema/sanitizer.js.map +0 -1
  109. package/dist/src/soundstage/mock-llm.d.ts +0 -3
  110. package/dist/src/soundstage/mock-llm.d.ts.map +0 -1
  111. package/dist/src/soundstage/mock-llm.js +0 -68
  112. package/dist/src/soundstage/mock-llm.js.map +0 -1
  113. package/dist/src/utils/agent-info.d.ts +0 -28
  114. package/dist/src/utils/agent-info.d.ts.map +0 -1
  115. package/dist/src/utils/agent-info.js +0 -102
  116. package/dist/src/utils/agent-info.js.map +0 -1
  117. package/dist/src/utils/archive.d.ts +0 -20
  118. package/dist/src/utils/archive.d.ts.map +0 -1
  119. package/dist/src/utils/archive.js +0 -108
  120. package/dist/src/utils/archive.js.map +0 -1
  121. package/dist/src/utils/config-inject.d.ts +0 -27
  122. package/dist/src/utils/config-inject.d.ts.map +0 -1
  123. package/dist/src/utils/config-inject.js +0 -83
  124. package/dist/src/utils/config-inject.js.map +0 -1
  125. package/dist/src/utils/config.d.ts +0 -30
  126. package/dist/src/utils/config.d.ts.map +0 -1
  127. package/dist/src/utils/config.js +0 -55
  128. package/dist/src/utils/config.js.map +0 -1
  129. package/dist/src/utils/connection-state.d.ts +0 -27
  130. package/dist/src/utils/connection-state.d.ts.map +0 -1
  131. package/dist/src/utils/connection-state.js +0 -81
  132. package/dist/src/utils/connection-state.js.map +0 -1
  133. package/dist/src/utils/context.d.ts +0 -14
  134. package/dist/src/utils/context.d.ts.map +0 -1
  135. package/dist/src/utils/context.js +0 -68
  136. package/dist/src/utils/context.js.map +0 -1
  137. package/dist/src/utils/github-webhook.d.ts +0 -3
  138. package/dist/src/utils/github-webhook.d.ts.map +0 -1
  139. package/dist/src/utils/github-webhook.js +0 -105
  140. package/dist/src/utils/github-webhook.js.map +0 -1
  141. package/dist/src/utils/identity.d.ts +0 -124
  142. package/dist/src/utils/identity.d.ts.map +0 -1
  143. package/dist/src/utils/identity.js +0 -434
  144. package/dist/src/utils/identity.js.map +0 -1
  145. package/dist/src/utils/internal-mail.d.ts +0 -18
  146. package/dist/src/utils/internal-mail.d.ts.map +0 -1
  147. package/dist/src/utils/internal-mail.js +0 -75
  148. package/dist/src/utils/internal-mail.js.map +0 -1
  149. package/dist/src/utils/loop-detector.d.ts +0 -27
  150. package/dist/src/utils/loop-detector.d.ts.map +0 -1
  151. package/dist/src/utils/loop-detector.js +0 -42
  152. package/dist/src/utils/loop-detector.js.map +0 -1
  153. package/dist/src/utils/mail-handler.d.ts +0 -19
  154. package/dist/src/utils/mail-handler.d.ts.map +0 -1
  155. package/dist/src/utils/mail-handler.js +0 -94
  156. package/dist/src/utils/mail-handler.js.map +0 -1
  157. package/dist/src/utils/mail.d.ts +0 -22
  158. package/dist/src/utils/mail.d.ts.map +0 -1
  159. package/dist/src/utils/mail.js +0 -111
  160. package/dist/src/utils/mail.js.map +0 -1
  161. package/dist/src/utils/manifest.d.ts +0 -36
  162. package/dist/src/utils/manifest.d.ts.map +0 -1
  163. package/dist/src/utils/manifest.js +0 -94
  164. package/dist/src/utils/manifest.js.map +0 -1
  165. package/dist/src/utils/noise-ik-transport.d.ts +0 -18
  166. package/dist/src/utils/noise-ik-transport.d.ts.map +0 -1
  167. package/dist/src/utils/noise-ik-transport.js +0 -357
  168. package/dist/src/utils/noise-ik-transport.js.map +0 -1
  169. package/dist/src/utils/nono.d.ts +0 -72
  170. package/dist/src/utils/nono.d.ts.map +0 -1
  171. package/dist/src/utils/nono.js +0 -166
  172. package/dist/src/utils/nono.js.map +0 -1
  173. package/dist/src/utils/outbox.d.ts +0 -10
  174. package/dist/src/utils/outbox.d.ts.map +0 -1
  175. package/dist/src/utils/outbox.js +0 -29
  176. package/dist/src/utils/outbox.js.map +0 -1
  177. package/dist/src/utils/output.d.ts +0 -17
  178. package/dist/src/utils/output.d.ts.map +0 -1
  179. package/dist/src/utils/output.js +0 -83
  180. package/dist/src/utils/output.js.map +0 -1
  181. package/dist/src/utils/plain-tcp-transport.d.ts +0 -10
  182. package/dist/src/utils/plain-tcp-transport.d.ts.map +0 -1
  183. package/dist/src/utils/plain-tcp-transport.js +0 -209
  184. package/dist/src/utils/plain-tcp-transport.js.map +0 -1
  185. package/dist/src/utils/provision.d.ts +0 -2
  186. package/dist/src/utils/provision.d.ts.map +0 -1
  187. package/dist/src/utils/provision.js +0 -193
  188. package/dist/src/utils/provision.js.map +0 -1
  189. package/dist/src/utils/relay.d.ts +0 -30
  190. package/dist/src/utils/relay.d.ts.map +0 -1
  191. package/dist/src/utils/relay.js +0 -539
  192. package/dist/src/utils/relay.js.map +0 -1
  193. package/dist/src/utils/sandbox.d.ts +0 -37
  194. package/dist/src/utils/sandbox.d.ts.map +0 -1
  195. package/dist/src/utils/sandbox.js +0 -126
  196. package/dist/src/utils/sandbox.js.map +0 -1
  197. package/dist/src/utils/transport.d.ts +0 -62
  198. package/dist/src/utils/transport.d.ts.map +0 -1
  199. package/dist/src/utils/transport.js +0 -75
  200. package/dist/src/utils/transport.js.map +0 -1
  201. package/dist/src/utils/vault.d.ts +0 -21
  202. package/dist/src/utils/vault.d.ts.map +0 -1
  203. package/dist/src/utils/vault.js +0 -67
  204. package/dist/src/utils/vault.js.map +0 -1
  205. package/dist/src/utils/wall.d.ts +0 -5
  206. package/dist/src/utils/wall.d.ts.map +0 -1
  207. package/dist/src/utils/wall.js +0 -51
  208. package/dist/src/utils/wall.js.map +0 -1
  209. package/dist/src/utils/wire-delivery.d.ts +0 -10
  210. package/dist/src/utils/wire-delivery.d.ts.map +0 -1
  211. package/dist/src/utils/wire-delivery.js +0 -57
  212. package/dist/src/utils/wire-delivery.js.map +0 -1
  213. package/dist/src/utils/wire-frame.d.ts +0 -10
  214. package/dist/src/utils/wire-frame.d.ts.map +0 -1
  215. package/dist/src/utils/wire-frame.js +0 -66
  216. package/dist/src/utils/wire-frame.js.map +0 -1
  217. package/dist/src/utils/wire-mail.d.ts +0 -54
  218. package/dist/src/utils/wire-mail.d.ts.map +0 -1
  219. package/dist/src/utils/wire-mail.js +0 -24
  220. package/dist/src/utils/wire-mail.js.map +0 -1
  221. package/dist/src/utils/workspace.d.ts +0 -14
  222. package/dist/src/utils/workspace.d.ts.map +0 -1
  223. package/dist/src/utils/workspace.js +0 -53
  224. package/dist/src/utils/workspace.js.map +0 -1
  225. package/dist/src/utils/ws-noise-transport.d.ts +0 -18
  226. package/dist/src/utils/ws-noise-transport.d.ts.map +0 -1
  227. package/dist/src/utils/ws-noise-transport.js +0 -356
  228. package/dist/src/utils/ws-noise-transport.js.map +0 -1
@@ -1,126 +0,0 @@
1
- /**
2
- * Sandbox VM utilities — direct socket access to Docker AI Sandboxes.
3
- *
4
- * Workaround for Docker Sandbox CLI v0.11.0 `exec` bug:
5
- * `docker sandbox exec` can't find running sandboxes, but each VM
6
- * exposes its own Docker daemon socket at:
7
- * ~/.docker/sandboxes/vm/<name>/docker.sock
8
- *
9
- * We bypass `docker sandbox exec` and talk to the VM's daemon directly.
10
- */
11
- import { existsSync, mkdirSync } from "node:fs";
12
- import { join } from "node:path";
13
- import { homedir } from "node:os";
14
- import { spawnSync } from "node:child_process";
15
- /**
16
- * Get the Docker daemon socket path for a sandbox VM.
17
- */
18
- export function sandboxSocketPath(name) {
19
- return join(process.env.HOME || homedir(), ".docker", "sandboxes", "vm", name, "docker.sock");
20
- }
21
- /**
22
- * Check if a sandbox VM's Docker daemon is accessible.
23
- */
24
- export function isSandboxReady(name) {
25
- const sock = sandboxSocketPath(name);
26
- if (!existsSync(sock))
27
- return false;
28
- const result = spawnSync("docker", ["-H", `unix://${sock}`, "info"], {
29
- encoding: "utf-8",
30
- timeout: 5000,
31
- });
32
- return result.status === 0;
33
- }
34
- /**
35
- * List sandboxes via `docker sandbox ls --json`.
36
- */
37
- export function listSandboxes() {
38
- const result = spawnSync("docker", ["sandbox", "ls", "--json"], {
39
- encoding: "utf-8",
40
- timeout: 10000,
41
- });
42
- if (result.status !== 0)
43
- return [];
44
- try {
45
- const parsed = JSON.parse(result.stdout || "{}");
46
- return (parsed.vms || []).map((vm) => ({
47
- name: vm.name,
48
- agent: vm.agent,
49
- status: vm.status,
50
- socketPath: vm.socket_path || sandboxSocketPath(vm.name),
51
- }));
52
- }
53
- catch {
54
- return [];
55
- }
56
- }
57
- /**
58
- * Execute a command inside a sandbox VM's Docker daemon.
59
- * Runs a container with the workspace mounted.
60
- */
61
- export function sandboxExec(sandboxName, command, options = {}) {
62
- const sock = sandboxSocketPath(sandboxName);
63
- const image = options.image || "alpine:latest";
64
- const args = ["-H", `unix://${sock}`, "run", "--rm"];
65
- if (options.workspace) {
66
- args.push("-v", `${options.workspace}:${options.workspace}`);
67
- args.push("-w", options.workspace);
68
- }
69
- args.push(image, ...command);
70
- return spawnSync("docker", args, {
71
- encoding: "utf-8",
72
- timeout: 60000,
73
- });
74
- }
75
- /**
76
- * Load an image into a sandbox VM by piping from host.
77
- * Uses `docker save | docker -H unix://<sock> load`.
78
- */
79
- export function loadImageIntoSandbox(sandboxName, imageName) {
80
- const sock = sandboxSocketPath(sandboxName);
81
- // Check if image exists in sandbox already
82
- const check = spawnSync("docker", ["-H", `unix://${sock}`, "images", "-q", imageName], {
83
- encoding: "utf-8",
84
- timeout: 10000,
85
- });
86
- if (check.status === 0 && check.stdout.trim()) {
87
- return true; // Already loaded
88
- }
89
- // Save from host and load into sandbox
90
- // Use --config with user-owned dir to bypass credential helper issues
91
- const noauthDir = join(process.env.HOME || homedir(), ".tps", "tmp", "docker-noauth");
92
- mkdirSync(noauthDir, { recursive: true });
93
- const save = spawnSync("docker", ["--config", noauthDir, "save", imageName], {
94
- timeout: 60000,
95
- maxBuffer: 500 * 1024 * 1024, // 500MB
96
- });
97
- if (save.status !== 0)
98
- return false;
99
- const load = spawnSync("docker", ["-H", `unix://${sock}`, "load"], {
100
- input: save.stdout,
101
- encoding: "utf-8",
102
- timeout: 60000,
103
- });
104
- return load.status === 0;
105
- }
106
- /**
107
- * Wait for a sandbox VM to become ready (socket accessible).
108
- */
109
- export function waitForSandbox(name, timeoutMs = 30000) {
110
- const sock = sandboxSocketPath(name);
111
- const start = Date.now();
112
- while (Date.now() - start < timeoutMs) {
113
- if (isSandboxReady(name))
114
- return true;
115
- // If socket parent dir doesn't exist, Docker's internal layout may have changed
116
- const parentDir = join(sock, "..");
117
- if (Date.now() - start > 15000 && !existsSync(parentDir)) {
118
- console.error(`Docker Sandbox socket path not found: ${parentDir}\n` +
119
- `Docker may have changed its internal layout. Expected socket at:\n ${sock}`);
120
- return false;
121
- }
122
- spawnSync("sleep", ["1"]);
123
- }
124
- return false;
125
- }
126
- //# sourceMappingURL=sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/utils/sandbox.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- export interface DeliveryTransport {
2
- deliver(envelope: MailEnvelope): Promise<DeliveryResult>;
3
- name(): string;
4
- }
5
- export interface MailEnvelope {
6
- from: string;
7
- to: string;
8
- office?: string;
9
- body: Buffer;
10
- headers: Record<string, string>;
11
- }
12
- export interface DeliveryResult {
13
- delivered: boolean;
14
- transport: string;
15
- path?: string;
16
- error?: string;
17
- }
18
- export interface BranchTarget {
19
- host: string;
20
- port: number;
21
- branchId: string;
22
- hostPublicKey: Uint8Array;
23
- }
24
- export interface TpsMessage {
25
- type: number;
26
- seq: number;
27
- ts: string;
28
- body: unknown;
29
- sig?: string;
30
- }
31
- export interface TransportChannel {
32
- send(msg: TpsMessage): Promise<void>;
33
- onMessage(handler: (msg: TpsMessage) => void): void;
34
- offMessage(handler: (msg: TpsMessage) => void): void;
35
- close(): Promise<void>;
36
- isAlive(): boolean;
37
- peerFingerprint(): string;
38
- }
39
- export interface TransportServer {
40
- onConnection(handler: (channel: TransportChannel) => void): void;
41
- close(): Promise<void>;
42
- }
43
- export interface WireTransport {
44
- connect(target: BranchTarget): Promise<TransportChannel>;
45
- listen(port: number): Promise<TransportServer>;
46
- }
47
- export declare class TransportRegistry {
48
- private readonly defaultTransport;
49
- private perBranch;
50
- constructor(defaultTransport: DeliveryTransport);
51
- register(branchId: string, transport: DeliveryTransport): void;
52
- unregister(branchId: string): void;
53
- resolve(branchId: string): DeliveryTransport;
54
- getDefault(): DeliveryTransport;
55
- has(branchId: string): boolean;
56
- }
57
- export declare function resolveTransport(recipientId: string, registry: TransportRegistry): DeliveryTransport;
58
- export declare class FileSystemTransport implements DeliveryTransport {
59
- name(): string;
60
- deliver(envelope: MailEnvelope): Promise<DeliveryResult>;
61
- }
62
- //# sourceMappingURL=transport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/utils/transport.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IACpD,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC;IACnB,eAAe,IAAI,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAChD;AAED,qBAAa,iBAAiB;IAGhB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAF7C,OAAO,CAAC,SAAS,CAAwC;gBAE5B,gBAAgB,EAAE,iBAAiB;IAEhE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAI9D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIlC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAI5C,UAAU,IAAI,iBAAiB;IAI/B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAG/B;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,CAEpG;AAoBD,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,IAAI,IAAI,MAAM;IAIR,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;CA2B/D"}
@@ -1,75 +0,0 @@
1
- import { mkdirSync, renameSync, writeFileSync } from "node:fs";
2
- import { randomUUID } from "node:crypto";
3
- import { join } from "node:path";
4
- import { homedir } from "node:os";
5
- export class TransportRegistry {
6
- defaultTransport;
7
- perBranch = new Map();
8
- constructor(defaultTransport) {
9
- this.defaultTransport = defaultTransport;
10
- }
11
- register(branchId, transport) {
12
- this.perBranch.set(branchId, transport);
13
- }
14
- unregister(branchId) {
15
- this.perBranch.delete(branchId);
16
- }
17
- resolve(branchId) {
18
- return this.perBranch.get(branchId) ?? this.defaultTransport;
19
- }
20
- getDefault() {
21
- return this.defaultTransport;
22
- }
23
- has(branchId) {
24
- return this.perBranch.has(branchId);
25
- }
26
- }
27
- export function resolveTransport(recipientId, registry) {
28
- return registry.resolve(recipientId);
29
- }
30
- function ensureDir(path) {
31
- mkdirSync(path, { recursive: true });
32
- }
33
- function atomicWriteJson(targetPath, data) {
34
- const tmp = `${targetPath}.tmp-${process.pid}-${Date.now()}`;
35
- writeFileSync(tmp, JSON.stringify(data, null, 2), "utf-8");
36
- renameSync(tmp, targetPath);
37
- }
38
- function timestampPrefix() {
39
- return new Date().toISOString().replace(/[:.]/g, "-");
40
- }
41
- function hostMailRoot() {
42
- return process.env.TPS_MAIL_DIR || join(process.env.HOME || homedir(), ".tps", "mail");
43
- }
44
- export class FileSystemTransport {
45
- name() {
46
- return "filesystem";
47
- }
48
- async deliver(envelope) {
49
- try {
50
- const recipientNew = join(hostMailRoot(), envelope.to, "new");
51
- ensureDir(recipientNew);
52
- const payload = {
53
- id: envelope.headers["x-tps-id"] || randomUUID(),
54
- from: envelope.from,
55
- to: envelope.to,
56
- body: envelope.body.toString("utf-8"),
57
- timestamp: envelope.headers["x-tps-timestamp"] || new Date().toISOString(),
58
- read: false,
59
- origin: envelope.headers["x-tps-origin"] || "docker-sandbox",
60
- };
61
- const filename = `${timestampPrefix()}-${randomUUID()}.json`;
62
- const outPath = join(recipientNew, filename);
63
- atomicWriteJson(outPath, payload);
64
- return { delivered: true, transport: this.name(), path: outPath };
65
- }
66
- catch (e) {
67
- return {
68
- delivered: false,
69
- transport: this.name(),
70
- error: e?.message || "delivery failed",
71
- };
72
- }
73
- }
74
- }
75
- //# sourceMappingURL=transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/utils/transport.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- export interface VaultData {
2
- salt: string;
3
- iv: string;
4
- authTag: string;
5
- ciphertext: string;
6
- kdf?: {
7
- m: number;
8
- t: number;
9
- p: number;
10
- };
11
- }
12
- export declare function deriveKey(passphrase: string, salt: Buffer, params?: {
13
- m: number;
14
- t: number;
15
- p: number;
16
- }): Promise<Buffer>;
17
- export declare function encryptVault(data: any, passphrase: string): Promise<VaultData>;
18
- export declare function decryptVault(vault: VaultData, passphrase: string): Promise<any>;
19
- export declare function saveVault(path: string, vault: VaultData): void;
20
- export declare function loadVaultFile(path: string): VaultData | null;
21
- //# sourceMappingURL=vault.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/utils/vault.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH;AAMD,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM;;;;CAAc,GACnB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAoBpF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAuBrF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAM9D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG5D"}
@@ -1,67 +0,0 @@
1
- import { randomBytes, createCipheriv, createDecipheriv } from "node:crypto";
2
- import { hashRaw } from "@node-rs/argon2";
3
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
4
- import { dirname } from "node:path";
5
- // Default KDF parameters
6
- const DEFAULT_KDF = { m: 65536, t: 3, p: 4 };
7
- // Derive a 32-byte key using Argon2id
8
- export async function deriveKey(passphrase, salt, params = DEFAULT_KDF) {
9
- const key = await hashRaw(passphrase, {
10
- algorithm: 2 /* Algorithm.Argon2id */,
11
- memoryCost: params.m,
12
- timeCost: params.t,
13
- parallelism: params.p,
14
- outputLen: 32,
15
- salt,
16
- });
17
- return Buffer.from(key);
18
- }
19
- export async function encryptVault(data, passphrase) {
20
- const salt = randomBytes(16);
21
- const key = await deriveKey(passphrase, salt, DEFAULT_KDF);
22
- const iv = randomBytes(12);
23
- const cipher = createCipheriv("aes-256-gcm", key, iv);
24
- const plaintext = JSON.stringify(data);
25
- let ciphertext = cipher.update(plaintext, "utf8", "base64");
26
- ciphertext += cipher.final("base64");
27
- const authTag = cipher.getAuthTag();
28
- key.fill(0); // Zeroize key
29
- return {
30
- salt: salt.toString("base64"),
31
- iv: iv.toString("base64"),
32
- authTag: authTag.toString("base64"),
33
- ciphertext,
34
- kdf: DEFAULT_KDF,
35
- };
36
- }
37
- export async function decryptVault(vault, passphrase) {
38
- const salt = Buffer.from(vault.salt, "base64");
39
- const iv = Buffer.from(vault.iv, "base64");
40
- const authTag = Buffer.from(vault.authTag, "base64");
41
- const params = {
42
- m: vault.kdf?.m ?? DEFAULT_KDF.m,
43
- t: vault.kdf?.t ?? DEFAULT_KDF.t,
44
- p: vault.kdf?.p ?? DEFAULT_KDF.p,
45
- };
46
- const key = await deriveKey(passphrase, salt, params);
47
- // nosemgrep: javascript.node-crypto.security.gcm-no-tag-length.gcm-no-tag-length — authTagLength is set to 16
48
- const decipher = createDecipheriv("aes-256-gcm", key, iv, { authTagLength: 16 });
49
- decipher.setAuthTag(authTag);
50
- let plaintext = decipher.update(vault.ciphertext, "base64", "utf8");
51
- plaintext += decipher.final("utf8");
52
- key.fill(0); // Zeroize key
53
- return JSON.parse(plaintext);
54
- }
55
- export function saveVault(path, vault) {
56
- const dir = dirname(path);
57
- if (!existsSync(dir)) {
58
- mkdirSync(dir, { recursive: true });
59
- }
60
- writeFileSync(path, JSON.stringify(vault, null, 2), "utf-8");
61
- }
62
- export function loadVaultFile(path) {
63
- if (!existsSync(path))
64
- return null;
65
- return JSON.parse(readFileSync(path, "utf-8"));
66
- }
67
- //# sourceMappingURL=vault.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/utils/vault.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export declare function wallPath(officeDir: string): string;
2
- export declare function initWall(officeDir: string, officeName: string): void;
3
- export declare function postToWall(officeDir: string, agent: string, message: string): void;
4
- export declare function readWall(officeDir: string): string;
5
- //# sourceMappingURL=wall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/utils/wall.ts"],"names":[],"mappings":"AAeA,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAMpE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAoBlF;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAKlD"}
@@ -1,51 +0,0 @@
1
- import { existsSync, readFileSync, appendFileSync, writeFileSync } from "node:fs";
2
- import { join, resolve, sep } from "node:path";
3
- import { homedir } from "node:os";
4
- import { sanitizeIdentifier } from "../schema/sanitizer.js";
5
- const MAX_WALL_BYTES = 256 * 1024; // 256KB cap
6
- function assertOfficeDir(officeDir) {
7
- const resolved = resolve(officeDir);
8
- const root = resolve(join(process.env.HOME || homedir(), ".tps", "branch-office"));
9
- if (!resolved.startsWith(root + sep) && resolved !== root) {
10
- throw new Error(`Office directory out of bounds: ${officeDir}`);
11
- }
12
- }
13
- export function wallPath(officeDir) {
14
- return join(officeDir, "WALL.md");
15
- }
16
- export function initWall(officeDir, officeName) {
17
- assertOfficeDir(officeDir);
18
- const p = wallPath(officeDir);
19
- if (!existsSync(p)) {
20
- writeFileSync(p, `# ${officeName} — Broadcast Wall\n\n`, "utf-8");
21
- }
22
- }
23
- export function postToWall(officeDir, agent, message) {
24
- assertOfficeDir(officeDir);
25
- const safe = sanitizeIdentifier(agent);
26
- if (!agent || safe !== agent)
27
- throw new Error(`Invalid agent id: ${agent}`);
28
- if (message.includes("\u0000"))
29
- throw new Error("Wall post contains invalid null byte.");
30
- if (Buffer.byteLength(message, "utf8") > 4096)
31
- throw new Error("Wall post exceeds 4KB limit.");
32
- const p = wallPath(officeDir);
33
- if (!existsSync(p))
34
- throw new Error("Wall not initialized. Run initWall first.");
35
- const timestamp = new Date().toISOString();
36
- const entry = `\n**[${timestamp}] ${agent}:** ${message}\n`;
37
- // Check wall size cap (S17.2-A fix: check size AFTER append)
38
- const current = readFileSync(p, "utf-8");
39
- if (Buffer.byteLength(current + entry, "utf8") > MAX_WALL_BYTES) {
40
- throw new Error("Wall has reached maximum size (256KB). Archive or reset.");
41
- }
42
- appendFileSync(p, entry, "utf-8");
43
- }
44
- export function readWall(officeDir) {
45
- assertOfficeDir(officeDir);
46
- const p = wallPath(officeDir);
47
- if (!existsSync(p))
48
- return "";
49
- return readFileSync(p, "utf-8");
50
- }
51
- //# sourceMappingURL=wall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wall.js","sourceRoot":"","sources":["../../../src/utils/wall.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { DeliveryResult, DeliveryTransport, MailEnvelope, TransportChannel } from "./transport.js";
2
- export declare class WireDeliveryTransport implements DeliveryTransport {
3
- private readonly channel;
4
- private readonly timeoutMs;
5
- private seq;
6
- constructor(channel: TransportChannel, timeoutMs?: number);
7
- name(): string;
8
- deliver(envelope: MailEnvelope): Promise<DeliveryResult>;
9
- }
10
- //# sourceMappingURL=wire-delivery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wire-delivery.d.ts","sourceRoot":"","sources":["../../../src/utils/wire-delivery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EAEZ,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAGxB,qBAAa,qBAAsB,YAAW,iBAAiB;IAI3D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,OAAO,CAAC,GAAG,CAAK;gBAGG,OAAO,EAAE,gBAAgB,EACzB,SAAS,GAAE,MAAa;IAG3C,IAAI,IAAI,MAAM;IAIR,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;CA6C/D"}
@@ -1,57 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { MSG_MAIL_ACK, MSG_MAIL_DELIVER, MailAckBodySchema } from "./wire-mail.js";
3
- export class WireDeliveryTransport {
4
- channel;
5
- timeoutMs;
6
- seq = 0;
7
- constructor(channel, timeoutMs = 5000) {
8
- this.channel = channel;
9
- this.timeoutMs = timeoutMs;
10
- }
11
- name() {
12
- return "wire";
13
- }
14
- async deliver(envelope) {
15
- const id = envelope.headers["x-tps-id"] || randomUUID();
16
- const msg = {
17
- type: MSG_MAIL_DELIVER,
18
- seq: this.seq++,
19
- ts: new Date().toISOString(),
20
- body: {
21
- id,
22
- from: envelope.from,
23
- to: envelope.to,
24
- content: envelope.body.toString("utf-8"),
25
- timestamp: envelope.headers["x-tps-timestamp"] || new Date().toISOString(),
26
- },
27
- };
28
- await this.channel.send(msg);
29
- return new Promise((resolve) => {
30
- const handler = (ack) => {
31
- if (ack.type !== MSG_MAIL_ACK)
32
- return;
33
- const parsed = MailAckBodySchema.safeParse(ack.body);
34
- if (!parsed.success || parsed.data.id !== id)
35
- return;
36
- clearTimeout(timer);
37
- this.channel.offMessage(handler);
38
- if (parsed.data.accepted) {
39
- resolve({ delivered: true, transport: this.name() });
40
- }
41
- else {
42
- resolve({
43
- delivered: false,
44
- transport: this.name(),
45
- error: parsed.data.reason || "rejected",
46
- });
47
- }
48
- };
49
- const timer = setTimeout(() => {
50
- this.channel.offMessage(handler);
51
- resolve({ delivered: false, transport: this.name(), error: "timeout" });
52
- }, this.timeoutMs);
53
- this.channel.onMessage(handler);
54
- });
55
- }
56
- }
57
- //# sourceMappingURL=wire-delivery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wire-delivery.js","sourceRoot":"","sources":["../../../src/utils/wire-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnF,MAAM,OAAO,qBAAqB;IAIb;IACA;IAJX,GAAG,GAAG,CAAC,CAAC;IAEhB,YACmB,OAAyB,EACzB,YAAoB,IAAI;QADxB,YAAO,GAAP,OAAO,CAAkB;QACzB,cAAS,GAAT,SAAS,CAAe;IACxC,CAAC;IAEJ,IAAI;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAsB;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC;QAExD,MAAM,GAAG,GAAe;YACtB,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;YACf,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI,EAAE;gBACJ,EAAE;gBACF,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACxC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aAC3E;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE;YAC7C,MAAM,OAAO,GAAG,CAAC,GAAe,EAAE,EAAE;gBAClC,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;oBAAE,OAAO;gBACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;oBAAE,OAAO;gBAErD,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACzB,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACvD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC;wBACN,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE;wBACtB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU;qBACxC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1E,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,10 +0,0 @@
1
- import type { TpsMessage } from "./transport.js";
2
- export declare const HEADER_BYTES = 6;
3
- export declare const MAX_PAYLOAD_BYTES: number;
4
- export declare function encodeWireMessage(msg: TpsMessage): Buffer;
5
- export declare function decodeWireMessage(frame: Buffer): TpsMessage;
6
- export declare function extractWireFrames(buffer: Buffer): {
7
- messages: TpsMessage[];
8
- rest: Buffer;
9
- };
10
- //# sourceMappingURL=wire-frame.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wire-frame.d.ts","sourceRoot":"","sources":["../../../src/utils/wire-frame.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjD,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAU7C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAYzD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAwB3D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAkB1F"}
@@ -1,66 +0,0 @@
1
- import { Packr, Unpackr } from "msgpackr";
2
- import { z } from "zod";
3
- const packr = new Packr();
4
- const unpackr = new Unpackr();
5
- export const HEADER_BYTES = 6;
6
- export const MAX_PAYLOAD_BYTES = 1024 * 1024; // 1MB
7
- const WireMessageSchema = z.object({
8
- type: z.number().int().min(0).max(0xffff),
9
- seq: z.number().int().nonnegative(),
10
- ts: z.string().min(1),
11
- body: z.unknown(),
12
- sig: z.string().optional(),
13
- });
14
- export function encodeWireMessage(msg) {
15
- const parsed = WireMessageSchema.parse(msg);
16
- const payload = Buffer.from(packr.pack(parsed));
17
- if (payload.length > MAX_PAYLOAD_BYTES) {
18
- throw new Error(`Wire payload exceeds maximum size (${MAX_PAYLOAD_BYTES} bytes)`);
19
- }
20
- const out = Buffer.allocUnsafe(HEADER_BYTES + payload.length);
21
- out.writeUInt16BE(parsed.type, 0);
22
- out.writeUInt32BE(payload.length, 2);
23
- payload.copy(out, HEADER_BYTES);
24
- return out;
25
- }
26
- export function decodeWireMessage(frame) {
27
- if (frame.length < HEADER_BYTES) {
28
- throw new Error("Incomplete frame header");
29
- }
30
- const type = frame.readUInt16BE(0);
31
- const len = frame.readUInt32BE(2);
32
- if (len > MAX_PAYLOAD_BYTES) {
33
- throw new Error(`Wire payload exceeds maximum size (${MAX_PAYLOAD_BYTES} bytes)`);
34
- }
35
- if (frame.length !== HEADER_BYTES + len) {
36
- throw new Error("Invalid frame length");
37
- }
38
- const payload = frame.subarray(HEADER_BYTES);
39
- const decoded = unpackr.unpack(payload);
40
- const parsed = WireMessageSchema.parse({ ...decoded, type });
41
- return {
42
- type: parsed.type,
43
- seq: parsed.seq,
44
- ts: parsed.ts,
45
- body: parsed.body,
46
- sig: parsed.sig,
47
- };
48
- }
49
- export function extractWireFrames(buffer) {
50
- const messages = [];
51
- let offset = 0;
52
- while (offset + HEADER_BYTES <= buffer.length) {
53
- const len = buffer.readUInt32BE(offset + 2);
54
- if (len > MAX_PAYLOAD_BYTES) {
55
- throw new Error(`Wire payload exceeds maximum size (${MAX_PAYLOAD_BYTES} bytes)`);
56
- }
57
- const frameBytes = HEADER_BYTES + len;
58
- if (offset + frameBytes > buffer.length)
59
- break;
60
- const frame = buffer.subarray(offset, offset + frameBytes);
61
- messages.push(decodeWireMessage(frame));
62
- offset += frameBytes;
63
- }
64
- return { messages, rest: buffer.subarray(offset) };
65
- }
66
- //# sourceMappingURL=wire-frame.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wire-frame.js","sourceRoot":"","sources":["../../../src/utils/wire-frame.ts"],"names":[],"mappings":"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"}