opencode-forge 0.1.5

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.

Potentially problematic release.


This version of opencode-forge might be problematic. Click here for more details.

Files changed (309) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +534 -0
  3. package/config.jsonc +47 -0
  4. package/dist/agents/architect.d.ts +3 -0
  5. package/dist/agents/architect.d.ts.map +1 -0
  6. package/dist/agents/architect.js +152 -0
  7. package/dist/agents/architect.js.map +1 -0
  8. package/dist/agents/auditor.d.ts +3 -0
  9. package/dist/agents/auditor.d.ts.map +1 -0
  10. package/dist/agents/auditor.js +168 -0
  11. package/dist/agents/auditor.js.map +1 -0
  12. package/dist/agents/code.d.ts +3 -0
  13. package/dist/agents/code.d.ts.map +1 -0
  14. package/dist/agents/code.js +67 -0
  15. package/dist/agents/code.js.map +1 -0
  16. package/dist/agents/index.d.ts +4 -0
  17. package/dist/agents/index.d.ts.map +1 -0
  18. package/dist/agents/index.js +9 -0
  19. package/dist/agents/index.js.map +1 -0
  20. package/dist/agents/prompts.d.ts +1 -0
  21. package/dist/agents/prompts.d.ts.map +1 -0
  22. package/dist/agents/prompts.js +4 -0
  23. package/dist/agents/prompts.js.map +1 -0
  24. package/dist/agents/types.d.ts +34 -0
  25. package/dist/agents/types.d.ts.map +1 -0
  26. package/dist/agents/types.js +2 -0
  27. package/dist/agents/types.js.map +1 -0
  28. package/dist/cache/index.d.ts +4 -0
  29. package/dist/cache/index.d.ts.map +1 -0
  30. package/dist/cache/index.js +5 -0
  31. package/dist/cache/index.js.map +1 -0
  32. package/dist/cache/memory-cache.d.ts +14 -0
  33. package/dist/cache/memory-cache.d.ts.map +1 -0
  34. package/dist/cache/memory-cache.js +51 -0
  35. package/dist/cache/memory-cache.js.map +1 -0
  36. package/dist/cache/types.d.ts +8 -0
  37. package/dist/cache/types.d.ts.map +1 -0
  38. package/dist/cache/types.js +2 -0
  39. package/dist/cache/types.js.map +1 -0
  40. package/dist/cli/commands/cancel.d.ts +15 -0
  41. package/dist/cli/commands/cancel.d.ts.map +1 -0
  42. package/dist/cli/commands/cancel.js +194 -0
  43. package/dist/cli/commands/cancel.js.map +1 -0
  44. package/dist/cli/commands/graph.d.ts +16 -0
  45. package/dist/cli/commands/graph.d.ts.map +1 -0
  46. package/dist/cli/commands/graph.js +208 -0
  47. package/dist/cli/commands/graph.js.map +1 -0
  48. package/dist/cli/commands/restart.d.ts +15 -0
  49. package/dist/cli/commands/restart.d.ts.map +1 -0
  50. package/dist/cli/commands/restart.js +268 -0
  51. package/dist/cli/commands/restart.js.map +1 -0
  52. package/dist/cli/commands/status.d.ts +17 -0
  53. package/dist/cli/commands/status.d.ts.map +1 -0
  54. package/dist/cli/commands/status.js +356 -0
  55. package/dist/cli/commands/status.js.map +1 -0
  56. package/dist/cli/commands/upgrade.d.ts +3 -0
  57. package/dist/cli/commands/upgrade.d.ts.map +1 -0
  58. package/dist/cli/commands/upgrade.js +40 -0
  59. package/dist/cli/commands/upgrade.js.map +1 -0
  60. package/dist/cli/index.d.ts +3 -0
  61. package/dist/cli/index.d.ts.map +1 -0
  62. package/dist/cli/index.js +224 -0
  63. package/dist/cli/index.js.map +1 -0
  64. package/dist/cli/utils.d.ts +36 -0
  65. package/dist/cli/utils.d.ts.map +1 -0
  66. package/dist/cli/utils.js +163 -0
  67. package/dist/cli/utils.js.map +1 -0
  68. package/dist/command/template/review.txt +101 -0
  69. package/dist/config.d.ts +5 -0
  70. package/dist/config.d.ts.map +1 -0
  71. package/dist/config.js +186 -0
  72. package/dist/config.js.map +1 -0
  73. package/dist/constants/loop.d.ts +10 -0
  74. package/dist/constants/loop.d.ts.map +1 -0
  75. package/dist/constants/loop.js +6 -0
  76. package/dist/constants/loop.js.map +1 -0
  77. package/dist/graph/cache.d.ts +17 -0
  78. package/dist/graph/cache.d.ts.map +1 -0
  79. package/dist/graph/cache.js +50 -0
  80. package/dist/graph/cache.js.map +1 -0
  81. package/dist/graph/client.d.ts +51 -0
  82. package/dist/graph/client.d.ts.map +1 -0
  83. package/dist/graph/client.js +152 -0
  84. package/dist/graph/client.js.map +1 -0
  85. package/dist/graph/clone-detection.d.ts +9 -0
  86. package/dist/graph/clone-detection.d.ts.map +1 -0
  87. package/dist/graph/clone-detection.js +148 -0
  88. package/dist/graph/clone-detection.js.map +1 -0
  89. package/dist/graph/constants.d.ts +18 -0
  90. package/dist/graph/constants.d.ts.map +1 -0
  91. package/dist/graph/constants.js +532 -0
  92. package/dist/graph/constants.js.map +1 -0
  93. package/dist/graph/database.d.ts +11 -0
  94. package/dist/graph/database.d.ts.map +1 -0
  95. package/dist/graph/database.js +250 -0
  96. package/dist/graph/database.js.map +1 -0
  97. package/dist/graph/index.d.ts +14 -0
  98. package/dist/graph/index.d.ts.map +1 -0
  99. package/dist/graph/index.js +13 -0
  100. package/dist/graph/index.js.map +1 -0
  101. package/dist/graph/repo-map.d.ts +59 -0
  102. package/dist/graph/repo-map.d.ts.map +1 -0
  103. package/dist/graph/repo-map.js +948 -0
  104. package/dist/graph/repo-map.js.map +1 -0
  105. package/dist/graph/rpc.d.ts +34 -0
  106. package/dist/graph/rpc.d.ts.map +1 -0
  107. package/dist/graph/rpc.js +139 -0
  108. package/dist/graph/rpc.js.map +1 -0
  109. package/dist/graph/service.d.ts +46 -0
  110. package/dist/graph/service.d.ts.map +1 -0
  111. package/dist/graph/service.js +329 -0
  112. package/dist/graph/service.js.map +1 -0
  113. package/dist/graph/tree-sitter.d.ts +40 -0
  114. package/dist/graph/tree-sitter.d.ts.map +1 -0
  115. package/dist/graph/tree-sitter.js +799 -0
  116. package/dist/graph/tree-sitter.js.map +1 -0
  117. package/dist/graph/types.d.ts +175 -0
  118. package/dist/graph/types.d.ts.map +1 -0
  119. package/dist/graph/types.js +105 -0
  120. package/dist/graph/types.js.map +1 -0
  121. package/dist/graph/utils.d.ts +64 -0
  122. package/dist/graph/utils.d.ts.map +1 -0
  123. package/dist/graph/utils.js +406 -0
  124. package/dist/graph/utils.js.map +1 -0
  125. package/dist/graph/worker.d.ts +2 -0
  126. package/dist/graph/worker.d.ts.map +1 -0
  127. package/dist/graph/worker.js +6043 -0
  128. package/dist/graph/worker.js.map +1 -0
  129. package/dist/hooks/compaction-utils.d.ts +21 -0
  130. package/dist/hooks/compaction-utils.d.ts.map +1 -0
  131. package/dist/hooks/compaction-utils.js +82 -0
  132. package/dist/hooks/compaction-utils.js.map +1 -0
  133. package/dist/hooks/graph-command.d.ts +27 -0
  134. package/dist/hooks/graph-command.d.ts.map +1 -0
  135. package/dist/hooks/graph-command.js +57 -0
  136. package/dist/hooks/graph-command.js.map +1 -0
  137. package/dist/hooks/graph-tools.d.ts +11 -0
  138. package/dist/hooks/graph-tools.d.ts.map +1 -0
  139. package/dist/hooks/graph-tools.js +125 -0
  140. package/dist/hooks/graph-tools.js.map +1 -0
  141. package/dist/hooks/index.d.ts +5 -0
  142. package/dist/hooks/index.d.ts.map +1 -0
  143. package/dist/hooks/index.js +5 -0
  144. package/dist/hooks/index.js.map +1 -0
  145. package/dist/hooks/loop.d.ts +23 -0
  146. package/dist/hooks/loop.d.ts.map +1 -0
  147. package/dist/hooks/loop.js +667 -0
  148. package/dist/hooks/loop.js.map +1 -0
  149. package/dist/hooks/sandbox-tools.d.ts +13 -0
  150. package/dist/hooks/sandbox-tools.d.ts.map +1 -0
  151. package/dist/hooks/sandbox-tools.js +105 -0
  152. package/dist/hooks/sandbox-tools.js.map +1 -0
  153. package/dist/hooks/session.d.ts +19 -0
  154. package/dist/hooks/session.d.ts.map +1 -0
  155. package/dist/hooks/session.js +56 -0
  156. package/dist/hooks/session.js.map +1 -0
  157. package/dist/index.d.ts +11 -0
  158. package/dist/index.d.ts.map +1 -0
  159. package/dist/index.js +298 -0
  160. package/dist/index.js.map +1 -0
  161. package/dist/sandbox/context.d.ts +27 -0
  162. package/dist/sandbox/context.d.ts.map +1 -0
  163. package/dist/sandbox/context.js +18 -0
  164. package/dist/sandbox/context.js.map +1 -0
  165. package/dist/sandbox/docker.d.ts +29 -0
  166. package/dist/sandbox/docker.d.ts.map +1 -0
  167. package/dist/sandbox/docker.js +213 -0
  168. package/dist/sandbox/docker.js.map +1 -0
  169. package/dist/sandbox/manager.d.ts +23 -0
  170. package/dist/sandbox/manager.d.ts.map +1 -0
  171. package/dist/sandbox/manager.js +131 -0
  172. package/dist/sandbox/manager.js.map +1 -0
  173. package/dist/sandbox/path.d.ts +4 -0
  174. package/dist/sandbox/path.d.ts.map +1 -0
  175. package/dist/sandbox/path.js +27 -0
  176. package/dist/sandbox/path.js.map +1 -0
  177. package/dist/services/kv.d.ts +17 -0
  178. package/dist/services/kv.d.ts.map +1 -0
  179. package/dist/services/kv.js +62 -0
  180. package/dist/services/kv.js.map +1 -0
  181. package/dist/services/loop.d.ts +96 -0
  182. package/dist/services/loop.d.ts.map +1 -0
  183. package/dist/services/loop.js +315 -0
  184. package/dist/services/loop.js.map +1 -0
  185. package/dist/setup.d.ts +4 -0
  186. package/dist/setup.d.ts.map +1 -0
  187. package/dist/setup.js +118 -0
  188. package/dist/setup.js.map +1 -0
  189. package/dist/storage/database.d.ts +6 -0
  190. package/dist/storage/database.d.ts.map +1 -0
  191. package/dist/storage/database.js +90 -0
  192. package/dist/storage/database.js.map +1 -0
  193. package/dist/storage/graph-projects.d.ts +80 -0
  194. package/dist/storage/graph-projects.d.ts.map +1 -0
  195. package/dist/storage/graph-projects.js +154 -0
  196. package/dist/storage/graph-projects.js.map +1 -0
  197. package/dist/storage/index.d.ts +5 -0
  198. package/dist/storage/index.d.ts.map +1 -0
  199. package/dist/storage/index.js +3 -0
  200. package/dist/storage/index.js.map +1 -0
  201. package/dist/storage/kv-queries.d.ts +18 -0
  202. package/dist/storage/kv-queries.d.ts.map +1 -0
  203. package/dist/storage/kv-queries.js +70 -0
  204. package/dist/storage/kv-queries.js.map +1 -0
  205. package/dist/tools/graph.d.ts +9 -0
  206. package/dist/tools/graph.d.ts.map +1 -0
  207. package/dist/tools/graph.js +272 -0
  208. package/dist/tools/graph.js.map +1 -0
  209. package/dist/tools/index.d.ts +6 -0
  210. package/dist/tools/index.d.ts.map +1 -0
  211. package/dist/tools/index.js +16 -0
  212. package/dist/tools/index.js.map +1 -0
  213. package/dist/tools/loop.d.ts +21 -0
  214. package/dist/tools/loop.d.ts.map +1 -0
  215. package/dist/tools/loop.js +570 -0
  216. package/dist/tools/loop.js.map +1 -0
  217. package/dist/tools/plan-approval.d.ts +15 -0
  218. package/dist/tools/plan-approval.d.ts.map +1 -0
  219. package/dist/tools/plan-approval.js +203 -0
  220. package/dist/tools/plan-approval.js.map +1 -0
  221. package/dist/tools/plan-execute.d.ts +4 -0
  222. package/dist/tools/plan-execute.d.ts.map +1 -0
  223. package/dist/tools/plan-execute.js +85 -0
  224. package/dist/tools/plan-execute.js.map +1 -0
  225. package/dist/tools/plan-kv.d.ts +4 -0
  226. package/dist/tools/plan-kv.d.ts.map +1 -0
  227. package/dist/tools/plan-kv.js +107 -0
  228. package/dist/tools/plan-kv.js.map +1 -0
  229. package/dist/tools/review.d.ts +4 -0
  230. package/dist/tools/review.d.ts.map +1 -0
  231. package/dist/tools/review.js +90 -0
  232. package/dist/tools/review.js.map +1 -0
  233. package/dist/tools/sandbox-fs.d.ts +22 -0
  234. package/dist/tools/sandbox-fs.d.ts.map +1 -0
  235. package/dist/tools/sandbox-fs.js +83 -0
  236. package/dist/tools/sandbox-fs.js.map +1 -0
  237. package/dist/tools/types.d.ts +26 -0
  238. package/dist/tools/types.d.ts.map +1 -0
  239. package/dist/tools/types.js +2 -0
  240. package/dist/tools/types.js.map +1 -0
  241. package/dist/tui.d.ts +3 -0
  242. package/dist/tui.js +2061 -0
  243. package/dist/types.d.ts +124 -0
  244. package/dist/types.d.ts.map +1 -0
  245. package/dist/types.js +2 -0
  246. package/dist/types.js.map +1 -0
  247. package/dist/utils/git-branch.d.ts +11 -0
  248. package/dist/utils/git-branch.d.ts.map +1 -0
  249. package/dist/utils/git-branch.js +35 -0
  250. package/dist/utils/git-branch.js.map +1 -0
  251. package/dist/utils/graph-status-store.d.ts +72 -0
  252. package/dist/utils/graph-status-store.d.ts.map +1 -0
  253. package/dist/utils/graph-status-store.js +62 -0
  254. package/dist/utils/graph-status-store.js.map +1 -0
  255. package/dist/utils/logger.d.ts +8 -0
  256. package/dist/utils/logger.d.ts.map +1 -0
  257. package/dist/utils/logger.js +89 -0
  258. package/dist/utils/logger.js.map +1 -0
  259. package/dist/utils/loop-format.d.ts +5 -0
  260. package/dist/utils/loop-format.d.ts.map +1 -0
  261. package/dist/utils/loop-format.js +29 -0
  262. package/dist/utils/loop-format.js.map +1 -0
  263. package/dist/utils/loop-helpers.d.ts +9 -0
  264. package/dist/utils/loop-helpers.d.ts.map +1 -0
  265. package/dist/utils/loop-helpers.js +20 -0
  266. package/dist/utils/loop-helpers.js.map +1 -0
  267. package/dist/utils/loop-launch.d.ts +32 -0
  268. package/dist/utils/loop-launch.d.ts.map +1 -0
  269. package/dist/utils/loop-launch.js +162 -0
  270. package/dist/utils/loop-launch.js.map +1 -0
  271. package/dist/utils/model-fallback.d.ts +27 -0
  272. package/dist/utils/model-fallback.d.ts.map +1 -0
  273. package/dist/utils/model-fallback.js +33 -0
  274. package/dist/utils/model-fallback.js.map +1 -0
  275. package/dist/utils/partial-match.d.ts +7 -0
  276. package/dist/utils/partial-match.d.ts.map +1 -0
  277. package/dist/utils/partial-match.js +56 -0
  278. package/dist/utils/partial-match.js.map +1 -0
  279. package/dist/utils/plan-execution.d.ts +65 -0
  280. package/dist/utils/plan-execution.d.ts.map +1 -0
  281. package/dist/utils/plan-execution.js +107 -0
  282. package/dist/utils/plan-execution.js.map +1 -0
  283. package/dist/utils/session-stats.d.ts +36 -0
  284. package/dist/utils/session-stats.d.ts.map +1 -0
  285. package/dist/utils/session-stats.js +145 -0
  286. package/dist/utils/session-stats.js.map +1 -0
  287. package/dist/utils/tui-graph-status.d.ts +38 -0
  288. package/dist/utils/tui-graph-status.d.ts.map +1 -0
  289. package/dist/utils/tui-graph-status.js +95 -0
  290. package/dist/utils/tui-graph-status.js.map +1 -0
  291. package/dist/utils/tui-plan-store.d.ts +54 -0
  292. package/dist/utils/tui-plan-store.d.ts.map +1 -0
  293. package/dist/utils/tui-plan-store.js +168 -0
  294. package/dist/utils/tui-plan-store.js.map +1 -0
  295. package/dist/utils/tui-refresh-helpers.d.ts +44 -0
  296. package/dist/utils/tui-refresh-helpers.d.ts.map +1 -0
  297. package/dist/utils/tui-refresh-helpers.js +120 -0
  298. package/dist/utils/tui-refresh-helpers.js.map +1 -0
  299. package/dist/utils/upgrade.d.ts +23 -0
  300. package/dist/utils/upgrade.d.ts.map +1 -0
  301. package/dist/utils/upgrade.js +111 -0
  302. package/dist/utils/upgrade.js.map +1 -0
  303. package/dist/version.d.ts +2 -0
  304. package/dist/version.d.ts.map +1 -0
  305. package/dist/version.js +2 -0
  306. package/dist/version.js.map +1 -0
  307. package/package.json +92 -0
  308. package/scripts/build.ts +67 -0
  309. package/src/command/template/review.txt +101 -0
