@bastani/atomic 0.5.4 → 0.5.5-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 (173) hide show
  1. package/README.md +44 -1
  2. package/dist/lib/path-root-guard.d.ts +4 -0
  3. package/dist/lib/path-root-guard.d.ts.map +1 -0
  4. package/dist/sdk/components/color-utils.d.ts +1 -0
  5. package/dist/sdk/components/color-utils.d.ts.map +1 -0
  6. package/dist/sdk/components/connectors.d.ts +3 -2
  7. package/dist/sdk/components/connectors.d.ts.map +1 -0
  8. package/dist/sdk/components/connectors.test.d.ts +1 -0
  9. package/dist/sdk/components/connectors.test.d.ts.map +1 -0
  10. package/dist/sdk/components/edge.d.ts +2 -1
  11. package/dist/sdk/components/edge.d.ts.map +1 -0
  12. package/dist/sdk/components/error-boundary.d.ts +1 -0
  13. package/dist/sdk/components/error-boundary.d.ts.map +1 -0
  14. package/dist/sdk/components/graph-theme.d.ts +2 -1
  15. package/dist/sdk/components/graph-theme.d.ts.map +1 -0
  16. package/dist/sdk/components/header.d.ts +1 -0
  17. package/dist/sdk/components/header.d.ts.map +1 -0
  18. package/dist/sdk/components/hooks.d.ts +15 -0
  19. package/dist/sdk/components/hooks.d.ts.map +1 -0
  20. package/dist/sdk/components/layout.d.ts +2 -1
  21. package/dist/sdk/components/layout.d.ts.map +1 -0
  22. package/dist/sdk/components/layout.test.d.ts +1 -0
  23. package/dist/sdk/components/layout.test.d.ts.map +1 -0
  24. package/dist/sdk/components/node-card.d.ts +5 -3
  25. package/dist/sdk/components/node-card.d.ts.map +1 -0
  26. package/dist/sdk/components/orchestrator-panel-contexts.d.ts +3 -2
  27. package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +1 -0
  28. package/dist/sdk/components/orchestrator-panel-store.d.ts +2 -1
  29. package/dist/sdk/components/orchestrator-panel-store.d.ts.map +1 -0
  30. package/dist/sdk/components/orchestrator-panel-store.test.d.ts +1 -0
  31. package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +1 -0
  32. package/dist/sdk/components/orchestrator-panel-types.d.ts +1 -0
  33. package/dist/sdk/components/orchestrator-panel-types.d.ts.map +1 -0
  34. package/dist/sdk/components/orchestrator-panel.d.ts +2 -1
  35. package/dist/sdk/components/orchestrator-panel.d.ts.map +1 -0
  36. package/dist/sdk/components/session-graph-panel.d.ts +1 -0
  37. package/dist/sdk/components/session-graph-panel.d.ts.map +1 -0
  38. package/dist/sdk/components/status-helpers.d.ts +2 -1
  39. package/dist/sdk/components/status-helpers.d.ts.map +1 -0
  40. package/dist/sdk/components/statusline.d.ts +2 -1
  41. package/dist/sdk/components/statusline.d.ts.map +1 -0
  42. package/dist/sdk/components/workflow-picker-panel.d.ts +11 -8
  43. package/dist/sdk/components/workflow-picker-panel.d.ts.map +1 -0
  44. package/dist/sdk/define-workflow.d.ts +2 -1
  45. package/dist/sdk/define-workflow.d.ts.map +1 -0
  46. package/dist/sdk/define-workflow.test.d.ts +1 -0
  47. package/dist/sdk/define-workflow.test.d.ts.map +1 -0
  48. package/dist/sdk/errors.d.ts +3 -0
  49. package/dist/sdk/errors.d.ts.map +1 -0
  50. package/dist/sdk/errors.test.d.ts +2 -0
  51. package/dist/sdk/errors.test.d.ts.map +1 -0
  52. package/dist/sdk/index.d.ts +7 -6
  53. package/dist/sdk/index.d.ts.map +1 -0
  54. package/dist/sdk/providers/claude.d.ts +17 -6
  55. package/dist/sdk/providers/claude.d.ts.map +1 -0
  56. package/dist/sdk/providers/copilot.d.ts +2 -5
  57. package/dist/sdk/providers/copilot.d.ts.map +1 -0
  58. package/dist/sdk/providers/opencode.d.ts +2 -5
  59. package/dist/sdk/providers/opencode.d.ts.map +1 -0
  60. package/dist/sdk/runtime/discovery.d.ts +2 -1
  61. package/dist/sdk/runtime/discovery.d.ts.map +1 -0
  62. package/dist/sdk/runtime/executor-entry.d.ts +1 -0
  63. package/dist/sdk/runtime/executor-entry.d.ts.map +1 -0
  64. package/dist/sdk/runtime/executor.d.ts +3 -6
  65. package/dist/sdk/runtime/executor.d.ts.map +1 -0
  66. package/dist/sdk/runtime/executor.test.d.ts +1 -0
  67. package/dist/sdk/runtime/executor.test.d.ts.map +1 -0
  68. package/dist/sdk/runtime/graph-inference.d.ts +1 -0
  69. package/dist/sdk/runtime/graph-inference.d.ts.map +1 -0
  70. package/dist/sdk/runtime/loader.d.ts +5 -7
  71. package/dist/sdk/runtime/loader.d.ts.map +1 -0
  72. package/dist/sdk/runtime/panel.d.ts +3 -2
  73. package/dist/sdk/runtime/panel.d.ts.map +1 -0
  74. package/dist/sdk/runtime/theme.d.ts +1 -0
  75. package/dist/sdk/runtime/theme.d.ts.map +1 -0
  76. package/dist/sdk/runtime/tmux.d.ts +26 -8
  77. package/dist/sdk/runtime/tmux.d.ts.map +1 -0
  78. package/dist/sdk/types.d.ts +23 -1
  79. package/dist/sdk/types.d.ts.map +1 -0
  80. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +1 -0
  81. package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +1 -0
  82. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +1 -0
  83. package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +1 -0
  84. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +1 -0
  85. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +1 -0
  86. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +2 -1
  87. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +1 -0
  88. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +1 -0
  89. package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +1 -0
  90. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +1 -0
  91. package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +1 -0
  92. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +1 -0
  93. package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +1 -0
  94. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +1 -0
  95. package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +1 -0
  96. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +1 -0
  97. package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +1 -0
  98. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +1 -0
  99. package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +1 -0
  100. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +2 -1
  101. package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +1 -0
  102. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +1 -0
  103. package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +1 -0
  104. package/dist/sdk/workflows/index.d.ts +14 -14
  105. package/dist/sdk/workflows/index.d.ts.map +1 -0
  106. package/dist/services/config/definitions.d.ts +85 -0
  107. package/dist/services/config/definitions.d.ts.map +1 -0
  108. package/dist/services/system/copy.d.ts +77 -0
  109. package/dist/services/system/copy.d.ts.map +1 -0
  110. package/dist/services/system/detect.d.ts +75 -0
  111. package/dist/services/system/detect.d.ts.map +1 -0
  112. package/package.json +13 -34
  113. package/src/cli.ts +11 -10
  114. package/src/commands/cli/chat/index.ts +11 -11
  115. package/src/commands/cli/chat.ts +1 -1
  116. package/src/commands/cli/config.ts +10 -9
  117. package/src/commands/cli/init/index.ts +11 -11
  118. package/src/commands/cli/init/onboarding.ts +4 -4
  119. package/src/commands/cli/init/scm.ts +5 -5
  120. package/src/commands/cli/init.ts +1 -1
  121. package/src/commands/cli/workflow-command.test.ts +19 -11
  122. package/src/commands/cli/workflow.test.ts +2 -2
  123. package/src/commands/cli/workflow.ts +6 -6
  124. package/src/lib/merge.ts +17 -31
  125. package/src/lib/path-root-guard.ts +2 -2
  126. package/src/lib/spawn.ts +13 -7
  127. package/src/scripts/bump-version.ts +1 -1
  128. package/src/scripts/constants.ts +2 -2
  129. package/src/sdk/components/header.tsx +21 -23
  130. package/src/sdk/components/hooks.ts +21 -0
  131. package/src/sdk/components/node-card.tsx +3 -2
  132. package/src/sdk/components/session-graph-panel.tsx +14 -18
  133. package/src/sdk/components/workflow-picker-panel.tsx +201 -216
  134. package/src/sdk/errors.test.ts +56 -0
  135. package/src/sdk/errors.ts +5 -0
  136. package/src/sdk/providers/claude.ts +279 -70
  137. package/src/sdk/providers/copilot.ts +17 -27
  138. package/src/sdk/providers/opencode.ts +17 -27
  139. package/src/sdk/runtime/discovery.ts +18 -18
  140. package/src/sdk/runtime/executor.test.ts +15 -48
  141. package/src/sdk/runtime/executor.ts +152 -121
  142. package/src/sdk/runtime/loader.ts +16 -21
  143. package/src/sdk/runtime/tmux.ts +95 -32
  144. package/src/sdk/types.ts +45 -0
  145. package/src/sdk/workflows/builtin/deep-research-codebase/claude/index.ts +27 -0
  146. package/src/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.ts +25 -16
  147. package/src/sdk/workflows/builtin/deep-research-codebase/helpers/scout.ts +25 -24
  148. package/src/sdk/workflows/builtin/ralph/claude/index.ts +5 -0
  149. package/src/sdk/workflows/index.ts +3 -3
  150. package/src/services/config/atomic-config.ts +7 -8
  151. package/src/services/config/atomic-global-config.ts +9 -9
  152. package/src/services/config/config-path.ts +1 -1
  153. package/src/services/config/definitions.ts +3 -4
  154. package/src/services/config/index.ts +1 -1
  155. package/src/services/config/settings.ts +30 -36
  156. package/src/services/system/agents.ts +3 -3
  157. package/src/services/system/auto-sync.ts +9 -9
  158. package/src/services/system/copy.ts +9 -9
  159. package/src/services/system/file-lock.ts +2 -2
  160. package/src/services/system/install-ui.ts +2 -2
  161. package/src/services/system/skills.ts +1 -1
  162. package/src/theme/colors.ts +1 -1
  163. package/src/theme/logo.ts +1 -1
  164. package/tsconfig.json +3 -4
  165. package/dist/chunk-1gb5qxz9.js +0 -1
  166. package/dist/chunk-fdk7tact.js +0 -417
  167. package/dist/chunk-xkxndz5g.js +0 -1041
  168. package/dist/sdk/index.js +0 -52
  169. package/dist/sdk/workflows/builtin/ralph/claude/index.js +0 -96
  170. package/dist/sdk/workflows/builtin/ralph/copilot/index.js +0 -119
  171. package/dist/sdk/workflows/builtin/ralph/opencode/index.js +0 -148
  172. package/dist/sdk/workflows/index.js +0 -100
  173. package/src/commands/cli/chat/client.ts +0 -18
