@bastani/atomic 0.5.4-0 → 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.
- package/README.md +44 -1
- package/dist/lib/path-root-guard.d.ts +4 -0
- package/dist/lib/path-root-guard.d.ts.map +1 -0
- package/dist/sdk/components/color-utils.d.ts +1 -0
- package/dist/sdk/components/color-utils.d.ts.map +1 -0
- package/dist/sdk/components/connectors.d.ts +3 -2
- package/dist/sdk/components/connectors.d.ts.map +1 -0
- package/dist/sdk/components/connectors.test.d.ts +1 -0
- package/dist/sdk/components/connectors.test.d.ts.map +1 -0
- package/dist/sdk/components/edge.d.ts +2 -1
- package/dist/sdk/components/edge.d.ts.map +1 -0
- package/dist/sdk/components/error-boundary.d.ts +1 -0
- package/dist/sdk/components/error-boundary.d.ts.map +1 -0
- package/dist/sdk/components/graph-theme.d.ts +2 -1
- package/dist/sdk/components/graph-theme.d.ts.map +1 -0
- package/dist/sdk/components/header.d.ts +1 -0
- package/dist/sdk/components/header.d.ts.map +1 -0
- package/dist/sdk/components/hooks.d.ts +15 -0
- package/dist/sdk/components/hooks.d.ts.map +1 -0
- package/dist/sdk/components/layout.d.ts +2 -1
- package/dist/sdk/components/layout.d.ts.map +1 -0
- package/dist/sdk/components/layout.test.d.ts +1 -0
- package/dist/sdk/components/layout.test.d.ts.map +1 -0
- package/dist/sdk/components/node-card.d.ts +5 -3
- package/dist/sdk/components/node-card.d.ts.map +1 -0
- package/dist/sdk/components/orchestrator-panel-contexts.d.ts +3 -2
- package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +1 -0
- package/dist/sdk/components/orchestrator-panel-store.d.ts +2 -1
- package/dist/sdk/components/orchestrator-panel-store.d.ts.map +1 -0
- package/dist/sdk/components/orchestrator-panel-store.test.d.ts +1 -0
- package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +1 -0
- package/dist/sdk/components/orchestrator-panel-types.d.ts +1 -0
- package/dist/sdk/components/orchestrator-panel-types.d.ts.map +1 -0
- package/dist/sdk/components/orchestrator-panel.d.ts +2 -1
- package/dist/sdk/components/orchestrator-panel.d.ts.map +1 -0
- package/dist/sdk/components/session-graph-panel.d.ts +1 -0
- package/dist/sdk/components/session-graph-panel.d.ts.map +1 -0
- package/dist/sdk/components/status-helpers.d.ts +2 -1
- package/dist/sdk/components/status-helpers.d.ts.map +1 -0
- package/dist/sdk/components/statusline.d.ts +2 -1
- package/dist/sdk/components/statusline.d.ts.map +1 -0
- package/dist/sdk/components/workflow-picker-panel.d.ts +11 -8
- package/dist/sdk/components/workflow-picker-panel.d.ts.map +1 -0
- package/dist/sdk/define-workflow.d.ts +2 -1
- package/dist/sdk/define-workflow.d.ts.map +1 -0
- package/dist/sdk/define-workflow.test.d.ts +1 -0
- package/dist/sdk/define-workflow.test.d.ts.map +1 -0
- package/dist/sdk/errors.d.ts +3 -0
- package/dist/sdk/errors.d.ts.map +1 -0
- package/dist/sdk/errors.test.d.ts +2 -0
- package/dist/sdk/errors.test.d.ts.map +1 -0
- package/dist/sdk/index.d.ts +7 -6
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/providers/claude.d.ts +17 -6
- package/dist/sdk/providers/claude.d.ts.map +1 -0
- package/dist/sdk/providers/copilot.d.ts +2 -5
- package/dist/sdk/providers/copilot.d.ts.map +1 -0
- package/dist/sdk/providers/opencode.d.ts +2 -5
- package/dist/sdk/providers/opencode.d.ts.map +1 -0
- package/dist/sdk/runtime/discovery.d.ts +2 -1
- package/dist/sdk/runtime/discovery.d.ts.map +1 -0
- package/dist/sdk/runtime/executor-entry.d.ts +1 -0
- package/dist/sdk/runtime/executor-entry.d.ts.map +1 -0
- package/dist/sdk/runtime/executor.d.ts +3 -6
- package/dist/sdk/runtime/executor.d.ts.map +1 -0
- package/dist/sdk/runtime/executor.test.d.ts +1 -0
- package/dist/sdk/runtime/executor.test.d.ts.map +1 -0
- package/dist/sdk/runtime/graph-inference.d.ts +1 -0
- package/dist/sdk/runtime/graph-inference.d.ts.map +1 -0
- package/dist/sdk/runtime/loader.d.ts +5 -7
- package/dist/sdk/runtime/loader.d.ts.map +1 -0
- package/dist/sdk/runtime/panel.d.ts +3 -2
- package/dist/sdk/runtime/panel.d.ts.map +1 -0
- package/dist/sdk/runtime/theme.d.ts +1 -0
- package/dist/sdk/runtime/theme.d.ts.map +1 -0
- package/dist/sdk/runtime/tmux.d.ts +26 -8
- package/dist/sdk/runtime/tmux.d.ts.map +1 -0
- package/dist/sdk/types.d.ts +23 -1
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +2 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +1 -0
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +1 -0
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +1 -0
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +1 -0
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +1 -0
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +2 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +1 -0
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +1 -0
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +1 -0
- package/dist/sdk/workflows/index.d.ts +14 -14
- package/dist/sdk/workflows/index.d.ts.map +1 -0
- package/dist/services/config/definitions.d.ts +85 -0
- package/dist/services/config/definitions.d.ts.map +1 -0
- package/dist/services/system/copy.d.ts +77 -0
- package/dist/services/system/copy.d.ts.map +1 -0
- package/dist/services/system/detect.d.ts +75 -0
- package/dist/services/system/detect.d.ts.map +1 -0
- package/package.json +13 -34
- package/src/cli.ts +11 -10
- package/src/commands/cli/chat/index.ts +11 -11
- package/src/commands/cli/chat.ts +1 -1
- package/src/commands/cli/config.ts +10 -9
- package/src/commands/cli/init/index.ts +11 -11
- package/src/commands/cli/init/onboarding.ts +4 -4
- package/src/commands/cli/init/scm.ts +5 -5
- package/src/commands/cli/init.ts +1 -1
- package/src/commands/cli/workflow-command.test.ts +19 -11
- package/src/commands/cli/workflow.test.ts +2 -2
- package/src/commands/cli/workflow.ts +6 -6
- package/src/lib/merge.ts +17 -31
- package/src/lib/path-root-guard.ts +2 -2
- package/src/lib/spawn.ts +13 -7
- package/src/scripts/bump-version.ts +1 -1
- package/src/scripts/constants.ts +2 -2
- package/src/sdk/components/header.tsx +21 -23
- package/src/sdk/components/hooks.ts +21 -0
- package/src/sdk/components/node-card.tsx +3 -2
- package/src/sdk/components/session-graph-panel.tsx +14 -18
- package/src/sdk/components/workflow-picker-panel.tsx +201 -216
- package/src/sdk/errors.test.ts +56 -0
- package/src/sdk/errors.ts +5 -0
- package/src/sdk/providers/claude.ts +279 -70
- package/src/sdk/providers/copilot.ts +17 -27
- package/src/sdk/providers/opencode.ts +17 -27
- package/src/sdk/runtime/discovery.ts +18 -18
- package/src/sdk/runtime/executor.test.ts +15 -48
- package/src/sdk/runtime/executor.ts +152 -121
- package/src/sdk/runtime/loader.ts +16 -21
- package/src/sdk/runtime/tmux.ts +95 -32
- package/src/sdk/types.ts +45 -0
- package/src/sdk/workflows/builtin/deep-research-codebase/claude/index.ts +27 -0
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.ts +25 -16
- package/src/sdk/workflows/builtin/deep-research-codebase/helpers/scout.ts +25 -24
- package/src/sdk/workflows/builtin/ralph/claude/index.ts +5 -0
- package/src/sdk/workflows/index.ts +3 -3
- package/src/services/config/atomic-config.ts +7 -8
- package/src/services/config/atomic-global-config.ts +9 -9
- package/src/services/config/config-path.ts +1 -1
- package/src/services/config/definitions.ts +3 -4
- package/src/services/config/index.ts +1 -1
- package/src/services/config/settings.ts +30 -36
- package/src/services/system/agents.ts +3 -3
- package/src/services/system/auto-sync.ts +9 -9
- package/src/services/system/copy.ts +9 -9
- package/src/services/system/file-lock.ts +2 -2
- package/src/services/system/install-ui.ts +2 -2
- package/src/services/system/skills.ts +1 -1
- package/src/theme/colors.ts +1 -1
- package/src/theme/logo.ts +1 -1
- package/tsconfig.json +3 -4
- package/dist/chunk-1gb5qxz9.js +0 -1
- package/dist/chunk-fdk7tact.js +0 -417
- package/dist/chunk-xkxndz5g.js +0 -1041
- package/dist/sdk/index.js +0 -52
- package/dist/sdk/workflows/builtin/ralph/claude/index.js +0 -96
- package/dist/sdk/workflows/builtin/ralph/copilot/index.js +0 -119
- package/dist/sdk/workflows/builtin/ralph/opencode/index.js +0 -148
- package/dist/sdk/workflows/index.js +0 -100
- 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
|
-
}
|