orka-cli 1.0.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 (288) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/CONTRIBUTING.md +59 -0
  3. package/README.md +208 -0
  4. package/dist/agents/base-agent.d.ts +48 -0
  5. package/dist/agents/base-agent.d.ts.map +1 -0
  6. package/dist/agents/base-agent.js +59 -0
  7. package/dist/agents/base-agent.js.map +1 -0
  8. package/dist/agents/builder.d.ts +53 -0
  9. package/dist/agents/builder.d.ts.map +1 -0
  10. package/dist/agents/builder.js +147 -0
  11. package/dist/agents/builder.js.map +1 -0
  12. package/dist/agents/coordinator.d.ts +45 -0
  13. package/dist/agents/coordinator.d.ts.map +1 -0
  14. package/dist/agents/coordinator.js +201 -0
  15. package/dist/agents/coordinator.js.map +1 -0
  16. package/dist/agents/index.d.ts +8 -0
  17. package/dist/agents/index.d.ts.map +1 -0
  18. package/dist/agents/index.js +7 -0
  19. package/dist/agents/index.js.map +1 -0
  20. package/dist/agents/reviewer.d.ts +39 -0
  21. package/dist/agents/reviewer.d.ts.map +1 -0
  22. package/dist/agents/reviewer.js +119 -0
  23. package/dist/agents/reviewer.js.map +1 -0
  24. package/dist/agents/scout.d.ts +35 -0
  25. package/dist/agents/scout.d.ts.map +1 -0
  26. package/dist/agents/scout.js +76 -0
  27. package/dist/agents/scout.js.map +1 -0
  28. package/dist/agents/tester.d.ts +25 -0
  29. package/dist/agents/tester.d.ts.map +1 -0
  30. package/dist/agents/tester.js +76 -0
  31. package/dist/agents/tester.js.map +1 -0
  32. package/dist/cli/board.d.ts +28 -0
  33. package/dist/cli/board.d.ts.map +1 -0
  34. package/dist/cli/board.js +178 -0
  35. package/dist/cli/board.js.map +1 -0
  36. package/dist/cli/cost.d.ts +31 -0
  37. package/dist/cli/cost.d.ts.map +1 -0
  38. package/dist/cli/cost.js +85 -0
  39. package/dist/cli/cost.js.map +1 -0
  40. package/dist/cli/credentials.d.ts +23 -0
  41. package/dist/cli/credentials.d.ts.map +1 -0
  42. package/dist/cli/credentials.js +77 -0
  43. package/dist/cli/credentials.js.map +1 -0
  44. package/dist/cli/dry-run.d.ts +3 -0
  45. package/dist/cli/dry-run.d.ts.map +1 -0
  46. package/dist/cli/dry-run.js +21 -0
  47. package/dist/cli/dry-run.js.map +1 -0
  48. package/dist/cli/extras.d.ts +21 -0
  49. package/dist/cli/extras.d.ts.map +1 -0
  50. package/dist/cli/extras.js +39 -0
  51. package/dist/cli/extras.js.map +1 -0
  52. package/dist/cli/fix.d.ts +11 -0
  53. package/dist/cli/fix.d.ts.map +1 -0
  54. package/dist/cli/fix.js +72 -0
  55. package/dist/cli/fix.js.map +1 -0
  56. package/dist/cli/git-session.d.ts +21 -0
  57. package/dist/cli/git-session.d.ts.map +1 -0
  58. package/dist/cli/git-session.js +62 -0
  59. package/dist/cli/git-session.js.map +1 -0
  60. package/dist/cli/index.d.ts +4 -0
  61. package/dist/cli/index.d.ts.map +1 -0
  62. package/dist/cli/index.js +546 -0
  63. package/dist/cli/index.js.map +1 -0
  64. package/dist/cli/init.d.ts +16 -0
  65. package/dist/cli/init.d.ts.map +1 -0
  66. package/dist/cli/init.js +75 -0
  67. package/dist/cli/init.js.map +1 -0
  68. package/dist/cli/login.d.ts +9 -0
  69. package/dist/cli/login.d.ts.map +1 -0
  70. package/dist/cli/login.js +114 -0
  71. package/dist/cli/login.js.map +1 -0
  72. package/dist/cli/logs.d.ts +16 -0
  73. package/dist/cli/logs.d.ts.map +1 -0
  74. package/dist/cli/logs.js +37 -0
  75. package/dist/cli/logs.js.map +1 -0
  76. package/dist/cli/memory-learner.d.ts +7 -0
  77. package/dist/cli/memory-learner.d.ts.map +1 -0
  78. package/dist/cli/memory-learner.js +36 -0
  79. package/dist/cli/memory-learner.js.map +1 -0
  80. package/dist/cli/memory.d.ts +13 -0
  81. package/dist/cli/memory.d.ts.map +1 -0
  82. package/dist/cli/memory.js +52 -0
  83. package/dist/cli/memory.js.map +1 -0
  84. package/dist/cli/plugin.d.ts +5 -0
  85. package/dist/cli/plugin.d.ts.map +1 -0
  86. package/dist/cli/plugin.js +42 -0
  87. package/dist/cli/plugin.js.map +1 -0
  88. package/dist/cli/resume.d.ts +18 -0
  89. package/dist/cli/resume.d.ts.map +1 -0
  90. package/dist/cli/resume.js +84 -0
  91. package/dist/cli/resume.js.map +1 -0
  92. package/dist/cli/rollback.d.ts +11 -0
  93. package/dist/cli/rollback.d.ts.map +1 -0
  94. package/dist/cli/rollback.js +12 -0
  95. package/dist/cli/rollback.js.map +1 -0
  96. package/dist/cli/rules.d.ts +7 -0
  97. package/dist/cli/rules.d.ts.map +1 -0
  98. package/dist/cli/rules.js +20 -0
  99. package/dist/cli/rules.js.map +1 -0
  100. package/dist/cli/run.d.ts +35 -0
  101. package/dist/cli/run.d.ts.map +1 -0
  102. package/dist/cli/run.js +294 -0
  103. package/dist/cli/run.js.map +1 -0
  104. package/dist/cli/session.d.ts +5 -0
  105. package/dist/cli/session.d.ts.map +1 -0
  106. package/dist/cli/session.js +46 -0
  107. package/dist/cli/session.js.map +1 -0
  108. package/dist/cli/ui/Board.d.ts +22 -0
  109. package/dist/cli/ui/Board.d.ts.map +1 -0
  110. package/dist/cli/ui/Board.js +40 -0
  111. package/dist/cli/ui/Board.js.map +1 -0
  112. package/dist/cli/ui/StatusBar.d.ts +10 -0
  113. package/dist/cli/ui/StatusBar.d.ts.map +1 -0
  114. package/dist/cli/ui/StatusBar.js +6 -0
  115. package/dist/cli/ui/StatusBar.js.map +1 -0
  116. package/dist/config.d.ts +4 -0
  117. package/dist/config.d.ts.map +1 -0
  118. package/dist/config.js +79 -0
  119. package/dist/config.js.map +1 -0
  120. package/dist/core/bus.d.ts +19 -0
  121. package/dist/core/bus.d.ts.map +1 -0
  122. package/dist/core/bus.js +25 -0
  123. package/dist/core/bus.js.map +1 -0
  124. package/dist/core/context.d.ts +10 -0
  125. package/dist/core/context.d.ts.map +1 -0
  126. package/dist/core/context.js +42 -0
  127. package/dist/core/context.js.map +1 -0
  128. package/dist/core/dispatcher.d.ts +25 -0
  129. package/dist/core/dispatcher.d.ts.map +1 -0
  130. package/dist/core/dispatcher.js +76 -0
  131. package/dist/core/dispatcher.js.map +1 -0
  132. package/dist/core/errors.d.ts +8 -0
  133. package/dist/core/errors.d.ts.map +1 -0
  134. package/dist/core/errors.js +13 -0
  135. package/dist/core/errors.js.map +1 -0
  136. package/dist/core/file-ownership.d.ts +25 -0
  137. package/dist/core/file-ownership.d.ts.map +1 -0
  138. package/dist/core/file-ownership.js +81 -0
  139. package/dist/core/file-ownership.js.map +1 -0
  140. package/dist/core/index.d.ts +9 -0
  141. package/dist/core/index.d.ts.map +1 -0
  142. package/dist/core/index.js +6 -0
  143. package/dist/core/index.js.map +1 -0
  144. package/dist/core/mcp-client-pool.d.ts +9 -0
  145. package/dist/core/mcp-client-pool.d.ts.map +1 -0
  146. package/dist/core/mcp-client-pool.js +26 -0
  147. package/dist/core/mcp-client-pool.js.map +1 -0
  148. package/dist/core/mcp-client.d.ts +27 -0
  149. package/dist/core/mcp-client.d.ts.map +1 -0
  150. package/dist/core/mcp-client.js +63 -0
  151. package/dist/core/mcp-client.js.map +1 -0
  152. package/dist/core/plugin-loader.d.ts +41 -0
  153. package/dist/core/plugin-loader.d.ts.map +1 -0
  154. package/dist/core/plugin-loader.js +62 -0
  155. package/dist/core/plugin-loader.js.map +1 -0
  156. package/dist/core/plugin-sdk.d.ts +5 -0
  157. package/dist/core/plugin-sdk.d.ts.map +1 -0
  158. package/dist/core/plugin-sdk.js +2 -0
  159. package/dist/core/plugin-sdk.js.map +1 -0
  160. package/dist/core/state.d.ts +77 -0
  161. package/dist/core/state.d.ts.map +1 -0
  162. package/dist/core/state.js +357 -0
  163. package/dist/core/state.js.map +1 -0
  164. package/dist/core/task.d.ts +13 -0
  165. package/dist/core/task.d.ts.map +1 -0
  166. package/dist/core/task.js +87 -0
  167. package/dist/core/task.js.map +1 -0
  168. package/dist/git/__tests__/helpers.d.ts +3 -0
  169. package/dist/git/__tests__/helpers.d.ts.map +1 -0
  170. package/dist/git/__tests__/helpers.js +18 -0
  171. package/dist/git/__tests__/helpers.js.map +1 -0
  172. package/dist/git/branch.d.ts +7 -0
  173. package/dist/git/branch.d.ts.map +1 -0
  174. package/dist/git/branch.js +62 -0
  175. package/dist/git/branch.js.map +1 -0
  176. package/dist/git/commit.d.ts +3 -0
  177. package/dist/git/commit.d.ts.map +1 -0
  178. package/dist/git/commit.js +21 -0
  179. package/dist/git/commit.js.map +1 -0
  180. package/dist/git/conflict.d.ts +19 -0
  181. package/dist/git/conflict.d.ts.map +1 -0
  182. package/dist/git/conflict.js +86 -0
  183. package/dist/git/conflict.js.map +1 -0
  184. package/dist/git/index.d.ts +7 -0
  185. package/dist/git/index.d.ts.map +1 -0
  186. package/dist/git/index.js +7 -0
  187. package/dist/git/index.js.map +1 -0
  188. package/dist/git/merge.d.ts +16 -0
  189. package/dist/git/merge.d.ts.map +1 -0
  190. package/dist/git/merge.js +101 -0
  191. package/dist/git/merge.js.map +1 -0
  192. package/dist/git/safety.d.ts +16 -0
  193. package/dist/git/safety.d.ts.map +1 -0
  194. package/dist/git/safety.js +64 -0
  195. package/dist/git/safety.js.map +1 -0
  196. package/dist/git/utils.d.ts +8 -0
  197. package/dist/git/utils.d.ts.map +1 -0
  198. package/dist/git/utils.js +39 -0
  199. package/dist/git/utils.js.map +1 -0
  200. package/dist/mcp-server/index.d.ts +2 -0
  201. package/dist/mcp-server/index.d.ts.map +1 -0
  202. package/dist/mcp-server/index.js +39 -0
  203. package/dist/mcp-server/index.js.map +1 -0
  204. package/dist/mcp-server/tools.d.ts +70 -0
  205. package/dist/mcp-server/tools.d.ts.map +1 -0
  206. package/dist/mcp-server/tools.js +112 -0
  207. package/dist/mcp-server/tools.js.map +1 -0
  208. package/dist/models/item.d.ts +6 -0
  209. package/dist/models/item.d.ts.map +1 -0
  210. package/dist/models/item.js +2 -0
  211. package/dist/models/item.js.map +1 -0
  212. package/dist/orchestration/glue.d.ts +31 -0
  213. package/dist/orchestration/glue.d.ts.map +1 -0
  214. package/dist/orchestration/glue.js +204 -0
  215. package/dist/orchestration/glue.js.map +1 -0
  216. package/dist/orchestration/index.d.ts +3 -0
  217. package/dist/orchestration/index.d.ts.map +1 -0
  218. package/dist/orchestration/index.js +3 -0
  219. package/dist/orchestration/index.js.map +1 -0
  220. package/dist/orchestration/runtime.d.ts +35 -0
  221. package/dist/orchestration/runtime.d.ts.map +1 -0
  222. package/dist/orchestration/runtime.js +165 -0
  223. package/dist/orchestration/runtime.js.map +1 -0
  224. package/dist/providers/base-provider.d.ts +28 -0
  225. package/dist/providers/base-provider.d.ts.map +1 -0
  226. package/dist/providers/base-provider.js +2 -0
  227. package/dist/providers/base-provider.js.map +1 -0
  228. package/dist/providers/claude.d.ts +10 -0
  229. package/dist/providers/claude.d.ts.map +1 -0
  230. package/dist/providers/claude.js +93 -0
  231. package/dist/providers/claude.js.map +1 -0
  232. package/dist/providers/gemini.d.ts +16 -0
  233. package/dist/providers/gemini.d.ts.map +1 -0
  234. package/dist/providers/gemini.js +101 -0
  235. package/dist/providers/gemini.js.map +1 -0
  236. package/dist/providers/index.d.ts +21 -0
  237. package/dist/providers/index.d.ts.map +1 -0
  238. package/dist/providers/index.js +68 -0
  239. package/dist/providers/index.js.map +1 -0
  240. package/dist/providers/mcp-provider.d.ts +11 -0
  241. package/dist/providers/mcp-provider.d.ts.map +1 -0
  242. package/dist/providers/mcp-provider.js +42 -0
  243. package/dist/providers/mcp-provider.js.map +1 -0
  244. package/dist/providers/mock.d.ts +10 -0
  245. package/dist/providers/mock.d.ts.map +1 -0
  246. package/dist/providers/mock.js +66 -0
  247. package/dist/providers/mock.js.map +1 -0
  248. package/dist/providers/model-registry.d.ts +9 -0
  249. package/dist/providers/model-registry.d.ts.map +1 -0
  250. package/dist/providers/model-registry.js +153 -0
  251. package/dist/providers/model-registry.js.map +1 -0
  252. package/dist/providers/ollama.d.ts +11 -0
  253. package/dist/providers/ollama.d.ts.map +1 -0
  254. package/dist/providers/ollama.js +141 -0
  255. package/dist/providers/ollama.js.map +1 -0
  256. package/dist/providers/openai.d.ts +17 -0
  257. package/dist/providers/openai.d.ts.map +1 -0
  258. package/dist/providers/openai.js +109 -0
  259. package/dist/providers/openai.js.map +1 -0
  260. package/dist/providers/zai.d.ts +6 -0
  261. package/dist/providers/zai.d.ts.map +1 -0
  262. package/dist/providers/zai.js +17 -0
  263. package/dist/providers/zai.js.map +1 -0
  264. package/dist/server/api.d.ts +5 -0
  265. package/dist/server/api.d.ts.map +1 -0
  266. package/dist/server/api.js +153 -0
  267. package/dist/server/api.js.map +1 -0
  268. package/dist/server/index.d.ts +14 -0
  269. package/dist/server/index.d.ts.map +1 -0
  270. package/dist/server/index.js +98 -0
  271. package/dist/server/index.js.map +1 -0
  272. package/dist/server/middleware.d.ts +6 -0
  273. package/dist/server/middleware.d.ts.map +1 -0
  274. package/dist/server/middleware.js +35 -0
  275. package/dist/server/middleware.js.map +1 -0
  276. package/dist/server/tunnel.d.ts +7 -0
  277. package/dist/server/tunnel.d.ts.map +1 -0
  278. package/dist/server/tunnel.js +44 -0
  279. package/dist/server/tunnel.js.map +1 -0
  280. package/dist/server/websocket.d.ts +11 -0
  281. package/dist/server/websocket.d.ts.map +1 -0
  282. package/dist/server/websocket.js +48 -0
  283. package/dist/server/websocket.js.map +1 -0
  284. package/dist/types.d.ts +90 -0
  285. package/dist/types.d.ts.map +1 -0
  286. package/dist/types.js +2 -0
  287. package/dist/types.js.map +1 -0
  288. package/package.json +62 -0
