@tpsdev-ai/cli 0.1.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 (198) hide show
  1. package/README.md +46 -60
  2. package/bin/tps.cjs +22 -0
  3. package/bin/tps.ts +435 -0
  4. package/nono-profiles/tps-backup.toml +18 -0
  5. package/nono-profiles/tps-bootstrap.toml +20 -0
  6. package/nono-profiles/tps-office-manager.toml +21 -0
  7. package/nono-profiles/tps-restore.toml +18 -0
  8. package/nono-profiles/tps-status.toml +19 -0
  9. package/package.json +19 -15
  10. package/LICENSE +0 -201
  11. package/dist/bin/tps.d.ts +0 -3
  12. package/dist/bin/tps.d.ts.map +0 -1
  13. package/dist/bin/tps.js +0 -267
  14. package/dist/bin/tps.js.map +0 -1
  15. package/dist/src/cli/hire.d.ts +0 -16
  16. package/dist/src/cli/hire.d.ts.map +0 -1
  17. package/dist/src/cli/hire.js +0 -176
  18. package/dist/src/cli/hire.js.map +0 -1
  19. package/dist/src/cli/office.d.ts +0 -7
  20. package/dist/src/cli/office.d.ts.map +0 -1
  21. package/dist/src/cli/office.js +0 -51
  22. package/dist/src/cli/office.js.map +0 -1
  23. package/dist/src/cli/review.d.ts +0 -9
  24. package/dist/src/cli/review.d.ts.map +0 -1
  25. package/dist/src/cli/review.js +0 -109
  26. package/dist/src/cli/review.js.map +0 -1
  27. package/dist/src/cli/roster.d.ts +0 -6
  28. package/dist/src/cli/roster.d.ts.map +0 -1
  29. package/dist/src/cli/roster.js +0 -60
  30. package/dist/src/cli/roster.js.map +0 -1
  31. package/dist/src/commands/branch.d.ts +0 -14
  32. package/dist/src/commands/branch.d.ts.map +0 -1
  33. package/dist/src/commands/branch.js +0 -395
  34. package/dist/src/commands/branch.js.map +0 -1
  35. package/dist/src/commands/context.d.ts +0 -9
  36. package/dist/src/commands/context.d.ts.map +0 -1
  37. package/dist/src/commands/context.js +0 -57
  38. package/dist/src/commands/context.js.map +0 -1
  39. package/dist/src/commands/identity.d.ts +0 -13
  40. package/dist/src/commands/identity.d.ts.map +0 -1
  41. package/dist/src/commands/identity.js +0 -231
  42. package/dist/src/commands/identity.js.map +0 -1
  43. package/dist/src/commands/mail.d.ts +0 -12
  44. package/dist/src/commands/mail.d.ts.map +0 -1
  45. package/dist/src/commands/mail.js +0 -225
  46. package/dist/src/commands/mail.js.map +0 -1
  47. package/dist/src/commands/office.d.ts +0 -19
  48. package/dist/src/commands/office.d.ts.map +0 -1
  49. package/dist/src/commands/office.js +0 -598
  50. package/dist/src/commands/office.js.map +0 -1
  51. package/dist/src/commands/roster.d.ts +0 -10
  52. package/dist/src/commands/roster.d.ts.map +0 -1
  53. package/dist/src/commands/roster.js +0 -143
  54. package/dist/src/commands/roster.js.map +0 -1
  55. package/dist/src/generators/claude-code.d.ts +0 -17
  56. package/dist/src/generators/claude-code.d.ts.map +0 -1
  57. package/dist/src/generators/claude-code.js +0 -80
  58. package/dist/src/generators/claude-code.js.map +0 -1
  59. package/dist/src/generators/codex.d.ts +0 -22
  60. package/dist/src/generators/codex.d.ts.map +0 -1
  61. package/dist/src/generators/codex.js +0 -78
  62. package/dist/src/generators/codex.js.map +0 -1
  63. package/dist/src/generators/ollama.d.ts +0 -18
  64. package/dist/src/generators/ollama.d.ts.map +0 -1
  65. package/dist/src/generators/ollama.js +0 -97
  66. package/dist/src/generators/ollama.js.map +0 -1
  67. package/dist/src/generators/openclaw.d.ts +0 -15
  68. package/dist/src/generators/openclaw.d.ts.map +0 -1
  69. package/dist/src/generators/openclaw.js +0 -103
  70. package/dist/src/generators/openclaw.js.map +0 -1
  71. package/dist/src/generators/registry.d.ts +0 -36
  72. package/dist/src/generators/registry.d.ts.map +0 -1
  73. package/dist/src/generators/registry.js +0 -99
  74. package/dist/src/generators/registry.js.map +0 -1
  75. package/dist/src/schema/manifest.d.ts +0 -140
  76. package/dist/src/schema/manifest.d.ts.map +0 -1
  77. package/dist/src/schema/manifest.js +0 -62
  78. package/dist/src/schema/manifest.js.map +0 -1
  79. package/dist/src/schema/report.d.ts +0 -166
  80. package/dist/src/schema/report.d.ts.map +0 -1
  81. package/dist/src/schema/report.js +0 -90
  82. package/dist/src/schema/report.js.map +0 -1
  83. package/dist/src/schema/sanitizer.d.ts +0 -30
  84. package/dist/src/schema/sanitizer.d.ts.map +0 -1
  85. package/dist/src/schema/sanitizer.js +0 -97
  86. package/dist/src/schema/sanitizer.js.map +0 -1
  87. package/dist/src/soundstage/mock-llm.d.ts +0 -3
  88. package/dist/src/soundstage/mock-llm.d.ts.map +0 -1
  89. package/dist/src/soundstage/mock-llm.js +0 -68
  90. package/dist/src/soundstage/mock-llm.js.map +0 -1
  91. package/dist/src/utils/agent-info.d.ts +0 -28
  92. package/dist/src/utils/agent-info.d.ts.map +0 -1
  93. package/dist/src/utils/agent-info.js +0 -102
  94. package/dist/src/utils/agent-info.js.map +0 -1
  95. package/dist/src/utils/archive.d.ts +0 -27
  96. package/dist/src/utils/archive.d.ts.map +0 -1
  97. package/dist/src/utils/archive.js +0 -80
  98. package/dist/src/utils/archive.js.map +0 -1
  99. package/dist/src/utils/config-inject.d.ts +0 -27
  100. package/dist/src/utils/config-inject.d.ts.map +0 -1
  101. package/dist/src/utils/config-inject.js +0 -83
  102. package/dist/src/utils/config-inject.js.map +0 -1
  103. package/dist/src/utils/config.d.ts +0 -30
  104. package/dist/src/utils/config.d.ts.map +0 -1
  105. package/dist/src/utils/config.js +0 -55
  106. package/dist/src/utils/config.js.map +0 -1
  107. package/dist/src/utils/connection-state.d.ts +0 -27
  108. package/dist/src/utils/connection-state.d.ts.map +0 -1
  109. package/dist/src/utils/connection-state.js +0 -81
  110. package/dist/src/utils/connection-state.js.map +0 -1
  111. package/dist/src/utils/context.d.ts +0 -14
  112. package/dist/src/utils/context.d.ts.map +0 -1
  113. package/dist/src/utils/context.js +0 -68
  114. package/dist/src/utils/context.js.map +0 -1
  115. package/dist/src/utils/github-webhook.d.ts +0 -3
  116. package/dist/src/utils/github-webhook.d.ts.map +0 -1
  117. package/dist/src/utils/github-webhook.js +0 -105
  118. package/dist/src/utils/github-webhook.js.map +0 -1
  119. package/dist/src/utils/identity.d.ts +0 -114
  120. package/dist/src/utils/identity.d.ts.map +0 -1
  121. package/dist/src/utils/identity.js +0 -341
  122. package/dist/src/utils/identity.js.map +0 -1
  123. package/dist/src/utils/internal-mail.d.ts +0 -18
  124. package/dist/src/utils/internal-mail.d.ts.map +0 -1
  125. package/dist/src/utils/internal-mail.js +0 -75
  126. package/dist/src/utils/internal-mail.js.map +0 -1
  127. package/dist/src/utils/loop-detector.d.ts +0 -27
  128. package/dist/src/utils/loop-detector.d.ts.map +0 -1
  129. package/dist/src/utils/loop-detector.js +0 -42
  130. package/dist/src/utils/loop-detector.js.map +0 -1
  131. package/dist/src/utils/mail-handler.d.ts +0 -19
  132. package/dist/src/utils/mail-handler.d.ts.map +0 -1
  133. package/dist/src/utils/mail-handler.js +0 -94
  134. package/dist/src/utils/mail-handler.js.map +0 -1
  135. package/dist/src/utils/mail.d.ts +0 -22
  136. package/dist/src/utils/mail.d.ts.map +0 -1
  137. package/dist/src/utils/mail.js +0 -111
  138. package/dist/src/utils/mail.js.map +0 -1
  139. package/dist/src/utils/manifest.d.ts +0 -36
  140. package/dist/src/utils/manifest.d.ts.map +0 -1
  141. package/dist/src/utils/manifest.js +0 -91
  142. package/dist/src/utils/manifest.js.map +0 -1
  143. package/dist/src/utils/noise-ik-transport.d.ts +0 -18
  144. package/dist/src/utils/noise-ik-transport.d.ts.map +0 -1
  145. package/dist/src/utils/noise-ik-transport.js +0 -357
  146. package/dist/src/utils/noise-ik-transport.js.map +0 -1
  147. package/dist/src/utils/nono.d.ts +0 -72
  148. package/dist/src/utils/nono.d.ts.map +0 -1
  149. package/dist/src/utils/nono.js +0 -166
  150. package/dist/src/utils/nono.js.map +0 -1
  151. package/dist/src/utils/outbox.d.ts +0 -10
  152. package/dist/src/utils/outbox.d.ts.map +0 -1
  153. package/dist/src/utils/outbox.js +0 -29
  154. package/dist/src/utils/outbox.js.map +0 -1
  155. package/dist/src/utils/output.d.ts +0 -17
  156. package/dist/src/utils/output.d.ts.map +0 -1
  157. package/dist/src/utils/output.js +0 -83
  158. package/dist/src/utils/output.js.map +0 -1
  159. package/dist/src/utils/plain-tcp-transport.d.ts +0 -10
  160. package/dist/src/utils/plain-tcp-transport.d.ts.map +0 -1
  161. package/dist/src/utils/plain-tcp-transport.js +0 -209
  162. package/dist/src/utils/plain-tcp-transport.js.map +0 -1
  163. package/dist/src/utils/provision.d.ts +0 -2
  164. package/dist/src/utils/provision.d.ts.map +0 -1
  165. package/dist/src/utils/provision.js +0 -186
  166. package/dist/src/utils/provision.js.map +0 -1
  167. package/dist/src/utils/relay.d.ts +0 -30
  168. package/dist/src/utils/relay.d.ts.map +0 -1
  169. package/dist/src/utils/relay.js +0 -539
  170. package/dist/src/utils/relay.js.map +0 -1
  171. package/dist/src/utils/sandbox.d.ts +0 -37
  172. package/dist/src/utils/sandbox.d.ts.map +0 -1
  173. package/dist/src/utils/sandbox.js +0 -126
  174. package/dist/src/utils/sandbox.js.map +0 -1
  175. package/dist/src/utils/transport.d.ts +0 -62
  176. package/dist/src/utils/transport.d.ts.map +0 -1
  177. package/dist/src/utils/transport.js +0 -75
  178. package/dist/src/utils/transport.js.map +0 -1
  179. package/dist/src/utils/wall.d.ts +0 -5
  180. package/dist/src/utils/wall.d.ts.map +0 -1
  181. package/dist/src/utils/wall.js +0 -51
  182. package/dist/src/utils/wall.js.map +0 -1
  183. package/dist/src/utils/wire-delivery.d.ts +0 -10
  184. package/dist/src/utils/wire-delivery.d.ts.map +0 -1
  185. package/dist/src/utils/wire-delivery.js +0 -57
  186. package/dist/src/utils/wire-delivery.js.map +0 -1
  187. package/dist/src/utils/wire-frame.d.ts +0 -10
  188. package/dist/src/utils/wire-frame.d.ts.map +0 -1
  189. package/dist/src/utils/wire-frame.js +0 -66
  190. package/dist/src/utils/wire-frame.js.map +0 -1
  191. package/dist/src/utils/wire-mail.d.ts +0 -54
  192. package/dist/src/utils/wire-mail.d.ts.map +0 -1
  193. package/dist/src/utils/wire-mail.js +0 -24
  194. package/dist/src/utils/wire-mail.js.map +0 -1
  195. package/dist/src/utils/ws-noise-transport.d.ts +0 -18
  196. package/dist/src/utils/ws-noise-transport.d.ts.map +0 -1
  197. package/dist/src/utils/ws-noise-transport.js +0 -356
  198. package/dist/src/utils/ws-noise-transport.js.map +0 -1
