aicodeman 0.2.8

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 (246) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +403 -0
  3. package/dist/ai-checker-base.d.ts +175 -0
  4. package/dist/ai-checker-base.d.ts.map +1 -0
  5. package/dist/ai-checker-base.js +424 -0
  6. package/dist/ai-checker-base.js.map +1 -0
  7. package/dist/ai-idle-checker.d.ts +53 -0
  8. package/dist/ai-idle-checker.d.ts.map +1 -0
  9. package/dist/ai-idle-checker.js +141 -0
  10. package/dist/ai-idle-checker.js.map +1 -0
  11. package/dist/ai-plan-checker.d.ts +52 -0
  12. package/dist/ai-plan-checker.d.ts.map +1 -0
  13. package/dist/ai-plan-checker.js +103 -0
  14. package/dist/ai-plan-checker.js.map +1 -0
  15. package/dist/bash-tool-parser.d.ts +191 -0
  16. package/dist/bash-tool-parser.d.ts.map +1 -0
  17. package/dist/bash-tool-parser.js +598 -0
  18. package/dist/bash-tool-parser.js.map +1 -0
  19. package/dist/cli.d.ts +12 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +460 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/buffer-limits.d.ts +59 -0
  24. package/dist/config/buffer-limits.d.ts.map +1 -0
  25. package/dist/config/buffer-limits.js +74 -0
  26. package/dist/config/buffer-limits.js.map +1 -0
  27. package/dist/config/map-limits.d.ts +40 -0
  28. package/dist/config/map-limits.d.ts.map +1 -0
  29. package/dist/config/map-limits.js +52 -0
  30. package/dist/config/map-limits.js.map +1 -0
  31. package/dist/file-stream-manager.d.ts +148 -0
  32. package/dist/file-stream-manager.d.ts.map +1 -0
  33. package/dist/file-stream-manager.js +351 -0
  34. package/dist/file-stream-manager.js.map +1 -0
  35. package/dist/hooks-config.d.ts +31 -0
  36. package/dist/hooks-config.d.ts.map +1 -0
  37. package/dist/hooks-config.js +115 -0
  38. package/dist/hooks-config.js.map +1 -0
  39. package/dist/image-watcher.d.ts +86 -0
  40. package/dist/image-watcher.d.ts.map +1 -0
  41. package/dist/image-watcher.js +275 -0
  42. package/dist/image-watcher.js.map +1 -0
  43. package/dist/index.d.ts +11 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +54 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mux-factory.d.ts +13 -0
  48. package/dist/mux-factory.d.ts.map +1 -0
  49. package/dist/mux-factory.js +19 -0
  50. package/dist/mux-factory.js.map +1 -0
  51. package/dist/mux-interface.d.ts +145 -0
  52. package/dist/mux-interface.d.ts.map +1 -0
  53. package/dist/mux-interface.js +9 -0
  54. package/dist/mux-interface.js.map +1 -0
  55. package/dist/plan-orchestrator.d.ts +123 -0
  56. package/dist/plan-orchestrator.d.ts.map +1 -0
  57. package/dist/plan-orchestrator.js +500 -0
  58. package/dist/plan-orchestrator.js.map +1 -0
  59. package/dist/prompts/index.d.ts +9 -0
  60. package/dist/prompts/index.d.ts.map +1 -0
  61. package/dist/prompts/index.js +9 -0
  62. package/dist/prompts/index.js.map +1 -0
  63. package/dist/prompts/planner.d.ts +14 -0
  64. package/dist/prompts/planner.d.ts.map +1 -0
  65. package/dist/prompts/planner.js +83 -0
  66. package/dist/prompts/planner.js.map +1 -0
  67. package/dist/prompts/research-agent.d.ts +10 -0
  68. package/dist/prompts/research-agent.d.ts.map +1 -0
  69. package/dist/prompts/research-agent.js +143 -0
  70. package/dist/prompts/research-agent.js.map +1 -0
  71. package/dist/push-store.d.ts +41 -0
  72. package/dist/push-store.d.ts.map +1 -0
  73. package/dist/push-store.js +168 -0
  74. package/dist/push-store.js.map +1 -0
  75. package/dist/ralph-config.d.ts +67 -0
  76. package/dist/ralph-config.d.ts.map +1 -0
  77. package/dist/ralph-config.js +134 -0
  78. package/dist/ralph-config.js.map +1 -0
  79. package/dist/ralph-loop.d.ts +124 -0
  80. package/dist/ralph-loop.d.ts.map +1 -0
  81. package/dist/ralph-loop.js +418 -0
  82. package/dist/ralph-loop.js.map +1 -0
  83. package/dist/ralph-tracker.d.ts +1081 -0
  84. package/dist/ralph-tracker.d.ts.map +1 -0
  85. package/dist/ralph-tracker.js +3343 -0
  86. package/dist/ralph-tracker.js.map +1 -0
  87. package/dist/respawn-controller.d.ts +1182 -0
  88. package/dist/respawn-controller.d.ts.map +1 -0
  89. package/dist/respawn-controller.js +2754 -0
  90. package/dist/respawn-controller.js.map +1 -0
  91. package/dist/run-summary.d.ts +123 -0
  92. package/dist/run-summary.d.ts.map +1 -0
  93. package/dist/run-summary.js +325 -0
  94. package/dist/run-summary.js.map +1 -0
  95. package/dist/session-lifecycle-log.d.ts +36 -0
  96. package/dist/session-lifecycle-log.d.ts.map +1 -0
  97. package/dist/session-lifecycle-log.js +101 -0
  98. package/dist/session-lifecycle-log.js.map +1 -0
  99. package/dist/session-manager.d.ts +97 -0
  100. package/dist/session-manager.d.ts.map +1 -0
  101. package/dist/session-manager.js +224 -0
  102. package/dist/session-manager.js.map +1 -0
  103. package/dist/session.d.ts +686 -0
  104. package/dist/session.d.ts.map +1 -0
  105. package/dist/session.js +2025 -0
  106. package/dist/session.js.map +1 -0
  107. package/dist/state-store.d.ts +189 -0
  108. package/dist/state-store.d.ts.map +1 -0
  109. package/dist/state-store.js +730 -0
  110. package/dist/state-store.js.map +1 -0
  111. package/dist/subagent-watcher.d.ts +345 -0
  112. package/dist/subagent-watcher.d.ts.map +1 -0
  113. package/dist/subagent-watcher.js +1469 -0
  114. package/dist/subagent-watcher.js.map +1 -0
  115. package/dist/task-queue.d.ts +108 -0
  116. package/dist/task-queue.d.ts.map +1 -0
  117. package/dist/task-queue.js +235 -0
  118. package/dist/task-queue.js.map +1 -0
  119. package/dist/task-tracker.d.ts +306 -0
  120. package/dist/task-tracker.d.ts.map +1 -0
  121. package/dist/task-tracker.js +488 -0
  122. package/dist/task-tracker.js.map +1 -0
  123. package/dist/task.d.ts +73 -0
  124. package/dist/task.d.ts.map +1 -0
  125. package/dist/task.js +177 -0
  126. package/dist/task.js.map +1 -0
  127. package/dist/team-watcher.d.ts +53 -0
  128. package/dist/team-watcher.d.ts.map +1 -0
  129. package/dist/team-watcher.js +313 -0
  130. package/dist/team-watcher.js.map +1 -0
  131. package/dist/templates/case-template.md +461 -0
  132. package/dist/templates/claude-md.d.ts +26 -0
  133. package/dist/templates/claude-md.d.ts.map +1 -0
  134. package/dist/templates/claude-md.js +74 -0
  135. package/dist/templates/claude-md.js.map +1 -0
  136. package/dist/tmux-manager.d.ts +181 -0
  137. package/dist/tmux-manager.d.ts.map +1 -0
  138. package/dist/tmux-manager.js +1405 -0
  139. package/dist/tmux-manager.js.map +1 -0
  140. package/dist/transcript-watcher.d.ts +110 -0
  141. package/dist/transcript-watcher.d.ts.map +1 -0
  142. package/dist/transcript-watcher.js +338 -0
  143. package/dist/transcript-watcher.js.map +1 -0
  144. package/dist/tunnel-manager.d.ts +54 -0
  145. package/dist/tunnel-manager.d.ts.map +1 -0
  146. package/dist/tunnel-manager.js +251 -0
  147. package/dist/tunnel-manager.js.map +1 -0
  148. package/dist/types.d.ts +1139 -0
  149. package/dist/types.d.ts.map +1 -0
  150. package/dist/types.js +215 -0
  151. package/dist/types.js.map +1 -0
  152. package/dist/utils/buffer-accumulator.d.ts +111 -0
  153. package/dist/utils/buffer-accumulator.d.ts.map +1 -0
  154. package/dist/utils/buffer-accumulator.js +172 -0
  155. package/dist/utils/buffer-accumulator.js.map +1 -0
  156. package/dist/utils/claude-cli-resolver.d.ts +26 -0
  157. package/dist/utils/claude-cli-resolver.d.ts.map +1 -0
  158. package/dist/utils/claude-cli-resolver.js +78 -0
  159. package/dist/utils/claude-cli-resolver.js.map +1 -0
  160. package/dist/utils/cleanup-manager.d.ts +165 -0
  161. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  162. package/dist/utils/cleanup-manager.js +274 -0
  163. package/dist/utils/cleanup-manager.js.map +1 -0
  164. package/dist/utils/index.d.ts +19 -0
  165. package/dist/utils/index.d.ts.map +1 -0
  166. package/dist/utils/index.js +19 -0
  167. package/dist/utils/index.js.map +1 -0
  168. package/dist/utils/lru-map.d.ts +140 -0
  169. package/dist/utils/lru-map.d.ts.map +1 -0
  170. package/dist/utils/lru-map.js +234 -0
  171. package/dist/utils/lru-map.js.map +1 -0
  172. package/dist/utils/nice-wrapper.d.ts +13 -0
  173. package/dist/utils/nice-wrapper.d.ts.map +1 -0
  174. package/dist/utils/nice-wrapper.js +17 -0
  175. package/dist/utils/nice-wrapper.js.map +1 -0
  176. package/dist/utils/opencode-cli-resolver.d.ts +21 -0
  177. package/dist/utils/opencode-cli-resolver.d.ts.map +1 -0
  178. package/dist/utils/opencode-cli-resolver.js +67 -0
  179. package/dist/utils/opencode-cli-resolver.js.map +1 -0
  180. package/dist/utils/regex-patterns.d.ts +64 -0
  181. package/dist/utils/regex-patterns.d.ts.map +1 -0
  182. package/dist/utils/regex-patterns.js +74 -0
  183. package/dist/utils/regex-patterns.js.map +1 -0
  184. package/dist/utils/stale-expiration-map.d.ts +159 -0
  185. package/dist/utils/stale-expiration-map.d.ts.map +1 -0
  186. package/dist/utils/stale-expiration-map.js +277 -0
  187. package/dist/utils/stale-expiration-map.js.map +1 -0
  188. package/dist/utils/string-similarity.d.ts +108 -0
  189. package/dist/utils/string-similarity.d.ts.map +1 -0
  190. package/dist/utils/string-similarity.js +189 -0
  191. package/dist/utils/string-similarity.js.map +1 -0
  192. package/dist/utils/token-validation.d.ts +39 -0
  193. package/dist/utils/token-validation.d.ts.map +1 -0
  194. package/dist/utils/token-validation.js +59 -0
  195. package/dist/utils/token-validation.js.map +1 -0
  196. package/dist/utils/type-safety.d.ts +33 -0
  197. package/dist/utils/type-safety.d.ts.map +1 -0
  198. package/dist/utils/type-safety.js +35 -0
  199. package/dist/utils/type-safety.js.map +1 -0
  200. package/dist/web/public/app.js +491 -0
  201. package/dist/web/public/app.js.br +0 -0
  202. package/dist/web/public/app.js.gz +0 -0
  203. package/dist/web/public/index.html +1675 -0
  204. package/dist/web/public/index.html.br +0 -0
  205. package/dist/web/public/index.html.gz +0 -0
  206. package/dist/web/public/manifest.json +8 -0
  207. package/dist/web/public/mobile.css +1 -0
  208. package/dist/web/public/mobile.css.br +0 -0
  209. package/dist/web/public/mobile.css.gz +0 -0
  210. package/dist/web/public/ralph-wizard.js +1037 -0
  211. package/dist/web/public/ralph-wizard.js.br +0 -0
  212. package/dist/web/public/ralph-wizard.js.gz +0 -0
  213. package/dist/web/public/styles.css +1 -0
  214. package/dist/web/public/styles.css.br +0 -0
  215. package/dist/web/public/styles.css.gz +0 -0
  216. package/dist/web/public/sw.js +67 -0
  217. package/dist/web/public/sw.js.br +0 -0
  218. package/dist/web/public/sw.js.gz +0 -0
  219. package/dist/web/public/upload.html +155 -0
  220. package/dist/web/public/upload.html.br +0 -0
  221. package/dist/web/public/upload.html.gz +0 -0
  222. package/dist/web/public/vendor/xterm-addon-fit.min.js +1 -0
  223. package/dist/web/public/vendor/xterm-addon-fit.min.js.br +0 -0
  224. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  225. package/dist/web/public/vendor/xterm-addon-unicode11.min.js +1 -0
  226. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.br +0 -0
  227. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  228. package/dist/web/public/vendor/xterm-addon-webgl.min.js +2 -0
  229. package/dist/web/public/vendor/xterm-addon-webgl.min.js.br +0 -0
  230. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  231. package/dist/web/public/vendor/xterm.css +209 -0
  232. package/dist/web/public/vendor/xterm.css.br +0 -0
  233. package/dist/web/public/vendor/xterm.css.gz +0 -0
  234. package/dist/web/public/vendor/xterm.min.js +9 -0
  235. package/dist/web/public/vendor/xterm.min.js.br +0 -0
  236. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  237. package/dist/web/schemas.d.ts +479 -0
  238. package/dist/web/schemas.d.ts.map +1 -0
  239. package/dist/web/schemas.js +448 -0
  240. package/dist/web/schemas.js.map +1 -0
  241. package/dist/web/server.d.ts +207 -0
  242. package/dist/web/server.d.ts.map +1 -0
  243. package/dist/web/server.js +5784 -0
  244. package/dist/web/server.js.map +1 -0
  245. package/package.json +110 -0
  246. package/scripts/postinstall.js +390 -0