@@ -0,0 +1,28 @@
1
+ import { type SessionRecord } from '../core/index.js';
2
+ import type { TaskRecord } from '../types.js';
3
+ interface BoardOptions {
4
+ projectDir?: string;
5
+ dbPath?: string;
6
+ sessionId?: string;
7
+ watch?: boolean;
8
+ intervalMs?: number;
9
+ ink?: boolean;
10
+ signal?: AbortSignal;
11
+ }
12
+ interface BoardSnapshot {
13
+ session: SessionRecord;
14
+ tasks: TaskRecord[];
15
+ messages: Array<{
16
+ id: number;
17
+ type: string;
18
+ agentId: string;
19
+ taskId: string | null;
20
+ payload: Record<string, unknown>;
21
+ timestamp: number;
22
+ }>;
23
+ }
24
+ export declare function formatDuration(ms: number): string;
25
+ export declare function buildBoardOutput(snapshot: BoardSnapshot, now: number): string;
26
+ export declare function renderBoard(options?: BoardOptions): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/cli/board.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAI7C,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,aAAa,CAAA;IACtB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC3I;AAsBD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA8B7E;AAsCD,wBAAsB,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E3E"}
@@ -0,0 +1,178 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import React from 'react';
4
+ import { StateStore } from '../core/index.js';
5
+ import { readSessionMeta } from './git-session.js';
6
+ import { Board } from './ui/Board.js';
7
+ const STATUS_LABEL = {
8
+ approved: 'DONE',
9
+ completed: 'DONE',
10
+ in_progress: 'BUILD',
11
+ review: 'REVIEW',
12
+ pending: 'QUEUE',
13
+ rejected: 'REJECT',
14
+ interrupted: 'PAUSED',
15
+ };
16
+ const STATUS_ICON = {
17
+ approved: '✓',
18
+ completed: '✓',
19
+ in_progress: '*',
20
+ review: 'o',
21
+ pending: '.',
22
+ rejected: 'x',
23
+ interrupted: '!',
24
+ };
25
+ export function formatDuration(ms) {
26
+ const totalSeconds = Math.max(Math.floor(ms / 1000), 0);
27
+ const minutes = Math.floor(totalSeconds / 60);
28
+ const seconds = totalSeconds % 60;
29
+ return `${minutes}m ${seconds}s`;
30
+ }
31
+ export function buildBoardOutput(snapshot, now) {
32
+ const elapsed = formatDuration(now - snapshot.session.startedAt);
33
+ const totalTokens = snapshot.messages.reduce((acc, message) => {
34
+ const usage = message.payload.usage;
35
+ if (!usage) {
36
+ return acc;
37
+ }
38
+ return acc + (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0);
39
+ }, 0);
40
+ const lines = [];
41
+ lines.push(`Orka Board - session #${snapshot.session.id}`);
42
+ lines.push(`Goal: ${snapshot.session.goal}`);
43
+ lines.push(`Elapsed: ${elapsed} | Tokens: ${totalTokens.toLocaleString()} | Status: ${snapshot.session.status}`);
44
+ lines.push('');
45
+ lines.push('Status Task Agent Files');
46
+ lines.push('--------------------------------------------------------------');
47
+ const rows = snapshot.tasks.slice().sort((a, b) => a.createdAt - b.createdAt);
48
+ for (const task of rows) {
49
+ const label = `${STATUS_ICON[task.status] ?? '?'} ${(STATUS_LABEL[task.status] ?? task.status).padEnd(7)}`;
50
+ const taskLabel = task.goal.slice(0, 30).padEnd(30);
51
+ const agent = (task.assignedTo ?? '-').padEnd(10);
52
+ const files = `${task.filesOwned.length} file(s)`;
53
+ lines.push(`${label} ${taskLabel} ${agent} ${files}`);
54
+ }
55
+ lines.push('');
56
+ lines.push('Hotkeys: Ctrl+C quit | orka board --watch for live updates');
57
+ return lines.join('\n');
58
+ }
59
+ function buildBoardProps(snapshot, now) {
60
+ const elapsed = formatDuration(now - snapshot.session.startedAt);
61
+ const totalTokens = snapshot.messages.reduce((acc, message) => {
62
+ const usage = message.payload.usage;
63
+ if (!usage) {
64
+ return acc;
65
+ }
66
+ return acc + (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0);
67
+ }, 0);
68
+ const tasks = snapshot.tasks
69
+ .slice()
70
+ .sort((a, b) => a.createdAt - b.createdAt)
71
+ .map((task) => ({
72
+ status: task.status,
73
+ label: task.goal,
74
+ agent: task.assignedTo ?? '-',
75
+ files: task.filesOwned.length,
76
+ }));
77
+ const activityLog = snapshot.messages.slice(-10).map((message) => {
78
+ const task = message.taskId ? ` ${message.taskId}` : '';
79
+ return `[${message.type}] ${message.agentId}${task}`;
80
+ });
81
+ return {
82
+ sessionId: snapshot.session.id,
83
+ goal: snapshot.session.goal,
84
+ elapsed,
85
+ totalTokens,
86
+ totalCost: 0,
87
+ tasks,
88
+ activityLog,
89
+ };
90
+ }
91
+ export async function renderBoard(options = {}) {
92
+ if (options.signal?.aborted)
93
+ return;
94
+ const projectDir = resolve(options.projectDir ?? process.cwd());
95
+ const dbPath = options.dbPath ?? join(projectDir, '.orka', 'state.db');
96
+ const intervalMs = options.intervalMs ?? 1500;
97
+ const watch = options.watch ?? false;
98
+ const ink = options.ink ?? false;
99
+ if (!existsSync(dbPath)) {
100
+ throw new Error('State DB tidak ditemukan. Jalankan orka run terlebih dahulu.');
101
+ }
102
+ if (ink) {
103
+ const inkPkg = await import('ink');
104
+ const snapshot = await loadBoardSnapshot(projectDir, dbPath, options.sessionId);
105
+ const app = inkPkg.render(React.createElement(Board, buildBoardProps(snapshot, Date.now())));
106
+ if (!watch) {
107
+ await new Promise((resolveDone) => {
108
+ const stop = () => {
109
+ process.off('SIGINT', stop);
110
+ app.unmount();
111
+ resolveDone();
112
+ };
113
+ process.on('SIGINT', stop);
114
+ });
115
+ return;
116
+ }
117
+ const timer = setInterval(async () => {
118
+ const next = await loadBoardSnapshot(projectDir, dbPath, options.sessionId);
119
+ app.rerender(React.createElement(Board, buildBoardProps(next, Date.now())));
120
+ }, intervalMs);
121
+ await new Promise((resolveDone) => {
122
+ const stop = () => {
123
+ clearInterval(timer);
124
+ process.off('SIGINT', stop);
125
+ options.signal?.removeEventListener('abort', stop);
126
+ app.unmount();
127
+ resolveDone();
128
+ };
129
+ process.on('SIGINT', stop);
130
+ options.signal?.addEventListener('abort', stop, { once: true });
131
+ });
132
+ return;
133
+ }
134
+ const draw = async () => {
135
+ const snapshot = await loadBoardSnapshot(projectDir, dbPath, options.sessionId);
136
+ process.stdout.write('\x1bc');
137
+ process.stdout.write(`${buildBoardOutput(snapshot, Date.now())}\n`);
138
+ };
139
+ await draw();
140
+ if (!watch) {
141
+ return;
142
+ }
143
+ const timer = setInterval(() => {
144
+ void draw();
145
+ }, intervalMs);
146
+ await new Promise((resolveDone) => {
147
+ const stop = () => {
148
+ clearInterval(timer);
149
+ process.off('SIGINT', stop);
150
+ options.signal?.removeEventListener('abort', stop);
151
+ resolveDone();
152
+ };
153
+ process.on('SIGINT', stop);
154
+ options.signal?.addEventListener('abort', stop, { once: true });
155
+ });
156
+ }
157
+ async function loadBoardSnapshot(projectDir, dbPath, requestedSessionId) {
158
+ const store = new StateStore(dbPath);
159
+ try {
160
+ const sessionId = requestedSessionId ?? (await readSessionMeta(projectDir))?.sessionId;
161
+ if (!sessionId) {
162
+ throw new Error('Session id tidak ditemukan. Gunakan --session atau jalankan orka run dulu.');
163
+ }
164
+ const session = store.getSession(sessionId);
165
+ if (!session) {
166
+ throw new Error(`Session ${sessionId} tidak ditemukan di state DB.`);
167
+ }
168
+ const tasks = store.listTasks().filter((task) => task.id.startsWith(`${sessionId}:`));
169
+ const messages = store
170
+ .getMessages()
171
+ .filter((message) => message.taskId?.startsWith(`${sessionId}:`) || String(message.payload.sessionId ?? '') === sessionId);
172
+ return { session, tasks, messages };
173
+ }
174
+ finally {
175
+ store.close();
176
+ }
177
+ }
178
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/cli/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAsB,MAAM,kBAAkB,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAmB,MAAM,eAAe,CAAA;AAkBtD,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,OAAO;IACpB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,QAAQ;CACtB,CAAA;AAED,MAAM,WAAW,GAA2B;IAC1C,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,GAAG;CACjB,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAA;IACjC,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAuB,EAAE,GAAW;IACnE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAChE,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAoE,CAAA;QAClG,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;IACnE,CAAC,EAAE,CAAC,CAAC,CAAA;IAEL,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IAC1D,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,cAAc,WAAW,CAAC,cAAc,EAAE,cAAc,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAChH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IACvE,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IAE5E,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAA;IAC7E,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1G,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACjD,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,UAAU,CAAA;QACjD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;IACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,QAAuB,EAAE,GAAW;IAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAChE,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAoE,CAAA;QAClG,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAA;IACnE,CAAC,EAAE,CAAC,CAAC,CAAA;IAEL,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;SACzB,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,IAAI;QAChB,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG;QAC7B,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;KAC9B,CAAC,CAAC,CAAA;IAEL,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;QAC9B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;QAC3B,OAAO;QACP,WAAW;QACX,SAAS,EAAE,CAAC;QACZ,KAAK;QACL,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAwB,EAAE;IAC1D,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;QAAE,OAAM;IAEnC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAA;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAA;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAA;IAEhC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/E,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAE5F,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;gBACtC,MAAM,IAAI,GAAG,GAAG,EAAE;oBAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;oBAC3B,GAAG,CAAC,OAAO,EAAE,CAAA;oBACb,WAAW,EAAE,CAAA;gBACf,CAAC,CAAA;gBACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;YAC3E,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7E,CAAC,EAAE,UAAU,CAAC,CAAA;QAEd,MAAM,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,aAAa,CAAC,KAAK,CAAC,CAAA;gBACpB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAC3B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBAClD,GAAG,CAAC,OAAO,EAAE,CAAA;gBACb,WAAW,EAAE,CAAA;YACf,CAAC,CAAA;YACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC1B,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;QAEF,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;QAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACrE,CAAC,CAAA;IAED,MAAM,IAAI,EAAE,CAAA;IAEZ,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAM;IACR,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,IAAI,EAAE,CAAA;IACb,CAAC,EAAE,UAAU,CAAC,CAAA;IAEd,MAAM,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,aAAa,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC3B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAClD,WAAW,EAAE,CAAA;QACf,CAAC,CAAA;QACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACjE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,UAAkB,EAAE,MAAc,EAAE,kBAA2B;IAC9F,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,kBAAkB,IAAI,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAA;QACtF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAA;QAC/F,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,+BAA+B,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAA;QACrF,MAAM,QAAQ,GAAG,KAAK;aACnB,WAAW,EAAE;aACb,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,CAAA;QAE5H,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;IACrC,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface TokenUsage {
2
+ agentId: string;
3
+ provider: string;
4
+ model: string;
5
+ inputTokens: number;
6
+ outputTokens: number;
7
+ }
8
+ export interface AgentCostSummary {
9
+ agentId: string;
10
+ provider: string;
11
+ model: string;
12
+ inputTokens: number;
13
+ outputTokens: number;
14
+ totalTokens: number;
15
+ cost: number;
16
+ }
17
+ export interface TotalCostSummary {
18
+ inputTokens: number;
19
+ outputTokens: number;
20
+ totalTokens: number;
21
+ totalCost: number;
22
+ agents: AgentCostSummary[];
23
+ }
24
+ export declare class CostTracker {
25
+ private agents;
26
+ record(usage: TokenUsage): void;
27
+ agentSummary(agentId: string): AgentCostSummary;
28
+ totalSummary(): TotalCostSummary;
29
+ formatDisplay(): string;
30
+ }
31
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/cli/cost.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAUD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAqBD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAsC;IAEpD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAiB/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAyB/C,YAAY,IAAI,gBAAgB;IAWhC,aAAa,IAAI,MAAM;CAwBxB"}
@@ -0,0 +1,85 @@
1
+ const PRICING = {
2
+ 'claude-sonnet-4-20250514': { input: 3, output: 15 },
3
+ 'claude-haiku-4-5-20251001': { input: 0.8, output: 4 },
4
+ 'claude-opus-4-20250514': { input: 15, output: 75 },
5
+ };
6
+ function calculateCost(provider, model, inputTokens, outputTokens) {
7
+ if (provider === 'ollama') {
8
+ return 0;
9
+ }
10
+ const pricing = PRICING[model];
11
+ if (!pricing) {
12
+ return 0;
13
+ }
14
+ return (inputTokens / 1_000_000) * pricing.input + (outputTokens / 1_000_000) * pricing.output;
15
+ }
16
+ export class CostTracker {
17
+ agents = new Map();
18
+ record(usage) {
19
+ const existing = this.agents.get(usage.agentId);
20
+ if (existing) {
21
+ existing.inputTokens += usage.inputTokens;
22
+ existing.outputTokens += usage.outputTokens;
23
+ return;
24
+ }
25
+ this.agents.set(usage.agentId, {
26
+ agentId: usage.agentId,
27
+ provider: usage.provider,
28
+ model: usage.model,
29
+ inputTokens: usage.inputTokens,
30
+ outputTokens: usage.outputTokens,
31
+ });
32
+ }
33
+ agentSummary(agentId) {
34
+ const agent = this.agents.get(agentId);
35
+ if (!agent) {
36
+ return {
37
+ agentId,
38
+ provider: '',
39
+ model: '',
40
+ inputTokens: 0,
41
+ outputTokens: 0,
42
+ totalTokens: 0,
43
+ cost: 0,
44
+ };
45
+ }
46
+ return {
47
+ agentId: agent.agentId,
48
+ provider: agent.provider,
49
+ model: agent.model,
50
+ inputTokens: agent.inputTokens,
51
+ outputTokens: agent.outputTokens,
52
+ totalTokens: agent.inputTokens + agent.outputTokens,
53
+ cost: calculateCost(agent.provider, agent.model, agent.inputTokens, agent.outputTokens),
54
+ };
55
+ }
56
+ totalSummary() {
57
+ const agents = Array.from(this.agents.keys()).map((id) => this.agentSummary(id));
58
+ return {
59
+ inputTokens: agents.reduce((sum, agent) => sum + agent.inputTokens, 0),
60
+ outputTokens: agents.reduce((sum, agent) => sum + agent.outputTokens, 0),
61
+ totalTokens: agents.reduce((sum, agent) => sum + agent.totalTokens, 0),
62
+ totalCost: agents.reduce((sum, agent) => sum + agent.cost, 0),
63
+ agents,
64
+ };
65
+ }
66
+ formatDisplay() {
67
+ const total = this.totalSummary();
68
+ if (total.agents.length === 0) {
69
+ return 'Belum ada data penggunaan token.';
70
+ }
71
+ const lines = [];
72
+ lines.push(' Agent Tokens Cost');
73
+ lines.push(' ------------------------------------------');
74
+ for (const agent of total.agents) {
75
+ const providerNote = agent.provider === 'ollama' ? ' (ollama - free)' : '';
76
+ lines.push(` ${agent.agentId.padEnd(16)} ${agent.totalTokens.toLocaleString().padStart(10)} $${agent.cost
77
+ .toFixed(3)
78
+ .padStart(6)}${providerNote}`);
79
+ }
80
+ lines.push(' ------------------------------------------');
81
+ lines.push(` ${'Total'.padEnd(16)} ${total.totalTokens.toLocaleString().padStart(10)} $${total.totalCost.toFixed(3).padStart(6)}`);
82
+ return lines.join('\n');
83
+ }
84
+ }
85
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/cli/cost.ts"],"names":[],"mappings":"AAkCA,MAAM,OAAO,GAAsD;IACjE,0BAA0B,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;IACpD,2BAA2B,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE;IACtD,wBAAwB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;CACpD,CAAA;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,KAAa,EAAE,WAAmB,EAAE,YAAoB;IAC/F,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,CAAA;IACV,CAAC;IAED,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;AAChG,CAAC;AAED,MAAM,OAAO,WAAW;IACd,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAA;IAEpD,MAAM,CAAC,KAAiB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAA;YACzC,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAA;YAC3C,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAA;IACJ,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,OAAO;gBACP,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,WAAW,EAAE,CAAC;gBACd,IAAI,EAAE,CAAC;aACR,CAAA;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY;YACnD,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;SACxF,CAAA;IACH,CAAC;IAED,YAAY;QACV,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;QAChF,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACtE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;YACxE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACtE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM;SACP,CAAA;IACH,CAAC;IAED,aAAa;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACjC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,kCAAkC,CAAA;QAC3C,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;QAClD,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QAE1D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAA;YAC1E,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,IAAI;iBAC9F,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,CAChC,CAAA;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;QAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAErI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import type { OrkaConfig } from '../types.js';
2
+ export type ProviderAuth = {
3
+ type: 'apikey';
4
+ apiKey: string;
5
+ } | {
6
+ type: 'oauth';
7
+ accessToken: string;
8
+ refreshToken: string;
9
+ expiresAt: number;
10
+ };
11
+ export type Credentials = {
12
+ claude?: ProviderAuth;
13
+ openai?: ProviderAuth;
14
+ openrouter?: ProviderAuth;
15
+ zai?: ProviderAuth;
16
+ gemini?: ProviderAuth;
17
+ opencode?: ProviderAuth;
18
+ };
19
+ export declare function loadCredentials(homeDir?: string): Credentials | null;
20
+ export declare function saveCredentials(creds: Credentials, homeDir?: string): void;
21
+ export declare function clearCredential(provider: 'claude' | 'openai' | 'openrouter' | 'zai' | 'gemini' | 'opencode', homeDir?: string): void;
22
+ export declare function resolveProviderAuth(provider: 'claude' | 'openai' | 'openrouter' | 'zai' | 'gemini' | 'opencode', config: OrkaConfig, env: NodeJS.ProcessEnv, homeDir?: string): ProviderAuth;
23
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAA;CACxB,CAAA;AAOD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAa1E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAIpI;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,EAC5E,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,GACf,YAAY,CA6Bd"}
@@ -0,0 +1,77 @@
1
+ import { existsSync, readFileSync, writeFileSync, chmodSync, mkdirSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { OrkaError } from '../core/errors.js';
4
+ function credPath(homeDir) {
5
+ const base = homeDir ?? process.env.HOME ?? '';
6
+ return join(base, '.orka', 'credentials.json');
7
+ }
8
+ export function loadCredentials(homeDir) {
9
+ const path = credPath(homeDir);
10
+ if (!existsSync(path))
11
+ return null;
12
+ try {
13
+ return JSON.parse(readFileSync(path, 'utf-8'));
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ export function saveCredentials(creds, homeDir) {
20
+ const path = credPath(homeDir);
21
+ try {
22
+ mkdirSync(dirname(path), { recursive: true });
23
+ writeFileSync(path, JSON.stringify(creds, null, 2), 'utf-8');
24
+ try {
25
+ chmodSync(path, 0o600);
26
+ }
27
+ catch { /* no-op on Windows */ }
28
+ }
29
+ catch (err) {
30
+ throw new OrkaError('credentials_write_failed', `Tidak bisa menyimpan credentials: ${err.message}`, err);
31
+ }
32
+ }
33
+ export function clearCredential(provider, homeDir) {
34
+ const creds = loadCredentials(homeDir) ?? {};
35
+ delete creds[provider];
36
+ saveCredentials(creds, homeDir);
37
+ }
38
+ export function resolveProviderAuth(provider, config, env, homeDir) {
39
+ // 1. credentials.json (highest priority)
40
+ const stored = loadCredentials(homeDir)?.[provider];
41
+ if (stored)
42
+ return stored;
43
+ // 2. environment variable
44
+ let envKey;
45
+ if (provider === 'claude')
46
+ envKey = env.ANTHROPIC_API_KEY;
47
+ else if (provider === 'openai')
48
+ envKey = env.OPENAI_API_KEY;
49
+ else if (provider === 'openrouter')
50
+ envKey = env.OPENROUTER_API_KEY;
51
+ else if (provider === 'zai')
52
+ envKey = env.ZAI_API_KEY;
53
+ else if (provider === 'gemini')
54
+ envKey = env.GOOGLE_API_KEY;
55
+ else if (provider === 'opencode')
56
+ envKey = env.OPENCODE_API_KEY;
57
+ if (envKey)
58
+ return { type: 'apikey', apiKey: envKey };
59
+ // 3. config file (fallback)
60
+ let configKey;
61
+ if (provider === 'claude')
62
+ configKey = config.providers?.claude?.apiKey;
63
+ else if (provider === 'openai')
64
+ configKey = config.providers?.openai?.apiKey;
65
+ else if (provider === 'openrouter')
66
+ configKey = config.providers?.openrouter?.apiKey;
67
+ else if (provider === 'zai')
68
+ configKey = config.providers?.zai?.apiKey;
69
+ else if (provider === 'gemini')
70
+ configKey = config.providers?.gemini?.apiKey;
71
+ else if (provider === 'opencode')
72
+ configKey = config.providers?.opencode?.apiKey;
73
+ if (configKey)
74
+ return { type: 'apikey', apiKey: configKey };
75
+ throw new OrkaError('provider_not_configured', `Provider ${provider} belum dikonfigurasi. Jalankan \`orka login --provider ${provider}\`.`);
76
+ }
77
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OrkaConfig } from '../types.js';
2
+ export declare function renderDryRun(goal: string, config: OrkaConfig): string;
3
+ //# sourceMappingURL=dry-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/cli/dry-run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAuBrE"}
@@ -0,0 +1,21 @@
1
+ export function renderDryRun(goal, config) {
2
+ const lines = [];
3
+ lines.push('=== DRY RUN — tidak ada LLM call atau file yang ditulis ===');
4
+ lines.push('');
5
+ lines.push(`Goal: ${goal}`);
6
+ lines.push('');
7
+ lines.push('Roles & Providers:');
8
+ const roles = ['coordinator', 'scout', 'builder', 'reviewer'];
9
+ for (const role of roles) {
10
+ const cfg = config.roles[role];
11
+ const count = role === 'builder' ? ` (x${config.swarm.builders})` : '';
12
+ lines.push(` ${role.padEnd(12)}${count.padEnd(6)}→ ${cfg.provider} / ${cfg.model}`);
13
+ }
14
+ lines.push('');
15
+ lines.push(`Review: ${config.swarm.review ? `enabled (max ${config.swarm.maxReviewRetries} retries)` : 'disabled'}`);
16
+ lines.push(`Git: autoBranch=${config.git.autoBranch}, autoMerge=${config.git.autoMerge}`);
17
+ lines.push('');
18
+ lines.push('=== Selesai dry-run. Jalankan tanpa --dry-run untuk eksekusi nyata. ===');
19
+ return lines.join('\n');
20
+ }
21
+ //# sourceMappingURL=dry-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/cli/dry-run.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAkB;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAA;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAEhC,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAU,CAAA;IACtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,MAAM,CAAC,KAAK,CAAC,gBAAgB,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAA;IACpH,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,UAAU,eAAe,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;IAErF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { BusMessage } from '../core/bus.js';
2
+ export interface PauseResult {
3
+ message: string;
4
+ resumeHint: string;
5
+ }
6
+ export declare function pauseSession(sessionId: string): PauseResult;
7
+ export declare function filterLogsByAgent(messages: BusMessage[], agentId?: string): BusMessage[];
8
+ export declare function formatLogs(messages: BusMessage[]): string;
9
+ export interface RollbackInfo {
10
+ sessionId: string;
11
+ branch: string;
12
+ warning: string;
13
+ }
14
+ export declare function rollbackInfo(sessionId: string): RollbackInfo;
15
+ export interface ConflictFile {
16
+ path: string;
17
+ ours: string;
18
+ theirs: string;
19
+ }
20
+ export declare function describeConflict(file: ConflictFile): string;
21
+ //# sourceMappingURL=extras.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extras.d.ts","sourceRoot":"","sources":["../../src/cli/extras.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAK3D;AAUD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAKxF;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAQzD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAM5D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,39 @@
1
+ export function pauseSession(sessionId) {
2
+ return {
3
+ message: `Session #${sessionId} di-pause. Semua agent dihentikan.`,
4
+ resumeHint: 'Jalankan `orka resume` untuk melanjutkan.',
5
+ };
6
+ }
7
+ function formatTimestamp(ts) {
8
+ const date = new Date(ts);
9
+ const hh = date.getHours().toString().padStart(2, '0');
10
+ const mm = date.getMinutes().toString().padStart(2, '0');
11
+ const ss = date.getSeconds().toString().padStart(2, '0');
12
+ return `${hh}:${mm}:${ss}`;
13
+ }
14
+ export function filterLogsByAgent(messages, agentId) {
15
+ if (!agentId) {
16
+ return [...messages];
17
+ }
18
+ return messages.filter((message) => message.agentId === agentId);
19
+ }
20
+ export function formatLogs(messages) {
21
+ return [...messages]
22
+ .sort((a, b) => a.timestamp - b.timestamp)
23
+ .map((message) => {
24
+ const task = message.taskId ? ` ${message.taskId}` : '';
25
+ return `[${formatTimestamp(message.timestamp)}] ${message.agentId.padEnd(12)} ${message.type}${task}`;
26
+ })
27
+ .join('\n');
28
+ }
29
+ export function rollbackInfo(sessionId) {
30
+ return {
31
+ sessionId,
32
+ branch: `orka/session-${sessionId}`,
33
+ warning: `Ini akan revert semua perubahan di session branch orka/session-${sessionId}. Branch utama tidak terpengaruh.`,
34
+ };
35
+ }
36
+ export function describeConflict(file) {
37
+ return `Conflict di ${file.path} - perlu resolve manual atau gunakan \`orka fix\`.`;
38
+ }
39
+ //# sourceMappingURL=extras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../src/cli/extras.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO;QACL,OAAO,EAAE,YAAY,SAAS,oCAAoC;QAClE,UAAU,EAAE,2CAA2C;KACxD,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAsB,EAAE,OAAgB;IACxE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAsB;IAC/C,OAAO,CAAC,GAAG,QAAQ,CAAC;SACjB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SACzC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,CAAA;IACvG,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAQD,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO;QACL,SAAS;QACT,MAAM,EAAE,gBAAgB,SAAS,EAAE;QACnC,OAAO,EAAE,kEAAkE,SAAS,mCAAmC;KACxH,CAAA;AACH,CAAC;AAQD,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,OAAO,eAAe,IAAI,CAAC,IAAI,oDAAoD,CAAA;AACrF,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface FixOptions {
2
+ file?: string;
3
+ strategy?: 'llm' | 'ours' | 'theirs';
4
+ projectDir?: string;
5
+ }
6
+ export interface FixResult {
7
+ resolvedFiles: string[];
8
+ skippedFiles: string[];
9
+ }
10
+ export declare function resolveConflicts(options?: FixOptions): Promise<FixResult>;
11
+ //# sourceMappingURL=fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/cli/fix.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAOD,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAyEnF"}