baxian 0.0.1 → 0.2.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 (291) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +19 -1
  3. package/dist/agent/bootstrap-poller.d.ts +34 -0
  4. package/dist/agent/bootstrap-poller.d.ts.map +1 -0
  5. package/dist/agent/bootstrap-poller.js +93 -0
  6. package/dist/agent/bootstrap-poller.js.map +1 -0
  7. package/dist/agent/bootstrap.d.ts +39 -0
  8. package/dist/agent/bootstrap.d.ts.map +1 -0
  9. package/dist/agent/bootstrap.js +214 -0
  10. package/dist/agent/bootstrap.js.map +1 -0
  11. package/dist/agent/index.d.ts +8 -0
  12. package/dist/agent/index.d.ts.map +1 -0
  13. package/dist/agent/index.js +8 -0
  14. package/dist/agent/index.js.map +1 -0
  15. package/dist/agent/manager.d.ts +280 -0
  16. package/dist/agent/manager.d.ts.map +1 -0
  17. package/dist/agent/manager.js +3666 -0
  18. package/dist/agent/manager.js.map +1 -0
  19. package/dist/agent/marker-protocol.d.ts +12 -0
  20. package/dist/agent/marker-protocol.d.ts.map +1 -0
  21. package/dist/agent/marker-protocol.js +52 -0
  22. package/dist/agent/marker-protocol.js.map +1 -0
  23. package/dist/agent/pane-streamer-manager.d.ts +24 -0
  24. package/dist/agent/pane-streamer-manager.d.ts.map +1 -0
  25. package/dist/agent/pane-streamer-manager.js +107 -0
  26. package/dist/agent/pane-streamer-manager.js.map +1 -0
  27. package/dist/agent/pane-streamer.d.ts +97 -0
  28. package/dist/agent/pane-streamer.d.ts.map +1 -0
  29. package/dist/agent/pane-streamer.js +382 -0
  30. package/dist/agent/pane-streamer.js.map +1 -0
  31. package/dist/agent/post-approve-marker-watcher.d.ts +29 -0
  32. package/dist/agent/post-approve-marker-watcher.d.ts.map +1 -0
  33. package/dist/agent/post-approve-marker-watcher.js +160 -0
  34. package/dist/agent/post-approve-marker-watcher.js.map +1 -0
  35. package/dist/agent/preflight.d.ts +9 -0
  36. package/dist/agent/preflight.d.ts.map +1 -0
  37. package/dist/agent/preflight.js +164 -0
  38. package/dist/agent/preflight.js.map +1 -0
  39. package/dist/agent/prompt.d.ts +44 -0
  40. package/dist/agent/prompt.d.ts.map +1 -0
  41. package/dist/agent/prompt.js +252 -0
  42. package/dist/agent/prompt.js.map +1 -0
  43. package/dist/agent/repo-store.d.ts +27 -0
  44. package/dist/agent/repo-store.d.ts.map +1 -0
  45. package/dist/agent/repo-store.js +152 -0
  46. package/dist/agent/repo-store.js.map +1 -0
  47. package/dist/agent/runner.d.ts +46 -0
  48. package/dist/agent/runner.d.ts.map +1 -0
  49. package/dist/agent/runner.js +241 -0
  50. package/dist/agent/runner.js.map +1 -0
  51. package/dist/agent/spec-review-marker-watcher.d.ts +33 -0
  52. package/dist/agent/spec-review-marker-watcher.d.ts.map +1 -0
  53. package/dist/agent/spec-review-marker-watcher.js +180 -0
  54. package/dist/agent/spec-review-marker-watcher.js.map +1 -0
  55. package/dist/agent/tmux-probe-poller.d.ts +78 -0
  56. package/dist/agent/tmux-probe-poller.d.ts.map +1 -0
  57. package/dist/agent/tmux-probe-poller.js +418 -0
  58. package/dist/agent/tmux-probe-poller.js.map +1 -0
  59. package/dist/agent/tmux.d.ts +78 -0
  60. package/dist/agent/tmux.d.ts.map +1 -0
  61. package/dist/agent/tmux.js +395 -0
  62. package/dist/agent/tmux.js.map +1 -0
  63. package/dist/agent/worktree.d.ts +10 -0
  64. package/dist/agent/worktree.d.ts.map +1 -0
  65. package/dist/agent/worktree.js +41 -0
  66. package/dist/agent/worktree.js.map +1 -0
  67. package/dist/api/agents.d.ts +3 -0
  68. package/dist/api/agents.d.ts.map +1 -0
  69. package/dist/api/agents.js +29 -0
  70. package/dist/api/agents.js.map +1 -0
  71. package/dist/api/config.d.ts +5 -0
  72. package/dist/api/config.d.ts.map +1 -0
  73. package/dist/api/config.js +114 -0
  74. package/dist/api/config.js.map +1 -0
  75. package/dist/api/events.d.ts +3 -0
  76. package/dist/api/events.d.ts.map +1 -0
  77. package/dist/api/events.js +11 -0
  78. package/dist/api/events.js.map +1 -0
  79. package/dist/api/pollers.d.ts +3 -0
  80. package/dist/api/pollers.d.ts.map +1 -0
  81. package/dist/api/pollers.js +4 -0
  82. package/dist/api/pollers.js.map +1 -0
  83. package/dist/api/probe.d.ts +9 -0
  84. package/dist/api/probe.d.ts.map +1 -0
  85. package/dist/api/probe.js +87 -0
  86. package/dist/api/probe.js.map +1 -0
  87. package/dist/api/projects.d.ts +3 -0
  88. package/dist/api/projects.d.ts.map +1 -0
  89. package/dist/api/projects.js +602 -0
  90. package/dist/api/projects.js.map +1 -0
  91. package/dist/api/restart.d.ts +3 -0
  92. package/dist/api/restart.d.ts.map +1 -0
  93. package/dist/api/restart.js +20 -0
  94. package/dist/api/restart.js.map +1 -0
  95. package/dist/api/tasks.d.ts +3 -0
  96. package/dist/api/tasks.d.ts.map +1 -0
  97. package/dist/api/tasks.js +136 -0
  98. package/dist/api/tasks.js.map +1 -0
  99. package/dist/app.d.ts +51 -0
  100. package/dist/app.d.ts.map +1 -0
  101. package/dist/app.js +169 -0
  102. package/dist/app.js.map +1 -0
  103. package/dist/cli.d.ts +20 -0
  104. package/dist/cli.d.ts.map +1 -0
  105. package/dist/cli.js +319 -0
  106. package/dist/cli.js.map +1 -0
  107. package/dist/config/backup.d.ts +3 -0
  108. package/dist/config/backup.d.ts.map +1 -0
  109. package/dist/config/backup.js +44 -0
  110. package/dist/config/backup.js.map +1 -0
  111. package/dist/config/index.d.ts +5 -0
  112. package/dist/config/index.d.ts.map +1 -0
  113. package/dist/config/index.js +5 -0
  114. package/dist/config/index.js.map +1 -0
  115. package/dist/config/loader.d.ts +42 -0
  116. package/dist/config/loader.d.ts.map +1 -0
  117. package/dist/config/loader.js +197 -0
  118. package/dist/config/loader.js.map +1 -0
  119. package/dist/config/mutex.d.ts +2 -0
  120. package/dist/config/mutex.d.ts.map +1 -0
  121. package/dist/config/mutex.js +7 -0
  122. package/dist/config/mutex.js.map +1 -0
  123. package/dist/config/normalizer.d.ts +2 -0
  124. package/dist/config/normalizer.d.ts.map +1 -0
  125. package/dist/config/normalizer.js +42 -0
  126. package/dist/config/normalizer.js.map +1 -0
  127. package/dist/config/validator.d.ts +7 -0
  128. package/dist/config/validator.d.ts.map +1 -0
  129. package/dist/config/validator.js +278 -0
  130. package/dist/config/validator.js.map +1 -0
  131. package/dist/errors.d.ts +5 -0
  132. package/dist/errors.d.ts.map +1 -0
  133. package/dist/errors.js +9 -0
  134. package/dist/errors.js.map +1 -0
  135. package/dist/event/broker.d.ts +11 -0
  136. package/dist/event/broker.d.ts.map +1 -0
  137. package/dist/event/broker.js +47 -0
  138. package/dist/event/broker.js.map +1 -0
  139. package/dist/event/bus.d.ts +12 -0
  140. package/dist/event/bus.d.ts.map +1 -0
  141. package/dist/event/bus.js +35 -0
  142. package/dist/event/bus.js.map +1 -0
  143. package/dist/event/handlers.d.ts +6 -0
  144. package/dist/event/handlers.d.ts.map +1 -0
  145. package/dist/event/handlers.js +1121 -0
  146. package/dist/event/handlers.js.map +1 -0
  147. package/dist/event/index.d.ts +4 -0
  148. package/dist/event/index.d.ts.map +1 -0
  149. package/dist/event/index.js +4 -0
  150. package/dist/event/index.js.map +1 -0
  151. package/dist/event/log.d.ts +9 -0
  152. package/dist/event/log.d.ts.map +1 -0
  153. package/dist/event/log.js +43 -0
  154. package/dist/event/log.js.map +1 -0
  155. package/dist/event/publish.d.ts +37 -0
  156. package/dist/event/publish.d.ts.map +1 -0
  157. package/dist/event/publish.js +197 -0
  158. package/dist/event/publish.js.map +1 -0
  159. package/dist/event/ws.d.ts +3 -0
  160. package/dist/event/ws.d.ts.map +1 -0
  161. package/dist/event/ws.js +169 -0
  162. package/dist/event/ws.js.map +1 -0
  163. package/dist/github/index.d.ts +4 -0
  164. package/dist/github/index.d.ts.map +1 -0
  165. package/dist/github/index.js +3 -0
  166. package/dist/github/index.js.map +1 -0
  167. package/dist/github/mapper.d.ts +51 -0
  168. package/dist/github/mapper.d.ts.map +1 -0
  169. package/dist/github/mapper.js +191 -0
  170. package/dist/github/mapper.js.map +1 -0
  171. package/dist/github/poller.d.ts +64 -0
  172. package/dist/github/poller.d.ts.map +1 -0
  173. package/dist/github/poller.js +513 -0
  174. package/dist/github/poller.js.map +1 -0
  175. package/dist/github/resolver.d.ts +8 -0
  176. package/dist/github/resolver.d.ts.map +1 -0
  177. package/dist/github/resolver.js +24 -0
  178. package/dist/github/resolver.js.map +1 -0
  179. package/dist/index.d.ts +11 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +310 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lifecycle/restart-sentinel.d.ts +18 -0
  184. package/dist/lifecycle/restart-sentinel.d.ts.map +1 -0
  185. package/dist/lifecycle/restart-sentinel.js +61 -0
  186. package/dist/lifecycle/restart-sentinel.js.map +1 -0
  187. package/dist/lifecycle/restart.d.ts +21 -0
  188. package/dist/lifecycle/restart.d.ts.map +1 -0
  189. package/dist/lifecycle/restart.js +57 -0
  190. package/dist/lifecycle/restart.js.map +1 -0
  191. package/dist/shared/constants.d.ts +18 -0
  192. package/dist/shared/constants.d.ts.map +1 -0
  193. package/dist/shared/constants.js +60 -0
  194. package/dist/shared/constants.js.map +1 -0
  195. package/dist/shared/index.d.ts +3 -0
  196. package/dist/shared/index.d.ts.map +1 -0
  197. package/dist/shared/index.js +3 -0
  198. package/dist/shared/index.js.map +1 -0
  199. package/dist/shared/types.d.ts +263 -0
  200. package/dist/shared/types.d.ts.map +1 -0
  201. package/dist/shared/types.js +2 -0
  202. package/dist/shared/types.js.map +1 -0
  203. package/dist/skill/index.d.ts +2 -0
  204. package/dist/skill/index.d.ts.map +1 -0
  205. package/dist/skill/index.js +2 -0
  206. package/dist/skill/index.js.map +1 -0
  207. package/dist/skill/registry.d.ts +30 -0
  208. package/dist/skill/registry.d.ts.map +1 -0
  209. package/dist/skill/registry.js +174 -0
  210. package/dist/skill/registry.js.map +1 -0
  211. package/dist/skills/UPSTREAM.md +38 -0
  212. package/dist/skills/baxian-rules/SKILL.md +68 -0
  213. package/dist/skills/merge-sync/SKILL.md +42 -0
  214. package/dist/skills/pr-feedback/SKILL.md +117 -0
  215. package/dist/skills/pr-recheck/SKILL.md +52 -0
  216. package/dist/skills/pr-review/SKILL.md +60 -0
  217. package/dist/skills/spells/SKILL.md +41 -0
  218. package/dist/skills/task-check/SKILL.md +26 -0
  219. package/dist/state/agent-store.d.ts +21 -0
  220. package/dist/state/agent-store.d.ts.map +1 -0
  221. package/dist/state/agent-store.js +145 -0
  222. package/dist/state/agent-store.js.map +1 -0
  223. package/dist/state/error-record-store.d.ts +40 -0
  224. package/dist/state/error-record-store.d.ts.map +1 -0
  225. package/dist/state/error-record-store.js +203 -0
  226. package/dist/state/error-record-store.js.map +1 -0
  227. package/dist/state/index.d.ts +5 -0
  228. package/dist/state/index.d.ts.map +1 -0
  229. package/dist/state/index.js +5 -0
  230. package/dist/state/index.js.map +1 -0
  231. package/dist/state/init.d.ts +2 -0
  232. package/dist/state/init.d.ts.map +1 -0
  233. package/dist/state/init.js +13 -0
  234. package/dist/state/init.js.map +1 -0
  235. package/dist/state/lock.d.ts +9 -0
  236. package/dist/state/lock.d.ts.map +1 -0
  237. package/dist/state/lock.js +36 -0
  238. package/dist/state/lock.js.map +1 -0
  239. package/dist/state/post-approve-store.d.ts +23 -0
  240. package/dist/state/post-approve-store.d.ts.map +1 -0
  241. package/dist/state/post-approve-store.js +79 -0
  242. package/dist/state/post-approve-store.js.map +1 -0
  243. package/dist/state/process-lock.d.ts +24 -0
  244. package/dist/state/process-lock.d.ts.map +1 -0
  245. package/dist/state/process-lock.js +175 -0
  246. package/dist/state/process-lock.js.map +1 -0
  247. package/dist/state/snapshot.d.ts +38 -0
  248. package/dist/state/snapshot.d.ts.map +1 -0
  249. package/dist/state/snapshot.js +134 -0
  250. package/dist/state/snapshot.js.map +1 -0
  251. package/dist/state/task-store.d.ts +25 -0
  252. package/dist/state/task-store.d.ts.map +1 -0
  253. package/dist/state/task-store.js +167 -0
  254. package/dist/state/task-store.js.map +1 -0
  255. package/dist/terminal/attach.d.ts +7 -0
  256. package/dist/terminal/attach.d.ts.map +1 -0
  257. package/dist/terminal/attach.js +26 -0
  258. package/dist/terminal/attach.js.map +1 -0
  259. package/dist/terminal/index.d.ts +3 -0
  260. package/dist/terminal/index.d.ts.map +1 -0
  261. package/dist/terminal/index.js +3 -0
  262. package/dist/terminal/index.js.map +1 -0
  263. package/dist/terminal/key-sanitizer.d.ts +2 -0
  264. package/dist/terminal/key-sanitizer.d.ts.map +1 -0
  265. package/dist/terminal/key-sanitizer.js +9 -0
  266. package/dist/terminal/key-sanitizer.js.map +1 -0
  267. package/dist/terminal/stream-ws.d.ts +3 -0
  268. package/dist/terminal/stream-ws.d.ts.map +1 -0
  269. package/dist/terminal/stream-ws.js +426 -0
  270. package/dist/terminal/stream-ws.js.map +1 -0
  271. package/dist/terminal/ws-auth.d.ts +5 -0
  272. package/dist/terminal/ws-auth.d.ts.map +1 -0
  273. package/dist/terminal/ws-auth.js +45 -0
  274. package/dist/terminal/ws-auth.js.map +1 -0
  275. package/dist/timing/debounced-task.d.ts +9 -0
  276. package/dist/timing/debounced-task.d.ts.map +1 -0
  277. package/dist/timing/debounced-task.js +23 -0
  278. package/dist/timing/debounced-task.js.map +1 -0
  279. package/dist/timing/periodic-task-runner.d.ts +21 -0
  280. package/dist/timing/periodic-task-runner.d.ts.map +1 -0
  281. package/dist/timing/periodic-task-runner.js +61 -0
  282. package/dist/timing/periodic-task-runner.js.map +1 -0
  283. package/dist/web/assets/index-53CBbz4w.js +4 -0
  284. package/dist/web/assets/index-B9D6BV08.css +1 -0
  285. package/dist/web/assets/react-BG4Iuztk.js +40 -0
  286. package/dist/web/assets/router-B_Nv0oRz.js +12 -0
  287. package/dist/web/assets/xterm-CFbL2ovg.css +32 -0
  288. package/dist/web/assets/xterm-D5X2JljJ.js +9 -0
  289. package/dist/web/index.html +17 -0
  290. package/package.json +44 -5
  291. package/index.js +0 -1
