@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
package/dist/bin/tps.js DELETED
@@ -1,414 +0,0 @@
1
- #!/usr/bin/env node
2
- import meow from "meow";
3
- const cli = meow(`
4
- Usage
5
- $ tps <command> [options]
6
-
7
- Commands
8
- hire <report> Onboard a new agent from a .tps report or persona
9
- roster <action> Agent directory (list/show/find)
10
- review <name> Performance review for a specific agent
11
- office <action> Branch office sandbox lifecycle (start/stop/list/status/kill)
12
- bootstrap <agent-id> Bring a hired agent to operational state
13
- backup <agent-id> [--schedule daily|off] [--keep n] [--sanitize] Backup agent workspace
14
- restore <agent-id> <archive> [--clone] [--overwrite] [--from <archive>] Restore agent workspace from a backup
15
- status [agent-id] [--auto-prune] [--prune] [--json] [--cost] [--shared]
16
- heartbeat <agent-id> [--nonono] Send a heartbeat/ping for an agent
17
- context <action> Workstream context memory (read/update/list)
18
- mail <action> Mailroom operations (send/check/list/search)
19
- identity <action> Key management (init/show/register/list/revoke/verify)
20
- secrets <action> Secret management (set/list/remove)
21
- git <action> Git utilities (worktree)
22
- branch <action> Branch office node (init/start/stop/status/log)
23
-
24
- Options
25
- --help Show this help text
26
- --version Show version number
27
- --config <path> Path to openclaw.json (default: auto-discover)
28
-
29
- Examples
30
- $ tps hire developer --name Fred
31
- $ tps hire ./reports/strategy-lead.tps --dry-run
32
- $ tps hire developer --name Scout --runtime claude-code
33
- $ tps hire ops --name Monitor --runtime ollama --base-model llama3.1:8b
34
- $ tps hire developer --name Coder --runtime codex
35
- $ tps roster list
36
- $ tps roster show flint --json
37
- $ tps roster find --channel discord
38
- $ tps roster list --config ~/custom/openclaw.json
39
- $ tps mail send kern "hi"
40
- $ tps mail check kern
41
- $ tps mail log --limit 10
42
- $ tps mail log flint --since 2026-02-20
43
- $ tps office start branch-a
44
- $ tps office status branch-a
45
- $ tps bootstrap flint
46
- $ tps backup flint --schedule daily
47
- $ tps restore flint ~/.tps/backups/flint/old.tps-backup.tar.gz
48
- $ tps status
49
- $ tps status flint --cost
50
- $ tps heartbeat flint
51
- $ tps review flint
52
-
53
- Built-in personas: developer, designer, support, ea, ops, strategy, security
54
-
55
- If you could just go ahead and use the correct command, that'd be great.
56
- `, {
57
- importMeta: import.meta,
58
- flags: {
59
- reason: { type: "string" },
60
- expiresIn: { type: "string" },
61
- trust: { type: "string" },
62
- pubkey: { type: "string" },
63
- encPubkey: { type: "string" },
64
- name: { type: "string" },
65
- workspace: { type: "string" },
66
- dryRun: { type: "boolean", default: false },
67
- json: { type: "boolean", default: false },
68
- config: { type: "string" },
69
- deep: { type: "boolean", default: false },
70
- summary: { type: "string" },
71
- channel: { type: "string" },
72
- branch: { type: "boolean", default: false },
73
- manifest: { type: "string" },
74
- soundstage: { type: "boolean", default: false },
75
- nonono: { type: "boolean", default: false },
76
- inject: { type: "boolean", default: true },
77
- runtime: { type: "string", default: "openclaw" },
78
- baseModel: { type: "string" },
79
- since: { type: "string" },
80
- limit: { type: "number" },
81
- from: { type: "string" },
82
- clone: { type: "boolean", default: false },
83
- overwrite: { type: "boolean", default: false },
84
- schedule: { type: "string" },
85
- keep: { type: "number" },
86
- sanitize: { type: "boolean", default: true },
87
- listen: { type: "number" },
88
- host: { type: "string" },
89
- force: { type: "boolean", default: false },
90
- follow: { type: "boolean", default: false },
91
- lines: { type: "number" },
92
- transport: { type: "string" },
93
- autoPrune: { type: "boolean", default: false },
94
- prune: { type: "boolean", default: false },
95
- staleMinutes: { type: "number" },
96
- offlineHours: { type: "number" },
97
- shared: { type: "boolean", default: false },
98
- cost: { type: "boolean", default: false },
99
- statusOverride: { type: "string" },
100
- },
101
- });
102
- const [command, ...rest] = cli.input;
103
- // nono availability check (skip for --no-nono or office/mail relay commands)
104
- async function checkNono() {
105
- if (cli.flags.nonono)
106
- return;
107
- if (command === "office" && rest[0] === "relay")
108
- return; // relay runs in background
109
- const { findNono } = await import("../src/utils/nono.js");
110
- if (!findNono()) {
111
- console.warn("⚠️ nono not found. Host agents will run without process isolation.\n" +
112
- " Install nono for syscall filtering + filesystem boundaries.\n" +
113
- " Use --nonono to run anyway (not recommended).\n");
114
- }
115
- }
116
- async function main() {
117
- await checkNono();
118
- switch (command) {
119
- case "hire": {
120
- const reportPath = rest[0];
121
- if (!reportPath) {
122
- console.error("I'm gonna need you to specify a TPS report file or persona.\n\n tps hire <report.tps | persona> [--name Name]\n\nBuilt-in personas: developer, designer, support, ea, ops, strategy");
123
- process.exit(1);
124
- }
125
- const { runHire } = await import("../src/cli/hire.js");
126
- runHire({
127
- reportPath,
128
- name: cli.flags.name,
129
- workspace: cli.flags.workspace,
130
- dryRun: cli.flags.dryRun,
131
- jsonOutput: cli.flags.json,
132
- configPath: cli.flags.config,
133
- branch: cli.flags.branch,
134
- inject: cli.flags.inject,
135
- runtime: cli.flags.runtime,
136
- baseModel: cli.flags.baseModel,
137
- });
138
- break;
139
- }
140
- case "roster": {
141
- // Backward-compatible path (keeps nono re-exec behavior used by existing tests):
142
- // `tps roster` with no subcommand routes to the legacy CLI implementation.
143
- if (!rest[0]) {
144
- const { runRoster } = await import("../src/cli/roster.js");
145
- runRoster({ configPath: cli.flags.config });
146
- break;
147
- }
148
- const action = rest[0];
149
- if (!["list", "show", "find"].includes(action)) {
150
- console.error("Usage:\n tps roster\n tps roster list\n tps roster show <agent> [--json]\n tps roster find --channel <channel> [--json]");
151
- process.exit(1);
152
- }
153
- const { runRoster } = await import("../src/commands/roster.js");
154
- runRoster({
155
- action,
156
- agent: rest[1],
157
- channel: cli.flags.channel || undefined,
158
- json: cli.flags.json,
159
- configPath: cli.flags.config,
160
- });
161
- break;
162
- }
163
- case "review": {
164
- const agentName = rest[0];
165
- if (!agentName) {
166
- console.error("Review who? I'm gonna need a name.\n\n tps review <agent-name>");
167
- process.exit(1);
168
- }
169
- const { runReview } = await import("../src/cli/review.js");
170
- runReview({ agentName, configPath: cli.flags.config, deep: cli.flags.deep });
171
- break;
172
- }
173
- case "bootstrap": {
174
- const agentId = rest[0];
175
- if (!agentId) {
176
- console.error("Usage: tps bootstrap <agent-id>");
177
- process.exit(1);
178
- }
179
- const { runBootstrap } = await import("../src/commands/bootstrap.js");
180
- await runBootstrap({
181
- agentId,
182
- configPath: cli.flags.config,
183
- channel: cli.flags.channel,
184
- });
185
- break;
186
- }
187
- case "office": {
188
- const action = rest[0];
189
- const validActions = ["start", "stop", "list", "status", "relay", "exec", "join", "revoke", "sync", "connect", "kill", "setup"];
190
- // Backward compatibility: `tps office <agent>` maps to `start <agent>`.
191
- const isLegacy = action && !validActions.includes(action);
192
- if ((!action && !isLegacy) || (!isLegacy && !validActions.includes(action))) {
193
- console.error("Usage:\n tps office start <agent>\n tps office stop <agent>\n tps office list\n tps office status [agent]\n tps office exec <agent> -- <command...>\n tps office join <name> <join-token>\n tps office revoke <name>\n tps office sync <name>\n tps office connect <name>\n tps office setup <agent> [--dry-run]\n tps office kill");
194
- process.exit(1);
195
- }
196
- const { runOffice } = await import("../src/commands/office.js");
197
- if (isLegacy) {
198
- await runOffice({ action: "start", agent: rest[0] });
199
- }
200
- else if (action === "exec") {
201
- // Everything after "--" is the command
202
- const dashIdx = process.argv.indexOf("--");
203
- const execCmd = dashIdx >= 0 ? process.argv.slice(dashIdx + 1) : rest.slice(2);
204
- await runOffice({ action: "exec", agent: rest[1], command: execCmd });
205
- }
206
- else if (action === "join") {
207
- const joinToken = rest[2];
208
- if (!rest[1] || !joinToken) {
209
- console.error("Usage: tps office join <name> <join-token-url>");
210
- process.exit(1);
211
- }
212
- await runOffice({ action: "join", agent: rest[1], joinToken });
213
- }
214
- else if (action === "revoke") {
215
- if (!rest[1]) {
216
- console.error("Usage: tps office revoke <name>");
217
- process.exit(1);
218
- }
219
- await runOffice({ action: "revoke", agent: rest[1] });
220
- }
221
- else if (action === "setup") {
222
- const dryRun = process.argv.includes("--dry-run") || process.argv.includes("--dry");
223
- await runOffice({ action: "setup", agent: rest[1], dryRun });
224
- }
225
- else {
226
- const soundstageIdx = process.argv.indexOf("--soundstage");
227
- const isSoundstage = soundstageIdx >= 0 || cli.flags.soundstage;
228
- if (soundstageIdx >= 0)
229
- process.argv.splice(soundstageIdx, 1);
230
- await runOffice({ action: action, agent: rest[1], manifest: cli.flags.manifest, soundstage: isSoundstage });
231
- }
232
- break;
233
- }
234
- case "context": {
235
- const action = rest[0];
236
- const workstream = rest[1];
237
- if (!action || !["read", "update", "list"].includes(action)) {
238
- console.error("Usage:\n tps context read <workstream>\n tps context update <workstream> --summary \"...\"\n tps context list");
239
- process.exit(1);
240
- }
241
- const { runContext } = await import("../src/commands/context.js");
242
- runContext({
243
- action,
244
- workstream,
245
- summary: cli.flags.summary,
246
- json: cli.flags.json,
247
- });
248
- break;
249
- }
250
- case "mail": {
251
- const action = rest[0];
252
- if (cli.flags.help || !action || !["send", "check", "list", "log", "read", "watch", "search"].includes(action)) {
253
- console.log("Usage:\n tps mail send <agent> <message> Send mail to a local or remote agent\n tps mail check [agent] Read new messages (marks as read)\n tps mail watch [agent] Watch inbox for new messages\n tps mail list [agent] List all messages (read + unread)\n tps mail read <agent> <id> Show a specific message by ID (prefix ok)\n tps mail search <query> Search mail history using full-text search\n tps mail log [agent] Show audit log [--since YYYY-MM-DD] [--limit N]");
254
- process.exit(cli.flags.help ? 0 : 1);
255
- }
256
- const { runMail } = await import("../src/commands/mail.js");
257
- await runMail({
258
- action,
259
- agent: rest[1],
260
- message: action === "send" ? rest.slice(2).join(" ") : undefined,
261
- messageId: action === "read" ? rest[2] : undefined,
262
- json: cli.flags.json,
263
- since: cli.flags.since,
264
- limit: cli.flags.limit ? Number(cli.flags.limit) : undefined,
265
- });
266
- break;
267
- }
268
- case "identity": {
269
- const action = rest[0];
270
- if (!action || !["init", "show", "register", "list", "revoke", "verify"].includes(action)) {
271
- console.error("Usage:\n tps identity init [--expires-in 90d]\n tps identity show\n tps identity register <branch> [--expires-in 90d] [--trust standard]\n tps identity list\n tps identity revoke <branch> --reason \"...\"\n tps identity verify <branch>");
272
- process.exit(1);
273
- }
274
- const { runIdentity } = await import("../src/commands/identity.js");
275
- await runIdentity({
276
- action,
277
- branch: rest[1],
278
- reason: cli.flags.reason,
279
- json: cli.flags.json,
280
- expiresIn: cli.flags.expiresIn,
281
- trust: cli.flags.trust,
282
- pubkey: cli.flags.pubkey,
283
- encPubkey: cli.flags.encPubkey,
284
- });
285
- break;
286
- }
287
- case "secrets": {
288
- const action = rest[0];
289
- if (!action || !["set", "list", "remove"].includes(action)) {
290
- console.error("Usage:\n tps secrets set <KEY>=<VALUE>\n tps secrets list\n tps secrets remove <KEY>");
291
- process.exit(1);
292
- }
293
- const { runSecrets } = await import("../src/commands/secrets.js");
294
- let key;
295
- let value;
296
- if (action === "set") {
297
- const parts = rest[1]?.split("=");
298
- key = parts?.[0];
299
- value = parts?.slice(1).join("=");
300
- }
301
- else {
302
- key = rest[1];
303
- }
304
- await runSecrets({ action, key, value, json: cli.flags.json });
305
- break;
306
- }
307
- case "backup": {
308
- const agentId = rest[0];
309
- if (!agentId) {
310
- console.error("Usage: tps backup <agent-id> [--schedule daily|off] [--keep n]");
311
- process.exit(1);
312
- }
313
- const { runBackup } = await import("../src/commands/backup.js");
314
- await runBackup({
315
- agentId,
316
- keep: typeof cli.flags.keep === "number" ? Number(cli.flags.keep) : undefined,
317
- schedule: cli.flags.schedule,
318
- sanitize: cli.flags.sanitize,
319
- configPath: cli.flags.config,
320
- });
321
- break;
322
- }
323
- case "restore": {
324
- const agentId = rest[0];
325
- const archivePath = cli.flags.from || rest[1];
326
- if (!agentId || !archivePath) {
327
- console.error("Usage: tps restore <agent-id> <archive> [--from <archive>] [--clone] [--overwrite] [--force]");
328
- process.exit(1);
329
- }
330
- const { runRestore } = await import("../src/commands/backup.js");
331
- await runRestore({
332
- agentId,
333
- archivePath,
334
- force: !!cli.flags.force,
335
- overwrite: !!cli.flags.overwrite,
336
- clone: !!cli.flags.clone,
337
- configPath: cli.flags.config,
338
- });
339
- break;
340
- }
341
- case "heartbeat": {
342
- const agentId = rest[0];
343
- if (!agentId) {
344
- console.error("Usage: tps heartbeat <agent-id>");
345
- process.exit(1);
346
- }
347
- const { runHeartbeat } = await import("../src/commands/status.js");
348
- await runHeartbeat({
349
- agentId,
350
- status: cli.flags.statusOverride || undefined,
351
- nonono: !!cli.flags.nonono,
352
- profile: "tps-status",
353
- });
354
- break;
355
- }
356
- case "status": {
357
- const agentId = rest[0];
358
- const { runStatus } = await import("../src/commands/status.js");
359
- await runStatus({
360
- agentId,
361
- autoPrune: !!cli.flags.autoPrune,
362
- prune: !!cli.flags.prune,
363
- json: !!cli.flags.json,
364
- staleMinutes: cli.flags.staleMinutes ? Number(cli.flags.staleMinutes) : undefined,
365
- offlineHours: cli.flags.offlineHours ? Number(cli.flags.offlineHours) : undefined,
366
- cost: !!cli.flags.cost,
367
- shared: !!cli.flags.shared,
368
- });
369
- break;
370
- }
371
- case "branch": {
372
- const action = rest[0];
373
- const valid = ["init", "start", "stop", "status", "log"];
374
- if (!action || !valid.includes(action)) {
375
- console.error("Usage:\n tps branch init [--listen <port>] [--host <hostname>] [--transport ws|tcp]\n tps branch start\n tps branch stop\n tps branch status\n tps branch log [--lines N] [--follow]");
376
- process.exit(1);
377
- }
378
- const { runBranch } = await import("../src/commands/branch.js");
379
- await runBranch({
380
- action,
381
- port: typeof cli.flags.listen === "number" ? Number(cli.flags.listen) : undefined,
382
- host: cli.flags.host,
383
- transport: cli.flags.transport === "tcp" ? "tcp" : cli.flags.transport === "ws" ? "ws" : undefined,
384
- force: cli.flags.force,
385
- lines: typeof cli.flags.lines === "number" ? Number(cli.flags.lines) : undefined,
386
- follow: !!cli.flags.follow,
387
- });
388
- break;
389
- }
390
- case "git": {
391
- const action = rest[0];
392
- if (action === "worktree") {
393
- const agent = rest[1];
394
- const repoPath = rest[2];
395
- const branchName = rest[3];
396
- if (!agent || !repoPath) {
397
- console.error("Usage: tps git worktree <agent> <repo-path> [branch-name]");
398
- process.exit(1);
399
- }
400
- const { runGit } = await import("../src/commands/git.js");
401
- await runGit({ action, agent, repoPath, branchName });
402
- }
403
- else {
404
- console.error("Unknown git action. Supported: worktree");
405
- process.exit(1);
406
- }
407
- break;
408
- }
409
- default:
410
- cli.showHelp();
411
- }
412
- }
413
- main();
414
- //# sourceMappingURL=tps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tps.js","sourceRoot":"","sources":["../../bin/tps.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { type Runtime } from "../generators/registry.js";
2
- interface HireProps {
3
- reportPath: string;
4
- name?: string;
5
- workspace?: string;
6
- dryRun: boolean;
7
- jsonOutput: boolean;
8
- configPath?: string;
9
- branch?: boolean;
10
- inject?: boolean;
11
- runtime?: Runtime;
12
- baseModel?: string;
13
- }
14
- export declare function runHire(args: HireProps): void;
15
- export {};
16
- //# sourceMappingURL=hire.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hire.d.ts","sourceRoot":"","sources":["../../../src/cli/hire.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAgB,KAAK,OAAO,EAAkB,MAAM,2BAA2B,CAAC;AAOvF,UAAU,SAAS;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkMD,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,QAgEtC"}
@@ -1,176 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
3
- import { render, Text, Box } from "ink";
4
- import { spawnSync } from "node:child_process";
5
- import { existsSync, mkdirSync, writeFileSync } from "node:fs";
6
- import { join, resolve } from "node:path";
7
- import { homedir } from "node:os";
8
- import { parseTPSReport } from "../schema/report.js";
9
- import { getGenerator } from "../generators/registry.js";
10
- import { randomQuip, resolveReportPath } from "../utils/output.js";
11
- import { findNono, isNonoStrict, buildNonoArgs } from "../utils/nono.js";
12
- import { injectAgent } from "../utils/config-inject.js";
13
- import { findOpenClawConfig } from "../utils/config.js";
14
- import { sendMessage } from "../utils/mail.js";
15
- function HireCommand({ reportPath, name, workspace, dryRun, jsonOutput, branch, inject, runtime = "openclaw", baseModel }) {
16
- const [steps, setSteps] = useState([]);
17
- const [error, setError] = useState(null);
18
- const [config, setConfig] = useState(null);
19
- const [done, setDone] = useState(false);
20
- const [report, setReport] = useState(null);
21
- const [injected, setInjected] = useState(false);
22
- const [onboarded, setOnboarded] = useState(false);
23
- const [backupPath, setBackupPath] = useState(null);
24
- const isOpenClaw = runtime === "openclaw";
25
- const shouldInject = inject !== false && !dryRun && !branch && isOpenClaw;
26
- useEffect(() => {
27
- try {
28
- const resolvedPath = resolveReportPath(reportPath);
29
- const generator = getGenerator(runtime);
30
- const allSteps = [
31
- { label: "Parsing TPS report", done: false },
32
- { label: "Validating schema", done: false },
33
- { label: `Generating ${runtime} workspace`, done: false },
34
- { label: dryRun ? "Dry run — skipping write" : "Writing workspace", done: false },
35
- ];
36
- if (shouldInject) {
37
- allSteps.push({ label: "Injecting into openclaw.json", done: false });
38
- allSteps.push({ label: "Sending onboarding mail", done: false });
39
- }
40
- setSteps([...allSteps]);
41
- const parsed = parseTPSReport(resolvedPath);
42
- allSteps[0].done = true;
43
- setSteps([...allSteps]);
44
- setReport(parsed);
45
- allSteps[1].done = true;
46
- setSteps([...allSteps]);
47
- // Generate via registry
48
- const result = generator.generate(parsed, { name, workspace, branch, baseModel });
49
- allSteps[2].done = true;
50
- setSteps([...allSteps]);
51
- // Write
52
- if (!dryRun) {
53
- generator.write(result);
54
- // Branch office config (OpenClaw-specific post-write)
55
- if (branch && result.openclawConfig) {
56
- const branchRoot = join(process.env.HOME || homedir(), ".tps", "branch-office", result.agentId);
57
- const dotOpenClaw = join(branchRoot, ".openclaw");
58
- mkdirSync(dotOpenClaw, { recursive: true });
59
- const sandboxConfig = { agents: { list: [result.openclawConfig] } };
60
- writeFileSync(join(dotOpenClaw, "openclaw.json"), JSON.stringify(sandboxConfig, null, 2), "utf-8");
61
- }
62
- }
63
- allSteps[3].done = true;
64
- setSteps([...allSteps]);
65
- // Config injection + onboarding (OpenClaw only)
66
- if (shouldInject) {
67
- const configPath = findOpenClawConfig();
68
- if (!configPath)
69
- throw new Error("Cannot inject — no openclaw.json found");
70
- const injectResult = injectAgent(configPath, result.openclawConfig);
71
- if (!injectResult.success)
72
- throw new Error(`Config injection failed: ${injectResult.error}`);
73
- setInjected(true);
74
- setBackupPath(injectResult.backupPath);
75
- allSteps[4].done = true;
76
- setSteps([...allSteps]);
77
- // Onboarding mail
78
- try {
79
- sendMessage(result.agentId, [
80
- `Subject: Welcome to the team, ${result.agentName}!`,
81
- "",
82
- `You've been hired as a ${parsed.name}. Your workspace is set up at ${result.workspacePath}.`,
83
- "",
84
- "Your first steps:",
85
- "1. Read your SOUL.md — it defines who you are",
86
- "2. Read your AGENTS.md — it defines how you work",
87
- `3. Check your mail regularly with: tps mail check ${result.agentId}`,
88
- `4. Reply to confirm you're online: tps mail send tps-onboard "ready"`,
89
- "",
90
- "Welcome aboard.",
91
- "— TPS",
92
- ].join("\n"), "tps-onboard");
93
- setOnboarded(true);
94
- }
95
- catch { /* best-effort */ }
96
- allSteps[5].done = true;
97
- setSteps([...allSteps]);
98
- }
99
- setConfig(isOpenClaw
100
- ? result.openclawConfig || {}
101
- : { runtime, agentId: result.agentId, agentName: result.agentName, workspacePath: result.workspacePath, files: Object.keys(result.files), ...(result.modelTag ? { modelTag: result.modelTag } : {}), nextSteps: result.nextSteps });
102
- setDone(true);
103
- }
104
- catch (e) {
105
- setError(e.message);
106
- }
107
- }, []);
108
- if (error) {
109
- return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Text, { color: "red", children: ["\u274C ", error] }), _jsxs(Text, { dimColor: true, children: ["\n", randomQuip("error")] })] }));
110
- }
111
- if (jsonOutput && done && config) {
112
- return _jsx(Text, { children: JSON.stringify(config, null, 2) });
113
- }
114
- return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, children: "\uD83C\uDFE2 Onboarding new agent..." }), _jsx(Text, { children: " " }), report && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { children: ["Name: ", _jsx(Text, { bold: true, children: name || report.identity.default_name })] }), _jsxs(Text, { children: ["Role: ", _jsx(Text, { bold: true, children: report.name })] }), report.flair.length > 0 && (_jsxs(Text, { children: ["Flair: ", _jsxs(Text, { color: "yellow", children: [report.flair.length, " pieces"] }), " (", report.flair.join(", "), ")"] }))] })), steps.map((step, i) => (_jsxs(Text, { children: [step.done ? _jsx(Text, { color: "green", children: "\u2705" }) : _jsx(Text, { color: "gray", children: "\u23F3" }), " ", step.label] }, i))), done && config && !injected && isOpenClaw && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, children: "\uD83D\uDCCB Add this to your openclaw.json agents.list array:" }), _jsx(Text, { children: " " }), _jsx(Text, { children: JSON.stringify(config, null, 2) }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, italic: true, children: randomQuip("success") })] })), done && config && injected && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: "green", bold: true, children: "\u2705 Agent config injected into openclaw.json" }), backupPath && _jsxs(Text, { dimColor: true, children: [" Backup: ", backupPath] }), onboarded && _jsx(Text, { color: "green", children: "\u2705 Onboarding mail sent" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "Next: restart OpenClaw gateway to activate the agent." }), _jsx(Text, { dimColor: true, children: " openclaw gateway restart" }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, italic: true, children: randomQuip("success") })] })), done && config && !isOpenClaw && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { color: "green", bold: true, children: ["\u2705 ", runtime, " workspace ready"] }), _jsxs(Text, { dimColor: true, children: [" Path: ", config.workspacePath] }), _jsxs(Text, { dimColor: true, children: [" Files: ", (config.files || []).join(", ")] }), (config.nextSteps || []).length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: " " }), _jsx(Text, { bold: true, children: "Next:" }), config.nextSteps.map((step, i) => (_jsxs(Text, { dimColor: true, children: [" ", step] }, i)))] })), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, italic: true, children: randomQuip("success") })] }))] }));
115
- }
116
- /** Built-in persona names — not file paths, no existence check needed. */
117
- const BUILTIN_PERSONAS = ["developer", "designer", "support", "ea", "ops", "strategy", "security"];
118
- export function runHire(args) {
119
- // Always enforce --branch boundary, even if TPS_NONO_ACTIVE is externally set.
120
- // Branch mode has no nono fallback, so this validation cannot depend on re-exec state.
121
- if (args.workspace && args.branch) {
122
- const resolved = resolve(args.workspace);
123
- const boundary = resolve(homedir() + "/.tps/branch-office");
124
- if (!resolved.startsWith(boundary + "/")) {
125
- console.error(`❌ Workspace must be inside ~/.tps/branch-office/ (subdirectory only). Got: ${args.workspace}`);
126
- process.exit(1);
127
- }
128
- }
129
- // ── Nono re-exec guard ─────────────────────────────────────────────────────
130
- // TPS_NONO_ACTIVE is set when this process was already re-exec'd under nono.
131
- // This prevents double-wrapping. It is NOT a security boundary — the nono
132
- // kernel-level sandbox enforces the actual policy via the tps-hire profile.
133
- if (!process.env.TPS_NONO_ACTIVE) {
134
- // Validate report path BEFORE re-exec so errors surface outside the sandbox
135
- if (args.reportPath && !BUILTIN_PERSONAS.includes(args.reportPath)) {
136
- const resolved = resolve(args.reportPath);
137
- if (!existsSync(resolved)) {
138
- console.error(`❌ TPS report not found: ${args.reportPath}`);
139
- process.exit(1);
140
- }
141
- }
142
- // Validate non-branch workspace boundary.
143
- if (args.workspace && !args.branch) {
144
- const resolved = resolve(args.workspace);
145
- const boundary = resolve(homedir() + "/.openclaw");
146
- if (!resolved.startsWith(boundary + "/")) {
147
- console.error(`❌ Workspace must be inside ~/.openclaw/ (subdirectory only). Got: ${args.workspace}`);
148
- process.exit(1);
149
- }
150
- }
151
- // --branch runs inside sandbox model; skip nono re-exec.
152
- if (args.branch) {
153
- render(_jsx(HireCommand, { ...args }));
154
- return;
155
- }
156
- const nono = findNono();
157
- if (nono) {
158
- const workdir = args.workspace ? resolve(args.workspace) : undefined;
159
- const nonoArgs = buildNonoArgs("tps-hire", { workdir }, process.argv);
160
- const result = spawnSync(nono, nonoArgs, {
161
- stdio: "inherit",
162
- env: { ...process.env, TPS_NONO_ACTIVE: "1" },
163
- });
164
- process.exit(result.status ?? 1);
165
- }
166
- else if (isNonoStrict()) {
167
- console.error("❌ nono is not installed but TPS_NONO_STRICT=1. Install nono: https://nono.sh");
168
- process.exit(1);
169
- }
170
- else {
171
- console.warn("⚠️ nono not found — running tps-hire WITHOUT isolation. Install nono: https://nono.sh");
172
- }
173
- }
174
- render(_jsx(HireCommand, { ...args }));
175
- }
176
- //# sourceMappingURL=hire.js.map