@tpsdev-ai/cli 0.1.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 (206) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +79 -0
  3. package/dist/bin/tps.d.ts +3 -0
  4. package/dist/bin/tps.d.ts.map +1 -0
  5. package/dist/bin/tps.js +267 -0
  6. package/dist/bin/tps.js.map +1 -0
  7. package/dist/src/cli/hire.d.ts +16 -0
  8. package/dist/src/cli/hire.d.ts.map +1 -0
  9. package/dist/src/cli/hire.js +176 -0
  10. package/dist/src/cli/hire.js.map +1 -0
  11. package/dist/src/cli/office.d.ts +7 -0
  12. package/dist/src/cli/office.d.ts.map +1 -0
  13. package/dist/src/cli/office.js +51 -0
  14. package/dist/src/cli/office.js.map +1 -0
  15. package/dist/src/cli/review.d.ts +9 -0
  16. package/dist/src/cli/review.d.ts.map +1 -0
  17. package/dist/src/cli/review.js +109 -0
  18. package/dist/src/cli/review.js.map +1 -0
  19. package/dist/src/cli/roster.d.ts +6 -0
  20. package/dist/src/cli/roster.d.ts.map +1 -0
  21. package/dist/src/cli/roster.js +60 -0
  22. package/dist/src/cli/roster.js.map +1 -0
  23. package/dist/src/commands/branch.d.ts +14 -0
  24. package/dist/src/commands/branch.d.ts.map +1 -0
  25. package/dist/src/commands/branch.js +395 -0
  26. package/dist/src/commands/branch.js.map +1 -0
  27. package/dist/src/commands/context.d.ts +9 -0
  28. package/dist/src/commands/context.d.ts.map +1 -0
  29. package/dist/src/commands/context.js +57 -0
  30. package/dist/src/commands/context.js.map +1 -0
  31. package/dist/src/commands/identity.d.ts +13 -0
  32. package/dist/src/commands/identity.d.ts.map +1 -0
  33. package/dist/src/commands/identity.js +231 -0
  34. package/dist/src/commands/identity.js.map +1 -0
  35. package/dist/src/commands/mail.d.ts +12 -0
  36. package/dist/src/commands/mail.d.ts.map +1 -0
  37. package/dist/src/commands/mail.js +225 -0
  38. package/dist/src/commands/mail.js.map +1 -0
  39. package/dist/src/commands/office.d.ts +19 -0
  40. package/dist/src/commands/office.d.ts.map +1 -0
  41. package/dist/src/commands/office.js +598 -0
  42. package/dist/src/commands/office.js.map +1 -0
  43. package/dist/src/commands/roster.d.ts +10 -0
  44. package/dist/src/commands/roster.d.ts.map +1 -0
  45. package/dist/src/commands/roster.js +143 -0
  46. package/dist/src/commands/roster.js.map +1 -0
  47. package/dist/src/generators/claude-code.d.ts +17 -0
  48. package/dist/src/generators/claude-code.d.ts.map +1 -0
  49. package/dist/src/generators/claude-code.js +80 -0
  50. package/dist/src/generators/claude-code.js.map +1 -0
  51. package/dist/src/generators/codex.d.ts +22 -0
  52. package/dist/src/generators/codex.d.ts.map +1 -0
  53. package/dist/src/generators/codex.js +78 -0
  54. package/dist/src/generators/codex.js.map +1 -0
  55. package/dist/src/generators/ollama.d.ts +18 -0
  56. package/dist/src/generators/ollama.d.ts.map +1 -0
  57. package/dist/src/generators/ollama.js +97 -0
  58. package/dist/src/generators/ollama.js.map +1 -0
  59. package/dist/src/generators/openclaw.d.ts +15 -0
  60. package/dist/src/generators/openclaw.d.ts.map +1 -0
  61. package/dist/src/generators/openclaw.js +103 -0
  62. package/dist/src/generators/openclaw.js.map +1 -0
  63. package/dist/src/generators/registry.d.ts +36 -0
  64. package/dist/src/generators/registry.d.ts.map +1 -0
  65. package/dist/src/generators/registry.js +99 -0
  66. package/dist/src/generators/registry.js.map +1 -0
  67. package/dist/src/schema/manifest.d.ts +140 -0
  68. package/dist/src/schema/manifest.d.ts.map +1 -0
  69. package/dist/src/schema/manifest.js +62 -0
  70. package/dist/src/schema/manifest.js.map +1 -0
  71. package/dist/src/schema/report.d.ts +166 -0
  72. package/dist/src/schema/report.d.ts.map +1 -0
  73. package/dist/src/schema/report.js +90 -0
  74. package/dist/src/schema/report.js.map +1 -0
  75. package/dist/src/schema/sanitizer.d.ts +30 -0
  76. package/dist/src/schema/sanitizer.d.ts.map +1 -0
  77. package/dist/src/schema/sanitizer.js +97 -0
  78. package/dist/src/schema/sanitizer.js.map +1 -0
  79. package/dist/src/soundstage/mock-llm.d.ts +3 -0
  80. package/dist/src/soundstage/mock-llm.d.ts.map +1 -0
  81. package/dist/src/soundstage/mock-llm.js +68 -0
  82. package/dist/src/soundstage/mock-llm.js.map +1 -0
  83. package/dist/src/utils/agent-info.d.ts +28 -0
  84. package/dist/src/utils/agent-info.d.ts.map +1 -0
  85. package/dist/src/utils/agent-info.js +102 -0
  86. package/dist/src/utils/agent-info.js.map +1 -0
  87. package/dist/src/utils/archive.d.ts +27 -0
  88. package/dist/src/utils/archive.d.ts.map +1 -0
  89. package/dist/src/utils/archive.js +80 -0
  90. package/dist/src/utils/archive.js.map +1 -0
  91. package/dist/src/utils/config-inject.d.ts +27 -0
  92. package/dist/src/utils/config-inject.d.ts.map +1 -0
  93. package/dist/src/utils/config-inject.js +83 -0
  94. package/dist/src/utils/config-inject.js.map +1 -0
  95. package/dist/src/utils/config.d.ts +30 -0
  96. package/dist/src/utils/config.d.ts.map +1 -0
  97. package/dist/src/utils/config.js +55 -0
  98. package/dist/src/utils/config.js.map +1 -0
  99. package/dist/src/utils/connection-state.d.ts +27 -0
  100. package/dist/src/utils/connection-state.d.ts.map +1 -0
  101. package/dist/src/utils/connection-state.js +81 -0
  102. package/dist/src/utils/connection-state.js.map +1 -0
  103. package/dist/src/utils/context.d.ts +14 -0
  104. package/dist/src/utils/context.d.ts.map +1 -0
  105. package/dist/src/utils/context.js +68 -0
  106. package/dist/src/utils/context.js.map +1 -0
  107. package/dist/src/utils/github-webhook.d.ts +3 -0
  108. package/dist/src/utils/github-webhook.d.ts.map +1 -0
  109. package/dist/src/utils/github-webhook.js +105 -0
  110. package/dist/src/utils/github-webhook.js.map +1 -0
  111. package/dist/src/utils/identity.d.ts +114 -0
  112. package/dist/src/utils/identity.d.ts.map +1 -0
  113. package/dist/src/utils/identity.js +341 -0
  114. package/dist/src/utils/identity.js.map +1 -0
  115. package/dist/src/utils/internal-mail.d.ts +18 -0
  116. package/dist/src/utils/internal-mail.d.ts.map +1 -0
  117. package/dist/src/utils/internal-mail.js +75 -0
  118. package/dist/src/utils/internal-mail.js.map +1 -0
  119. package/dist/src/utils/loop-detector.d.ts +27 -0
  120. package/dist/src/utils/loop-detector.d.ts.map +1 -0
  121. package/dist/src/utils/loop-detector.js +42 -0
  122. package/dist/src/utils/loop-detector.js.map +1 -0
  123. package/dist/src/utils/mail-handler.d.ts +19 -0
  124. package/dist/src/utils/mail-handler.d.ts.map +1 -0
  125. package/dist/src/utils/mail-handler.js +94 -0
  126. package/dist/src/utils/mail-handler.js.map +1 -0
  127. package/dist/src/utils/mail.d.ts +22 -0
  128. package/dist/src/utils/mail.d.ts.map +1 -0
  129. package/dist/src/utils/mail.js +111 -0
  130. package/dist/src/utils/mail.js.map +1 -0
  131. package/dist/src/utils/manifest.d.ts +36 -0
  132. package/dist/src/utils/manifest.d.ts.map +1 -0
  133. package/dist/src/utils/manifest.js +91 -0
  134. package/dist/src/utils/manifest.js.map +1 -0
  135. package/dist/src/utils/noise-ik-transport.d.ts +18 -0
  136. package/dist/src/utils/noise-ik-transport.d.ts.map +1 -0
  137. package/dist/src/utils/noise-ik-transport.js +357 -0
  138. package/dist/src/utils/noise-ik-transport.js.map +1 -0
  139. package/dist/src/utils/nono.d.ts +72 -0
  140. package/dist/src/utils/nono.d.ts.map +1 -0
  141. package/dist/src/utils/nono.js +166 -0
  142. package/dist/src/utils/nono.js.map +1 -0
  143. package/dist/src/utils/outbox.d.ts +10 -0
  144. package/dist/src/utils/outbox.d.ts.map +1 -0
  145. package/dist/src/utils/outbox.js +29 -0
  146. package/dist/src/utils/outbox.js.map +1 -0
  147. package/dist/src/utils/output.d.ts +17 -0
  148. package/dist/src/utils/output.d.ts.map +1 -0
  149. package/dist/src/utils/output.js +83 -0
  150. package/dist/src/utils/output.js.map +1 -0
  151. package/dist/src/utils/plain-tcp-transport.d.ts +10 -0
  152. package/dist/src/utils/plain-tcp-transport.d.ts.map +1 -0
  153. package/dist/src/utils/plain-tcp-transport.js +209 -0
  154. package/dist/src/utils/plain-tcp-transport.js.map +1 -0
  155. package/dist/src/utils/provision.d.ts +2 -0
  156. package/dist/src/utils/provision.d.ts.map +1 -0
  157. package/dist/src/utils/provision.js +186 -0
  158. package/dist/src/utils/provision.js.map +1 -0
  159. package/dist/src/utils/relay.d.ts +30 -0
  160. package/dist/src/utils/relay.d.ts.map +1 -0
  161. package/dist/src/utils/relay.js +539 -0
  162. package/dist/src/utils/relay.js.map +1 -0
  163. package/dist/src/utils/sandbox.d.ts +37 -0
  164. package/dist/src/utils/sandbox.d.ts.map +1 -0
  165. package/dist/src/utils/sandbox.js +126 -0
  166. package/dist/src/utils/sandbox.js.map +1 -0
  167. package/dist/src/utils/transport.d.ts +62 -0
  168. package/dist/src/utils/transport.d.ts.map +1 -0
  169. package/dist/src/utils/transport.js +75 -0
  170. package/dist/src/utils/transport.js.map +1 -0
  171. package/dist/src/utils/wall.d.ts +5 -0
  172. package/dist/src/utils/wall.d.ts.map +1 -0
  173. package/dist/src/utils/wall.js +51 -0
  174. package/dist/src/utils/wall.js.map +1 -0
  175. package/dist/src/utils/wire-delivery.d.ts +10 -0
  176. package/dist/src/utils/wire-delivery.d.ts.map +1 -0
  177. package/dist/src/utils/wire-delivery.js +57 -0
  178. package/dist/src/utils/wire-delivery.js.map +1 -0
  179. package/dist/src/utils/wire-frame.d.ts +10 -0
  180. package/dist/src/utils/wire-frame.d.ts.map +1 -0
  181. package/dist/src/utils/wire-frame.js +66 -0
  182. package/dist/src/utils/wire-frame.js.map +1 -0
  183. package/dist/src/utils/wire-mail.d.ts +54 -0
  184. package/dist/src/utils/wire-mail.d.ts.map +1 -0
  185. package/dist/src/utils/wire-mail.js +24 -0
  186. package/dist/src/utils/wire-mail.js.map +1 -0
  187. package/dist/src/utils/ws-noise-transport.d.ts +18 -0
  188. package/dist/src/utils/ws-noise-transport.d.ts.map +1 -0
  189. package/dist/src/utils/ws-noise-transport.js +356 -0
  190. package/dist/src/utils/ws-noise-transport.js.map +1 -0
  191. package/nono-profiles/tps-hire.toml +17 -0
  192. package/nono-profiles/tps-review-deep.toml +18 -0
  193. package/nono-profiles/tps-review-local.toml +21 -0
  194. package/nono-profiles/tps-roster.toml +16 -0
  195. package/package.json +68 -0
  196. package/personas/designer.tps +58 -0
  197. package/personas/developer.tps +59 -0
  198. package/personas/ea.tps +59 -0
  199. package/personas/ops.tps +60 -0
  200. package/personas/security.tps +59 -0
  201. package/personas/strategy.tps +60 -0
  202. package/personas/support.tps +57 -0
  203. package/reports/anvil.tps +68 -0
  204. package/reports/flint.tps +71 -0
  205. package/reports/kern.tps +65 -0
  206. package/reports/pulse.tps +64 -0
