@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,231 +0,0 @@
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 async function runIdentity(args) {
25
- switch (args.action) {
26
- case "init": {
27
- const expiresIn = args.expiresIn ? parseDuration(args.expiresIn) : undefined;
28
- const kp = await 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 = await 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 vaultPath = join(identityDir, "vault.json");
65
- const permOk = checkKeyPermissions(vaultPath);
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(` Vault perms: ${permOk ? "āœ… secure (0600)" : "āš ļø insecure — run chmod 600 on vault.json"}`);
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/commands/identity.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- interface MailArgs {
2
- action: "send" | "check" | "list" | "log" | "read" | "watch" | "search";
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
@@ -1 +0,0 @@
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,GAAG,QAAQ,CAAC;IACxE,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,CAuN3D"}
@@ -1,251 +0,0 @@
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
- async function resolveAgentId(override) {
11
- const id = override || process.env.TPS_AGENT_ID || await 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 = await 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 = await 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 = await 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 = await 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 = await 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
- case "search": {
224
- if (!args.agent) {
225
- console.error("Usage: tps mail search <query>");
226
- process.exit(1);
227
- }
228
- const { queryArchive } = await import("../utils/archive.js");
229
- const results = queryArchive({ search: args.agent, limit: 50 });
230
- if (args.json) {
231
- console.log(JSON.stringify(results, null, 2));
232
- }
233
- else {
234
- if (results.length === 0) {
235
- console.log("No results found.");
236
- }
237
- else {
238
- for (const r of results) {
239
- console.log(`[${r.timestamp}] ${r.event}: ${r.from} -> ${r.to}`);
240
- if (r.body) {
241
- console.log(r.body.slice(0, 100) + (r.body.length > 100 ? "..." : ""));
242
- }
243
- console.log("---");
244
- }
245
- }
246
- }
247
- break;
248
- }
249
- }
250
- }
251
- //# sourceMappingURL=mail.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../../src/commands/mail.ts"],"names":[],"mappings":"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"}