@tpsdev-ai/cli 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +65 -0
  2. package/bin/tps.cjs +24 -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,99 +0,0 @@
1
- /**
2
- * Sanitize an identifier string.
3
- * Allows only alphanumeric characters, underscores, and hyphens.
4
- * Replaces invalid characters with hyphens.
5
- * Truncates to max length (default 64).
6
- */
7
- export function sanitizeIdentifier(value, maxLength = 64) {
8
- if (!value)
9
- return "unknown";
10
- // Replace anything not allowed with '-'
11
- let sanitized = value.replace(/[^a-zA-Z0-9_-]/g, "-");
12
- // Collapse multiple hyphens
13
- sanitized = sanitized.replace(/-+/g, "-");
14
- // Trim leading/trailing hyphens
15
- sanitized = sanitized.replace(/^-+|-+$/g, "");
16
- // Default if empty after trim
17
- if (!sanitized)
18
- return "unknown";
19
- // Truncate
20
- return sanitized.slice(0, maxLength);
21
- }
22
- /**
23
- * Sanitize a model identifier string (e.g. provider/model:tag).
24
- * Allows alphanumeric, underscores, hyphens, slashes, dots, and colons.
25
- */
26
- export function sanitizeModelIdentifier(value, maxLength = 128) {
27
- if (!value)
28
- return "unknown-model";
29
- // Allow a-z, 0-9, _, -, /, ., :
30
- const sanitized = value.replace(/[^a-zA-Z0-9_\-/.:]/g, "");
31
- // Truncate
32
- return sanitized.slice(0, maxLength);
33
- }
34
- /**
35
- * Sanitize free text to prevent shell injection.
36
- * Escapes characters that have special meaning in shell contexts.
37
- * Note: This is aggressive and might impact readability in some contexts,
38
- * but safety is priority.
39
- */
40
- export function sanitizeFreeText(value) {
41
- if (!value)
42
- return "";
43
- // Shell metacharacters to escape: $ ` " \
44
- // We'll replace them with their escaped versions or safe alternatives.
45
- // For Markdown/HTML contexts, Handlebars handles escaping.
46
- // This is specifically for preventing command injection if text is passed to shell.
47
- return value
48
- .replace(/\\/g, "\\\\") // Escape backslashes first
49
- .replace(/\$/g, "\\$") // Escape dollar signs
50
- .replace(/`/g, "\\`") // Escape backticks
51
- .replace(/"/g, '\\"') // Escape double quotes
52
- .replace(/;/g, "\\;") // Escape semicolons
53
- .replace(/\|/g, "\\|") // Escape pipes
54
- .replace(/&/g, "\\&") // Escape ampersands
55
- .replace(/\(/g, "\\(") // Escape parentheses
56
- .replace(/\)/g, "\\)") // Escape parentheses
57
- .replace(/</g, "\\<") // Escape redirects
58
- .replace(/>/g, "\\>"); // Escape redirects
59
- }
60
- /**
61
- * Sanitize an array of strings using the identifier rules.
62
- */
63
- export function sanitizeStringArray(arr) {
64
- if (!arr)
65
- return [];
66
- return arr.map((item) => sanitizeIdentifier(item));
67
- }
68
- /**
69
- * Main sanitizer function for TPS Reports.
70
- * Returns a new, sanitized report object.
71
- */
72
- export function sanitizeTPSReport(report) {
73
- // Deep clone to avoid mutating original
74
- const sanitized = JSON.parse(JSON.stringify(report));
75
- // Sanitize Top-level fields
76
- sanitized.name = sanitizeIdentifier(sanitized.name);
77
- sanitized.description = sanitizeFreeText(sanitized.description);
78
- // Sanitize Identity fields
79
- sanitized.identity.default_name = sanitizeIdentifier(sanitized.identity.default_name);
80
- sanitized.identity.personality = sanitizeFreeText(sanitized.identity.personality);
81
- sanitized.identity.communication_style = sanitizeFreeText(sanitized.identity.communication_style);
82
- sanitized.identity.emoji = sanitizeFreeText(sanitized.identity.emoji); // Emojis are text? Usually safe but let's be careful.
83
- // Sanitize Arrays (Identifiers)
84
- sanitized.flair = sanitizeStringArray(sanitized.flair);
85
- sanitized.tools.required = sanitizeStringArray(sanitized.tools.required);
86
- sanitized.tools.optional = sanitizeStringArray(sanitized.tools.optional);
87
- sanitized.communication.channels = sanitizeStringArray(sanitized.communication.channels);
88
- sanitized.communication.handoff_targets = sanitizeStringArray(sanitized.communication.handoff_targets);
89
- sanitized.memory.shared_read = sanitizeStringArray(sanitized.memory.shared_read);
90
- sanitized.memory.shared_write = sanitizeStringArray(sanitized.memory.shared_write);
91
- // Sanitize Model (Identifier)
92
- sanitized.model.default = sanitizeIdentifier(sanitized.model.default);
93
- // Sanitize OpenClaw fields
94
- sanitized.openclaw.model = sanitizeModelIdentifier(sanitized.openclaw.model);
95
- sanitized.openclaw.thinking = sanitizeIdentifier(sanitized.openclaw.thinking);
96
- sanitized.openclaw.channel = sanitizeIdentifier(sanitized.openclaw.channel);
97
- return sanitized;
98
- }
99
- //# sourceMappingURL=sanitizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../../src/schema/sanitizer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { createServer } from "node:http";
2
- export declare function startMockLLM(port?: number, scriptPath?: string): ReturnType<typeof createServer>;
3
- //# sourceMappingURL=mock-llm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock-llm.d.ts","sourceRoot":"","sources":["../../../src/soundstage/mock-llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAwBzC,wBAAgB,YAAY,CAAC,IAAI,SAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CA4C/F"}
@@ -1,68 +0,0 @@
1
- import { createServer } from "node:http";
2
- import { readFileSync, existsSync } from "node:fs";
3
- const DEFAULT_RESPONSES = [
4
- "I'll check my mail now.",
5
- "Task received. Working on it.",
6
- "Work complete. Sending results.",
7
- "HEARTBEAT_OK",
8
- ];
9
- function loadScript(scriptPath) {
10
- if (scriptPath && existsSync(scriptPath)) {
11
- try {
12
- const raw = JSON.parse(readFileSync(scriptPath, "utf-8"));
13
- if (Array.isArray(raw))
14
- return raw.map((r) => r.content || String(r));
15
- }
16
- catch { }
17
- }
18
- return DEFAULT_RESPONSES;
19
- }
20
- export function startMockLLM(port = 11434, scriptPath) {
21
- const responses = loadScript(scriptPath);
22
- let index = 0;
23
- const server = createServer((req, res) => {
24
- if (req.method === "POST" && req.url?.includes("/v1/chat/completions")) {
25
- // Consume request body but don't use it (no echo — security invariant)
26
- const chunks = [];
27
- req.on("data", (chunk) => chunks.push(chunk));
28
- req.on("end", () => {
29
- const response = responses[index % responses.length];
30
- index++;
31
- const body = JSON.stringify({
32
- id: `mock-${Date.now()}`,
33
- object: "chat.completion",
34
- created: Math.floor(Date.now() / 1000),
35
- model: "mock-soundstage",
36
- choices: [{
37
- index: 0,
38
- message: { role: "assistant", content: response },
39
- finish_reason: "stop",
40
- }],
41
- usage: { prompt_tokens: 10, completion_tokens: 20, total_tokens: 30 },
42
- });
43
- res.writeHead(200, { "Content-Type": "application/json" });
44
- res.end(body);
45
- });
46
- }
47
- else if (req.method === "GET" && req.url === "/health") {
48
- res.writeHead(200);
49
- res.end("ok");
50
- }
51
- else {
52
- res.writeHead(404);
53
- res.end("Not found");
54
- }
55
- });
56
- // SECURITY: bind to loopback only, never 0.0.0.0
57
- server.listen(port, "127.0.0.1", () => {
58
- console.log(`Mock LLM listening on http://127.0.0.1:${port}/v1`);
59
- });
60
- return server;
61
- }
62
- // CLI mode: run standalone
63
- if (import.meta.url === `file://${process.argv[1]}` || process.argv[1]?.endsWith("mock-llm.ts")) {
64
- const port = Number(process.env.MOCK_LLM_PORT || 11434);
65
- const script = process.env.MOCK_LLM_SCRIPT;
66
- startMockLLM(port, script);
67
- }
68
- //# sourceMappingURL=mock-llm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock-llm.js","sourceRoot":"","sources":["../../../src/soundstage/mock-llm.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- export interface AgentProfile {
2
- role?: string;
3
- creature?: string;
4
- emoji?: string;
5
- vibe?: string;
6
- }
7
- export interface MailStats {
8
- unread: number;
9
- read: number;
10
- total: number;
11
- }
12
- export interface MemoryInfo {
13
- fileCount: number;
14
- latestFile?: string;
15
- latestDate?: string;
16
- }
17
- export interface AgentInfo {
18
- profile: AgentProfile;
19
- mail: MailStats;
20
- memory: MemoryInfo;
21
- workspaceFileCount: number;
22
- workspaceSize: number;
23
- }
24
- export declare function readProfile(workspacePath: string): AgentProfile;
25
- export declare function getMailStats(agentId: string): MailStats;
26
- export declare function getMemoryInfo(workspacePath: string): MemoryInfo;
27
- export declare function getAgentInfo(agentId: string, workspacePath?: string): AgentInfo;
28
- //# sourceMappingURL=agent-info.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-info.d.ts","sourceRoot":"","sources":["../../../src/utils/agent-info.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAaD,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,CAsB/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAgBvD;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAkB/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAuB/E"}
@@ -1,102 +0,0 @@
1
- /**
2
- * Agent info enrichment — reads workspace files and mail stats
3
- * to provide richer context for roster show and review commands.
4
- */
5
- import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
6
- import { join } from "node:path";
7
- import { getInbox } from "./mail.js";
8
- import { sanitizeIdentifier } from "../schema/sanitizer.js";
9
- /**
10
- * Parse key-value frontmatter from IDENTITY.md or SOUL.md.
11
- * Looks for lines like "**Name:** Flint" or "- **Role:** Strategy"
12
- */
13
- function extractField(content, field) {
14
- // Match "**Field:** value" pattern
15
- const re = new RegExp(`\\*\\*${field}:\\*\\*\\s*(.+)`, "i"); // nosemgrep: detect-non-literal-regexp — field is from internal hardcoded calls only
16
- const match = content.match(re);
17
- return match?.[1]?.trim();
18
- }
19
- export function readProfile(workspacePath) {
20
- const profile = {};
21
- const identityPath = join(workspacePath, "IDENTITY.md");
22
- if (existsSync(identityPath)) {
23
- try {
24
- const content = readFileSync(identityPath, "utf-8");
25
- profile.creature = extractField(content, "Creature");
26
- profile.emoji = extractField(content, "Emoji");
27
- profile.vibe = extractField(content, "Vibe");
28
- }
29
- catch { /* ignore */ }
30
- }
31
- const soulPath = join(workspacePath, "SOUL.md");
32
- if (existsSync(soulPath)) {
33
- try {
34
- const content = readFileSync(soulPath, "utf-8");
35
- profile.role = extractField(content, "Role");
36
- }
37
- catch { /* ignore */ }
38
- }
39
- return profile;
40
- }
41
- export function getMailStats(agentId) {
42
- const safe = sanitizeIdentifier(agentId);
43
- if (safe !== agentId)
44
- return { unread: 0, read: 0, total: 0 };
45
- try {
46
- const inbox = getInbox(agentId);
47
- const unread = existsSync(inbox.fresh)
48
- ? readdirSync(inbox.fresh).filter((f) => f.endsWith(".json")).length
49
- : 0;
50
- const read = existsSync(inbox.cur)
51
- ? readdirSync(inbox.cur).filter((f) => f.endsWith(".json")).length
52
- : 0;
53
- return { unread, read, total: unread + read };
54
- }
55
- catch {
56
- return { unread: 0, read: 0, total: 0 };
57
- }
58
- }
59
- export function getMemoryInfo(workspacePath) {
60
- const memoryDir = join(workspacePath, "memory");
61
- if (!existsSync(memoryDir))
62
- return { fileCount: 0 };
63
- try {
64
- const files = readdirSync(memoryDir)
65
- .filter((f) => /^\d{4}-\d{2}-\d{2}\.md$/.test(f))
66
- .sort()
67
- .reverse();
68
- return {
69
- fileCount: files.length,
70
- latestFile: files[0],
71
- latestDate: files[0]?.replace(".md", ""),
72
- };
73
- }
74
- catch {
75
- return { fileCount: 0 };
76
- }
77
- }
78
- export function getAgentInfo(agentId, workspacePath) {
79
- const profile = workspacePath ? readProfile(workspacePath) : {};
80
- const mail = getMailStats(agentId);
81
- const memory = workspacePath ? getMemoryInfo(workspacePath) : { fileCount: 0 };
82
- let workspaceFileCount = 0;
83
- let workspaceSize = 0;
84
- if (workspacePath && existsSync(workspacePath)) {
85
- try {
86
- const entries = readdirSync(workspacePath);
87
- for (const e of entries) {
88
- try {
89
- const s = statSync(join(workspacePath, e));
90
- if (s.isFile()) {
91
- workspaceFileCount++;
92
- workspaceSize += s.size;
93
- }
94
- }
95
- catch { /* ignore */ }
96
- }
97
- }
98
- catch { /* ignore */ }
99
- }
100
- return { profile, mail, memory, workspaceFileCount, workspaceSize };
101
- }
102
- //# sourceMappingURL=agent-info.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-info.js","sourceRoot":"","sources":["../../../src/utils/agent-info.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- export interface ArchiveEvent {
2
- event: "sent" | "read" | "listed";
3
- timestamp: string;
4
- from: string;
5
- to: string;
6
- messageId: string;
7
- body?: string;
8
- bodyPreview?: string;
9
- }
10
- export interface ArchiveQuery {
11
- agent?: string;
12
- since?: string;
13
- until?: string;
14
- event?: "sent" | "read" | "listed";
15
- search?: string;
16
- limit?: number;
17
- }
18
- export declare function logEvent(event: Omit<ArchiveEvent, "timestamp">, body?: string): void;
19
- export declare function queryArchive(query?: ArchiveQuery): ArchiveEvent[];
20
- //# sourceMappingURL=archive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/utils/archive.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwCD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAcpF;AAED,wBAAgB,YAAY,CAAC,KAAK,GAAE,YAAiB,GAAG,YAAY,EAAE,CAoDrE"}
@@ -1,108 +0,0 @@
1
- import { join } from "node:path";
2
- import { homedir } from "node:os";
3
- import { mkdirSync } from "node:fs";
4
- // @ts-ignore
5
- import { Database } from "bun:sqlite";
6
- function getDb() {
7
- const dir = process.env.TPS_MAIL_DIR || join(process.env.HOME || homedir(), ".tps", "mail");
8
- mkdirSync(dir, { recursive: true });
9
- const dbPath = join(dir, "archive.db");
10
- const db = new Database(dbPath, { create: true });
11
- db.exec(`
12
- CREATE TABLE IF NOT EXISTS archive (
13
- id INTEGER PRIMARY KEY AUTOINCREMENT,
14
- event TEXT,
15
- timestamp TEXT,
16
- sender TEXT,
17
- recipient TEXT,
18
- messageId TEXT,
19
- body TEXT
20
- );
21
- CREATE VIRTUAL TABLE IF NOT EXISTS archive_fts USING fts5(body, content='archive', content_rowid='id');
22
-
23
- DROP TRIGGER IF EXISTS archive_ai;
24
- CREATE TRIGGER archive_ai AFTER INSERT ON archive BEGIN
25
- INSERT INTO archive_fts(rowid, body) VALUES (new.id, new.body);
26
- END;
27
-
28
- DROP TRIGGER IF EXISTS archive_ad;
29
- CREATE TRIGGER archive_ad AFTER DELETE ON archive BEGIN
30
- INSERT INTO archive_fts(archive_fts, rowid, body) VALUES('delete', old.id, old.body);
31
- END;
32
-
33
- DROP TRIGGER IF EXISTS archive_au;
34
- CREATE TRIGGER archive_au AFTER UPDATE ON archive BEGIN
35
- INSERT INTO archive_fts(archive_fts, rowid, body) VALUES('delete', old.id, old.body);
36
- INSERT INTO archive_fts(rowid, body) VALUES (new.id, new.body);
37
- END;
38
- `);
39
- return db;
40
- }
41
- export function logEvent(event, body) {
42
- let db = null;
43
- try {
44
- db = getDb();
45
- const stmt = db.prepare(`
46
- INSERT INTO archive (event, timestamp, sender, recipient, messageId, body)
47
- VALUES (?, ?, ?, ?, ?, ?)
48
- `);
49
- stmt.run(event.event, new Date().toISOString(), event.from, event.to, event.messageId, body || null);
50
- }
51
- catch (err) {
52
- // Best-effort audit logging.
53
- }
54
- finally {
55
- db?.close();
56
- }
57
- }
58
- export function queryArchive(query = {}) {
59
- let db = null;
60
- try {
61
- db = getDb();
62
- let sql = "SELECT archive.event, archive.timestamp, archive.sender as 'from', archive.recipient as 'to', archive.messageId, archive.body FROM archive";
63
- const conditions = [];
64
- const params = [];
65
- if (query.search) {
66
- sql += " JOIN archive_fts ON archive.id = archive_fts.rowid";
67
- conditions.push("archive_fts MATCH ?");
68
- params.push(query.search);
69
- }
70
- if (query.agent) {
71
- conditions.push("(archive.sender = ? OR archive.recipient = ?)");
72
- params.push(query.agent, query.agent);
73
- }
74
- if (query.event) {
75
- conditions.push("archive.event = ?");
76
- params.push(query.event);
77
- }
78
- if (query.since) {
79
- conditions.push("archive.timestamp >= ?");
80
- params.push(query.since);
81
- }
82
- if (query.until) {
83
- conditions.push("archive.timestamp <= ?");
84
- params.push(query.until);
85
- }
86
- if (conditions.length > 0) {
87
- sql += " WHERE " + conditions.join(" AND ");
88
- }
89
- sql += " ORDER BY archive.timestamp DESC";
90
- if (query.limit && query.limit > 0) {
91
- sql += " LIMIT ?";
92
- params.push(query.limit);
93
- }
94
- const stmt = db.prepare(sql);
95
- const results = stmt.all(...params);
96
- return results.map(r => ({
97
- ...r,
98
- bodyPreview: r.body ? (r.body.length > 100 ? r.body.slice(0, 100) + "..." : r.body) : undefined
99
- }));
100
- }
101
- catch (err) {
102
- return [];
103
- }
104
- finally {
105
- db?.close();
106
- }
107
- }
108
- //# sourceMappingURL=archive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/utils/archive.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- export interface InjectAgentEntry {
2
- id: string;
3
- name?: string;
4
- workspace?: string;
5
- agentDir?: string;
6
- model?: unknown;
7
- heartbeat?: unknown;
8
- [key: string]: unknown;
9
- }
10
- export interface InjectResult {
11
- success: boolean;
12
- backupPath: string;
13
- agentId: string;
14
- error?: string;
15
- }
16
- /**
17
- * Inject an agent entry into openclaw.json's agents.list array.
18
- *
19
- * Safety guarantees:
20
- * 1. Reads original file and computes hash
21
- * 2. Writes backup to <path>.bak
22
- * 3. Reads backup back and verifies hash matches original
23
- * 4. Only then modifies and writes the config
24
- * 5. If agent ID already exists, aborts (no duplicates)
25
- */
26
- export declare function injectAgent(configPath: string, agent: InjectAgentEntry): InjectResult;
27
- //# sourceMappingURL=config-inject.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-inject.d.ts","sourceRoot":"","sources":["../../../src/utils/config-inject.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAuErF"}
@@ -1,83 +0,0 @@
1
- /**
2
- * Safe config injection for openclaw.json.
3
- *
4
- * Pattern: read → backup → verify backup → modify → write
5
- * If backup verification fails, abort. No exceptions.
6
- */
7
- import { readFileSync, writeFileSync, copyFileSync, existsSync } from "node:fs";
8
- import { createHash } from "node:crypto";
9
- function sha256(content) {
10
- return createHash("sha256").update(content).digest("hex");
11
- }
12
- /**
13
- * Inject an agent entry into openclaw.json's agents.list array.
14
- *
15
- * Safety guarantees:
16
- * 1. Reads original file and computes hash
17
- * 2. Writes backup to <path>.bak
18
- * 3. Reads backup back and verifies hash matches original
19
- * 4. Only then modifies and writes the config
20
- * 5. If agent ID already exists, aborts (no duplicates)
21
- */
22
- export function injectAgent(configPath, agent) {
23
- const backupPath = configPath + ".bak";
24
- // Step 1: Read original
25
- if (!existsSync(configPath)) {
26
- return { success: false, backupPath, agentId: agent.id, error: `Config not found: ${configPath}` };
27
- }
28
- const original = readFileSync(configPath, "utf-8");
29
- const originalHash = sha256(original);
30
- // Step 2: Parse and validate structure
31
- let config;
32
- try {
33
- config = JSON.parse(original);
34
- }
35
- catch {
36
- return { success: false, backupPath, agentId: agent.id, error: "Config is not valid JSON" };
37
- }
38
- if (!config.agents || typeof config.agents !== "object") {
39
- return { success: false, backupPath, agentId: agent.id, error: "Config missing agents section" };
40
- }
41
- const agents = config.agents;
42
- if (!Array.isArray(agents.list)) {
43
- agents.list = [];
44
- }
45
- const list = agents.list;
46
- // Step 3: Check for duplicates
47
- if (list.some((a) => a.id === agent.id)) {
48
- return { success: false, backupPath, agentId: agent.id, error: `Agent "${agent.id}" already exists in config` };
49
- }
50
- // Step 4: Write backup
51
- copyFileSync(configPath, backupPath);
52
- // Step 5: Verify backup matches original (the critical step)
53
- const backupContent = readFileSync(backupPath, "utf-8");
54
- const backupHash = sha256(backupContent);
55
- if (backupHash !== originalHash) {
56
- return {
57
- success: false,
58
- backupPath,
59
- agentId: agent.id,
60
- error: `Backup verification failed! Original hash ${originalHash} !== backup hash ${backupHash}. Aborting — config NOT modified.`,
61
- };
62
- }
63
- // Step 6: Inject and write
64
- list.push(agent);
65
- const updated = JSON.stringify(config, null, 2) + "\n";
66
- writeFileSync(configPath, updated, "utf-8");
67
- // Step 7: Verify write is valid JSON
68
- try {
69
- JSON.parse(readFileSync(configPath, "utf-8"));
70
- }
71
- catch {
72
- // Restore from backup immediately
73
- copyFileSync(backupPath, configPath);
74
- return {
75
- success: false,
76
- backupPath,
77
- agentId: agent.id,
78
- error: "Written config was invalid JSON — restored from backup.",
79
- };
80
- }
81
- return { success: true, backupPath, agentId: agent.id };
82
- }
83
- //# sourceMappingURL=config-inject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-inject.js","sourceRoot":"","sources":["../../../src/utils/config-inject.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- export interface OpenClawAgent {
2
- id: string;
3
- name?: string;
4
- model?: string | Record<string, unknown>;
5
- thinking?: string;
6
- workspace?: string;
7
- agentDir?: string;
8
- channel?: string;
9
- [key: string]: unknown;
10
- }
11
- export interface OpenClawConfig {
12
- agents?: {
13
- defaults?: Record<string, unknown>;
14
- list?: OpenClawAgent[];
15
- };
16
- [key: string]: unknown;
17
- }
18
- export declare function getAgentList(config: OpenClawConfig): OpenClawAgent[];
19
- export declare function getDefaults(config: OpenClawConfig): Record<string, unknown>;
20
- /**
21
- * Resolve an agent's workspace, falling back to agents.defaults.workspace.
22
- */
23
- export declare function resolveWorkspace(agent: OpenClawAgent, config: OpenClawConfig): string | undefined;
24
- export declare function findOpenClawConfig(startDir?: string): string | null;
25
- export declare function readOpenClawConfig(configPath: string): OpenClawConfig;
26
- /**
27
- * Resolve config path: use explicit path if given, otherwise auto-discover.
28
- */
29
- export declare function resolveConfigPath(explicit?: string): string | null;
30
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,EAAE,CAEpE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAIjG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoBnE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAGrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQlE"}