ghcralph 0.1.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/LICENSE +21 -0
- package/README.md +327 -0
- package/bin/ghcralph.js +2 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +92 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +118 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +11 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +116 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/rollback.d.ts +8 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +238 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/run.d.ts +28 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +407 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +399 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/core/action-executor.d.ts +96 -0
- package/dist/core/action-executor.d.ts.map +1 -0
- package/dist/core/action-executor.js +289 -0
- package/dist/core/action-executor.js.map +1 -0
- package/dist/core/checkpoint-manager.d.ts +94 -0
- package/dist/core/checkpoint-manager.d.ts.map +1 -0
- package/dist/core/checkpoint-manager.js +236 -0
- package/dist/core/checkpoint-manager.js.map +1 -0
- package/dist/core/config-manager.d.ts +62 -0
- package/dist/core/config-manager.d.ts.map +1 -0
- package/dist/core/config-manager.js +184 -0
- package/dist/core/config-manager.js.map +1 -0
- package/dist/core/config-schema.d.ts +74 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +84 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/context-builder.d.ts +116 -0
- package/dist/core/context-builder.d.ts.map +1 -0
- package/dist/core/context-builder.js +388 -0
- package/dist/core/context-builder.js.map +1 -0
- package/dist/core/feedback-builder.d.ts +94 -0
- package/dist/core/feedback-builder.d.ts.map +1 -0
- package/dist/core/feedback-builder.js +226 -0
- package/dist/core/feedback-builder.js.map +1 -0
- package/dist/core/file-safeguard.d.ts +109 -0
- package/dist/core/file-safeguard.d.ts.map +1 -0
- package/dist/core/file-safeguard.js +200 -0
- package/dist/core/file-safeguard.js.map +1 -0
- package/dist/core/git-branch-manager.d.ts +122 -0
- package/dist/core/git-branch-manager.d.ts.map +1 -0
- package/dist/core/git-branch-manager.js +302 -0
- package/dist/core/git-branch-manager.js.map +1 -0
- package/dist/core/github-plan.d.ts +86 -0
- package/dist/core/github-plan.d.ts.map +1 -0
- package/dist/core/github-plan.js +333 -0
- package/dist/core/github-plan.js.map +1 -0
- package/dist/core/index.d.ts +43 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +26 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/local-markdown-plan.d.ts +65 -0
- package/dist/core/local-markdown-plan.d.ts.map +1 -0
- package/dist/core/local-markdown-plan.js +154 -0
- package/dist/core/local-markdown-plan.js.map +1 -0
- package/dist/core/loop-engine.d.ts +133 -0
- package/dist/core/loop-engine.d.ts.map +1 -0
- package/dist/core/loop-engine.js +420 -0
- package/dist/core/loop-engine.js.map +1 -0
- package/dist/core/loop-events.d.ts +48 -0
- package/dist/core/loop-events.d.ts.map +1 -0
- package/dist/core/loop-events.js +24 -0
- package/dist/core/loop-events.js.map +1 -0
- package/dist/core/loop-state.d.ts +51 -0
- package/dist/core/loop-state.d.ts.map +1 -0
- package/dist/core/loop-state.js +48 -0
- package/dist/core/loop-state.js.map +1 -0
- package/dist/core/markdown-parser.d.ts +51 -0
- package/dist/core/markdown-parser.d.ts.map +1 -0
- package/dist/core/markdown-parser.js +122 -0
- package/dist/core/markdown-parser.js.map +1 -0
- package/dist/core/plan-manager.d.ts +61 -0
- package/dist/core/plan-manager.d.ts.map +1 -0
- package/dist/core/plan-manager.js +7 -0
- package/dist/core/plan-manager.js.map +1 -0
- package/dist/core/progress-tracker.d.ts +74 -0
- package/dist/core/progress-tracker.d.ts.map +1 -0
- package/dist/core/progress-tracker.js +198 -0
- package/dist/core/progress-tracker.js.map +1 -0
- package/dist/core/prompt-examples.d.ts +52 -0
- package/dist/core/prompt-examples.d.ts.map +1 -0
- package/dist/core/prompt-examples.js +194 -0
- package/dist/core/prompt-examples.js.map +1 -0
- package/dist/core/response-parser.d.ts +90 -0
- package/dist/core/response-parser.d.ts.map +1 -0
- package/dist/core/response-parser.js +209 -0
- package/dist/core/response-parser.js.map +1 -0
- package/dist/core/verification-hooks.d.ts +103 -0
- package/dist/core/verification-hooks.d.ts.map +1 -0
- package/dist/core/verification-hooks.js +268 -0
- package/dist/core/verification-hooks.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/auth.d.ts +28 -0
- package/dist/integrations/auth.d.ts.map +1 -0
- package/dist/integrations/auth.js +76 -0
- package/dist/integrations/auth.js.map +1 -0
- package/dist/integrations/copilot-agent.d.ts +104 -0
- package/dist/integrations/copilot-agent.d.ts.map +1 -0
- package/dist/integrations/copilot-agent.js +235 -0
- package/dist/integrations/copilot-agent.js.map +1 -0
- package/dist/integrations/index.d.ts +18 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +14 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/mcp-tools.d.ts +129 -0
- package/dist/integrations/mcp-tools.d.ts.map +1 -0
- package/dist/integrations/mcp-tools.js +272 -0
- package/dist/integrations/mcp-tools.js.map +1 -0
- package/dist/integrations/tokens.d.ts +45 -0
- package/dist/integrations/tokens.d.ts.map +1 -0
- package/dist/integrations/tokens.js +50 -0
- package/dist/integrations/tokens.js.map +1 -0
- package/dist/types/index.d.ts +53 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +23 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +37 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/output.d.ts +59 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +96 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/paths.d.ts +34 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +67 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +65 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/validation.d.ts +27 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +43 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Issues Plan Source
|
|
3
|
+
*
|
|
4
|
+
* Implementation of PlanManager for GitHub Issues
|
|
5
|
+
*/
|
|
6
|
+
import { Octokit } from '@octokit/rest';
|
|
7
|
+
import { getGitHubAuth } from '../integrations/auth.js';
|
|
8
|
+
import { debug, info, warn } from '../utils/output.js';
|
|
9
|
+
/**
|
|
10
|
+
* GitHub Issues Plan implementation
|
|
11
|
+
*/
|
|
12
|
+
export class GitHubPlan {
|
|
13
|
+
sourceType = 'github';
|
|
14
|
+
config;
|
|
15
|
+
octokit = null;
|
|
16
|
+
issues = [];
|
|
17
|
+
currentUser = null;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = {
|
|
20
|
+
inProgressLabel: 'in-progress',
|
|
21
|
+
addComments: true,
|
|
22
|
+
...config,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initialize by authenticating and loading issues
|
|
27
|
+
*/
|
|
28
|
+
async initialize() {
|
|
29
|
+
debug(`Initializing GitHub plan for ${this.config.owner}/${this.config.repo}`);
|
|
30
|
+
// Get authentication
|
|
31
|
+
const auth = getGitHubAuth();
|
|
32
|
+
if (!auth.authenticated || !auth.token) {
|
|
33
|
+
throw new Error('GitHub authentication required. Run "gh auth login" or set GITHUB_TOKEN.');
|
|
34
|
+
}
|
|
35
|
+
this.octokit = new Octokit({ auth: auth.token });
|
|
36
|
+
// Get current user
|
|
37
|
+
try {
|
|
38
|
+
const { data: user } = await this.octokit.users.getAuthenticated();
|
|
39
|
+
this.currentUser = user.login;
|
|
40
|
+
debug(`Authenticated as ${this.currentUser}`);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
warn('Could not determine current user');
|
|
44
|
+
}
|
|
45
|
+
// Load issues
|
|
46
|
+
await this.loadIssues();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load issues from GitHub
|
|
50
|
+
*/
|
|
51
|
+
async loadIssues() {
|
|
52
|
+
if (!this.octokit) {
|
|
53
|
+
throw new Error('Not initialized. Call initialize() first.');
|
|
54
|
+
}
|
|
55
|
+
const { owner, repo, label, milestone, assignee } = this.config;
|
|
56
|
+
const params = {
|
|
57
|
+
owner,
|
|
58
|
+
repo,
|
|
59
|
+
state: 'open',
|
|
60
|
+
per_page: 100,
|
|
61
|
+
};
|
|
62
|
+
if (label) {
|
|
63
|
+
params.labels = label;
|
|
64
|
+
}
|
|
65
|
+
if (assignee) {
|
|
66
|
+
params.assignee = assignee;
|
|
67
|
+
}
|
|
68
|
+
if (milestone) {
|
|
69
|
+
// Need to get milestone number from name
|
|
70
|
+
const milestones = await this.octokit.issues.listMilestones({
|
|
71
|
+
owner,
|
|
72
|
+
repo,
|
|
73
|
+
state: 'open',
|
|
74
|
+
});
|
|
75
|
+
const found = milestones.data.find((m) => m.title === milestone);
|
|
76
|
+
if (found) {
|
|
77
|
+
params.milestone = String(found.number);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
warn(`Milestone "${milestone}" not found`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const { data } = await this.octokit.issues.listForRepo(params);
|
|
84
|
+
// Filter out pull requests (they show up in issues API)
|
|
85
|
+
this.issues = data
|
|
86
|
+
.filter((issue) => !('pull_request' in issue))
|
|
87
|
+
.map((issue) => ({
|
|
88
|
+
number: issue.number,
|
|
89
|
+
title: issue.title,
|
|
90
|
+
body: issue.body ?? null,
|
|
91
|
+
state: issue.state,
|
|
92
|
+
labels: issue.labels.filter((l) => typeof l === 'object' && 'name' in l),
|
|
93
|
+
assignees: issue.assignees?.map((a) => ({ login: a.login })) ?? [],
|
|
94
|
+
}));
|
|
95
|
+
info(`Loaded ${this.issues.length} issues from ${owner}/${repo}`);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Convert GitHub issue to Task
|
|
99
|
+
*/
|
|
100
|
+
toTask(issue) {
|
|
101
|
+
const hasInProgressLabel = issue.labels.some((l) => l.name === this.config.inProgressLabel);
|
|
102
|
+
return {
|
|
103
|
+
id: `github-${issue.number}`,
|
|
104
|
+
title: issue.title,
|
|
105
|
+
content: issue.body ?? issue.title,
|
|
106
|
+
status: hasInProgressLabel ? 'in-progress' : 'pending',
|
|
107
|
+
source: 'github',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get all tasks, optionally filtered
|
|
112
|
+
*/
|
|
113
|
+
async getTasks(filter) {
|
|
114
|
+
let tasks = this.issues.map((i) => this.toTask(i));
|
|
115
|
+
if (filter?.status && filter.status !== 'all') {
|
|
116
|
+
tasks = tasks.filter((t) => t.status === filter.status);
|
|
117
|
+
}
|
|
118
|
+
if (filter?.limit && filter.limit > 0) {
|
|
119
|
+
tasks = tasks.slice(0, filter.limit);
|
|
120
|
+
}
|
|
121
|
+
return tasks;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get the next pending task
|
|
125
|
+
*/
|
|
126
|
+
async getNextTask() {
|
|
127
|
+
// Prioritize issues already in-progress, then oldest pending
|
|
128
|
+
const inProgress = this.issues.find((i) => i.labels.some((l) => l.name === this.config.inProgressLabel));
|
|
129
|
+
if (inProgress) {
|
|
130
|
+
return this.toTask(inProgress);
|
|
131
|
+
}
|
|
132
|
+
const pending = this.issues.find((i) => !i.labels.some((l) => l.name === this.config.inProgressLabel));
|
|
133
|
+
return pending ? this.toTask(pending) : null;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get a specific task by ID
|
|
137
|
+
*/
|
|
138
|
+
async getTask(id) {
|
|
139
|
+
const issueNumber = this.parseIssueNumber(id);
|
|
140
|
+
if (!issueNumber)
|
|
141
|
+
return null;
|
|
142
|
+
const issue = this.issues.find((i) => i.number === issueNumber);
|
|
143
|
+
return issue ? this.toTask(issue) : null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Mark a task as in-progress
|
|
147
|
+
*/
|
|
148
|
+
async startTask(id) {
|
|
149
|
+
if (!this.octokit) {
|
|
150
|
+
throw new Error('Not initialized');
|
|
151
|
+
}
|
|
152
|
+
const issueNumber = this.parseIssueNumber(id);
|
|
153
|
+
if (!issueNumber)
|
|
154
|
+
return;
|
|
155
|
+
const { owner, repo, inProgressLabel } = this.config;
|
|
156
|
+
// Add in-progress label
|
|
157
|
+
if (inProgressLabel) {
|
|
158
|
+
try {
|
|
159
|
+
await this.octokit.issues.addLabels({
|
|
160
|
+
owner,
|
|
161
|
+
repo,
|
|
162
|
+
issue_number: issueNumber,
|
|
163
|
+
labels: [inProgressLabel],
|
|
164
|
+
});
|
|
165
|
+
debug(`Added label "${inProgressLabel}" to issue #${issueNumber}`);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
warn(`Could not add label "${inProgressLabel}" to issue #${issueNumber}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Assign current user
|
|
172
|
+
if (this.currentUser) {
|
|
173
|
+
try {
|
|
174
|
+
await this.octokit.issues.addAssignees({
|
|
175
|
+
owner,
|
|
176
|
+
repo,
|
|
177
|
+
issue_number: issueNumber,
|
|
178
|
+
assignees: [this.currentUser],
|
|
179
|
+
});
|
|
180
|
+
debug(`Assigned ${this.currentUser} to issue #${issueNumber}`);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
warn(`Could not assign ${this.currentUser} to issue #${issueNumber}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Add start comment
|
|
187
|
+
if (this.config.addComments) {
|
|
188
|
+
try {
|
|
189
|
+
await this.octokit.issues.createComment({
|
|
190
|
+
owner,
|
|
191
|
+
repo,
|
|
192
|
+
issue_number: issueNumber,
|
|
193
|
+
body: `🤖 **Ralph CLI** started working on this issue.\n\nTimestamp: ${new Date().toISOString()}`,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
warn(`Could not add comment to issue #${issueNumber}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Mark a task as completed
|
|
203
|
+
*/
|
|
204
|
+
async completeTask(id) {
|
|
205
|
+
if (!this.octokit) {
|
|
206
|
+
throw new Error('Not initialized');
|
|
207
|
+
}
|
|
208
|
+
const issueNumber = this.parseIssueNumber(id);
|
|
209
|
+
if (!issueNumber)
|
|
210
|
+
return;
|
|
211
|
+
const { owner, repo, inProgressLabel } = this.config;
|
|
212
|
+
// Remove in-progress label
|
|
213
|
+
if (inProgressLabel) {
|
|
214
|
+
try {
|
|
215
|
+
await this.octokit.issues.removeLabel({
|
|
216
|
+
owner,
|
|
217
|
+
repo,
|
|
218
|
+
issue_number: issueNumber,
|
|
219
|
+
name: inProgressLabel,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Label might not exist
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Add completion comment
|
|
227
|
+
if (this.config.addComments) {
|
|
228
|
+
try {
|
|
229
|
+
await this.octokit.issues.createComment({
|
|
230
|
+
owner,
|
|
231
|
+
repo,
|
|
232
|
+
issue_number: issueNumber,
|
|
233
|
+
body: `✅ **Ralph CLI** completed this task.\n\nTimestamp: ${new Date().toISOString()}`,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
warn(`Could not add comment to issue #${issueNumber}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Close the issue
|
|
241
|
+
try {
|
|
242
|
+
await this.octokit.issues.update({
|
|
243
|
+
owner,
|
|
244
|
+
repo,
|
|
245
|
+
issue_number: issueNumber,
|
|
246
|
+
state: 'closed',
|
|
247
|
+
});
|
|
248
|
+
info(`Closed issue #${issueNumber}`);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
warn(`Could not close issue #${issueNumber}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Mark a task as failed
|
|
256
|
+
*/
|
|
257
|
+
async failTask(id, errorMessage) {
|
|
258
|
+
if (!this.octokit) {
|
|
259
|
+
throw new Error('Not initialized');
|
|
260
|
+
}
|
|
261
|
+
const issueNumber = this.parseIssueNumber(id);
|
|
262
|
+
if (!issueNumber)
|
|
263
|
+
return;
|
|
264
|
+
const { owner, repo, inProgressLabel } = this.config;
|
|
265
|
+
// Remove in-progress label
|
|
266
|
+
if (inProgressLabel) {
|
|
267
|
+
try {
|
|
268
|
+
await this.octokit.issues.removeLabel({
|
|
269
|
+
owner,
|
|
270
|
+
repo,
|
|
271
|
+
issue_number: issueNumber,
|
|
272
|
+
name: inProgressLabel,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
// Label might not exist
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Add failure comment
|
|
280
|
+
if (this.config.addComments) {
|
|
281
|
+
const body = errorMessage
|
|
282
|
+
? `❌ **Ralph CLI** failed on this task.\n\nError: ${errorMessage}\n\nTimestamp: ${new Date().toISOString()}`
|
|
283
|
+
: `❌ **Ralph CLI** failed on this task.\n\nTimestamp: ${new Date().toISOString()}`;
|
|
284
|
+
try {
|
|
285
|
+
await this.octokit.issues.createComment({
|
|
286
|
+
owner,
|
|
287
|
+
repo,
|
|
288
|
+
issue_number: issueNumber,
|
|
289
|
+
body,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
warn(`Could not add comment to issue #${issueNumber}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Update task progress
|
|
299
|
+
*/
|
|
300
|
+
async updateProgress(id, progress) {
|
|
301
|
+
if (!this.octokit || !this.config.addComments)
|
|
302
|
+
return;
|
|
303
|
+
const issueNumber = this.parseIssueNumber(id);
|
|
304
|
+
if (!issueNumber)
|
|
305
|
+
return;
|
|
306
|
+
const { owner, repo } = this.config;
|
|
307
|
+
try {
|
|
308
|
+
await this.octokit.issues.createComment({
|
|
309
|
+
owner,
|
|
310
|
+
repo,
|
|
311
|
+
issue_number: issueNumber,
|
|
312
|
+
body: `🔄 **Ralph CLI** progress update:\n\n${progress}\n\nTimestamp: ${new Date().toISOString()}`,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
warn(`Could not add progress comment to issue #${issueNumber}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Parse issue number from task ID
|
|
321
|
+
*/
|
|
322
|
+
parseIssueNumber(id) {
|
|
323
|
+
const match = id.match(/^github-(\d+)$/);
|
|
324
|
+
return match ? parseInt(match[1] ?? '0', 10) : null;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Reload issues from GitHub
|
|
328
|
+
*/
|
|
329
|
+
async reload() {
|
|
330
|
+
await this.loadIssues();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=github-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-plan.js","sourceRoot":"","sources":["../../src/core/github-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Loop Engine
|
|
3
|
+
*
|
|
4
|
+
* This module contains the core loop engine that:
|
|
5
|
+
* - Manages the autonomous coding loop
|
|
6
|
+
* - Tracks iterations and progress
|
|
7
|
+
* - Handles checkpoints and state
|
|
8
|
+
*/
|
|
9
|
+
export { LoopEngine } from './loop-engine.js';
|
|
10
|
+
export type { LoopEngineConfig, LoopCompletionReason } from './loop-engine.js';
|
|
11
|
+
export { LoopEventEmitter } from './loop-events.js';
|
|
12
|
+
export type { LoopEvents } from './loop-events.js';
|
|
13
|
+
export { createInitialState, createIterationRecord, completeIteration } from './loop-state.js';
|
|
14
|
+
export type { IterationRecord, FullLoopState } from './loop-state.js';
|
|
15
|
+
export { ConfigManager, isValidConfigKey, validateConfigValue, parseConfigValue, getGlobalConfigPath, getLocalConfigPath, DEFAULT_CONFIG, } from './config-manager.js';
|
|
16
|
+
export type { RalphConfiguration, ConfigKey } from './config-manager.js';
|
|
17
|
+
export type { PlanSource } from './config-schema.js';
|
|
18
|
+
export type { PlanManager, TaskFilter, PlanSourceType } from './plan-manager.js';
|
|
19
|
+
export { parseMarkdownPlan, toTask, updateTaskCheckbox } from './markdown-parser.js';
|
|
20
|
+
export type { ParsedMarkdownTask, ParsedMarkdownPlan } from './markdown-parser.js';
|
|
21
|
+
export { LocalMarkdownPlan } from './local-markdown-plan.js';
|
|
22
|
+
export { GitHubPlan } from './github-plan.js';
|
|
23
|
+
export type { GitHubPlanConfig } from './github-plan.js';
|
|
24
|
+
export { ProgressTracker } from './progress-tracker.js';
|
|
25
|
+
export type { SessionData } from './progress-tracker.js';
|
|
26
|
+
export { ContextBuilder, createContextBuilder } from './context-builder.js';
|
|
27
|
+
export type { ContextBuilderConfig, BuiltContext } from './context-builder.js';
|
|
28
|
+
export { GitBranchManager, createGitBranchManager } from './git-branch-manager.js';
|
|
29
|
+
export type { GitBranchConfig, WorkingDirStatus, BranchInfo } from './git-branch-manager.js';
|
|
30
|
+
export { CheckpointManager, createCheckpointManager } from './checkpoint-manager.js';
|
|
31
|
+
export type { CheckpointConfig, Checkpoint } from './checkpoint-manager.js';
|
|
32
|
+
export { FileSafeguardManager, createFileSafeguardManager } from './file-safeguard.js';
|
|
33
|
+
export type { FileSafeguardConfig, BaselineSnapshot, FileOperations } from './file-safeguard.js';
|
|
34
|
+
export { parseResponse, hasCompleteAction, getCompleteAction, getActionsByType } from './response-parser.js';
|
|
35
|
+
export type { ActionType, Action, CreateAction, EditAction, DeleteAction, ExecuteAction, CompleteAction, ParseResult, } from './response-parser.js';
|
|
36
|
+
export { ActionExecutor, createActionExecutor } from './action-executor.js';
|
|
37
|
+
export type { ActionResult, ExecutionResult, ActionExecutorConfig } from './action-executor.js';
|
|
38
|
+
export { VerificationManager, createVerificationManager, detectDefaultHooks, } from './verification-hooks.js';
|
|
39
|
+
export type { VerificationResult, VerificationHook, VerificationHookType, VerificationConfig, } from './verification-hooks.js';
|
|
40
|
+
export { FeedbackBuilder, createFeedbackBuilder } from './feedback-builder.js';
|
|
41
|
+
export type { FeedbackSectionType, FeedbackSection, IterationFeedback, FeedbackBuilderConfig, } from './feedback-builder.js';
|
|
42
|
+
export { CREATE_EXAMPLE, EDIT_EXAMPLE, DELETE_EXAMPLE, EXECUTE_EXAMPLE, COMPLETE_EXAMPLE, ALL_EXAMPLES, MINIMAL_EXAMPLES, FORMAT_INSTRUCTIONS, getPromptExamples, getModelStrength, getExamplesForModel, } from './prompt-examples.js';
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Loop Engine
|
|
3
|
+
*
|
|
4
|
+
* This module contains the core loop engine that:
|
|
5
|
+
* - Manages the autonomous coding loop
|
|
6
|
+
* - Tracks iterations and progress
|
|
7
|
+
* - Handles checkpoints and state
|
|
8
|
+
*/
|
|
9
|
+
export { LoopEngine } from './loop-engine.js';
|
|
10
|
+
export { LoopEventEmitter } from './loop-events.js';
|
|
11
|
+
export { createInitialState, createIterationRecord, completeIteration } from './loop-state.js';
|
|
12
|
+
export { ConfigManager, isValidConfigKey, validateConfigValue, parseConfigValue, getGlobalConfigPath, getLocalConfigPath, DEFAULT_CONFIG, } from './config-manager.js';
|
|
13
|
+
export { parseMarkdownPlan, toTask, updateTaskCheckbox } from './markdown-parser.js';
|
|
14
|
+
export { LocalMarkdownPlan } from './local-markdown-plan.js';
|
|
15
|
+
export { GitHubPlan } from './github-plan.js';
|
|
16
|
+
export { ProgressTracker } from './progress-tracker.js';
|
|
17
|
+
export { ContextBuilder, createContextBuilder } from './context-builder.js';
|
|
18
|
+
export { GitBranchManager, createGitBranchManager } from './git-branch-manager.js';
|
|
19
|
+
export { CheckpointManager, createCheckpointManager } from './checkpoint-manager.js';
|
|
20
|
+
export { FileSafeguardManager, createFileSafeguardManager } from './file-safeguard.js';
|
|
21
|
+
export { parseResponse, hasCompleteAction, getCompleteAction, getActionsByType } from './response-parser.js';
|
|
22
|
+
export { ActionExecutor, createActionExecutor } from './action-executor.js';
|
|
23
|
+
export { VerificationManager, createVerificationManager, detectDefaultHooks, } from './verification-hooks.js';
|
|
24
|
+
export { FeedbackBuilder, createFeedbackBuilder } from './feedback-builder.js';
|
|
25
|
+
export { CREATE_EXAMPLE, EDIT_EXAMPLE, DELETE_EXAMPLE, EXECUTE_EXAMPLE, COMPLETE_EXAMPLE, ALL_EXAMPLES, MINIMAL_EXAMPLES, FORMAT_INSTRUCTIONS, getPromptExamples, getModelStrength, getExamplesForModel, } from './prompt-examples.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGrF,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGvF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAY7G,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ/E,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Markdown Plan Source
|
|
3
|
+
*
|
|
4
|
+
* Implementation of PlanManager for local Markdown files
|
|
5
|
+
*/
|
|
6
|
+
import type { Task } from '../types/index.js';
|
|
7
|
+
import type { PlanManager, TaskFilter, PlanSourceType } from './plan-manager.js';
|
|
8
|
+
/**
|
|
9
|
+
* Local Markdown Plan implementation
|
|
10
|
+
*/
|
|
11
|
+
export declare class LocalMarkdownPlan implements PlanManager {
|
|
12
|
+
readonly sourceType: PlanSourceType;
|
|
13
|
+
private filePath;
|
|
14
|
+
private plan;
|
|
15
|
+
constructor(filePath: string);
|
|
16
|
+
/**
|
|
17
|
+
* Get the plan file path
|
|
18
|
+
*/
|
|
19
|
+
getFilePath(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Initialize by loading and parsing the Markdown file
|
|
22
|
+
*/
|
|
23
|
+
initialize(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get all tasks, optionally filtered
|
|
26
|
+
*/
|
|
27
|
+
getTasks(filter?: TaskFilter): Promise<Task[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Get the next pending task
|
|
30
|
+
*/
|
|
31
|
+
getNextTask(): Promise<Task | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Get a specific task by ID
|
|
34
|
+
*/
|
|
35
|
+
getTask(id: string): Promise<Task | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Mark a task as in-progress
|
|
38
|
+
*/
|
|
39
|
+
startTask(id: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Mark a task as completed
|
|
42
|
+
*/
|
|
43
|
+
completeTask(id: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Mark a task as failed
|
|
46
|
+
*/
|
|
47
|
+
failTask(id: string, _error?: string): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Update task progress
|
|
50
|
+
*/
|
|
51
|
+
updateProgress(id: string, progress: string): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Update task checkbox in the file
|
|
54
|
+
*/
|
|
55
|
+
private updateTaskStatus;
|
|
56
|
+
/**
|
|
57
|
+
* Get all sub-tasks of a parent task
|
|
58
|
+
*/
|
|
59
|
+
getSubTasks(parentId: string): Promise<Task[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Reload the plan from disk
|
|
62
|
+
*/
|
|
63
|
+
reload(): Promise<void>;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=local-markdown-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-markdown-plan.d.ts","sourceRoot":"","sources":["../../src/core/local-markdown-plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASjF;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAW;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAmC;gBAEnC,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;IACG,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAmBpD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAqBzC;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAS/C;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D;;OAEG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE;;OAEG;YACW,gBAAgB;IAuB9B;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQpD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Markdown Plan Source
|
|
3
|
+
*
|
|
4
|
+
* Implementation of PlanManager for local Markdown files
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { parseMarkdownPlan, toTask, updateTaskCheckbox, } from './markdown-parser.js';
|
|
9
|
+
import { debug, info } from '../utils/output.js';
|
|
10
|
+
/**
|
|
11
|
+
* Local Markdown Plan implementation
|
|
12
|
+
*/
|
|
13
|
+
export class LocalMarkdownPlan {
|
|
14
|
+
sourceType = 'local';
|
|
15
|
+
filePath;
|
|
16
|
+
plan = null;
|
|
17
|
+
constructor(filePath) {
|
|
18
|
+
this.filePath = path.resolve(filePath);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the plan file path
|
|
22
|
+
*/
|
|
23
|
+
getFilePath() {
|
|
24
|
+
return this.filePath;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize by loading and parsing the Markdown file
|
|
28
|
+
*/
|
|
29
|
+
async initialize() {
|
|
30
|
+
debug(`Loading plan from ${this.filePath}`);
|
|
31
|
+
try {
|
|
32
|
+
const content = await fs.readFile(this.filePath, 'utf-8');
|
|
33
|
+
this.plan = parseMarkdownPlan(content);
|
|
34
|
+
info(`Loaded ${this.plan.tasks.length} tasks from ${path.basename(this.filePath)}`);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new Error(`Failed to load plan file: ${this.filePath}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get all tasks, optionally filtered
|
|
42
|
+
*/
|
|
43
|
+
async getTasks(filter) {
|
|
44
|
+
if (!this.plan) {
|
|
45
|
+
throw new Error('Plan not initialized. Call initialize() first.');
|
|
46
|
+
}
|
|
47
|
+
let tasks = this.plan.tasks.map((t) => toTask(t));
|
|
48
|
+
// Apply filters
|
|
49
|
+
if (filter?.status && filter.status !== 'all') {
|
|
50
|
+
tasks = tasks.filter((t) => t.status === filter.status);
|
|
51
|
+
}
|
|
52
|
+
if (filter?.limit && filter.limit > 0) {
|
|
53
|
+
tasks = tasks.slice(0, filter.limit);
|
|
54
|
+
}
|
|
55
|
+
return tasks;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get the next pending task
|
|
59
|
+
*/
|
|
60
|
+
async getNextTask() {
|
|
61
|
+
if (!this.plan) {
|
|
62
|
+
throw new Error('Plan not initialized. Call initialize() first.');
|
|
63
|
+
}
|
|
64
|
+
// Find first uncompleted task (top-level first)
|
|
65
|
+
const pendingTasks = this.plan.tasks.filter((t) => !t.completed && t.indentLevel === 0);
|
|
66
|
+
if (pendingTasks.length === 0) {
|
|
67
|
+
// If no top-level pending tasks, check nested ones
|
|
68
|
+
const nestedPending = this.plan.tasks.find((t) => !t.completed);
|
|
69
|
+
if (nestedPending) {
|
|
70
|
+
return toTask(nestedPending);
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const firstPending = pendingTasks[0];
|
|
75
|
+
return firstPending ? toTask(firstPending) : null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get a specific task by ID
|
|
79
|
+
*/
|
|
80
|
+
async getTask(id) {
|
|
81
|
+
if (!this.plan) {
|
|
82
|
+
throw new Error('Plan not initialized. Call initialize() first.');
|
|
83
|
+
}
|
|
84
|
+
const task = this.plan.tasks.find((t) => t.id === id);
|
|
85
|
+
return task ? toTask(task) : null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Mark a task as in-progress
|
|
89
|
+
*/
|
|
90
|
+
async startTask(id) {
|
|
91
|
+
if (!this.plan) {
|
|
92
|
+
throw new Error('Plan not initialized. Call initialize() first.');
|
|
93
|
+
}
|
|
94
|
+
// For local Markdown, we don't modify the file for in-progress status
|
|
95
|
+
// We could add a marker like "- [~]" but that's not standard Markdown
|
|
96
|
+
debug(`Task ${id} marked as in-progress`);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Mark a task as completed
|
|
100
|
+
*/
|
|
101
|
+
async completeTask(id) {
|
|
102
|
+
await this.updateTaskStatus(id, true);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Mark a task as failed
|
|
106
|
+
*/
|
|
107
|
+
async failTask(id, _error) {
|
|
108
|
+
// For failed tasks, we don't check the box - leave it unchecked
|
|
109
|
+
debug(`Task ${id} failed`);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Update task progress
|
|
113
|
+
*/
|
|
114
|
+
async updateProgress(id, progress) {
|
|
115
|
+
debug(`Task ${id} progress: ${progress}`);
|
|
116
|
+
// Progress updates are logged but not written to the Markdown file
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Update task checkbox in the file
|
|
120
|
+
*/
|
|
121
|
+
async updateTaskStatus(id, completed) {
|
|
122
|
+
if (!this.plan) {
|
|
123
|
+
throw new Error('Plan not initialized. Call initialize() first.');
|
|
124
|
+
}
|
|
125
|
+
const task = this.plan.tasks.find((t) => t.id === id);
|
|
126
|
+
if (!task) {
|
|
127
|
+
throw new Error(`Task not found: ${id}`);
|
|
128
|
+
}
|
|
129
|
+
// Update the raw content
|
|
130
|
+
const updatedContent = updateTaskCheckbox(this.plan.rawContent, task.lineNumber, completed);
|
|
131
|
+
// Write back to file
|
|
132
|
+
await fs.writeFile(this.filePath, updatedContent, 'utf-8');
|
|
133
|
+
// Update in-memory state
|
|
134
|
+
task.completed = completed;
|
|
135
|
+
this.plan.rawContent = updatedContent;
|
|
136
|
+
debug(`Task ${id} checkbox updated to ${completed ? 'checked' : 'unchecked'}`);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get all sub-tasks of a parent task
|
|
140
|
+
*/
|
|
141
|
+
async getSubTasks(parentId) {
|
|
142
|
+
if (!this.plan) {
|
|
143
|
+
throw new Error('Plan not initialized. Call initialize() first.');
|
|
144
|
+
}
|
|
145
|
+
return this.plan.tasks.filter((t) => t.parentId === parentId).map((t) => toTask(t));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Reload the plan from disk
|
|
149
|
+
*/
|
|
150
|
+
async reload() {
|
|
151
|
+
await this.initialize();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=local-markdown-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-markdown-plan.js","sourceRoot":"","sources":["../../src/core/local-markdown-plan.ts"],"names":[],"mappings":"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"}
|