@@ -0,0 +1,448 @@
1
+ /**
2
+ * @fileoverview Zod validation schemas for API routes
3
+ *
4
+ * This module contains Zod schemas for validating API request bodies.
5
+ * Schemas are used in src/web/server.ts route handlers.
6
+ *
7
+ * @module web/schemas
8
+ */
9
+ import { z } from 'zod';
10
+ import { SAFE_PATH_PATTERN } from '../utils/regex-patterns.js';
11
+ // ========== Path Validation ==========
12
+ /** Validate a path string: no shell metacharacters, no traversal, must be absolute */
13
+ export function isValidWorkingDir(p) {
14
+ if (!p || !p.startsWith('/'))
15
+ return false;
16
+ if (p.includes(';') ||
17
+ p.includes('&') ||
18
+ p.includes('|') ||
19
+ p.includes('$') ||
20
+ p.includes('`') ||
21
+ p.includes('(') ||
22
+ p.includes(')') ||
23
+ p.includes('{') ||
24
+ p.includes('}') ||
25
+ p.includes('<') ||
26
+ p.includes('>') ||
27
+ p.includes("'") ||
28
+ p.includes('"') ||
29
+ p.includes('\n') ||
30
+ p.includes('\r')) {
31
+ return false;
32
+ }
33
+ if (p.includes('..'))
34
+ return false;
35
+ return SAFE_PATH_PATTERN.test(p);
36
+ }
37
+ /** Zod refinement for safe absolute path */
38
+ const safePathSchema = z.string().max(1000).refine(isValidWorkingDir, {
39
+ message: 'Invalid path: must be absolute, no shell metacharacters or traversal',
40
+ });
41
+ // ========== Env Var Allowlist ==========
42
+ /** Allowlisted env var key prefixes */
43
+ const ALLOWED_ENV_PREFIXES = ['CLAUDE_CODE_', 'OPENCODE_'];
44
+ /** Env var keys that are always blocked (security-sensitive) */
45
+ const BLOCKED_ENV_KEYS = new Set([
46
+ 'PATH',
47
+ 'LD_PRELOAD',
48
+ 'LD_LIBRARY_PATH',
49
+ 'NODE_OPTIONS',
50
+ 'CODEMAN_MUX_NAME',
51
+ 'CODEMAN_TMUX',
52
+ 'OPENCODE_SERVER_PASSWORD', // Security-sensitive: server auth password
53
+ ]);
54
+ /** Validate that an env var key is allowed */
55
+ function isAllowedEnvKey(key) {
56
+ if (BLOCKED_ENV_KEYS.has(key))
57
+ return false;
58
+ return ALLOWED_ENV_PREFIXES.some((prefix) => key.startsWith(prefix));
59
+ }
60
+ /** Zod schema for env overrides with allowlist enforcement */
61
+ const safeEnvOverridesSchema = z
62
+ .record(z.string(), z.string())
63
+ .optional()
64
+ .refine((val) => {
65
+ if (!val)
66
+ return true;
67
+ return Object.keys(val).every(isAllowedEnvKey);
68
+ }, {
69
+ message: 'envOverrides contains blocked or disallowed env var keys. Only CLAUDE_CODE_* and OPENCODE_* keys are allowed.',
70
+ });
71
+ // ========== Session Routes ==========
72
+ /**
73
+ * Schema for POST /api/sessions
74
+ * Creates a new session with optional working directory, mode, and name.
75
+ */
76
+ /** Schema for OpenCode-specific configuration */
77
+ const OpenCodeConfigSchema = z
78
+ .object({
79
+ model: z
80
+ .string()
81
+ .max(100)
82
+ .regex(/^[a-zA-Z0-9._\-/]+$/)
83
+ .optional(),
84
+ autoAllowTools: z.boolean().optional(),
85
+ continueSession: z
86
+ .string()
87
+ .max(100)
88
+ .regex(/^[a-zA-Z0-9_-]+$/)
89
+ .optional(),
90
+ forkSession: z.boolean().optional(),
91
+ configContent: z
92
+ .string()
93
+ .max(10000)
94
+ .refine((val) => {
95
+ try {
96
+ JSON.parse(val);
97
+ return true;
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }, { message: 'configContent must be valid JSON' })
103
+ .optional(),
104
+ })
105
+ .optional();
106
+ export const CreateSessionSchema = z.object({
107
+ workingDir: safePathSchema.optional(),
108
+ mode: z.enum(['claude', 'shell', 'opencode']).optional(),
109
+ name: z.string().max(100).optional(),
110
+ envOverrides: safeEnvOverridesSchema,
111
+ openCodeConfig: OpenCodeConfigSchema,
112
+ });
113
+ /**
114
+ * Schema for POST /api/sessions/:id/run
115
+ * Runs a prompt in a session.
116
+ */
117
+ export const RunPromptSchema = z.object({
118
+ prompt: z.string().min(1).max(100000),
119
+ });
120
+ /**
121
+ * Schema for POST /api/sessions/:id/resize
122
+ * Resizes a session's terminal.
123
+ */
124
+ export const ResizeSchema = z.object({
125
+ cols: z.number().int().min(1).max(500),
126
+ rows: z.number().int().min(1).max(200),
127
+ });
128
+ // ========== Case Routes ==========
129
+ /**
130
+ * Schema for POST /api/cases
131
+ * Creates a new case folder.
132
+ */
133
+ export const CreateCaseSchema = z.object({
134
+ name: z
135
+ .string()
136
+ .regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format. Use only letters, numbers, hyphens, underscores.'),
137
+ description: z.string().max(1000).optional(),
138
+ });
139
+ // ========== Quick Start ==========
140
+ /**
141
+ * Schema for POST /api/quick-start
142
+ * Creates case (if needed) and starts interactive session.
143
+ */
144
+ export const QuickStartSchema = z.object({
145
+ caseName: z
146
+ .string()
147
+ .regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format. Use only letters, numbers, hyphens, underscores.')
148
+ .optional(),
149
+ mode: z.enum(['claude', 'shell', 'opencode']).optional(),
150
+ openCodeConfig: OpenCodeConfigSchema,
151
+ });
152
+ // ========== Hook Events ==========
153
+ /**
154
+ * Schema for POST /api/hook-event
155
+ * Receives Claude Code hook events.
156
+ */
157
+ export const HookEventSchema = z.object({
158
+ event: z.enum(['permission_prompt', 'elicitation_dialog', 'idle_prompt', 'stop', 'teammate_idle', 'task_completed']),
159
+ sessionId: z.string().min(1),
160
+ data: z.record(z.string(), z.unknown()).nullable().optional(),
161
+ });
162
+ // ========== Configuration ==========
163
+ /**
164
+ * Schema for respawn configuration (partial updates allowed)
165
+ * Used in PUT /api/config and respawn endpoints.
166
+ */
167
+ export const RespawnConfigSchema = z.object({
168
+ idleTimeoutMs: z.number().int().min(1000).max(600000).optional(),
169
+ updatePrompt: z.string().max(10000).optional(),
170
+ interStepDelayMs: z.number().int().min(100).max(60000).optional(),
171
+ enabled: z.boolean().optional(),
172
+ sendClear: z.boolean().optional(),
173
+ sendInit: z.boolean().optional(),
174
+ kickstartPrompt: z.string().max(10000).optional(),
175
+ completionConfirmMs: z.number().int().min(1000).max(60000).optional(),
176
+ noOutputTimeoutMs: z.number().int().min(5000).max(600000).optional(),
177
+ autoAcceptPrompts: z.boolean().optional(),
178
+ autoAcceptDelayMs: z.number().int().min(1000).max(60000).optional(),
179
+ aiIdleCheckEnabled: z.boolean().optional(),
180
+ aiIdleCheckModel: z.string().max(100).optional(),
181
+ aiIdleCheckMaxContext: z.number().int().min(1000).max(500000).optional(),
182
+ aiIdleCheckTimeoutMs: z.number().int().min(10000).max(300000).optional(),
183
+ aiIdleCheckCooldownMs: z.number().int().min(1000).max(300000).optional(),
184
+ aiPlanCheckEnabled: z.boolean().optional(),
185
+ aiPlanCheckModel: z.string().max(100).optional(),
186
+ aiPlanCheckMaxContext: z.number().int().min(1000).max(500000).optional(),
187
+ aiPlanCheckTimeoutMs: z.number().int().min(10000).max(300000).optional(),
188
+ aiPlanCheckCooldownMs: z.number().int().min(1000).max(300000).optional(),
189
+ adaptiveTimingEnabled: z.boolean().optional(),
190
+ adaptiveMinConfirmMs: z.number().int().min(1000).max(60000).optional(),
191
+ adaptiveMaxConfirmMs: z.number().int().min(1000).max(600000).optional(),
192
+ skipClearWhenLowContext: z.boolean().optional(),
193
+ skipClearThresholdPercent: z.number().int().min(0).max(100).optional(),
194
+ });
195
+ /**
196
+ * Schema for PUT /api/config
197
+ * Updates application configuration with whitelist of allowed fields.
198
+ */
199
+ export const ConfigUpdateSchema = z
200
+ .object({
201
+ pollIntervalMs: z.number().int().min(100).max(60000).optional(),
202
+ defaultTimeoutMs: z.number().int().min(1000).max(3600000).optional(),
203
+ maxConcurrentSessions: z.number().int().min(1).max(50).optional(),
204
+ respawn: RespawnConfigSchema.optional(),
205
+ })
206
+ .strict();
207
+ /**
208
+ * Schema for PUT /api/settings
209
+ * Explicit allowlist of known settings fields — prevents arbitrary key persistence.
210
+ */
211
+ const NotificationEventSchema = z
212
+ .object({
213
+ enabled: z.boolean().optional(),
214
+ browser: z.boolean().optional(),
215
+ audio: z.boolean().optional(),
216
+ push: z.boolean().optional(),
217
+ })
218
+ .optional();
219
+ export const SettingsUpdateSchema = z
220
+ .object({
221
+ // Paths
222
+ defaultClaudeMdPath: z.string().max(500).optional(),
223
+ defaultWorkingDir: z.string().max(500).optional(),
224
+ lastUsedCase: z.string().max(200).optional(),
225
+ // Feature toggles
226
+ ralphTrackerEnabled: z.boolean().optional(),
227
+ subagentTrackingEnabled: z.boolean().optional(),
228
+ subagentActiveTabOnly: z.boolean().optional(),
229
+ imageWatcherEnabled: z.boolean().optional(),
230
+ tunnelEnabled: z.boolean().optional(),
231
+ tabTwoRows: z.boolean().optional(),
232
+ agentTeamsEnabled: z.boolean().optional(),
233
+ // UI visibility
234
+ showFontControls: z.boolean().optional(),
235
+ showSystemStats: z.boolean().optional(),
236
+ showTokenCount: z.boolean().optional(),
237
+ showCost: z.boolean().optional(),
238
+ showLifecycleLog: z.boolean().optional(),
239
+ showMonitor: z.boolean().optional(),
240
+ showProjectInsights: z.boolean().optional(),
241
+ showFileBrowser: z.boolean().optional(),
242
+ showSubagents: z.boolean().optional(),
243
+ // Claude CLI settings
244
+ claudeMode: z.string().max(50).optional(),
245
+ allowedTools: z.string().max(2000).optional(),
246
+ // CPU priority
247
+ nice: z
248
+ .object({
249
+ enabled: z.boolean().optional(),
250
+ niceValue: z.number().int().min(-20).max(19).optional(),
251
+ })
252
+ .optional(),
253
+ // Notification preferences (cross-device sync)
254
+ notificationPreferences: z
255
+ .object({
256
+ enabled: z.boolean().optional(),
257
+ browserNotifications: z.boolean().optional(),
258
+ audioAlerts: z.boolean().optional(),
259
+ stuckThresholdMs: z.number().optional(),
260
+ muteCritical: z.boolean().optional(),
261
+ muteWarning: z.boolean().optional(),
262
+ muteInfo: z.boolean().optional(),
263
+ eventTypes: z
264
+ .object({
265
+ permission_prompt: NotificationEventSchema,
266
+ elicitation_dialog: NotificationEventSchema,
267
+ idle_prompt: NotificationEventSchema,
268
+ stop: NotificationEventSchema,
269
+ session_error: NotificationEventSchema,
270
+ respawn_cycle: NotificationEventSchema,
271
+ token_milestone: NotificationEventSchema,
272
+ ralph_complete: NotificationEventSchema,
273
+ subagent_spawn: NotificationEventSchema,
274
+ subagent_complete: NotificationEventSchema,
275
+ })
276
+ .optional(),
277
+ _version: z.number().optional(),
278
+ })
279
+ .optional(),
280
+ // Voice settings (cross-device sync)
281
+ voiceSettings: z
282
+ .object({
283
+ apiKey: z.string().max(200).optional(),
284
+ language: z.string().max(20).optional(),
285
+ keyterms: z.string().max(500).optional(),
286
+ insertMode: z.string().max(20).optional(),
287
+ })
288
+ .optional(),
289
+ })
290
+ .strict();
291
+ /**
292
+ * Schema for POST /api/sessions/:id/input with length limit
293
+ */
294
+ export const SessionInputWithLimitSchema = z.object({
295
+ input: z.string().max(100000), // 100KB max input
296
+ useMux: z.boolean().optional(),
297
+ });
298
+ // ========== Session Mutation Routes ==========
299
+ /** PUT /api/sessions/:id/name */
300
+ export const SessionNameSchema = z.object({
301
+ name: z.string().min(0).max(128),
302
+ });
303
+ /** PUT /api/sessions/:id/color */
304
+ export const SessionColorSchema = z.object({
305
+ color: z.string().max(30),
306
+ });
307
+ /** POST /api/sessions/:id/ralph-config */
308
+ export const RalphConfigSchema = z.object({
309
+ enabled: z.boolean().optional(),
310
+ completionPhrase: z.string().max(500).optional(),
311
+ maxIterations: z.number().int().min(0).max(10000).optional(),
312
+ reset: z.boolean().optional(),
313
+ disableAutoEnable: z.boolean().optional(),
314
+ });
315
+ /** POST /api/sessions/:id/fix-plan/import */
316
+ export const FixPlanImportSchema = z.object({
317
+ content: z.string().max(500000),
318
+ });
319
+ /** POST /api/sessions/:id/ralph-prompt/write */
320
+ export const RalphPromptWriteSchema = z.object({
321
+ content: z.string().max(500000),
322
+ });
323
+ /** POST /api/sessions/:id/auto-clear */
324
+ export const AutoClearSchema = z.object({
325
+ enabled: z.boolean(),
326
+ threshold: z.number().int().min(0).max(1000000).optional(),
327
+ });
328
+ /** POST /api/sessions/:id/auto-compact */
329
+ export const AutoCompactSchema = z.object({
330
+ enabled: z.boolean(),
331
+ threshold: z.number().int().min(0).max(1000000).optional(),
332
+ prompt: z.string().max(10000).optional(),
333
+ });
334
+ /** POST /api/sessions/:id/image-watcher */
335
+ export const ImageWatcherSchema = z.object({
336
+ enabled: z.boolean(),
337
+ });
338
+ /** POST /api/sessions/:id/flicker-filter */
339
+ export const FlickerFilterSchema = z.object({
340
+ enabled: z.boolean(),
341
+ });
342
+ /** POST /api/run */
343
+ export const QuickRunSchema = z.object({
344
+ prompt: z.string().min(1).max(100000),
345
+ workingDir: safePathSchema.optional(),
346
+ });
347
+ /** POST /api/scheduled */
348
+ export const ScheduledRunSchema = z.object({
349
+ prompt: z.string().min(1).max(100000),
350
+ workingDir: safePathSchema.optional(),
351
+ durationMinutes: z.number().int().min(1).max(14400).optional(),
352
+ });
353
+ /** POST /api/cases/link */
354
+ export const LinkCaseSchema = z.object({
355
+ name: z.string().regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format'),
356
+ path: z.string().min(1).max(1000),
357
+ });
358
+ /** POST /api/generate-plan */
359
+ export const GeneratePlanSchema = z.object({
360
+ taskDescription: z.string().min(1).max(100000),
361
+ detailLevel: z.enum(['brief', 'standard', 'detailed']).optional(),
362
+ });
363
+ /** POST /api/generate-plan-detailed */
364
+ export const GeneratePlanDetailedSchema = z.object({
365
+ taskDescription: z.string().min(1).max(100000),
366
+ caseName: z.string().max(200).optional(),
367
+ });
368
+ /** POST /api/cancel-plan-generation */
369
+ export const CancelPlanSchema = z.object({
370
+ orchestratorId: z.string().max(200).optional(),
371
+ });
372
+ /** PATCH /api/sessions/:id/plan/task/:taskId */
373
+ export const PlanTaskUpdateSchema = z.object({
374
+ status: z.enum(['pending', 'in_progress', 'completed', 'failed', 'blocked']).optional(),
375
+ error: z.string().max(10000).optional(),
376
+ incrementAttempts: z.boolean().optional(),
377
+ });
378
+ /** POST /api/sessions/:id/plan/task (add task) */
379
+ export const PlanTaskAddSchema = z.object({
380
+ content: z.string().min(1).max(10000),
381
+ priority: z.enum(['P0', 'P1', 'P2']).optional(),
382
+ verificationCriteria: z.string().max(10000).optional(),
383
+ dependencies: z.array(z.string().max(200)).optional(),
384
+ insertAfter: z.string().max(200).optional(),
385
+ });
386
+ /** POST /api/sessions/:id/cpu-limit */
387
+ export const CpuLimitSchema = z.object({
388
+ cpuLimit: z.number().int().min(0).max(100).optional(),
389
+ ioClass: z.enum(['idle', 'best-effort', 'realtime']).optional(),
390
+ ioLevel: z.number().int().min(0).max(7).optional(),
391
+ });
392
+ /** PUT /api/execution/model-config */
393
+ export const ModelConfigUpdateSchema = z.record(z.string(), z.unknown());
394
+ /** PUT /api/subagent-window-states */
395
+ export const SubagentWindowStatesSchema = z
396
+ .object({
397
+ minimized: z.record(z.string(), z.boolean()).optional(),
398
+ open: z.array(z.string()).optional(),
399
+ })
400
+ .passthrough();
401
+ /** PUT /api/subagent-parents */
402
+ export const SubagentParentMapSchema = z.record(z.string(), z.string());
403
+ /** POST /api/sessions/:id/interactive-respawn */
404
+ export const InteractiveRespawnSchema = z.object({
405
+ respawnConfig: RespawnConfigSchema.optional(),
406
+ durationMinutes: z.number().int().min(1).max(14400).optional(),
407
+ });
408
+ /** POST /api/sessions/:id/respawn/enable */
409
+ export const RespawnEnableSchema = z.object({
410
+ config: RespawnConfigSchema.optional(),
411
+ durationMinutes: z.number().int().min(1).max(14400).optional(),
412
+ });
413
+ // ========== Web Push ==========
414
+ /** POST /api/push/subscribe */
415
+ export const PushSubscribeSchema = z.object({
416
+ endpoint: z.string().url().max(2000),
417
+ keys: z.object({
418
+ p256dh: z.string().min(1).max(500),
419
+ auth: z.string().min(1).max(500),
420
+ }),
421
+ userAgent: z.string().max(500).optional(),
422
+ pushPreferences: z.record(z.string(), z.boolean()).optional(),
423
+ });
424
+ /** PUT /api/push/subscribe/:id */
425
+ export const PushPreferencesUpdateSchema = z.object({
426
+ pushPreferences: z.record(z.string(), z.boolean()),
427
+ });
428
+ // ========== Ralph Loop ==========
429
+ /** POST /api/ralph-loop/start */
430
+ export const RalphLoopStartSchema = z.object({
431
+ caseName: z
432
+ .string()
433
+ .regex(/^[a-zA-Z0-9_-]+$/, 'Invalid case name format')
434
+ .optional()
435
+ .default('testcase'),
436
+ taskDescription: z.string().min(1).max(100000),
437
+ completionPhrase: z.string().max(100).default('COMPLETE'),
438
+ maxIterations: z.number().int().min(0).max(1000).nullable().default(10),
439
+ enableRespawn: z.boolean().default(false),
440
+ planItems: z
441
+ .array(z.object({
442
+ content: z.string(),
443
+ priority: z.string().optional(),
444
+ enabled: z.boolean().default(true),
445
+ }))
446
+ .optional(),
447
+ });
448
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/web/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * @fileoverview Codeman web server and REST API
3
+ *
4
+ * Provides a Fastify-based web server with:
5
+ * - REST API for session management, respawn control, and monitoring
6
+ * - Server-Sent Events (SSE) for real-time updates at /api/events
7
+ * - Static file serving for the web UI
8
+ * - 60fps terminal streaming with batched updates
9
+ *
10
+ * @module web/server
11
+ */
12
+ import { EventEmitter } from 'node:events';
13
+ export declare class WebServer extends EventEmitter {
14
+ /** Cached CPU count — doesn't change at runtime */
15
+ private static readonly CPU_COUNT;
16
+ private app;
17
+ private sessions;
18
+ private respawnControllers;
19
+ private respawnTimers;
20
+ private runSummaryTrackers;
21
+ private transcriptWatchers;
22
+ private sessionListenerRefs;
23
+ private scheduledRuns;
24
+ private sseClients;
25
+ /** Clients with backpressure — skip writes until 'drain' fires */
26
+ private backpressuredClients;
27
+ private store;
28
+ private port;
29
+ private https;
30
+ private testMode;
31
+ private mux;
32
+ private terminalBatches;
33
+ private terminalBatchSizes;
34
+ private terminalBatchTimers;
35
+ private lastTerminalEventTime;
36
+ private scheduledCleanupTimer;
37
+ private taskUpdateBatches;
38
+ private taskUpdateBatchTimer;
39
+ private stateUpdatePending;
40
+ private stateUpdateTimer;
41
+ private sseHealthCheckTimer;
42
+ private _isStopping;
43
+ private cachedLightState;
44
+ private static readonly LIGHT_STATE_CACHE_TTL_MS;
45
+ private cachedSessionsList;
46
+ private lastRecordedTokens;
47
+ private tokenRecordingTimer;
48
+ private readonly serverStartTime;
49
+ private pendingRespawnStarts;
50
+ private activePlanOrchestrators;
51
+ private persistDebounceTimers;
52
+ private static readonly RESPAWN_RESTORE_GRACE_PERIOD_MS;
53
+ private subagentWatcherHandlers;
54
+ private imageWatcherHandlers;
55
+ private tunnelManager;
56
+ private authSessions;
57
+ private authFailures;
58
+ private pushStore;
59
+ private teamWatcher;
60
+ private teamWatcherHandlers;
61
+ constructor(port?: number, https?: boolean, testMode?: boolean);
62
+ /**
63
+ * Set up event listeners for subagent watcher.
64
+ * Broadcasts real-time subagent activity to SSE clients.
65
+ *
66
+ * The SubagentWatcher now extracts descriptions directly from the parent session's
67
+ * transcript, which contains the exact Task tool call with the description parameter.
68
+ * This is more reliable than the previous timing-based correlation approach.
69
+ */
70
+ private setupSubagentWatcherListeners;
71
+ /**
72
+ * Clean up subagent watcher listeners to prevent memory leaks.
73
+ */
74
+ private cleanupSubagentWatcherListeners;
75
+ /**
76
+ * Set up event listeners for image watcher.
77
+ * Broadcasts image detection events to SSE clients for auto-popup.
78
+ */
79
+ private setupImageWatcherListeners;
80
+ /**
81
+ * Clean up image watcher listeners to prevent memory leaks.
82
+ */
83
+ private cleanupImageWatcherListeners;
84
+ /**
85
+ * Set up event listeners for team watcher.
86
+ * Broadcasts team activity events to SSE clients.
87
+ */
88
+ private setupTeamWatcherListeners;
89
+ /**
90
+ * Clean up team watcher listeners to prevent memory leaks.
91
+ */
92
+ private cleanupTeamWatcherListeners;
93
+ private setupRoutes;
94
+ /**
95
+ * Start a transcript watcher for a session.
96
+ * Creates a new watcher or updates an existing one with the new transcript path.
97
+ */
98
+ private startTranscriptWatcher;
99
+ /**
100
+ * Stop the transcript watcher for a session.
101
+ */
102
+ private stopTranscriptWatcher;
103
+ /** Debounced wrapper — coalesces rapid persistSessionState calls per session */
104
+ private persistSessionState;
105
+ /** Persists full session state including respawn config to state.json */
106
+ private _persistSessionStateNow;
107
+ private saveRespawnConfig;
108
+ private getSystemStats;
109
+ private cleaningUp;
110
+ private cleanupSession;
111
+ private _doCleanupSession;
112
+ private setupSessionListeners;
113
+ private setupRespawnListeners;
114
+ private setupTimedRespawn;
115
+ /**
116
+ * Restore a RespawnController from persisted configuration.
117
+ * Creates the controller, sets up listeners, but does NOT start it.
118
+ *
119
+ * @param session - The session to attach the controller to
120
+ * @param config - The persisted respawn configuration
121
+ * @param source - Source of the config for logging (e.g., 'state.json' or 'mux-sessions.json')
122
+ */
123
+ private restoreRespawnController;
124
+ private getDefaultClaudeMdPath;
125
+ private _settingsCache;
126
+ private readSettings;
127
+ private getGlobalNiceConfig;
128
+ private getClaudeModeConfig;
129
+ private getModelConfig;
130
+ private startScheduledRun;
131
+ private runScheduledLoop;
132
+ private stopScheduledRun;
133
+ /**
134
+ * Get session state with respawn controller info included.
135
+ * Use this for session:updated broadcasts to preserve respawn state on the frontend.
136
+ */
137
+ private getSessionStateWithRespawn;
138
+ /**
139
+ * Get lightweight session state for SSE init - excludes full terminal buffers
140
+ * to prevent browser freezes on SSE reconnect. Full buffers are fetched
141
+ * on-demand when switching tabs via /api/sessions/:id/buffer
142
+ */
143
+ private getLightSessionsState;
144
+ private cleanupScheduledRuns;
145
+ /**
146
+ * Cleans up stale sessions from state file that don't have active sessions.
147
+ * Called on startup and can be called via API endpoint.
148
+ * @returns Number of sessions cleaned up
149
+ */
150
+ private cleanupStaleSessions;
151
+ /**
152
+ * Get lightweight state for SSE init - excludes full terminal buffers
153
+ * to prevent browser freezes. Terminal buffers are fetched on-demand.
154
+ */
155
+ private getLightState;
156
+ private sendSSE;
157
+ private sendSSEPreformatted;
158
+ private broadcast;
159
+ private batchTerminalData;
160
+ /** Flush a single session's batched terminal data */
161
+ private flushSessionTerminalBatch;
162
+ private batchTaskUpdate;
163
+ private flushTaskUpdateBatches;
164
+ /**
165
+ * Debounce expensive session:updated broadcasts.
166
+ * Instead of calling toDetailedState() on every event, batch requests
167
+ * and only serialize once per STATE_UPDATE_DEBOUNCE_INTERVAL.
168
+ */
169
+ private broadcastSessionStateDebounced;
170
+ private flushStateUpdates;
171
+ /** Map SSE event names to push notification payloads */
172
+ private static readonly PUSH_EVENT_MAP;
173
+ /**
174
+ * Send push notifications for a given event to all subscribed devices.
175
+ * Only events in PUSH_EVENT_MAP trigger push. Per-subscription preferences are checked.
176
+ * Expired subscriptions (410/404) are auto-removed.
177
+ */
178
+ private sendPushNotifications;
179
+ /**
180
+ * Clean up dead SSE clients and send keep-alive comments.
181
+ * Keep-alive prevents proxy/load-balancer timeouts on idle connections.
182
+ * Dead client cleanup prevents memory leaks from abruptly terminated connections.
183
+ */
184
+ private cleanupDeadSSEClients;
185
+ /**
186
+ * Records token usage for long-running sessions periodically.
187
+ * Called every 5 minutes to capture usage in daily stats without waiting for session deletion.
188
+ */
189
+ private recordPeriodicTokenUsage;
190
+ start(): Promise<void>;
191
+ /**
192
+ * Check if subagent tracking is enabled in settings (default: true)
193
+ */
194
+ private isSubagentTrackingEnabled;
195
+ /**
196
+ * Check if image watcher is enabled in settings (default: false)
197
+ */
198
+ private isImageWatcherEnabled;
199
+ /**
200
+ * Check if Cloudflare tunnel is enabled in settings (default: false)
201
+ */
202
+ private isTunnelEnabled;
203
+ private restoreMuxSessions;
204
+ stop(): Promise<void>;
205
+ }
206
+ export declare function startWebServer(port?: number, https?: boolean, testMode?: boolean): Promise<WebServer>;
207
+ //# sourceMappingURL=server.d.ts.map