@@ -0,0 +1,231 @@
1
+ /**
2
+ * TPS Identity CLI — manage host identity and branch key registry.
3
+ */
4
+ import { initHostIdentity, loadHostIdentity, registerBranch, lookupBranch, revokeBranch, listBranches, isExpired, isRevoked, checkKeyPermissions, } from "../utils/identity.js";
5
+ import { installNonoProfiles } from "../utils/nono.js";
6
+ import { join } from "node:path";
7
+ import { homedir } from "node:os";
8
+ function parseDuration(s) {
9
+ const m = s.match(/^(\d+)([dhm])$/);
10
+ if (!m)
11
+ throw new Error(`Invalid duration: ${s}. Use e.g. 90d, 24h, 60m`);
12
+ const n = parseInt(m[1], 10);
13
+ switch (m[2]) {
14
+ case "d":
15
+ return n * 86400000;
16
+ case "h":
17
+ return n * 3600000;
18
+ case "m":
19
+ return n * 60000;
20
+ default:
21
+ throw new Error(`Unknown unit: ${m[2]}`);
22
+ }
23
+ }
24
+ export function runIdentity(args) {
25
+ switch (args.action) {
26
+ case "init": {
27
+ const expiresIn = args.expiresIn ? parseDuration(args.expiresIn) : undefined;
28
+ const kp = initHostIdentity({ expiresIn });
29
+ installNonoProfiles(undefined, args.json);
30
+ const sigPubHex = Buffer.from(kp.signing.publicKey).toString("hex");
31
+ const encPubHex = Buffer.from(kp.encryption.publicKey).toString("hex");
32
+ if (args.json) {
33
+ console.log(JSON.stringify({
34
+ fingerprint: kp.fingerprint,
35
+ signingPublicKey: sigPubHex,
36
+ encryptionPublicKey: encPubHex,
37
+ createdAt: kp.createdAt,
38
+ expiresAt: kp.expiresAt || null,
39
+ }, null, 2));
40
+ }
41
+ else {
42
+ console.log(`Identity initialized.`);
43
+ console.log(` Fingerprint: ${kp.fingerprint}`);
44
+ console.log(` Signing pubkey: ${sigPubHex}`);
45
+ console.log(` Encrypt pubkey: ${encPubHex}`);
46
+ console.log(` Created: ${kp.createdAt}`);
47
+ if (kp.expiresAt)
48
+ console.log(` Expires: ${kp.expiresAt}`);
49
+ console.log(`\nTo register this identity on a host:\n tps identity register <name> --pubkey ${sigPubHex} --enc-pubkey ${encPubHex}`);
50
+ }
51
+ return;
52
+ }
53
+ case "show": {
54
+ let kp;
55
+ try {
56
+ kp = loadHostIdentity();
57
+ }
58
+ catch {
59
+ console.error("No host identity found. Run: tps identity init");
60
+ process.exit(1);
61
+ }
62
+ const identityDir = process.env.TPS_IDENTITY_DIR ||
63
+ join(process.env.HOME || homedir(), ".tps", "identity");
64
+ const keyPath = join(identityDir, "host.key");
65
+ const permOk = checkKeyPermissions(keyPath);
66
+ if (args.json) {
67
+ console.log(JSON.stringify({
68
+ fingerprint: kp.fingerprint,
69
+ createdAt: kp.createdAt,
70
+ expiresAt: kp.expiresAt || null,
71
+ expired: kp.expiresAt
72
+ ? new Date(kp.expiresAt) < new Date()
73
+ : false,
74
+ keyPermissionsOk: permOk,
75
+ }, null, 2));
76
+ }
77
+ else {
78
+ console.log(`Host Identity`);
79
+ console.log(` Fingerprint: ${kp.fingerprint}`);
80
+ console.log(` Created: ${kp.createdAt}`);
81
+ if (kp.expiresAt) {
82
+ const expired = new Date(kp.expiresAt) < new Date();
83
+ console.log(` Expires: ${kp.expiresAt}${expired ? " āš ļø EXPIRED" : ""}`);
84
+ }
85
+ console.log(` Key perms: ${permOk ? "āœ… secure (0600)" : "āš ļø insecure — run chmod 600 on host.key"}`);
86
+ }
87
+ return;
88
+ }
89
+ case "register": {
90
+ if (!args.branch || !args.pubkey) {
91
+ console.error("Usage: tps identity register <branch-id> --pubkey <hex>\n" +
92
+ "\nThe branch generates its own keys (tps identity init on the branch).\n" +
93
+ "Only the PUBLIC key is registered here. The host never sees the private key.\n" +
94
+ "\nOptional: --enc-pubkey <hex> X25519 encryption public key");
95
+ process.exit(1);
96
+ }
97
+ // Parse hex-encoded public keys from branch
98
+ const signingPubKey = new Uint8Array((args.pubkey.match(/.{2}/g) || []).map((b) => parseInt(b, 16)));
99
+ if (signingPubKey.length !== 32) {
100
+ console.error("Signing public key must be 32 bytes (64 hex chars).");
101
+ process.exit(1);
102
+ }
103
+ let encPubKey;
104
+ if (args.encPubkey) {
105
+ encPubKey = new Uint8Array((args.encPubkey.match(/.{2}/g) || []).map((b) => parseInt(b, 16)));
106
+ if (encPubKey.length !== 32) {
107
+ console.error("Encryption public key must be 32 bytes (64 hex chars).");
108
+ process.exit(1);
109
+ }
110
+ }
111
+ const expiresIn = args.expiresIn
112
+ ? parseDuration(args.expiresIn)
113
+ : 90 * 86400000;
114
+ const expiresAt = new Date(Date.now() + expiresIn).toISOString();
115
+ const registered = registerBranch(args.branch, signingPubKey, {
116
+ createdAt: new Date().toISOString(),
117
+ expiresAt,
118
+ trust: args.trust || "standard",
119
+ }, encPubKey);
120
+ if (args.json) {
121
+ console.log(JSON.stringify({
122
+ branchId: args.branch,
123
+ fingerprint: registered.meta.fingerprint,
124
+ createdAt: registered.meta.createdAt,
125
+ expiresAt: registered.meta.expiresAt || null,
126
+ trust: registered.meta.trust,
127
+ hasEncryptionKey: !!encPubKey,
128
+ }, null, 2));
129
+ }
130
+ else {
131
+ console.log(`Registered branch: ${args.branch}`);
132
+ console.log(` Fingerprint: ${registered.meta.fingerprint}`);
133
+ console.log(` Trust: ${registered.meta.trust}`);
134
+ console.log(` Expires: ${registered.meta.expiresAt}`);
135
+ console.log(` Encryption: ${encPubKey ? "āœ… X25519 key registered" : "āš ļø no encryption key (provide --enc-pubkey)"}`);
136
+ }
137
+ return;
138
+ }
139
+ case "list": {
140
+ const branches = listBranches();
141
+ if (args.json) {
142
+ console.log(JSON.stringify(branches.map((b) => ({
143
+ branchId: b.branchId,
144
+ fingerprint: b.meta.fingerprint,
145
+ createdAt: b.meta.createdAt,
146
+ expiresAt: b.meta.expiresAt || null,
147
+ trust: b.meta.trust || "standard",
148
+ expired: isExpired(b.meta),
149
+ })), null, 2));
150
+ }
151
+ else if (branches.length === 0) {
152
+ console.log("No branches registered.");
153
+ }
154
+ else {
155
+ console.log("Registered branches:");
156
+ for (const b of branches) {
157
+ const expired = isExpired(b.meta) ? " āš ļø EXPIRED" : "";
158
+ console.log(` ${b.branchId} [${b.meta.trust || "standard"}] ${b.meta.fingerprint.slice(0, 16)}...${expired}`);
159
+ }
160
+ }
161
+ return;
162
+ }
163
+ case "revoke": {
164
+ if (!args.branch) {
165
+ console.error("Usage: tps identity revoke <branch-id> --reason \"...\"");
166
+ process.exit(1);
167
+ }
168
+ const reason = args.reason || "manual revocation";
169
+ try {
170
+ revokeBranch(args.branch, reason);
171
+ console.log(`Revoked branch: ${args.branch}`);
172
+ console.log(` Reason: ${reason}`);
173
+ console.log(` The branch can no longer authenticate. Re-provision to restore.`);
174
+ }
175
+ catch (e) {
176
+ console.error(e.message);
177
+ process.exit(1);
178
+ }
179
+ return;
180
+ }
181
+ case "verify": {
182
+ if (!args.branch) {
183
+ console.error("Usage: tps identity verify <branch-id>");
184
+ process.exit(1);
185
+ }
186
+ if (isRevoked(args.branch)) {
187
+ if (args.json) {
188
+ console.log(JSON.stringify({ branchId: args.branch, valid: false, reason: "revoked" }));
189
+ }
190
+ else {
191
+ console.log(`āŒ ${args.branch}: REVOKED`);
192
+ }
193
+ process.exit(1);
194
+ }
195
+ const entry = lookupBranch(args.branch);
196
+ if (!entry) {
197
+ if (args.json) {
198
+ console.log(JSON.stringify({ branchId: args.branch, valid: false, reason: "not found" }));
199
+ }
200
+ else {
201
+ console.log(`āŒ ${args.branch}: not registered`);
202
+ }
203
+ process.exit(1);
204
+ }
205
+ const expired = isExpired(entry.meta);
206
+ if (args.json) {
207
+ console.log(JSON.stringify({
208
+ branchId: args.branch,
209
+ valid: !expired,
210
+ fingerprint: entry.meta.fingerprint,
211
+ expiresAt: entry.meta.expiresAt || null,
212
+ expired,
213
+ }, null, 2));
214
+ }
215
+ else {
216
+ if (expired) {
217
+ console.log(`āš ļø ${args.branch}: EXPIRED (${entry.meta.expiresAt})`);
218
+ process.exit(1);
219
+ }
220
+ else {
221
+ console.log(`āœ… ${args.branch}: valid`);
222
+ console.log(` Fingerprint: ${entry.meta.fingerprint}`);
223
+ if (entry.meta.expiresAt)
224
+ console.log(` Expires: ${entry.meta.expiresAt}`);
225
+ }
226
+ }
227
+ return;
228
+ }
229
+ }
230
+ }
231
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/commands/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface MailArgs {
2
+ action: "send" | "check" | "list" | "log" | "read" | "watch";
3
+ agent?: string;
4
+ message?: string;
5
+ messageId?: string;
6
+ json?: boolean;
7
+ since?: string;
8
+ limit?: number;
9
+ }
10
+ export declare function runMail(args: MailArgs): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=mail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/commands/mail.ts"],"names":[],"mappings":"AAUA,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAyBD,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8L3D"}
@@ -0,0 +1,225 @@
1
+ import { assertValidBody, checkMessages, getInbox, listMessages, sendMessage } from "../utils/mail.js";
2
+ import { deliverToSandbox, deliverToRemoteBranch } from "../utils/relay.js";
3
+ import { sanitizeIdentifier } from "../schema/sanitizer.js";
4
+ import { queryArchive } from "../utils/archive.js";
5
+ import { join } from "node:path";
6
+ import { homedir } from "node:os";
7
+ import { existsSync, readdirSync, readFileSync, renameSync, watch } from "node:fs";
8
+ import { loadHostIdentityId } from "../utils/identity.js";
9
+ import { queueOutboxMessage } from "../utils/outbox.js";
10
+ function resolveAgentId(override) {
11
+ const id = override || process.env.TPS_AGENT_ID || loadHostIdentityId() || "unknown";
12
+ const safe = sanitizeIdentifier(id);
13
+ if (safe !== id) {
14
+ console.error(`Invalid agent id: ${id}`);
15
+ process.exit(1);
16
+ }
17
+ return id;
18
+ }
19
+ function validateAgent(agent) {
20
+ if (!agent) {
21
+ console.error("Agent id is required.");
22
+ process.exit(1);
23
+ }
24
+ const safe = sanitizeIdentifier(agent);
25
+ if (safe !== agent) {
26
+ console.error(`Invalid agent id: ${agent}`);
27
+ process.exit(1);
28
+ }
29
+ return agent;
30
+ }
31
+ export async function runMail(args) {
32
+ switch (args.action) {
33
+ case "send": {
34
+ const to = validateAgent(args.agent);
35
+ if (!args.message) {
36
+ console.error("Usage: tps mail send <agent> <message>");
37
+ process.exit(1);
38
+ }
39
+ const from = resolveAgentId();
40
+ // Branch mode: queue outbound to be picked up by host on next connect
41
+ const branchHostFile = join(process.env.HOME || homedir(), ".tps", "identity", "host.json");
42
+ if (existsSync(branchHostFile)) {
43
+ assertValidBody(args.message);
44
+ queueOutboxMessage(to, args.message, from);
45
+ if (args.json) {
46
+ console.log(JSON.stringify({ status: "queued", to, queue: "outbox" }));
47
+ }
48
+ else {
49
+ console.log("Queued for delivery to host.");
50
+ }
51
+ return;
52
+ }
53
+ // Check for remote branch (has remote.json)
54
+ const remoteJsonPath = join(process.env.HOME || homedir(), ".tps", "branch-office", to, "remote.json");
55
+ if (existsSync(remoteJsonPath)) {
56
+ assertValidBody(args.message);
57
+ await deliverToRemoteBranch(to, { to, from, body: args.message });
58
+ if (args.json) {
59
+ console.log(JSON.stringify({ status: "sent", to, transport: "remote" }));
60
+ }
61
+ else {
62
+ console.log(`Mail delivered to remote branch '${to}'.`);
63
+ }
64
+ return;
65
+ }
66
+ // Inbound Bridge: check if recipient is a local branch office agent
67
+ const branchInbox = join(process.env.HOME || homedir(), ".tps", "branch-office", to, "mail", "inbox");
68
+ if (existsSync(branchInbox)) {
69
+ assertValidBody(args.message);
70
+ deliverToSandbox(to, {
71
+ to,
72
+ from,
73
+ body: args.message,
74
+ });
75
+ if (args.json) {
76
+ console.log(JSON.stringify({ status: "sent", to, bridge: "branch-office" }));
77
+ }
78
+ else {
79
+ console.log(`Message sent to branch office ${to}`);
80
+ }
81
+ return;
82
+ }
83
+ const msg = sendMessage(to, args.message, from);
84
+ if (args.json) {
85
+ console.log(JSON.stringify(msg, null, 2));
86
+ }
87
+ else {
88
+ console.log(`Message sent to ${to} (${msg.id})`);
89
+ }
90
+ return;
91
+ }
92
+ case "check": {
93
+ const agent = resolveAgentId(args.agent);
94
+ const messages = checkMessages(agent);
95
+ if (args.json) {
96
+ console.log(JSON.stringify(messages, null, 2));
97
+ }
98
+ else if (messages.length === 0) {
99
+ console.log("No new messages.");
100
+ }
101
+ else {
102
+ for (const m of messages) {
103
+ console.log(`šŸ“¬ ${m.from} → ${m.to} ${m.timestamp}`);
104
+ console.log(m.body);
105
+ console.log("---");
106
+ }
107
+ }
108
+ return;
109
+ }
110
+ case "list": {
111
+ const agent = resolveAgentId(args.agent);
112
+ const messages = listMessages(agent);
113
+ if (args.json) {
114
+ console.log(JSON.stringify(messages, null, 2));
115
+ }
116
+ else if (messages.length === 0) {
117
+ console.log("No messages.");
118
+ }
119
+ else {
120
+ for (const m of messages) {
121
+ const marker = m.read ? "šŸ“–" : "šŸ“¬";
122
+ console.log(`${marker} [${m.id.slice(0, 8)}] ${m.from} → ${m.to} ${m.timestamp}`);
123
+ }
124
+ }
125
+ return;
126
+ }
127
+ case "read": {
128
+ const agent = resolveAgentId(args.agent);
129
+ const id = args.messageId;
130
+ if (!id) {
131
+ console.error("Usage: tps mail read <agent> <message-id>");
132
+ process.exit(1);
133
+ }
134
+ const inbox = getInbox(agent);
135
+ const dirs = [inbox.fresh, inbox.cur];
136
+ let found = null;
137
+ for (const dir of dirs) {
138
+ if (!existsSync(dir))
139
+ continue;
140
+ const files = readdirSync(dir).filter(f => f.endsWith(".json"));
141
+ for (const f of files) {
142
+ const msg = JSON.parse(readFileSync(join(dir, f), "utf-8"));
143
+ if (msg.id === id || msg.id.startsWith(id)) {
144
+ found = msg;
145
+ break;
146
+ }
147
+ }
148
+ if (found)
149
+ break;
150
+ }
151
+ if (!found) {
152
+ console.error(`Message not found: ${id}`);
153
+ process.exit(1);
154
+ }
155
+ if (args.json) {
156
+ console.log(JSON.stringify(found, null, 2));
157
+ }
158
+ else {
159
+ const marker = found.read ? "šŸ“–" : "šŸ“¬";
160
+ console.log(`${marker} ${found.from} → ${found.to} ${found.timestamp}`);
161
+ console.log(`ID: ${found.id}`);
162
+ console.log("---");
163
+ console.log(found.body);
164
+ }
165
+ return;
166
+ }
167
+ case "watch": {
168
+ const agent = resolveAgentId(args.agent);
169
+ const { fresh, cur } = getInbox(agent);
170
+ console.log(`Watching ${agent} inbox... (Ctrl-C to stop)`);
171
+ const print = (file) => {
172
+ if (!file.endsWith(".json"))
173
+ return;
174
+ const fullPath = join(fresh, file);
175
+ try {
176
+ const raw = readFileSync(fullPath, "utf-8");
177
+ const msg = JSON.parse(raw);
178
+ console.log(`\nšŸ“¬ ${msg.from} → ${msg.to} ${msg.timestamp}`);
179
+ console.log(msg.body);
180
+ renameSync(fullPath, join(cur, file));
181
+ }
182
+ catch { }
183
+ };
184
+ readdirSync(fresh).filter((f) => f.endsWith(".json")).forEach(print);
185
+ const watcher = watch(fresh, (_event, filename) => {
186
+ if (filename)
187
+ print(filename.toString());
188
+ });
189
+ await new Promise((resolve) => {
190
+ const stop = () => {
191
+ try {
192
+ watcher.close();
193
+ }
194
+ catch { }
195
+ resolve();
196
+ };
197
+ process.on("SIGINT", stop);
198
+ process.on("SIGTERM", stop);
199
+ });
200
+ return;
201
+ }
202
+ case "log": {
203
+ const events = queryArchive({
204
+ agent: args.agent,
205
+ since: args.since,
206
+ limit: args.limit || 20,
207
+ });
208
+ if (args.json) {
209
+ console.log(JSON.stringify(events, null, 2));
210
+ }
211
+ else if (events.length === 0) {
212
+ console.log("No archive entries.");
213
+ }
214
+ else {
215
+ for (const e of events) {
216
+ const icon = e.event === "sent" ? "šŸ“¤" : e.event === "read" ? "šŸ“¬" : "šŸ“‹";
217
+ const preview = e.bodyPreview ? ` — ${e.bodyPreview}` : "";
218
+ console.log(`${icon} [${e.event}] ${e.from} → ${e.to} @ ${e.timestamp}${preview}`);
219
+ }
220
+ }
221
+ return;
222
+ }
223
+ }
224
+ }
225
+ //# sourceMappingURL=mail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../../src/commands/mail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ interface OfficeArgs {
2
+ action: "start" | "stop" | "list" | "status" | "relay" | "exec" | "join" | "revoke" | "sync" | "connect";
3
+ agent?: string;
4
+ command?: string[];
5
+ manifest?: string;
6
+ soundstage?: boolean;
7
+ joinToken?: string;
8
+ }
9
+ export declare function parseJoinToken(token: string): {
10
+ host: string;
11
+ port: number;
12
+ transport: "ws" | "tcp";
13
+ encryptionPubkey: Uint8Array;
14
+ signingPubkey: Uint8Array;
15
+ fingerprint: string;
16
+ };
17
+ export declare function runOffice(args: OfficeArgs): Promise<void>;
18
+ export {};
19
+ //# sourceMappingURL=office.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"office.d.ts","sourceRoot":"","sources":["../../../src/commands/office.ts"],"names":[],"mappings":"AAiBA,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACzG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyDD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC;IACxB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,aAAa,EAAE,UAAU,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB,CA4CA;AAmID,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6Y/D"}