package/dist/cli.js ADDED
@@ -0,0 +1,319 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+ import { readFileSync, realpathSync } from 'node:fs';
4
+ import { readFile } from 'node:fs/promises';
5
+ import { dirname, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { Command } from 'commander';
8
+ import { startServer } from './index.js';
9
+ import { shellQuote, wrapRemoteCommand } from './agent/runner.js';
10
+ export function readTtyDimensions(stdout) {
11
+ const cols = stdout.columns;
12
+ const rows = stdout.rows;
13
+ if (typeof cols !== 'number' || typeof rows !== 'number' || cols <= 0 || rows <= 0) {
14
+ return null;
15
+ }
16
+ return { cols, rows };
17
+ }
18
+ export function buildLocalAttachCommands(agentId, _dims) {
19
+ return [
20
+ {
21
+ kind: 'configure',
22
+ file: 'tmux',
23
+ args: ['set-option', '-t', `=${agentId}:`, 'window-size', 'latest'],
24
+ },
25
+ { kind: 'attach', file: 'tmux', args: ['-u', 'attach-session', '-t', `=${agentId}`] },
26
+ ];
27
+ }
28
+ export function buildRemoteAttachSshArgs(target, agentId, _dims) {
29
+ const quotedId = shellQuote(`=${agentId}`);
30
+ const quotedWindow = shellQuote(`=${agentId}:`);
31
+ const autoSizePrefix = `tmux set-option -t ${quotedWindow} window-size latest 2>/dev/null || true; `;
32
+ return [
33
+ '-o', 'BatchMode=yes',
34
+ '-o', 'ConnectTimeout=10',
35
+ '-t',
36
+ '--',
37
+ target,
38
+ wrapRemoteCommand(`${autoSizePrefix}tmux -u attach-session -t ${quotedId}`, 'login-interactive'),
39
+ ];
40
+ }
41
+ function resolveApiBase(opts) {
42
+ if (opts.apiUrl)
43
+ return opts.apiUrl.replace(/\/$/, '') + '/api';
44
+ if (process.env.BAXIAN_API_URL)
45
+ return process.env.BAXIAN_API_URL.replace(/\/$/, '') + '/api';
46
+ const port = process.env.BAXIAN_PORT ?? '3000';
47
+ return `http://127.0.0.1:${port}/api`;
48
+ }
49
+ function authHeaders(opts) {
50
+ const token = opts.token ?? process.env.BAXIAN_TOKEN;
51
+ return token ? { Authorization: `Bearer ${token}` } : {};
52
+ }
53
+ async function readResponse(res, method, path) {
54
+ if (!res.ok) {
55
+ const text = await res.text();
56
+ throw new Error(`${method} ${path} failed (${res.status}): ${text || res.statusText}`);
57
+ }
58
+ const text = await res.text();
59
+ if (!text)
60
+ return null;
61
+ try {
62
+ return JSON.parse(text);
63
+ }
64
+ catch {
65
+ throw new Error(`${method} ${path} returned non-JSON: ${text.slice(0, 200)}`);
66
+ }
67
+ }
68
+ async function apiGet(path, opts = {}) {
69
+ const res = await fetch(`${resolveApiBase(opts)}${path}`, {
70
+ headers: authHeaders(opts),
71
+ });
72
+ return readResponse(res, 'GET', path);
73
+ }
74
+ async function apiPost(path, body, opts = {}) {
75
+ const res = await fetch(`${resolveApiBase(opts)}${path}`, {
76
+ method: 'POST',
77
+ headers: { 'Content-Type': 'application/json', ...authHeaders(opts) },
78
+ body: body ? JSON.stringify(body) : undefined,
79
+ });
80
+ return readResponse(res, 'POST', path);
81
+ }
82
+ async function apiPatch(path, body, opts = {}) {
83
+ const res = await fetch(`${resolveApiBase(opts)}${path}`, {
84
+ method: 'PATCH',
85
+ headers: { 'Content-Type': 'application/json', ...authHeaders(opts) },
86
+ body: body ? JSON.stringify(body) : undefined,
87
+ });
88
+ return readResponse(res, 'PATCH', path);
89
+ }
90
+ async function apiDelete(path, opts = {}) {
91
+ const res = await fetch(`${resolveApiBase(opts)}${path}`, {
92
+ method: 'DELETE',
93
+ headers: authHeaders(opts),
94
+ });
95
+ if (res.status === 204)
96
+ return null;
97
+ return readResponse(res, 'DELETE', path);
98
+ }
99
+ async function readStdin() {
100
+ const chunks = [];
101
+ for await (const chunk of process.stdin) {
102
+ chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
103
+ }
104
+ return Buffer.concat(chunks).toString('utf-8');
105
+ }
106
+ function fail(message) {
107
+ console.error(`Error: ${message}`);
108
+ process.exit(1);
109
+ }
110
+ async function withErrors(action) {
111
+ try {
112
+ await action();
113
+ }
114
+ catch (err) {
115
+ fail(err instanceof Error ? err.message : String(err));
116
+ }
117
+ }
118
+ // `--version` must always respond, hence the 'unknown' fallback rather than a throw.
119
+ export function readPackageVersion() {
120
+ try {
121
+ const pkgPath = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
122
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
123
+ return typeof pkg.version === 'string' ? pkg.version : 'unknown';
124
+ }
125
+ catch {
126
+ return 'unknown';
127
+ }
128
+ }
129
+ export function buildCli() {
130
+ const program = new Command();
131
+ program
132
+ .name('baxian')
133
+ .description('AI agent orchestration')
134
+ .version(readPackageVersion())
135
+ .option('--api-url <url>', 'Override server URL (default http://127.0.0.1:3000 or BAXIAN_API_URL)')
136
+ .option('--token <token>', 'Bearer token (default BAXIAN_TOKEN)');
137
+ const ctxOf = (cmdOpts) => ({
138
+ apiUrl: cmdOpts.apiUrl ?? program.opts().apiUrl,
139
+ token: cmdOpts.token ?? program.opts().token,
140
+ });
141
+ // `start` is the default command — `baxian` (with optional -c) launches the server
142
+ // without requiring users to type `baxian start` explicitly.
143
+ program
144
+ .command('start', { isDefault: true })
145
+ .description('Start the baxian server (default command)')
146
+ .option('-c, --config <path>', 'Path to config file')
147
+ .action(async (opts) => {
148
+ await startServer(opts.config);
149
+ });
150
+ program
151
+ .command('status')
152
+ .description('Show status of all agents')
153
+ .action(async (opts) => {
154
+ const agents = await apiGet('/agents', ctxOf(opts));
155
+ if (!Array.isArray(agents) || agents.length === 0) {
156
+ console.log('No agents running.');
157
+ return;
158
+ }
159
+ console.log('ID\t\tRUNTIME\t\tTMUX\t\tPROJECT');
160
+ console.log('---\t\t-------\t\t----\t\t-------');
161
+ for (const agent of agents) {
162
+ console.log(`${agent.id}\t\t${agent.runtimeStatus}\t\t${agent.tmuxSessionStatus}\t\t${agent.projectId ?? '-'}`);
163
+ }
164
+ });
165
+ program
166
+ .command('attach <agent-id>')
167
+ .description('Attach to agent tmux session (local or remote)')
168
+ .action(async (agentId, opts) => {
169
+ const ctx = ctxOf(opts);
170
+ let agent;
171
+ try {
172
+ const cfgRes = await apiGet('/config', ctx);
173
+ for (const proj of cfgRes?.project ?? []) {
174
+ for (const pair of proj.agent ?? []) {
175
+ for (const a of pair) {
176
+ if (a.id === agentId)
177
+ agent = a;
178
+ }
179
+ }
180
+ }
181
+ }
182
+ catch (err) {
183
+ console.warn(`[baxian] couldn't fetch agent config (${err instanceof Error ? err.message : err}); attaching as local`);
184
+ }
185
+ const dims = readTtyDimensions(process.stdout);
186
+ if (agent && agent.mode === 'remote' && agent.host) {
187
+ const target = agent.host.user ? `${agent.host.user}@${agent.host.hostname}` : agent.host.hostname;
188
+ const sshArgs = buildRemoteAttachSshArgs(target, agentId, dims);
189
+ const result = spawnSync('ssh', sshArgs, { stdio: 'inherit' });
190
+ process.exit(result.status ?? 0);
191
+ }
192
+ for (const cmd of buildLocalAttachCommands(agentId, dims)) {
193
+ const stdio = cmd.kind === 'attach' ? 'inherit' : 'ignore';
194
+ const result = spawnSync(cmd.file, cmd.args, { stdio });
195
+ if (cmd.kind === 'attach')
196
+ process.exit(result.status ?? 0);
197
+ }
198
+ });
199
+ program
200
+ .command('stop <agent-id>')
201
+ .description('Stop an agent')
202
+ .action(async (agentId, opts) => {
203
+ await apiDelete(`/agents/${encodeURIComponent(agentId)}/session`, ctxOf(opts));
204
+ console.log(`Agent ${agentId} stopped.`);
205
+ });
206
+ const taskCommand = program.command('task').description('Task management');
207
+ taskCommand
208
+ .command('create')
209
+ .description('Create a new baxian task')
210
+ .option('-p, --project <id>', 'Project ID')
211
+ .option('-t, --title <title>', 'Task title')
212
+ .option('-d, --description <text>', 'Task description (or use --description-file)')
213
+ .option('-f, --description-file <path>', 'Read description from file (- for stdin)')
214
+ .option('-a, --agent <devId>', 'Preferred dev agent ID')
215
+ .action(async (opts) => withErrors(async () => {
216
+ if (opts.description !== undefined && opts.descriptionFile !== undefined) {
217
+ fail('--description and --description-file are mutually exclusive');
218
+ }
219
+ if (!opts.project)
220
+ fail('--project is required');
221
+ if (!opts.title)
222
+ fail('--title is required');
223
+ if (!opts.agent)
224
+ fail('--agent is required');
225
+ let description = opts.description;
226
+ if (opts.descriptionFile !== undefined) {
227
+ if (opts.descriptionFile === '-') {
228
+ description = await readStdin();
229
+ }
230
+ else {
231
+ description = await readFile(opts.descriptionFile, 'utf-8');
232
+ }
233
+ }
234
+ if (description === undefined || description === '') {
235
+ fail('--description or --description-file is required');
236
+ }
237
+ const result = await apiPost('/tasks', {
238
+ projectId: opts.project,
239
+ title: opts.title,
240
+ description,
241
+ preferredAgentId: opts.agent,
242
+ }, ctxOf(opts));
243
+ console.log(`Created task ${result.id} (status: ${result.status})`);
244
+ }));
245
+ taskCommand
246
+ .command('list')
247
+ .description('List baxian tasks')
248
+ .option('-p, --project <id>', 'Filter by project ID')
249
+ .option('-s, --status <status>', 'Filter by status')
250
+ .action(async (opts) => withErrors(async () => {
251
+ const qs = [];
252
+ if (opts.project)
253
+ qs.push(`projectId=${encodeURIComponent(opts.project)}`);
254
+ if (opts.status)
255
+ qs.push(`status=${encodeURIComponent(opts.status)}`);
256
+ const url = `/tasks${qs.length > 0 ? '?' + qs.join('&') : ''}`;
257
+ const tasks = await apiGet(url, ctxOf(opts));
258
+ if (!Array.isArray(tasks) || tasks.length === 0) {
259
+ console.log('No tasks.');
260
+ return;
261
+ }
262
+ console.log('ID\tSTATUS\t\tAGENT\t\tTITLE');
263
+ console.log('---\t------\t\t-----\t\t-----');
264
+ for (const t of tasks) {
265
+ const agent = t.agentId && t.agentId.length > 0 ? t.agentId : t.preferredAgentId ?? '-';
266
+ console.log(`${t.id}\t${t.status}\t${agent}\t${t.title}`);
267
+ }
268
+ }));
269
+ taskCommand
270
+ .command('cancel <taskId>')
271
+ .description('Cancel a baxian task')
272
+ .action(async (taskId, opts) => withErrors(async () => {
273
+ const result = await apiPatch(`/tasks/${encodeURIComponent(taskId)}`, { status: 'cancelled' }, ctxOf(opts));
274
+ console.log(`Cancelled task ${result.id} (status: ${result.status})`);
275
+ }));
276
+ program
277
+ .command('check <project>')
278
+ .description('Run preflight checks for all agents in a project')
279
+ .action(async (project, opts) => {
280
+ const result = await apiPost(`/projects/${encodeURIComponent(project)}/checks`, undefined, ctxOf(opts));
281
+ if (!result || result.error) {
282
+ console.error('Check failed:', result?.error ?? 'unknown error');
283
+ process.exit(1);
284
+ }
285
+ for (const agentResult of result.agents ?? []) {
286
+ console.log(`\n[${agentResult.agentId}] (${agentResult.mode})`);
287
+ for (const r of agentResult.results) {
288
+ const mark = r.ok ? 'PASS' : 'FAIL';
289
+ console.log(` ${mark} ${r.step}: ${r.message}`);
290
+ }
291
+ }
292
+ });
293
+ return program;
294
+ }
295
+ // npm bin shims are symlinks → realpath both sides before comparing.
296
+ const isMainModule = (() => {
297
+ try {
298
+ const argv1 = process.argv[1];
299
+ if (!argv1)
300
+ return false;
301
+ const realArgv = realpathSync(argv1);
302
+ const thisFile = fileURLToPath(import.meta.url);
303
+ return realArgv === thisFile;
304
+ }
305
+ catch {
306
+ return false;
307
+ }
308
+ })();
309
+ if (isMainModule) {
310
+ buildCli().parseAsync().catch((err) => {
311
+ const e = err;
312
+ if (e && (e.name === 'ConfigValidationError' || e.name === 'ConfigNotFoundError')) {
313
+ console.error(e.message);
314
+ process.exit(1);
315
+ }
316
+ throw err;
317
+ });
318
+ }
319
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function backupConfig(configPath: string): Promise<string | null>;
2
+ export declare function cleanupOldBackups(configPath: string): Promise<void>;
3
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/config/backup.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB7E;AAID,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzE"}
@@ -0,0 +1,44 @@
1
+ import { readdir, copyFile, unlink, stat } from 'node:fs/promises';
2
+ import { dirname, basename, join } from 'node:path';
3
+ import { MAX_CONFIG_BACKUPS } from '../shared/index.js';
4
+ export async function backupConfig(configPath) {
5
+ try {
6
+ await stat(configPath);
7
+ }
8
+ catch {
9
+ return null;
10
+ }
11
+ const now = new Date();
12
+ const timestamp = [
13
+ String(now.getFullYear()),
14
+ String(now.getMonth() + 1).padStart(2, '0'),
15
+ String(now.getDate()).padStart(2, '0'),
16
+ '-',
17
+ String(now.getHours()).padStart(2, '0'),
18
+ String(now.getMinutes()).padStart(2, '0'),
19
+ String(now.getSeconds()).padStart(2, '0'),
20
+ ].join('');
21
+ const backupPath = `${configPath}.${timestamp}`;
22
+ await copyFile(configPath, backupPath);
23
+ await cleanupOldBackups(configPath);
24
+ return backupPath;
25
+ }
26
+ const BACKUP_PATTERN = /\.\d{8}-\d{6}$/;
27
+ export async function cleanupOldBackups(configPath) {
28
+ const dir = dirname(configPath);
29
+ const base = basename(configPath);
30
+ const files = await readdir(dir);
31
+ const backups = files
32
+ .filter(f => f.startsWith(`${base}.`) && BACKUP_PATTERN.test(f))
33
+ .sort()
34
+ .reverse();
35
+ for (const old of backups.slice(MAX_CONFIG_BACKUPS)) {
36
+ try {
37
+ await unlink(join(dir, old));
38
+ }
39
+ catch (err) {
40
+ console.warn(`[backup] failed to remove old backup ${old}:`, err);
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/config/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG;QAChB,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACtC,GAAG;QACH,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;KAC1C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEX,MAAM,UAAU,GAAG,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC;IAChD,MAAM,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEpC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/D,IAAI,EAAE;SACN,OAAO,EAAE,CAAC;IAEb,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { loadConfig, saveConfig, ConfigValidationError, resolveConfigPath, resolveStateDir, userConfigPath, userStateDir, createDefaultConfig, } from './loader.js';
2
+ export { validateConfig, type ValidationError } from './validator.js';
3
+ export { normalizeConfig } from './normalizer.js';
4
+ export { backupConfig, cleanupOldBackups } from './backup.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { loadConfig, saveConfig, ConfigValidationError, resolveConfigPath, resolveStateDir, userConfigPath, userStateDir, createDefaultConfig, } from './loader.js';
2
+ export { validateConfig } from './validator.js';
3
+ export { normalizeConfig } from './normalizer.js';
4
+ export { backupConfig, cleanupOldBackups } from './backup.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAwB,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { BaxianConfig } from '../shared/index.js';
2
+ import { type ValidationError } from './validator.js';
3
+ export declare class ConfigValidationError extends Error {
4
+ readonly errors: ValidationError[];
5
+ constructor(errors: ValidationError[]);
6
+ }
7
+ export declare function prepareConfig(raw: unknown): BaxianConfig;
8
+ export declare function loadConfig(configPath: string): Promise<BaxianConfig>;
9
+ export declare function userConfigPath(): string;
10
+ export declare function userStateDir(): string;
11
+ /**
12
+ * Resolve config file path with fallback chain:
13
+ * 1. explicit (from -c flag) — returned as-is, no fs check; loadConfig surfaces ENOENT
14
+ * if user pointed at a non-existent path on purpose.
15
+ * 2. $CWD/baxian.json — if present.
16
+ * 3. ~/.baxian/config.json — if present.
17
+ * Returns null when no auto-discoverable config exists; caller decides whether to
18
+ * auto-create one (the `baxian` zero-config path) or error out.
19
+ */
20
+ export declare function resolveConfigPath(explicit?: string): Promise<string | null>;
21
+ /**
22
+ * State dir is sibling of cwd/baxian.json (preserves existing layout); for the
23
+ * user-level config we land state in ~/.baxian/ directly so cwd-mode `./.baxian/`
24
+ * subdirs (state/, locks/, events/) and user-mode `~/.baxian/{state,locks,events}/`
25
+ * stay symmetric.
26
+ *
27
+ * Use dirname match (not configPath ===) so any config file that lives directly
28
+ * in ~/.baxian/ — including aliases/symlinks like ~/.baxian/cfg-alias.json —
29
+ * lands the same shared state dir instead of nesting into ~/.baxian/.baxian/.
30
+ * Configs deeper than ~/.baxian/ (e.g. ~/.baxian/sub/cfg.json) intentionally
31
+ * fall through to the sibling .baxian/ rule, since the user moved them out.
32
+ */
33
+ export declare function resolveStateDir(configPath: string): string;
34
+ /**
35
+ * Write a minimal `project: []` config at the given path (creating parent dirs).
36
+ * Validator must accept empty project lists or this file will fail loadConfig.
37
+ * Used by `baxian` zero-config first-run: user adds projects/agents via the web UI,
38
+ * which writes them back through saveConfig.
39
+ */
40
+ export declare function createDefaultConfig(path: string): Promise<void>;
41
+ export declare function saveConfig(configPath: string, config: BaxianConfig): Promise<void>;
42
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAA+B,MAAM,oBAAoB,CAAC;AAUpF,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtE,qBAAa,qBAAsB,SAAQ,KAAK;aAClB,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;CAKtD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CA4CxD;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAG1E;AAeD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG1D;AAQD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxF"}