@@ -0,0 +1,124 @@
1
+ export type MemoryScope = 'convention' | 'decision' | 'context';
2
+ export interface Memory {
3
+ id: number;
4
+ projectId: string;
5
+ scope: MemoryScope;
6
+ content: string;
7
+ filePath: string | null;
8
+ accessCount: number;
9
+ lastAccessedAt: number | null;
10
+ createdAt: number;
11
+ updatedAt: number;
12
+ }
13
+ export interface CreateMemoryInput {
14
+ projectId: string;
15
+ scope: MemoryScope;
16
+ content: string;
17
+ filePath?: string;
18
+ }
19
+ export interface UpdateMemoryInput {
20
+ content?: string;
21
+ scope?: MemoryScope;
22
+ }
23
+ export interface MemorySearchResult {
24
+ memory: Memory;
25
+ distance: number;
26
+ }
27
+ export interface MemoryStats {
28
+ projectId: string;
29
+ total: number;
30
+ byScope: Record<MemoryScope, number>;
31
+ }
32
+ export interface LoggingConfig {
33
+ enabled: boolean;
34
+ file: string;
35
+ debug?: boolean;
36
+ }
37
+ export interface Logger {
38
+ log: (message: string, ...args: unknown[]) => void;
39
+ error: (message: string, ...args: unknown[]) => void;
40
+ debug: (message: string, ...args: unknown[]) => void;
41
+ }
42
+ export interface LoopConfig {
43
+ enabled?: boolean;
44
+ defaultMaxIterations?: number;
45
+ cleanupWorktree?: boolean;
46
+ defaultAudit?: boolean;
47
+ model?: string;
48
+ stallTimeoutMs?: number;
49
+ minAudits?: number;
50
+ }
51
+ export interface SandboxConfig {
52
+ mode: 'off' | 'docker';
53
+ image?: string;
54
+ }
55
+ export interface ListMemoriesFilter {
56
+ scope?: MemoryScope;
57
+ limit?: number;
58
+ offset?: number;
59
+ }
60
+ export interface CompactionConfig {
61
+ customPrompt?: boolean;
62
+ maxContextTokens?: number;
63
+ }
64
+ export interface MemoryInjectionConfig {
65
+ enabled?: boolean;
66
+ maxResults?: number;
67
+ distanceThreshold?: number;
68
+ maxTokens?: number;
69
+ /** @deprecated Use defaultKvTtlMs in root config instead */
70
+ cacheTtlMs?: number;
71
+ debug?: boolean;
72
+ }
73
+ export interface MessagesTransformConfig {
74
+ enabled?: boolean;
75
+ debug?: boolean;
76
+ }
77
+ export interface TuiConfig {
78
+ sidebar?: boolean;
79
+ showLoops?: boolean;
80
+ showVersion?: boolean;
81
+ }
82
+ export interface AgentOverrideConfig {
83
+ temperature?: number;
84
+ }
85
+ export interface GraphConfig {
86
+ enabled?: boolean;
87
+ autoScan?: boolean;
88
+ maxFiles?: number;
89
+ watch?: boolean;
90
+ debounceMs?: number;
91
+ }
92
+ export interface PluginConfig {
93
+ dataDir?: string;
94
+ logging?: LoggingConfig;
95
+ compaction?: CompactionConfig;
96
+ messagesTransform?: MessagesTransformConfig;
97
+ executionModel?: string;
98
+ auditorModel?: string;
99
+ loop?: LoopConfig;
100
+ /** @deprecated Use `loop` instead */
101
+ ralph?: LoopConfig;
102
+ defaultKvTtlMs?: number;
103
+ tui?: TuiConfig;
104
+ agents?: Record<string, AgentOverrideConfig>;
105
+ sandbox?: SandboxConfig;
106
+ graph?: GraphConfig;
107
+ }
108
+ export type ExportFormat = 'json' | 'markdown';
109
+ export interface ExportOptions {
110
+ format?: ExportFormat;
111
+ output?: string;
112
+ projectId?: string;
113
+ scope?: MemoryScope;
114
+ limit?: number;
115
+ offset?: number;
116
+ dbPath?: string;
117
+ }
118
+ export interface ImportOptions {
119
+ format?: ExportFormat;
120
+ projectId: string;
121
+ force?: boolean;
122
+ dbPath?: string;
123
+ }
124
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { LoopService } from '../services/loop';
2
+ /**
3
+ * Injects the current git branch field into a JSON object for review findings.
4
+ * Checks active memory loops first, then falls back to git command.
5
+ *
6
+ * @param value - The object to inject the branch field into
7
+ * @param directory - The directory to check for git branch
8
+ * @param loopService - The loop service for checking active loops
9
+ */
10
+ export declare function injectBranchField(value: unknown, directory: string, loopService: LoopService): void;
11
+ //# sourceMappingURL=git-branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-branch.d.ts","sourceRoot":"","sources":["../../src/utils/git-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGnD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,GACvB,IAAI,CAqBN"}
@@ -0,0 +1,35 @@
1
+ import { execSync } from 'child_process';
2
+ /**
3
+ * Injects the current git branch field into a JSON object for review findings.
4
+ * Checks active memory loops first, then falls back to git command.
5
+ *
6
+ * @param value - The object to inject the branch field into
7
+ * @param directory - The directory to check for git branch
8
+ * @param loopService - The loop service for checking active loops
9
+ */
10
+ export function injectBranchField(value, directory, loopService) {
11
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
12
+ return;
13
+ const active = loopService.listActive();
14
+ const loop = active.find((s) => s.worktreeDir === directory);
15
+ if (loop?.worktreeBranch) {
16
+ ;
17
+ value.branch = loop.worktreeBranch;
18
+ }
19
+ else {
20
+ try {
21
+ const branch = execSync('git rev-parse --abbrev-ref HEAD', {
22
+ cwd: directory,
23
+ encoding: 'utf-8',
24
+ }).trim();
25
+ if (branch) {
26
+ ;
27
+ value.branch = branch;
28
+ }
29
+ }
30
+ catch {
31
+ // git not available or not a repo
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=git-branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-branch.js","sourceRoot":"","sources":["../../src/utils/git-branch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAc,EACd,SAAiB,EACjB,WAAwB;IAExB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAM;IAE/E,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,CAAA;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAA;IAE5D,IAAI,IAAI,EAAE,cAAc,EAAE,CAAC;QACzB,CAAC;QAAC,KAAiC,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAA;IAClE,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;gBACzD,GAAG,EAAE,SAAS;gBACd,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,IAAI,EAAE,CAAA;YACT,IAAI,MAAM,EAAE,CAAC;gBACX,CAAC;gBAAC,KAAiC,CAAC,MAAM,GAAG,MAAM,CAAA;YACrD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Graph status store for persisting and reading graph service state.
3
+ *
4
+ * This module provides helpers for persisting graph service lifecycle state
5
+ * to the shared project KV store, allowing the TUI to display real-time
6
+ * graph readiness without direct backend coupling.
7
+ */
8
+ import type { KvService } from '../services/kv';
9
+ /**
10
+ * Graph service state enumeration
11
+ */
12
+ export type GraphState = 'unavailable' | 'initializing' | 'indexing' | 'ready' | 'error';
13
+ /**
14
+ * Graph statistics payload
15
+ */
16
+ export interface GraphStatsPayload {
17
+ files: number;
18
+ symbols: number;
19
+ edges: number;
20
+ calls: number;
21
+ }
22
+ /**
23
+ * Persisted graph status payload
24
+ */
25
+ export interface GraphStatusPayload {
26
+ /** Current state of the graph service */
27
+ state: GraphState;
28
+ /** Whether the graph is ready for queries */
29
+ ready: boolean;
30
+ /** Optional statistics about the graph */
31
+ stats?: GraphStatsPayload;
32
+ /** Optional human-readable status or error message */
33
+ message?: string;
34
+ /** Timestamp of the last status update */
35
+ updatedAt: number;
36
+ }
37
+ /**
38
+ * Default unavailable status used when graph is disabled or not yet initialized
39
+ */
40
+ export declare const UNAVAILABLE_STATUS: GraphStatusPayload;
41
+ /**
42
+ * Key used for storing graph status in the project KV store
43
+ */
44
+ export declare const GRAPH_STATUS_KEY = "graph:status";
45
+ /**
46
+ * Writes graph status to the project KV store.
47
+ *
48
+ * @param kvService - The KV service instance
49
+ * @param projectId - The project ID
50
+ * @param status - The status payload to persist
51
+ */
52
+ export declare function writeGraphStatus(kvService: KvService, projectId: string, status: GraphStatusPayload): void;
53
+ /**
54
+ * Reads graph status from the project KV store.
55
+ *
56
+ * @param kvService - The KV service instance
57
+ * @param projectId - The project ID
58
+ * @returns The status payload or null if not found
59
+ */
60
+ export declare function readGraphStatus(kvService: KvService, projectId: string): GraphStatusPayload | null;
61
+ /**
62
+ * Creates a status callback function that persists graph state changes.
63
+ *
64
+ * This factory function returns a callback that can be passed to the graph
65
+ * service to automatically persist state transitions to the KV store.
66
+ *
67
+ * @param kvService - The KV service instance
68
+ * @param projectId - The project ID
69
+ * @returns A callback function for status updates
70
+ */
71
+ export declare function createGraphStatusCallback(kvService: KvService, projectId: string): (state: GraphState, stats?: GraphStatsPayload, message?: string) => void;
72
+ //# sourceMappingURL=graph-status-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-status-store.d.ts","sourceRoot":"","sources":["../../src/utils/graph-status-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAA;AAExF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,KAAK,EAAE,UAAU,CAAA;IACjB,6CAA6C;IAC7C,KAAK,EAAE,OAAO,CAAA;IACd,0CAA0C;IAC1C,KAAK,CAAC,EAAE,iBAAiB,CAAA;IACzB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAIhC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,iBAAiB,CAAA;AAE9C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,GACzB,IAAI,CAEN;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,GAChB,kBAAkB,GAAG,IAAI,CAE3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,GAChB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAW1E"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Graph status store for persisting and reading graph service state.
3
+ *
4
+ * This module provides helpers for persisting graph service lifecycle state
5
+ * to the shared project KV store, allowing the TUI to display real-time
6
+ * graph readiness without direct backend coupling.
7
+ */
8
+ /**
9
+ * Default unavailable status used when graph is disabled or not yet initialized
10
+ */
11
+ export const UNAVAILABLE_STATUS = {
12
+ state: 'unavailable',
13
+ ready: false,
14
+ updatedAt: 0,
15
+ };
16
+ /**
17
+ * Key used for storing graph status in the project KV store
18
+ */
19
+ export const GRAPH_STATUS_KEY = 'graph:status';
20
+ /**
21
+ * Writes graph status to the project KV store.
22
+ *
23
+ * @param kvService - The KV service instance
24
+ * @param projectId - The project ID
25
+ * @param status - The status payload to persist
26
+ */
27
+ export function writeGraphStatus(kvService, projectId, status) {
28
+ kvService.set(projectId, GRAPH_STATUS_KEY, status);
29
+ }
30
+ /**
31
+ * Reads graph status from the project KV store.
32
+ *
33
+ * @param kvService - The KV service instance
34
+ * @param projectId - The project ID
35
+ * @returns The status payload or null if not found
36
+ */
37
+ export function readGraphStatus(kvService, projectId) {
38
+ return kvService.get(projectId, GRAPH_STATUS_KEY);
39
+ }
40
+ /**
41
+ * Creates a status callback function that persists graph state changes.
42
+ *
43
+ * This factory function returns a callback that can be passed to the graph
44
+ * service to automatically persist state transitions to the KV store.
45
+ *
46
+ * @param kvService - The KV service instance
47
+ * @param projectId - The project ID
48
+ * @returns A callback function for status updates
49
+ */
50
+ export function createGraphStatusCallback(kvService, projectId) {
51
+ return (state, stats, message) => {
52
+ const status = {
53
+ state,
54
+ ready: state === 'ready',
55
+ stats,
56
+ message,
57
+ updatedAt: Date.now(),
58
+ };
59
+ writeGraphStatus(kvService, projectId, status);
60
+ };
61
+ }
62
+ //# sourceMappingURL=graph-status-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-status-store.js","sourceRoot":"","sources":["../../src/utils/graph-status-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmCH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAuB;IACpD,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,CAAC;CACb,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAoB,EACpB,SAAiB,EACjB,MAA0B;IAE1B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAA;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAoB,EACpB,SAAiB;IAEjB,OAAO,SAAS,CAAC,GAAG,CAAqB,SAAS,EAAE,gBAAgB,CAAC,CAAA;AACvE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAoB,EACpB,SAAiB;IAEjB,OAAO,CAAC,KAAiB,EAAE,KAAyB,EAAE,OAAgB,EAAE,EAAE;QACxE,MAAM,MAAM,GAAuB;YACjC,KAAK;YACL,KAAK,EAAE,KAAK,KAAK,OAAO;YACxB,KAAK;YACL,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAA;QACD,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { LoggingConfig } from '../types';
2
+ export declare function slugify(text: string): string;
3
+ export declare function createLogger(config: LoggingConfig): {
4
+ log: (_message: string, ..._args: unknown[]) => void;
5
+ error: (_message: string, ..._args: unknown[]) => void;
6
+ debug: (_message: string, ..._args: unknown[]) => void;
7
+ };
8
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAK7C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAsBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa;oBAM5B,MAAM,YAAY,OAAO,EAAE,KAAG,IAAI;sBAChC,MAAM,YAAY,OAAO,EAAE,KAAG,IAAI;sBAClC,MAAM,YAAY,OAAO,EAAE,KAAG,IAAI;EAkDzD"}
@@ -0,0 +1,89 @@
1
+ import { appendFileSync, existsSync, mkdirSync, renameSync, statSync, writeFileSync } from 'fs';
2
+ import { dirname } from 'path';
3
+ const PREFIX = '[OpenCodeForge]';
4
+ const MAX_LOG_FILE_SIZE = 10 * 1024 * 1024;
5
+ export function slugify(text) {
6
+ return text
7
+ .toLowerCase()
8
+ .replace(/[^\w\s-]/g, '')
9
+ .trim()
10
+ .replace(/\s+/g, '-')
11
+ .replace(/-+/g, '-')
12
+ .substring(0, 50);
13
+ }
14
+ function ensureLogDir(filePath) {
15
+ const dir = dirname(filePath);
16
+ if (!existsSync(dir)) {
17
+ mkdirSync(dir, { recursive: true });
18
+ }
19
+ }
20
+ function checkFileSize(filePath) {
21
+ try {
22
+ const stats = statSync(filePath);
23
+ if (stats.size > MAX_LOG_FILE_SIZE) {
24
+ const backupPath = filePath + '.old';
25
+ renameSync(filePath, backupPath);
26
+ writeFileSync(filePath, '', 'utf-8');
27
+ }
28
+ }
29
+ catch {
30
+ // File doesn't exist yet, ignore
31
+ }
32
+ }
33
+ export function createLogger(config) {
34
+ const isEnabled = config.enabled;
35
+ const isDebug = config.debug ?? false;
36
+ if (!isEnabled) {
37
+ return {
38
+ log: (_message, ..._args) => { },
39
+ error: (_message, ..._args) => { },
40
+ debug: (_message, ..._args) => { },
41
+ };
42
+ }
43
+ const filePath = config.file;
44
+ ensureLogDir(filePath);
45
+ function formatArg(arg) {
46
+ if (arg === null)
47
+ return 'null';
48
+ if (arg === undefined)
49
+ return 'undefined';
50
+ if (arg instanceof Error) {
51
+ return arg.stack ?? `${arg.name}: ${arg.message}`;
52
+ }
53
+ if (typeof arg === 'object') {
54
+ try {
55
+ return JSON.stringify(arg);
56
+ }
57
+ catch {
58
+ return String(arg);
59
+ }
60
+ }
61
+ return String(arg);
62
+ }
63
+ function write(level, message, args) {
64
+ checkFileSize(filePath);
65
+ const timestamp = new Date().toISOString();
66
+ const formattedArgs = args.length > 0 ? ' ' + args.map(formatArg).join(' ') : '';
67
+ const line = `${timestamp} ${level} ${PREFIX} ${message}${formattedArgs}\n`;
68
+ try {
69
+ appendFileSync(filePath, line, 'utf-8');
70
+ }
71
+ catch {
72
+ // Silently fail if logging fails - don't crash the plugin
73
+ }
74
+ }
75
+ return {
76
+ log: (message, ...args) => {
77
+ write('INFO', message, args);
78
+ },
79
+ error: (message, ...args) => {
80
+ write('ERROR', message, args);
81
+ },
82
+ debug: isDebug
83
+ ? (message, ...args) => {
84
+ write('DEBUG', message, args);
85
+ }
86
+ : (_message, ..._args) => { },
87
+ };
88
+ }
89
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { LoopSessionOutput } from '../services/loop';
2
+ export declare function formatTokens(n: number): string;
3
+ export declare function formatSessionOutput(sessionOutput: LoopSessionOutput): string[];
4
+ export declare function formatAuditResult(auditResult: string): string[];
5
+ //# sourceMappingURL=loop-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-format.d.ts","sourceRoot":"","sources":["../../src/utils/loop-format.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAuB9E;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAG/D"}
@@ -0,0 +1,29 @@
1
+ import { truncate } from '../cli/utils';
2
+ export function formatTokens(n) {
3
+ return n >= 1000 ? `${(n / 1000).toFixed(1)}k` : `${n}`;
4
+ }
5
+ export function formatSessionOutput(sessionOutput) {
6
+ const lines = [];
7
+ if (sessionOutput.messages.length > 0) {
8
+ lines.push('Recent Activity:');
9
+ for (const msg of sessionOutput.messages) {
10
+ const preview = truncate(msg.text.replace(/\n/g, ' ').trim(), 1000);
11
+ lines.push(` [assistant] ${preview}`);
12
+ }
13
+ lines.push('');
14
+ }
15
+ const costStr = `$${sessionOutput.totalCost.toFixed(4)}`;
16
+ const t = sessionOutput.totalTokens;
17
+ const tokensStr = `${formatTokens(t.input)} in / ${formatTokens(t.output)} out / ${formatTokens(t.reasoning)} reasoning / ${formatTokens(t.cacheRead)} cache read / ${formatTokens(t.cacheWrite)} cache write`;
18
+ lines.push(` Cost: ${costStr} | Tokens: ${tokensStr}`);
19
+ if (sessionOutput.fileChanges) {
20
+ const fc = sessionOutput.fileChanges;
21
+ lines.push(` Files changed: ${fc.files} (+${fc.additions}/-${fc.deletions} lines)`);
22
+ }
23
+ return lines;
24
+ }
25
+ export function formatAuditResult(auditResult) {
26
+ const auditPreview = truncate(auditResult, 300);
27
+ return ['', 'Last Audit:', ` ${auditPreview}`];
28
+ }
29
+ //# sourceMappingURL=loop-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-format.js","sourceRoot":"","sources":["../../src/utils/loop-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAGvC,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,aAAgC;IAClE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC9B,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;YACnE,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAA;QACxC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,MAAM,CAAC,GAAG,aAAa,CAAC,WAAW,CAAA;IACnC,MAAM,SAAS,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAA;IAC9M,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,cAAc,SAAS,EAAE,CAAC,CAAA;IAEvD,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,CAAA;QACpC,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,SAAS,CAAC,CAAA;IACtF,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IAC/C,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PluginConfig } from '../types';
2
+ import type { LoopService } from '../services/loop';
3
+ export declare function resolveLoopModel(config: PluginConfig, loopService: LoopService, worktreeName: string): {
4
+ providerID: string;
5
+ modelID: string;
6
+ } | undefined;
7
+ export declare function formatDuration(seconds: number): string;
8
+ export declare function computeElapsedSeconds(startedAt?: string, endedAt?: string): number;
9
+ //# sourceMappingURL=loop-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/loop-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAGnD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,GACnB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIrD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAKlF"}
@@ -0,0 +1,20 @@
1
+ import { parseModelString } from './model-fallback';
2
+ export function resolveLoopModel(config, loopService, worktreeName) {
3
+ const state = loopService.getActiveState(worktreeName);
4
+ if (state?.modelFailed)
5
+ return undefined;
6
+ return parseModelString(config.loop?.model) ?? parseModelString(config.executionModel);
7
+ }
8
+ export function formatDuration(seconds) {
9
+ const minutes = Math.floor(seconds / 60);
10
+ const secs = seconds % 60;
11
+ return minutes > 0 ? `${minutes}m ${secs}s` : `${secs}s`;
12
+ }
13
+ export function computeElapsedSeconds(startedAt, endedAt) {
14
+ if (!startedAt)
15
+ return 0;
16
+ const start = new Date(startedAt).getTime();
17
+ const end = endedAt ? new Date(endedAt).getTime() : Date.now();
18
+ return Math.round((end - start) / 1000);
19
+ }
20
+ //# sourceMappingURL=loop-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-helpers.js","sourceRoot":"","sources":["../../src/utils/loop-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,WAAwB,EACxB,YAAoB;IAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACtD,IAAI,KAAK,EAAE,WAAW;QAAE,OAAO,SAAS,CAAA;IACxC,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AACxF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAA;IACzB,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAkB,EAAE,OAAgB;IACxE,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAA;IACxB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Fresh loop launch helper for TUI and tool-side execution.
3
+ *
4
+ * This module provides functions to create fresh loop sessions
5
+ * separate from the restartLoop() function which requires preexisting loop state.
6
+ */
7
+ import type { TuiPluginApi } from '@opencode-ai/plugin/tui';
8
+ export interface FreshLoopOptions {
9
+ planText: string;
10
+ title: string;
11
+ directory: string;
12
+ projectId: string;
13
+ isWorktree: boolean;
14
+ api: TuiPluginApi;
15
+ dbPath?: string;
16
+ }
17
+ export interface LaunchResult {
18
+ sessionId: string;
19
+ loopName: string;
20
+ worktreeName: string;
21
+ isWorktree: boolean;
22
+ worktreeDir?: string;
23
+ worktreeBranch?: string;
24
+ }
25
+ /**
26
+ * Launches a fresh loop session (either in-place or in a worktree).
27
+ * This is separate from restartLoop() which requires preexisting loop state.
28
+ *
29
+ * @returns LaunchResult with session ID, loop name, and worktree details if successful, null otherwise
30
+ */
31
+ export declare function launchFreshLoop(options: FreshLoopOptions): Promise<LaunchResult | null>;
32
+ //# sourceMappingURL=loop-launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-launch.d.ts","sourceRoot":"","sources":["../../src/utils/loop-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAS3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,GAAG,EAAE,YAAY,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAuJ7F"}