package/dist/sdk/index.js DELETED
@@ -1,52 +0,0 @@
1
- // @bun
2
- import {
3
- WorkflowLoader,
4
- defineWorkflow,
5
- discoverWorkflows,
6
- executeWorkflow,
7
- findWorkflow
8
- } from "../chunk-xkxndz5g.js";
9
-
10
- // src/sdk/errors.ts
11
- class MissingDependencyError extends Error {
12
- dependency;
13
- constructor(dependency) {
14
- super(`Required dependency not found: ${dependency}`);
15
- this.dependency = dependency;
16
- this.name = "MissingDependencyError";
17
- }
18
- }
19
-
20
- class WorkflowNotCompiledError extends Error {
21
- path;
22
- constructor(path) {
23
- super(`Workflow at ${path} was defined but not compiled.
24
- ` + ` Add .compile() at the end of your defineWorkflow() chain:
25
-
26
- ` + ` export default defineWorkflow({ ... })
27
- ` + ` .run(async (ctx) => { ... })
28
- ` + ` .compile();`);
29
- this.path = path;
30
- this.name = "WorkflowNotCompiledError";
31
- }
32
- }
33
-
34
- class InvalidWorkflowError extends Error {
35
- path;
36
- constructor(path) {
37
- super(`${path} does not export a valid WorkflowDefinition.
38
- ` + ` Make sure it exports defineWorkflow(...).compile() as the default export.`);
39
- this.path = path;
40
- this.name = "InvalidWorkflowError";
41
- }
42
- }
43
- export {
44
- findWorkflow,
45
- executeWorkflow,
46
- discoverWorkflows,
47
- defineWorkflow,
48
- WorkflowNotCompiledError,
49
- WorkflowLoader,
50
- MissingDependencyError,
51
- InvalidWorkflowError
52
- };
@@ -1,96 +0,0 @@
1
- // @bun
2
- import {
3
- buildDebuggerReportPrompt,
4
- buildOrchestratorPrompt,
5
- buildPlannerPrompt,
6
- buildReviewPrompt,
7
- extractMarkdownBlock,
8
- hasActionableFindings,
9
- parseReviewResult,
10
- safeGitStatusS
11
- } from "../../../../../chunk-fdk7tact.js";
12
- import"../../../../../chunk-1gb5qxz9.js";
13
- import {
14
- defineWorkflow
15
- } from "../../../../../chunk-xkxndz5g.js";
16
-
17
- // src/sdk/workflows/builtin/ralph/claude/index.ts
18
- var MAX_LOOPS = 10;
19
- var CONSECUTIVE_CLEAN_THRESHOLD = 2;
20
- function asAgentCall(agentName, prompt) {
21
- return `@"${agentName} (agent)" ${prompt}`;
22
- }
23
- var claude_default = defineWorkflow({
24
- name: "ralph",
25
- description: "Plan \u2192 orchestrate \u2192 review \u2192 debug loop with bounded iteration"
26
- }).run(async (ctx) => {
27
- const prompt = ctx.inputs.prompt ?? "";
28
- let consecutiveClean = 0;
29
- let debuggerReport = "";
30
- for (let iteration = 1;iteration <= MAX_LOOPS; iteration++) {
31
- const plannerName = `planner-${iteration}`;
32
- await ctx.stage({ name: plannerName }, {}, {}, async (s) => {
33
- await s.session.query(asAgentCall("planner", buildPlannerPrompt(prompt, {
34
- iteration,
35
- debuggerReport: debuggerReport || undefined
36
- })));
37
- s.save(s.sessionId);
38
- });
39
- const orchName = `orchestrator-${iteration}`;
40
- await ctx.stage({ name: orchName }, {}, {}, async (s) => {
41
- await s.session.query(asAgentCall("orchestrator", buildOrchestratorPrompt(prompt)));
42
- s.save(s.sessionId);
43
- });
44
- let gitStatus = await safeGitStatusS();
45
- const reviewerName = `reviewer-${iteration}`;
46
- const review = await ctx.stage({ name: reviewerName }, {}, {}, async (s) => {
47
- const result = await s.session.query(asAgentCall("reviewer", buildReviewPrompt(prompt, { gitStatus, iteration })));
48
- s.save(s.sessionId);
49
- return result.output;
50
- });
51
- let reviewRaw = review.result;
52
- let parsed = parseReviewResult(reviewRaw);
53
- if (!hasActionableFindings(parsed, reviewRaw)) {
54
- consecutiveClean += 1;
55
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD)
56
- break;
57
- gitStatus = await safeGitStatusS();
58
- const confirmName = `reviewer-${iteration}-confirm`;
59
- const confirm = await ctx.stage({ name: confirmName }, {}, {}, async (s) => {
60
- const result = await s.session.query(asAgentCall("reviewer", buildReviewPrompt(prompt, {
61
- gitStatus,
62
- iteration,
63
- isConfirmationPass: true
64
- })));
65
- s.save(s.sessionId);
66
- return result.output;
67
- });
68
- reviewRaw = confirm.result;
69
- parsed = parseReviewResult(reviewRaw);
70
- if (!hasActionableFindings(parsed, reviewRaw)) {
71
- consecutiveClean += 1;
72
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD)
73
- break;
74
- } else {
75
- consecutiveClean = 0;
76
- }
77
- } else {
78
- consecutiveClean = 0;
79
- }
80
- if (hasActionableFindings(parsed, reviewRaw) && iteration < MAX_LOOPS) {
81
- const debuggerName = `debugger-${iteration}`;
82
- const debugger_ = await ctx.stage({ name: debuggerName }, {}, {}, async (s) => {
83
- const result = await s.session.query(asAgentCall("debugger", buildDebuggerReportPrompt(parsed, reviewRaw, {
84
- iteration,
85
- gitStatus
86
- })));
87
- s.save(s.sessionId);
88
- return result.output;
89
- });
90
- debuggerReport = extractMarkdownBlock(debugger_.result);
91
- }
92
- }
93
- }).compile();
94
- export {
95
- claude_default as default
96
- };
@@ -1,119 +0,0 @@
1
- // @bun
2
- import {
3
- buildDebuggerReportPrompt,
4
- buildOrchestratorPrompt,
5
- buildPlannerPrompt,
6
- buildReviewPrompt,
7
- extractMarkdownBlock,
8
- hasActionableFindings,
9
- parseReviewResult,
10
- safeGitStatusS
11
- } from "../../../../../chunk-fdk7tact.js";
12
- import"../../../../../chunk-1gb5qxz9.js";
13
- import {
14
- defineWorkflow
15
- } from "../../../../../chunk-xkxndz5g.js";
16
-
17
- // src/sdk/workflows/builtin/ralph/copilot/index.ts
18
- var MAX_LOOPS = 10;
19
- var CONSECUTIVE_CLEAN_THRESHOLD = 2;
20
- var AGENT_SEND_TIMEOUT_MS = 30 * 60 * 1000;
21
- function getAssistantText(messages) {
22
- return messages.filter((m) => m.type === "assistant.message" && !m.data.parentToolCallId).map((m) => m.data.content).filter((c) => c.length > 0).join(`
23
-
24
- `);
25
- }
26
- var copilot_default = defineWorkflow({
27
- name: "ralph",
28
- description: "Plan \u2192 orchestrate \u2192 review \u2192 debug loop with bounded iteration"
29
- }).run(async (ctx) => {
30
- const userPromptText = ctx.inputs.prompt ?? "";
31
- let consecutiveClean = 0;
32
- let debuggerReport = "";
33
- for (let iteration = 1;iteration <= MAX_LOOPS; iteration++) {
34
- const plannerName = `planner-${iteration}`;
35
- const planner = await ctx.stage({ name: plannerName }, {}, { agent: "planner" }, async (s) => {
36
- await s.session.sendAndWait({
37
- prompt: buildPlannerPrompt(userPromptText, {
38
- iteration,
39
- debuggerReport: debuggerReport || undefined
40
- })
41
- }, AGENT_SEND_TIMEOUT_MS);
42
- const messages = await s.session.getMessages();
43
- s.save(messages);
44
- return getAssistantText(messages);
45
- });
46
- const orchName = `orchestrator-${iteration}`;
47
- await ctx.stage({ name: orchName }, {}, { agent: "orchestrator" }, async (s) => {
48
- await s.session.sendAndWait({
49
- prompt: buildOrchestratorPrompt(userPromptText, {
50
- plannerNotes: planner.result
51
- })
52
- }, AGENT_SEND_TIMEOUT_MS);
53
- s.save(await s.session.getMessages());
54
- });
55
- let gitStatus = await safeGitStatusS();
56
- const reviewerName = `reviewer-${iteration}`;
57
- const review = await ctx.stage({ name: reviewerName }, {}, { agent: "reviewer" }, async (s) => {
58
- await s.session.sendAndWait({
59
- prompt: buildReviewPrompt(userPromptText, {
60
- gitStatus,
61
- iteration
62
- })
63
- }, AGENT_SEND_TIMEOUT_MS);
64
- const messages = await s.session.getMessages();
65
- s.save(messages);
66
- return getAssistantText(messages);
67
- });
68
- let reviewRaw = review.result;
69
- let parsed = parseReviewResult(reviewRaw);
70
- if (!hasActionableFindings(parsed, reviewRaw)) {
71
- consecutiveClean += 1;
72
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD)
73
- break;
74
- gitStatus = await safeGitStatusS();
75
- const confirmName = `reviewer-${iteration}-confirm`;
76
- const confirm = await ctx.stage({ name: confirmName }, {}, { agent: "reviewer" }, async (s) => {
77
- await s.session.sendAndWait({
78
- prompt: buildReviewPrompt(userPromptText, {
79
- gitStatus,
80
- iteration,
81
- isConfirmationPass: true
82
- })
83
- }, AGENT_SEND_TIMEOUT_MS);
84
- const messages = await s.session.getMessages();
85
- s.save(messages);
86
- return getAssistantText(messages);
87
- });
88
- reviewRaw = confirm.result;
89
- parsed = parseReviewResult(reviewRaw);
90
- if (!hasActionableFindings(parsed, reviewRaw)) {
91
- consecutiveClean += 1;
92
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD)
93
- break;
94
- } else {
95
- consecutiveClean = 0;
96
- }
97
- } else {
98
- consecutiveClean = 0;
99
- }
100
- if (hasActionableFindings(parsed, reviewRaw) && iteration < MAX_LOOPS) {
101
- const debuggerName = `debugger-${iteration}`;
102
- const debugger_ = await ctx.stage({ name: debuggerName }, {}, { agent: "debugger" }, async (s) => {
103
- await s.session.sendAndWait({
104
- prompt: buildDebuggerReportPrompt(parsed, reviewRaw, {
105
- iteration,
106
- gitStatus
107
- })
108
- }, AGENT_SEND_TIMEOUT_MS);
109
- const messages = await s.session.getMessages();
110
- s.save(messages);
111
- return getAssistantText(messages);
112
- });
113
- debuggerReport = extractMarkdownBlock(debugger_.result);
114
- }
115
- }
116
- }).compile();
117
- export {
118
- copilot_default as default
119
- };
@@ -1,148 +0,0 @@
1
- // @bun
2
- import {
3
- buildDebuggerReportPrompt,
4
- buildOrchestratorPrompt,
5
- buildPlannerPrompt,
6
- buildReviewPrompt,
7
- extractMarkdownBlock,
8
- hasActionableFindings,
9
- parseReviewResult,
10
- safeGitStatusS
11
- } from "../../../../../chunk-fdk7tact.js";
12
- import"../../../../../chunk-1gb5qxz9.js";
13
- import {
14
- defineWorkflow
15
- } from "../../../../../chunk-xkxndz5g.js";
16
-
17
- // src/sdk/workflows/builtin/ralph/opencode/index.ts
18
- var MAX_LOOPS = 10;
19
- var CONSECUTIVE_CLEAN_THRESHOLD = 2;
20
- function extractResponseText(parts) {
21
- return parts.filter((p) => p.type === "text").map((p) => p.text).join(`
22
- `);
23
- }
24
- var opencode_default = defineWorkflow({
25
- name: "ralph",
26
- description: "Plan \u2192 orchestrate \u2192 review \u2192 debug loop with bounded iteration"
27
- }).run(async (ctx) => {
28
- const prompt = ctx.inputs.prompt ?? "";
29
- let consecutiveClean = 0;
30
- let debuggerReport = "";
31
- for (let iteration = 1;iteration <= MAX_LOOPS; iteration++) {
32
- const plannerName = `planner-${iteration}`;
33
- const planner = await ctx.stage({ name: plannerName }, {}, { title: `planner-${iteration}` }, async (s) => {
34
- const result = await s.client.session.prompt({
35
- sessionID: s.session.id,
36
- parts: [
37
- {
38
- type: "text",
39
- text: buildPlannerPrompt(prompt, {
40
- iteration,
41
- debuggerReport: debuggerReport || undefined
42
- })
43
- }
44
- ],
45
- agent: "planner"
46
- });
47
- s.save(result.data);
48
- return extractResponseText(result.data.parts);
49
- });
50
- const orchName = `orchestrator-${iteration}`;
51
- await ctx.stage({ name: orchName }, {}, { title: `orchestrator-${iteration}` }, async (s) => {
52
- const result = await s.client.session.prompt({
53
- sessionID: s.session.id,
54
- parts: [
55
- {
56
- type: "text",
57
- text: buildOrchestratorPrompt(prompt, {
58
- plannerNotes: planner.result
59
- })
60
- }
61
- ],
62
- agent: "orchestrator"
63
- });
64
- s.save(result.data);
65
- });
66
- let gitStatus = await safeGitStatusS();
67
- const reviewerName = `reviewer-${iteration}`;
68
- const review = await ctx.stage({ name: reviewerName }, {}, { title: `reviewer-${iteration}` }, async (s) => {
69
- const result = await s.client.session.prompt({
70
- sessionID: s.session.id,
71
- parts: [
72
- {
73
- type: "text",
74
- text: buildReviewPrompt(prompt, {
75
- gitStatus,
76
- iteration
77
- })
78
- }
79
- ],
80
- agent: "reviewer"
81
- });
82
- s.save(result.data);
83
- return extractResponseText(result.data.parts);
84
- });
85
- let reviewRaw = review.result;
86
- let parsed = parseReviewResult(reviewRaw);
87
- if (!hasActionableFindings(parsed, reviewRaw)) {
88
- consecutiveClean += 1;
89
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD)
90
- break;
91
- gitStatus = await safeGitStatusS();
92
- const confirmName = `reviewer-${iteration}-confirm`;
93
- const confirm = await ctx.stage({ name: confirmName }, {}, { title: `reviewer-${iteration}-confirm` }, async (s) => {
94
- const result = await s.client.session.prompt({
95
- sessionID: s.session.id,
96
- parts: [
97
- {
98
- type: "text",
99
- text: buildReviewPrompt(prompt, {
100
- gitStatus,
101
- iteration,
102
- isConfirmationPass: true
103
- })
104
- }
105
- ],
106
- agent: "reviewer"
107
- });
108
- s.save(result.data);
109
- return extractResponseText(result.data.parts);
110
- });
111
- reviewRaw = confirm.result;
112
- parsed = parseReviewResult(reviewRaw);
113
- if (!hasActionableFindings(parsed, reviewRaw)) {
114
- consecutiveClean += 1;
115
- if (consecutiveClean >= CONSECUTIVE_CLEAN_THRESHOLD)
116
- break;
117
- } else {
118
- consecutiveClean = 0;
119
- }
120
- } else {
121
- consecutiveClean = 0;
122
- }
123
- if (hasActionableFindings(parsed, reviewRaw) && iteration < MAX_LOOPS) {
124
- const debuggerName = `debugger-${iteration}`;
125
- const debugger_ = await ctx.stage({ name: debuggerName }, {}, { title: `debugger-${iteration}` }, async (s) => {
126
- const result = await s.client.session.prompt({
127
- sessionID: s.session.id,
128
- parts: [
129
- {
130
- type: "text",
131
- text: buildDebuggerReportPrompt(parsed, reviewRaw, {
132
- iteration,
133
- gitStatus
134
- })
135
- }
136
- ],
137
- agent: "debugger"
138
- });
139
- s.save(result.data);
140
- return extractResponseText(result.data.parts);
141
- });
142
- debuggerReport = extractMarkdownBlock(debugger_.result);
143
- }
144
- }
145
- }).compile();
146
- export {
147
- opencode_default as default
148
- };
@@ -1,100 +0,0 @@
1
- // @bun
2
- import"../../chunk-1gb5qxz9.js";
3
- import {
4
- AGENTS,
5
- SOCKET_NAME,
6
- WORKFLOWS_GITIGNORE,
7
- WorkflowBuilder,
8
- WorkflowLoader,
9
- attachOrSwitch,
10
- attachSession,
11
- attemptSubmitRounds,
12
- capturePane,
13
- capturePaneScrollback,
14
- capturePaneVisible,
15
- claudeQuery,
16
- clearClaudeSession,
17
- createClaudeSession,
18
- createPane,
19
- createSession,
20
- createWindow,
21
- defineWorkflow,
22
- discoverWorkflows,
23
- executeWorkflow,
24
- findWorkflow,
25
- getCurrentSession,
26
- getMuxBinary,
27
- isInsideTmux,
28
- isTmuxInstalled,
29
- killSession,
30
- killWindow,
31
- loadWorkflowsMetadata,
32
- normalizeTmuxCapture,
33
- normalizeTmuxLines,
34
- paneHasActiveTask,
35
- paneIsIdle,
36
- paneLooksReady,
37
- resetMuxBinaryCache,
38
- selectWindow,
39
- sendKeysAndSubmit,
40
- sendLiteralText,
41
- sendSpecialKey,
42
- sessionExists,
43
- spawnMuxAttach,
44
- switchClient,
45
- tmuxRun,
46
- validateClaudeWorkflow,
47
- validateCopilotWorkflow,
48
- validateOpenCodeWorkflow,
49
- waitForOutput,
50
- waitForPaneReady
51
- } from "../../chunk-xkxndz5g.js";
52
- export {
53
- waitForPaneReady,
54
- waitForOutput,
55
- validateOpenCodeWorkflow,
56
- validateCopilotWorkflow,
57
- validateClaudeWorkflow,
58
- tmuxRun,
59
- switchClient,
60
- spawnMuxAttach,
61
- sessionExists,
62
- sendSpecialKey,
63
- sendLiteralText,
64
- sendKeysAndSubmit,
65
- selectWindow,
66
- resetMuxBinaryCache,
67
- paneLooksReady,
68
- paneIsIdle,
69
- paneHasActiveTask,
70
- normalizeTmuxLines,
71
- normalizeTmuxCapture,
72
- loadWorkflowsMetadata,
73
- killWindow,
74
- killSession,
75
- isTmuxInstalled,
76
- isInsideTmux,
77
- getMuxBinary,
78
- getCurrentSession,
79
- findWorkflow,
80
- executeWorkflow,
81
- discoverWorkflows,
82
- defineWorkflow,
83
- createWindow,
84
- createSession,
85
- createPane,
86
- createClaudeSession,
87
- clearClaudeSession,
88
- claudeQuery,
89
- capturePaneVisible,
90
- capturePaneScrollback,
91
- capturePane,
92
- attemptSubmitRounds,
93
- attachSession,
94
- attachOrSwitch,
95
- WorkflowLoader,
96
- WorkflowBuilder,
97
- WORKFLOWS_GITIGNORE,
98
- SOCKET_NAME,
99
- AGENTS
100
- };
@@ -1,18 +0,0 @@
1
- /**
2
- * Chat client utilities
3
- *
4
- * Provides agent display name resolution for the chat command.
5
- * SDK client creation has been removed — the chat command now spawns
6
- * native agent CLIs directly.
7
- */
8
-
9
- import type { AgentKey } from "@/services/config/index.ts";
10
-
11
- export function getAgentDisplayName(agentType: AgentKey): string {
12
- const names: Record<AgentKey, string> = {
13
- claude: "Claude",
14
- opencode: "OpenCode",
15
- copilot: "Copilot",
16
- };
17
- return names[agentType] ?? agentType;
18
- }