@@ -1,97 +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
- }
58
- /**
59
- * Sanitize an array of strings using the identifier rules.
60
- */
61
- export function sanitizeStringArray(arr) {
62
- if (!arr)
63
- return [];
64
- return arr.map((item) => sanitizeIdentifier(item));
65
- }
66
- /**
67
- * Main sanitizer function for TPS Reports.
68
- * Returns a new, sanitized report object.
69
- */
70
- export function sanitizeTPSReport(report) {
71
- // Deep clone to avoid mutating original
72
- const sanitized = JSON.parse(JSON.stringify(report));
73
- // Sanitize Top-level fields
74
- sanitized.name = sanitizeIdentifier(sanitized.name);
75
- sanitized.description = sanitizeFreeText(sanitized.description);
76
- // Sanitize Identity fields
77
- sanitized.identity.default_name = sanitizeIdentifier(sanitized.identity.default_name);
78
- sanitized.identity.personality = sanitizeFreeText(sanitized.identity.personality);
79
- sanitized.identity.communication_style = sanitizeFreeText(sanitized.identity.communication_style);
80
- sanitized.identity.emoji = sanitizeFreeText(sanitized.identity.emoji); // Emojis are text? Usually safe but let's be careful.
81
- // Sanitize Arrays (Identifiers)
82
- sanitized.flair = sanitizeStringArray(sanitized.flair);
83
- sanitized.tools.required = sanitizeStringArray(sanitized.tools.required);
84
- sanitized.tools.optional = sanitizeStringArray(sanitized.tools.optional);
85
- sanitized.communication.channels = sanitizeStringArray(sanitized.communication.channels);
86
- sanitized.communication.handoff_targets = sanitizeStringArray(sanitized.communication.handoff_targets);
87
- sanitized.memory.shared_read = sanitizeStringArray(sanitized.memory.shared_read);
88
- sanitized.memory.shared_write = sanitizeStringArray(sanitized.memory.shared_write);
89
- // Sanitize Model (Identifier)
90
- sanitized.model.default = sanitizeIdentifier(sanitized.model.default);
91
- // Sanitize OpenClaw fields
92
- sanitized.openclaw.model = sanitizeModelIdentifier(sanitized.openclaw.model);
93
- sanitized.openclaw.thinking = sanitizeIdentifier(sanitized.openclaw.thinking);
94
- sanitized.openclaw.channel = sanitizeIdentifier(sanitized.openclaw.channel);
95
- return sanitized;
96
- }
97
- //# 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");
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,27 +0,0 @@
1
- export interface ArchiveEvent {
2
- event: "sent" | "read" | "listed";
3
- timestamp: string;
4
- from: string;
5
- to: string;
6
- messageId: string;
7
- bodyPreview?: string;
8
- }
9
- export interface ArchiveQuery {
10
- agent?: string;
11
- since?: string;
12
- until?: string;
13
- event?: "sent" | "read" | "listed";
14
- limit?: number;
15
- }
16
- /**
17
- * Append an event to the archive. Fire-and-forget — archive failures
18
- * never block mail operations.
19
- */
20
- export declare function logEvent(event: Omit<ArchiveEvent, "timestamp">, body?: string): void;
21
- /**
22
- * Query the archive with optional filters.
23
- * Reads the full file and filters in memory — fine for reasonable volumes.
24
- * For massive archives, we'd add rotation or indexing later.
25
- */
26
- export declare function queryArchive(query?: ArchiveQuery): ArchiveEvent[];
27
- //# sourceMappingURL=archive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/utils/archive.ts"],"names":[],"mappings":"AAUA,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,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,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAcpF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,YAAiB,GAAG,YAAY,EAAE,CAuCrE"}
@@ -1,80 +0,0 @@
1
- /**
2
- * Communication archive — append-only JSONL log of all mail events.
3
- *
4
- * Every send, read, and list operation appends one line to archive.jsonl.
5
- * This creates a searchable, complete audit trail of agent communication.
6
- */
7
- import { appendFileSync, readFileSync, existsSync, mkdirSync } from "node:fs";
8
- import { join } from "node:path";
9
- import { homedir } from "node:os";
10
- function getArchivePath() {
11
- const dir = process.env.TPS_MAIL_DIR || join(process.env.HOME || homedir(), ".tps", "mail");
12
- mkdirSync(dir, { recursive: true });
13
- return join(dir, "archive.jsonl");
14
- }
15
- function makePreview(body, maxLen = 100) {
16
- const firstLine = body.split("\n")[0] || "";
17
- return firstLine.length > maxLen ? firstLine.slice(0, maxLen) + "…" : firstLine;
18
- }
19
- /**
20
- * Append an event to the archive. Fire-and-forget — archive failures
21
- * never block mail operations.
22
- */
23
- export function logEvent(event, body) {
24
- try {
25
- const entry = {
26
- ...event,
27
- timestamp: new Date().toISOString(),
28
- };
29
- if (body) {
30
- entry.bodyPreview = makePreview(body);
31
- }
32
- const line = JSON.stringify(entry) + "\n";
33
- appendFileSync(getArchivePath(), line, "utf-8");
34
- }
35
- catch {
36
- // Archive is best-effort. Never break mail for logging.
37
- }
38
- }
39
- /**
40
- * Query the archive with optional filters.
41
- * Reads the full file and filters in memory — fine for reasonable volumes.
42
- * For massive archives, we'd add rotation or indexing later.
43
- */
44
- export function queryArchive(query = {}) {
45
- const archivePath = getArchivePath();
46
- if (!existsSync(archivePath))
47
- return [];
48
- const raw = readFileSync(archivePath, "utf-8");
49
- const lines = raw.trim().split("\n").filter(Boolean);
50
- let events = [];
51
- for (const line of lines) {
52
- try {
53
- events.push(JSON.parse(line));
54
- }
55
- catch {
56
- // Skip malformed lines
57
- }
58
- }
59
- // Apply filters
60
- if (query.agent) {
61
- const a = query.agent;
62
- events = events.filter((e) => e.from === a || e.to === a);
63
- }
64
- if (query.event) {
65
- events = events.filter((e) => e.event === query.event);
66
- }
67
- if (query.since) {
68
- events = events.filter((e) => e.timestamp >= query.since);
69
- }
70
- if (query.until) {
71
- events = events.filter((e) => e.timestamp <= query.until);
72
- }
73
- // Sort newest first
74
- events.sort((a, b) => (a.timestamp < b.timestamp ? 1 : -1));
75
- if (query.limit && query.limit > 0) {
76
- events = events.slice(0, query.limit);
77
- }
78
- return events;
79
- }
80
- //# 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"}