jfl 0.6.2 → 0.7.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 +127 -951
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +96 -0
- package/dist/commands/context-hub.js.map +1 -1
- package/dist/commands/kanban.d.ts +34 -0
- package/dist/commands/kanban.d.ts.map +1 -0
- package/dist/commands/kanban.js +216 -0
- package/dist/commands/kanban.js.map +1 -0
- package/dist/commands/peter.d.ts.map +1 -1
- package/dist/commands/peter.js +37 -0
- package/dist/commands/peter.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +62 -0
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +28 -0
- package/dist/commands/verify.js.map +1 -1
- package/dist/dashboard-static/assets/index-CW8oWAdr.css +1 -0
- package/dist/dashboard-static/assets/index-Ck8f9dcM.js +121 -0
- package/dist/dashboard-static/index.html +2 -2
- package/dist/index.js +62 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/flow-engine.d.ts.map +1 -1
- package/dist/lib/flow-engine.js +38 -8
- package/dist/lib/flow-engine.js.map +1 -1
- package/dist/lib/kanban-github.d.ts +81 -0
- package/dist/lib/kanban-github.d.ts.map +1 -0
- package/dist/lib/kanban-github.js +318 -0
- package/dist/lib/kanban-github.js.map +1 -0
- package/dist/lib/kanban.d.ts +131 -0
- package/dist/lib/kanban.d.ts.map +1 -0
- package/dist/lib/kanban.js +340 -0
- package/dist/lib/kanban.js.map +1 -0
- package/dist/lib/service-gtm.d.ts.map +1 -1
- package/dist/lib/service-gtm.js +11 -0
- package/dist/lib/service-gtm.js.map +1 -1
- package/package.json +1 -1
- package/packages/pi/extensions/hud-tool.ts +32 -22
- package/packages/pi/extensions/index.ts +19 -17
- package/packages/pi/extensions/tool-renderers.ts +30 -36
- package/dist/dashboard-static/assets/index-CW9ZxqX8.css +0 -1
- package/dist/dashboard-static/assets/index-DNN__p4K.js +0 -121
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jfl kanban — GitHub Issues-backed task board
|
|
3
|
+
*
|
|
4
|
+
* Cards are GitHub Issues with jfl/ labels. Git is the source of truth.
|
|
5
|
+
* Humans create and prioritize. Agents pick and execute.
|
|
6
|
+
*
|
|
7
|
+
* @purpose CLI command for kanban task board
|
|
8
|
+
*/
|
|
9
|
+
export declare function kanbanLs(projectRoot: string, opts: {
|
|
10
|
+
json?: boolean;
|
|
11
|
+
column?: string;
|
|
12
|
+
scope?: string;
|
|
13
|
+
compact?: boolean;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function kanbanAdd(projectRoot: string, title: string, opts: {
|
|
16
|
+
description?: string;
|
|
17
|
+
priority?: string;
|
|
18
|
+
source?: string;
|
|
19
|
+
scope?: string;
|
|
20
|
+
label?: string[];
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
export declare function kanbanMove(projectRoot: string, id: string, column: string, opts: {
|
|
23
|
+
agent?: string;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
export declare function kanbanPick(projectRoot: string, opts: {
|
|
26
|
+
agent?: string;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
export declare function kanbanDone(projectRoot: string, id: string, opts: {
|
|
29
|
+
agent?: string;
|
|
30
|
+
}): Promise<void>;
|
|
31
|
+
export declare function kanbanBootstrap(projectRoot: string, opts: {
|
|
32
|
+
workflow?: boolean;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=kanban.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kanban.d.ts","sourceRoot":"","sources":["../../src/commands/kanban.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwDH,wBAAsB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,iBAmC/H;AAED,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,iBAevK;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iBAKzG;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iBAiB7E;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iBAKzF;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,iBAgFtF"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* jfl kanban — GitHub Issues-backed task board
|
|
3
|
+
*
|
|
4
|
+
* Cards are GitHub Issues with jfl/ labels. Git is the source of truth.
|
|
5
|
+
* Humans create and prioritize. Agents pick and execute.
|
|
6
|
+
*
|
|
7
|
+
* @purpose CLI command for kanban task board
|
|
8
|
+
*/
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import { execSync } from "child_process";
|
|
11
|
+
import { GitHubKanban } from "../lib/kanban-github.js";
|
|
12
|
+
const COL_COLORS = {
|
|
13
|
+
backlog: chalk.gray,
|
|
14
|
+
in_progress: chalk.cyan,
|
|
15
|
+
eval: chalk.yellow,
|
|
16
|
+
done: chalk.green,
|
|
17
|
+
};
|
|
18
|
+
const COL_LABELS = {
|
|
19
|
+
backlog: "Backlog",
|
|
20
|
+
in_progress: "In Progress",
|
|
21
|
+
eval: "In Review",
|
|
22
|
+
done: "Done",
|
|
23
|
+
};
|
|
24
|
+
function renderCard(card, compact = false) {
|
|
25
|
+
const score = card.score !== null ? ` [${card.score.toFixed(2)}]` : "";
|
|
26
|
+
const agent = card.agent ? chalk.dim(` (${card.agent})`) : "";
|
|
27
|
+
const prio = card.priority > 0 ? chalk.magenta(` P${card.priority}`) : "";
|
|
28
|
+
const src = chalk.dim(` [${card.source}]`);
|
|
29
|
+
const scope = card.scope ? chalk.blue(` [${card.scope}]`) : "";
|
|
30
|
+
const labels = card.labels?.length ? " " + card.labels.map(l => chalk.dim(`#${l}`)).join(" ") : "";
|
|
31
|
+
if (compact) {
|
|
32
|
+
return ` ${chalk.bold(card.id)} ${card.title}${prio}${score}${agent}${scope}`;
|
|
33
|
+
}
|
|
34
|
+
const lines = [
|
|
35
|
+
` ${chalk.bold(card.id)} ${card.title}${prio}${score}${agent}${src}${scope}`,
|
|
36
|
+
];
|
|
37
|
+
if (card.description) {
|
|
38
|
+
const desc = card.description.split("\n")[0].slice(0, 80);
|
|
39
|
+
lines.push(chalk.gray(` ${desc}`));
|
|
40
|
+
}
|
|
41
|
+
if (labels) {
|
|
42
|
+
lines.push(chalk.dim(` ${labels.trim()}`));
|
|
43
|
+
}
|
|
44
|
+
const linkParts = [];
|
|
45
|
+
if (card.links?.pr)
|
|
46
|
+
linkParts.push(`PR #${card.links.pr}`);
|
|
47
|
+
if (card.links?.eval)
|
|
48
|
+
linkParts.push(`eval:${card.links.eval}`);
|
|
49
|
+
if (card.links?.journal)
|
|
50
|
+
linkParts.push(`journal:${card.links.journal}`);
|
|
51
|
+
if (card.links?.violation)
|
|
52
|
+
linkParts.push(`violation:${card.links.violation}`);
|
|
53
|
+
if (linkParts.length) {
|
|
54
|
+
lines.push(chalk.dim(` → ${linkParts.join(" · ")}`));
|
|
55
|
+
}
|
|
56
|
+
if (card.url) {
|
|
57
|
+
lines.push(chalk.dim(` ${card.url}`));
|
|
58
|
+
}
|
|
59
|
+
return lines.join("\n");
|
|
60
|
+
}
|
|
61
|
+
export async function kanbanLs(projectRoot, opts) {
|
|
62
|
+
const kb = new GitHubKanban(projectRoot);
|
|
63
|
+
const filter = opts.scope ? { scope: opts.scope } : undefined;
|
|
64
|
+
const board = await kb.getBoard(filter);
|
|
65
|
+
if (opts.json) {
|
|
66
|
+
if (opts.column) {
|
|
67
|
+
console.log(JSON.stringify(board[opts.column] ?? [], null, 2));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.log(JSON.stringify(board, null, 2));
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const columns = opts.column
|
|
75
|
+
? [opts.column]
|
|
76
|
+
: ["backlog", "in_progress", "eval", "done"];
|
|
77
|
+
console.log(chalk.bold("\n JFL Kanban\n"));
|
|
78
|
+
for (const col of columns) {
|
|
79
|
+
const cards = board[col];
|
|
80
|
+
const label = COL_LABELS[col] ?? col;
|
|
81
|
+
const color = COL_COLORS[col] ?? chalk.white;
|
|
82
|
+
console.log(color(` ${label} (${cards.length})`));
|
|
83
|
+
if (cards.length === 0) {
|
|
84
|
+
console.log(chalk.dim(" (empty)"));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
for (const card of cards) {
|
|
88
|
+
console.log(renderCard(card, opts.compact));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
console.log();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export async function kanbanAdd(projectRoot, title, opts) {
|
|
95
|
+
const kb = new GitHubKanban(projectRoot);
|
|
96
|
+
const number = kb.create({
|
|
97
|
+
title,
|
|
98
|
+
description: opts.description,
|
|
99
|
+
source: opts.source ?? "human",
|
|
100
|
+
priority: opts.priority ? parseInt(opts.priority) : 0,
|
|
101
|
+
scope: opts.scope,
|
|
102
|
+
labels: opts.label,
|
|
103
|
+
});
|
|
104
|
+
const id = `#${number}`;
|
|
105
|
+
console.log(chalk.green(` ✓ Created ${id}: ${title}`));
|
|
106
|
+
if (!process.stdout.isTTY) {
|
|
107
|
+
process.stdout.write(id);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export async function kanbanMove(projectRoot, id, column, opts) {
|
|
111
|
+
const kb = new GitHubKanban(projectRoot);
|
|
112
|
+
const num = parseInt(id.replace("#", ""));
|
|
113
|
+
kb.move(num, column);
|
|
114
|
+
console.log(chalk.green(` ✓ Moved #${num} → ${column}`));
|
|
115
|
+
}
|
|
116
|
+
export async function kanbanPick(projectRoot, opts) {
|
|
117
|
+
const kb = new GitHubKanban(projectRoot);
|
|
118
|
+
const cards = await kb.getCards({ column: "backlog" });
|
|
119
|
+
if (cards.length === 0) {
|
|
120
|
+
console.log(chalk.yellow(" No cards in backlog"));
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
// Pick highest priority
|
|
124
|
+
const card = cards[0];
|
|
125
|
+
kb.pick(card.number, opts.agent ?? "");
|
|
126
|
+
console.log(chalk.cyan(` ⚡ Picked ${card.id}: ${card.title}`));
|
|
127
|
+
if (!process.stdout.isTTY) {
|
|
128
|
+
process.stdout.write(card.title);
|
|
129
|
+
if (card.description)
|
|
130
|
+
process.stdout.write(`\n\n${card.description}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export async function kanbanDone(projectRoot, id, opts) {
|
|
134
|
+
const kb = new GitHubKanban(projectRoot);
|
|
135
|
+
const num = parseInt(id.replace("#", ""));
|
|
136
|
+
kb.move(num, "done");
|
|
137
|
+
console.log(chalk.green(` ✓ Done: #${num}`));
|
|
138
|
+
}
|
|
139
|
+
export async function kanbanBootstrap(projectRoot, opts) {
|
|
140
|
+
const kb = new GitHubKanban(projectRoot);
|
|
141
|
+
const info = kb.getWorkspaceInfo();
|
|
142
|
+
// 1. Create column labels
|
|
143
|
+
GitHubKanban.bootstrap(info.repo);
|
|
144
|
+
console.log(chalk.green(` ✓ Column labels created (backlog, in-progress, eval, done)`));
|
|
145
|
+
// 2. Create scope labels for registered services
|
|
146
|
+
const services = kb.getRegisteredServices();
|
|
147
|
+
for (const s of services) {
|
|
148
|
+
try {
|
|
149
|
+
execSync(`gh label create "scope:${s.name}" --repo ${info.repo} --color 1971C2 --description "Scope: ${s.name}" --force`, {
|
|
150
|
+
encoding: "utf-8", timeout: 10000,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch { }
|
|
154
|
+
}
|
|
155
|
+
if (services.length > 0) {
|
|
156
|
+
console.log(chalk.green(` ✓ ${services.length} scope labels created`));
|
|
157
|
+
}
|
|
158
|
+
// 3. Create source labels
|
|
159
|
+
const sources = [
|
|
160
|
+
{ name: "source:human", color: "495057", desc: "Created by human" },
|
|
161
|
+
{ name: "source:agent", color: "7C6F64", desc: "Created by agent" },
|
|
162
|
+
{ name: "source:setup", color: "0B7285", desc: "Created by jfl setup" },
|
|
163
|
+
{ name: "source:verify", color: "C92A2A", desc: "Created by jfl verify" },
|
|
164
|
+
{ name: "source:findings", color: "E67700", desc: "Created by findings" },
|
|
165
|
+
];
|
|
166
|
+
for (const s of sources) {
|
|
167
|
+
try {
|
|
168
|
+
execSync(`gh label create "${s.name}" --repo ${info.repo} --color ${s.color} --description "${s.desc}" --force`, {
|
|
169
|
+
encoding: "utf-8", timeout: 10000,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch { }
|
|
173
|
+
}
|
|
174
|
+
console.log(chalk.green(` ✓ Source labels created`));
|
|
175
|
+
// 4. Create priority labels
|
|
176
|
+
const priorities = [
|
|
177
|
+
{ name: "priority:critical", color: "B60205", desc: "Priority 8-10" },
|
|
178
|
+
{ name: "priority:high", color: "D93F0B", desc: "Priority 5-7" },
|
|
179
|
+
{ name: "priority:low", color: "0E8A16", desc: "Priority 1-4" },
|
|
180
|
+
];
|
|
181
|
+
for (const p of priorities) {
|
|
182
|
+
try {
|
|
183
|
+
execSync(`gh label create "${p.name}" --repo ${info.repo} --color ${p.color} --description "${p.desc}" --force`, {
|
|
184
|
+
encoding: "utf-8", timeout: 10000,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch { }
|
|
188
|
+
}
|
|
189
|
+
console.log(chalk.green(` ✓ Priority labels created`));
|
|
190
|
+
// 5. Install GitHub Action workflow
|
|
191
|
+
if (opts.workflow) {
|
|
192
|
+
const { existsSync, mkdirSync, copyFileSync } = await import("fs");
|
|
193
|
+
const { join, dirname } = await import("path");
|
|
194
|
+
const workflowDir = join(projectRoot, ".github", "workflows");
|
|
195
|
+
const workflowPath = join(workflowDir, "kanban.yml");
|
|
196
|
+
if (!existsSync(workflowDir)) {
|
|
197
|
+
mkdirSync(workflowDir, { recursive: true });
|
|
198
|
+
}
|
|
199
|
+
// Copy the workflow from the jfl-cli package
|
|
200
|
+
const sourceWorkflow = join(dirname(new URL(import.meta.url).pathname), "../../.github/workflows/kanban.yml");
|
|
201
|
+
if (existsSync(sourceWorkflow)) {
|
|
202
|
+
copyFileSync(sourceWorkflow, workflowPath);
|
|
203
|
+
console.log(chalk.green(` ✓ GitHub Action installed (.github/workflows/kanban.yml)`));
|
|
204
|
+
console.log(chalk.dim(` Auto-moves: branch created → in_progress, PR opened → eval, PR merged → done`));
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
console.log(chalk.yellow(` ⚠ Workflow template not found — install manually from jfl-cli repo`));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
console.log();
|
|
211
|
+
console.log(chalk.bold(` Kanban ready on ${info.repo}`));
|
|
212
|
+
console.log(chalk.dim(` Board: jfl kanban ls`));
|
|
213
|
+
console.log(chalk.dim(` Add: jfl kanban add "My task" --priority 5`));
|
|
214
|
+
console.log(chalk.dim(` View: gh issue list --label jfl/backlog`));
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=kanban.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kanban.js","sourceRoot":"","sources":["../../src/commands/kanban.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peter.d.ts","sourceRoot":"","sources":["../../src/commands/peter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"peter.d.ts","sourceRoot":"","sources":["../../src/commands/peter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiqEH,wBAAsB,YAAY,CAChC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,OAAO,CAAA;CAAO,iBA4JrK"}
|
package/dist/commands/peter.js
CHANGED
|
@@ -721,6 +721,24 @@ Respond with ONLY a JSON array, no other text.`;
|
|
|
721
721
|
source: "experiment",
|
|
722
722
|
reasoning: proposal.reasoning,
|
|
723
723
|
});
|
|
724
|
+
// Create GitHub Issue for the experiment
|
|
725
|
+
try {
|
|
726
|
+
const { GitHubKanban } = await import("../lib/kanban-github.js");
|
|
727
|
+
const kb = new GitHubKanban(projectRoot);
|
|
728
|
+
const issueNum = kb.create({
|
|
729
|
+
title: proposal.task.slice(0, 120),
|
|
730
|
+
description: `Predicted delta: +${proposal.predicted_delta.toFixed(4)}. ${proposal.reasoning}\n\nAuthored-by: peter-parker (jfl-cli)`,
|
|
731
|
+
source: "agent",
|
|
732
|
+
priority: Math.round(proposal.predicted_delta * 10),
|
|
733
|
+
agent: "peter-parker",
|
|
734
|
+
labels: ["agent"],
|
|
735
|
+
});
|
|
736
|
+
if (issueNum) {
|
|
737
|
+
kb.pick(issueNum, "peter-parker");
|
|
738
|
+
console.log(chalk.gray(` 📋 Issue #${issueNum} → in_progress`));
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
catch { }
|
|
724
742
|
console.log(chalk.cyan(" Dispatching to Peter Parker PR workflow...\n"));
|
|
725
743
|
await runWithPR(projectRoot, proposal.task);
|
|
726
744
|
}
|
|
@@ -1061,6 +1079,25 @@ Suggest the SINGLE highest-value change. JSON format:
|
|
|
1061
1079
|
source: "autoresearch",
|
|
1062
1080
|
},
|
|
1063
1081
|
});
|
|
1082
|
+
// Update GitHub Issue — move done or revert to backlog
|
|
1083
|
+
try {
|
|
1084
|
+
const { GitHubKanban } = await import("../lib/kanban-github.js");
|
|
1085
|
+
const kb = new GitHubKanban(projectRoot);
|
|
1086
|
+
const cards = await kb.getCards({ column: "in_progress" });
|
|
1087
|
+
const ppCards = cards.filter(c => c.agent === "peter-parker");
|
|
1088
|
+
if (ppCards.length > 0) {
|
|
1089
|
+
const card = ppCards[ppCards.length - 1];
|
|
1090
|
+
if (delta > 0 || testsAdded > 0) {
|
|
1091
|
+
kb.move(card.number, "done");
|
|
1092
|
+
console.log(chalk.gray(` 📋 Issue ${card.id} → done (${score.toFixed(4)})`));
|
|
1093
|
+
}
|
|
1094
|
+
else {
|
|
1095
|
+
kb.move(card.number, "backlog");
|
|
1096
|
+
console.log(chalk.gray(` 📋 Issue ${card.id} → backlog (no improvement)`));
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
catch { }
|
|
1064
1101
|
gitExec(["checkout", baseBranch], projectRoot);
|
|
1065
1102
|
}
|
|
1066
1103
|
console.log(chalk.bold(`\n ── Autoresearch Complete ${"─".repeat(35)}\n`));
|