@iloom/cli 0.8.2 → 0.9.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 +1 -1
- package/README.md +50 -4
- package/dist/{BranchNamingService-AO7BPIUJ.js → BranchNamingService-K6XNWQ6C.js} +2 -2
- package/dist/ClaudeContextManager-X2Y72GRL.js +14 -0
- package/dist/ClaudeService-7P32TTES.js +13 -0
- package/dist/{LoomLauncher-NHZMEVTQ.js → LoomLauncher-3I47SUPV.js} +6 -6
- package/dist/{ProjectCapabilityDetector-IA56AUE6.js → ProjectCapabilityDetector-N5L7T4IY.js} +3 -3
- package/dist/PromptTemplateManager-36YLQRHP.js +11 -0
- package/dist/README.md +50 -4
- package/dist/{SettingsManager-VCVLL32H.js → SettingsManager-QR7V2IW2.js} +2 -2
- package/dist/agents/iloom-artifact-reviewer.md +280 -0
- package/dist/agents/iloom-code-reviewer.md +9 -7
- package/dist/agents/iloom-issue-analyze-and-plan.md +21 -6
- package/dist/agents/iloom-issue-analyzer.md +21 -6
- package/dist/agents/iloom-issue-complexity-evaluator.md +21 -6
- package/dist/agents/iloom-issue-enhancer.md +21 -6
- package/dist/agents/iloom-issue-implementer.md +21 -6
- package/dist/agents/iloom-issue-planner.md +21 -6
- package/dist/{build-Z3WCIKPD.js → build-IC4CJRMP.js} +8 -8
- package/dist/{chunk-TVH67KEO.js → chunk-2HZX6AMR.js} +2 -2
- package/dist/{chunk-VZYSM7N7.js → chunk-2JPXGGP4.js} +20 -15
- package/dist/chunk-2JPXGGP4.js.map +1 -0
- package/dist/{chunk-HSGZW3ID.js → chunk-4GAJJUYS.js} +3 -3
- package/dist/chunk-4GAJJUYS.js.map +1 -0
- package/dist/{chunk-RD7I2Q2F.js → chunk-4LKGCFGG.js} +2 -2
- package/dist/{chunk-SSASIBDJ.js → chunk-5LVVQGB3.js} +5 -5
- package/dist/{chunk-GWONJE3X.js → chunk-6Y3FTRJL.js} +189 -48
- package/dist/chunk-6Y3FTRJL.js.map +1 -0
- package/dist/{chunk-4BSXZ5YZ.js → chunk-B7U6OKUR.js} +5 -24
- package/dist/chunk-B7U6OKUR.js.map +1 -0
- package/dist/{chunk-IGKPPACU.js → chunk-FO5GGFOV.js} +17 -8
- package/dist/chunk-FO5GGFOV.js.map +1 -0
- package/dist/{chunk-GDS2HXSW.js → chunk-H6ST2TGP.js} +20 -3
- package/dist/chunk-H6ST2TGP.js.map +1 -0
- package/dist/{chunk-A7XHHUEV.js → chunk-HZXBHMVM.js} +47 -22
- package/dist/chunk-HZXBHMVM.js.map +1 -0
- package/dist/{chunk-44Y5IF7P.js → chunk-I23OQB4Y.js} +5 -5
- package/dist/chunk-JT5LZRMI.js +302 -0
- package/dist/chunk-JT5LZRMI.js.map +1 -0
- package/dist/{chunk-Q457PKGH.js → chunk-KAYXR544.js} +2 -2
- package/dist/{chunk-XU5A6BWA.js → chunk-MZPRBNYC.js} +4 -4
- package/dist/{chunk-XHNACIHO.js → chunk-NTTSUAVM.js} +2 -2
- package/dist/{chunk-PLI3JQWT.js → chunk-OAVJR4PM.js} +2 -2
- package/dist/{chunk-4KGRPHM6.js → chunk-PL2FDYEK.js} +2 -2
- package/dist/chunk-QN47QVBX.js +131 -0
- package/dist/chunk-QN47QVBX.js.map +1 -0
- package/dist/{chunk-3FC3VNEX.js → chunk-RD7OPXZK.js} +34 -8
- package/dist/chunk-RD7OPXZK.js.map +1 -0
- package/dist/{chunk-O6LECMT6.js → chunk-TGRK3CHF.js} +8 -8
- package/dist/{chunk-7GLZVDPQ.js → chunk-TL72BGP6.js} +2 -2
- package/dist/{chunk-52MVUK5V.js → chunk-USSL2X4A.js} +2 -2
- package/dist/chunk-USSL2X4A.js.map +1 -0
- package/dist/{chunk-XPKN3QWY.js → chunk-VOGGLPG5.js} +1 -2
- package/dist/{chunk-IWIIOFEB.js → chunk-XFEK2X2D.js} +16 -6
- package/dist/chunk-XFEK2X2D.js.map +1 -0
- package/dist/{chunk-PBSHQVCT.js → chunk-Z6F5CUS6.js} +4 -4
- package/dist/{claude-V4HRPR4Z.js → claude-TP2QO3BU.js} +2 -2
- package/dist/{cleanup-NWNKWPUY.js → cleanup-M6N7KV7E.js} +20 -15
- package/dist/{cleanup-NWNKWPUY.js.map → cleanup-M6N7KV7E.js.map} +1 -1
- package/dist/cli.js +118 -84
- package/dist/cli.js.map +1 -1
- package/dist/{commit-534QIRHY.js → commit-ORHR53KW.js} +10 -10
- package/dist/{compile-UANHMNTS.js → compile-EOWJORKO.js} +8 -8
- package/dist/{contribute-7USRBWRM.js → contribute-4KCEOHSH.js} +3 -3
- package/dist/{dev-server-TO7RLYJI.js → dev-server-Q6M62ATG.js} +13 -13
- package/dist/{feedback-7ZZI6RC5.js → feedback-XRI7SGYX.js} +11 -11
- package/dist/{git-GUNOPP4Q.js → git-W3XUIFTR.js} +5 -3
- package/dist/hooks/iloom-hook.js +5 -3
- package/dist/{ignite-5SIGOW5V.js → ignite-3FHQY23X.js} +90 -26
- package/dist/ignite-3FHQY23X.js.map +1 -0
- package/dist/index.d.ts +37 -2
- package/dist/index.js +49 -13
- package/dist/index.js.map +1 -1
- package/dist/{chunk-FPNSFP6K.js → init-ALYWKNWG.js} +42 -329
- package/dist/init-ALYWKNWG.js.map +1 -0
- package/dist/{lint-XPODLDVA.js → lint-IHUH45OC.js} +8 -8
- package/dist/{open-M2SUR74Y.js → open-KWOV2OFO.js} +15 -15
- package/dist/{plan-FB4AOJ2Q.js → plan-P6MXL7AU.js} +54 -22
- package/dist/plan-P6MXL7AU.js.map +1 -0
- package/dist/{projects-325GEEGJ.js → projects-LH362JZQ.js} +3 -3
- package/dist/prompts/init-prompt.txt +9 -1
- package/dist/prompts/issue-prompt.txt +315 -5
- package/dist/prompts/plan-prompt.txt +4 -6
- package/dist/prompts/pr-prompt.txt +79 -0
- package/dist/prompts/regular-prompt.txt +210 -5
- package/dist/{rebase-4FNRBW3H.js → rebase-AJOJOZUG.js} +9 -9
- package/dist/{recap-GSXFEOD6.js → recap-GKJXMDXW.js} +5 -5
- package/dist/{run-GZNHRJB2.js → run-QEUVZF7J.js} +15 -15
- package/dist/schema/settings.schema.json +9 -1
- package/dist/{shell-2SPM3Z5O.js → shell-DAAVG4YN.js} +5 -5
- package/dist/{summary-Z4F7YFXE.js → summary-WNEYCO4S.js} +11 -11
- package/dist/{test-LBSPYIJW.js → test-5GPWWO3P.js} +8 -8
- package/dist/{test-git-ZPSPA2TP.js → test-git-EJUKDB7F.js} +3 -3
- package/dist/{test-prefix-6DLB2BHE.js → test-prefix-23TOBUXY.js} +3 -3
- package/dist/{test-webserver-XLJ2TZFP.js → test-webserver-CKROHFBQ.js} +5 -5
- package/dist/{vscode-LH3VSQ2W.js → vscode-6TOLFCI2.js} +5 -5
- package/package.json +2 -2
- package/dist/ClaudeContextManager-RDP6CLK6.js +0 -14
- package/dist/ClaudeService-FKPOQRA4.js +0 -13
- package/dist/PRManager-A63LT3NF.js +0 -16
- package/dist/PromptTemplateManager-OUYDHOPI.js +0 -9
- package/dist/chunk-3FC3VNEX.js.map +0 -1
- package/dist/chunk-4BSXZ5YZ.js.map +0 -1
- package/dist/chunk-52MVUK5V.js.map +0 -1
- package/dist/chunk-66QOCD5N.js +0 -79
- package/dist/chunk-66QOCD5N.js.map +0 -1
- package/dist/chunk-A7XHHUEV.js.map +0 -1
- package/dist/chunk-FPNSFP6K.js.map +0 -1
- package/dist/chunk-GDS2HXSW.js.map +0 -1
- package/dist/chunk-GWONJE3X.js.map +0 -1
- package/dist/chunk-HSGZW3ID.js.map +0 -1
- package/dist/chunk-IGKPPACU.js.map +0 -1
- package/dist/chunk-IWIIOFEB.js.map +0 -1
- package/dist/chunk-VZYSM7N7.js.map +0 -1
- package/dist/git-GUNOPP4Q.js.map +0 -1
- package/dist/ignite-5SIGOW5V.js.map +0 -1
- package/dist/init-XXDIB2UJ.js +0 -21
- package/dist/init-XXDIB2UJ.js.map +0 -1
- package/dist/plan-FB4AOJ2Q.js.map +0 -1
- /package/dist/{BranchNamingService-AO7BPIUJ.js.map → BranchNamingService-K6XNWQ6C.js.map} +0 -0
- /package/dist/{ClaudeContextManager-RDP6CLK6.js.map → ClaudeContextManager-X2Y72GRL.js.map} +0 -0
- /package/dist/{ClaudeService-FKPOQRA4.js.map → ClaudeService-7P32TTES.js.map} +0 -0
- /package/dist/{LoomLauncher-NHZMEVTQ.js.map → LoomLauncher-3I47SUPV.js.map} +0 -0
- /package/dist/{PRManager-A63LT3NF.js.map → ProjectCapabilityDetector-N5L7T4IY.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-IA56AUE6.js.map → PromptTemplateManager-36YLQRHP.js.map} +0 -0
- /package/dist/{PromptTemplateManager-OUYDHOPI.js.map → SettingsManager-QR7V2IW2.js.map} +0 -0
- /package/dist/{build-Z3WCIKPD.js.map → build-IC4CJRMP.js.map} +0 -0
- /package/dist/{chunk-TVH67KEO.js.map → chunk-2HZX6AMR.js.map} +0 -0
- /package/dist/{chunk-RD7I2Q2F.js.map → chunk-4LKGCFGG.js.map} +0 -0
- /package/dist/{chunk-SSASIBDJ.js.map → chunk-5LVVQGB3.js.map} +0 -0
- /package/dist/{chunk-44Y5IF7P.js.map → chunk-I23OQB4Y.js.map} +0 -0
- /package/dist/{chunk-Q457PKGH.js.map → chunk-KAYXR544.js.map} +0 -0
- /package/dist/{chunk-XU5A6BWA.js.map → chunk-MZPRBNYC.js.map} +0 -0
- /package/dist/{chunk-XHNACIHO.js.map → chunk-NTTSUAVM.js.map} +0 -0
- /package/dist/{chunk-PLI3JQWT.js.map → chunk-OAVJR4PM.js.map} +0 -0
- /package/dist/{chunk-4KGRPHM6.js.map → chunk-PL2FDYEK.js.map} +0 -0
- /package/dist/{chunk-O6LECMT6.js.map → chunk-TGRK3CHF.js.map} +0 -0
- /package/dist/{chunk-7GLZVDPQ.js.map → chunk-TL72BGP6.js.map} +0 -0
- /package/dist/{chunk-XPKN3QWY.js.map → chunk-VOGGLPG5.js.map} +0 -0
- /package/dist/{chunk-PBSHQVCT.js.map → chunk-Z6F5CUS6.js.map} +0 -0
- /package/dist/{SettingsManager-VCVLL32H.js.map → claude-TP2QO3BU.js.map} +0 -0
- /package/dist/{commit-534QIRHY.js.map → commit-ORHR53KW.js.map} +0 -0
- /package/dist/{compile-UANHMNTS.js.map → compile-EOWJORKO.js.map} +0 -0
- /package/dist/{contribute-7USRBWRM.js.map → contribute-4KCEOHSH.js.map} +0 -0
- /package/dist/{dev-server-TO7RLYJI.js.map → dev-server-Q6M62ATG.js.map} +0 -0
- /package/dist/{feedback-7ZZI6RC5.js.map → feedback-XRI7SGYX.js.map} +0 -0
- /package/dist/{claude-V4HRPR4Z.js.map → git-W3XUIFTR.js.map} +0 -0
- /package/dist/{lint-XPODLDVA.js.map → lint-IHUH45OC.js.map} +0 -0
- /package/dist/{open-M2SUR74Y.js.map → open-KWOV2OFO.js.map} +0 -0
- /package/dist/{projects-325GEEGJ.js.map → projects-LH362JZQ.js.map} +0 -0
- /package/dist/{rebase-4FNRBW3H.js.map → rebase-AJOJOZUG.js.map} +0 -0
- /package/dist/{recap-GSXFEOD6.js.map → recap-GKJXMDXW.js.map} +0 -0
- /package/dist/{run-GZNHRJB2.js.map → run-QEUVZF7J.js.map} +0 -0
- /package/dist/{shell-2SPM3Z5O.js.map → shell-DAAVG4YN.js.map} +0 -0
- /package/dist/{summary-Z4F7YFXE.js.map → summary-WNEYCO4S.js.map} +0 -0
- /package/dist/{test-LBSPYIJW.js.map → test-5GPWWO3P.js.map} +0 -0
- /package/dist/{test-git-ZPSPA2TP.js.map → test-git-EJUKDB7F.js.map} +0 -0
- /package/dist/{test-prefix-6DLB2BHE.js.map → test-prefix-23TOBUXY.js.map} +0 -0
- /package/dist/{test-webserver-XLJ2TZFP.js.map → test-webserver-CKROHFBQ.js.map} +0 -0
- /package/dist/{vscode-LH3VSQ2W.js.map → vscode-6TOLFCI2.js.map} +0 -0
|
@@ -1,33 +1,40 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from "./chunk-RD7I2Q2F.js";
|
|
3
|
+
PRManager
|
|
4
|
+
} from "./chunk-I23OQB4Y.js";
|
|
6
5
|
import {
|
|
7
6
|
calculatePortForBranch,
|
|
8
7
|
calculatePortFromIdentifier
|
|
9
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-USSL2X4A.js";
|
|
9
|
+
import {
|
|
10
|
+
installDependencies,
|
|
11
|
+
runScript
|
|
12
|
+
} from "./chunk-4LKGCFGG.js";
|
|
10
13
|
import {
|
|
11
14
|
getPackageConfig,
|
|
12
15
|
hasScript
|
|
13
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-VOGGLPG5.js";
|
|
14
17
|
import {
|
|
18
|
+
GitCommandError,
|
|
19
|
+
PLACEHOLDER_COMMIT_PREFIX,
|
|
15
20
|
branchExists,
|
|
16
21
|
checkRemoteBranchStatus,
|
|
17
22
|
ensureRepositoryHasCommits,
|
|
18
23
|
executeGitCommand,
|
|
19
24
|
extractIssueNumber,
|
|
20
25
|
extractPRNumber,
|
|
26
|
+
fetchOrigin,
|
|
21
27
|
findMainWorktreePathWithSettings,
|
|
22
28
|
findWorktreeForBranch,
|
|
23
29
|
getMergeTargetBranch,
|
|
24
30
|
hasUncommittedChanges,
|
|
25
31
|
isBranchMergedIntoMain,
|
|
26
|
-
isFileTrackedByGit
|
|
27
|
-
|
|
32
|
+
isFileTrackedByGit,
|
|
33
|
+
pushBranchToRemote
|
|
34
|
+
} from "./chunk-H6ST2TGP.js";
|
|
28
35
|
import {
|
|
29
36
|
SettingsManager
|
|
30
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-XFEK2X2D.js";
|
|
31
38
|
import {
|
|
32
39
|
MetadataManager
|
|
33
40
|
} from "./chunk-KBEIQP4G.js";
|
|
@@ -44,7 +51,7 @@ import {
|
|
|
44
51
|
} from "./chunk-433MOLAU.js";
|
|
45
52
|
import {
|
|
46
53
|
generateRandomSessionId
|
|
47
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-FO5GGFOV.js";
|
|
48
55
|
import {
|
|
49
56
|
getLogger
|
|
50
57
|
} from "./chunk-6MLEBAYZ.js";
|
|
@@ -325,38 +332,65 @@ var LoomManager = class {
|
|
|
325
332
|
let draftPrNumber = void 0;
|
|
326
333
|
let draftPrUrl = void 0;
|
|
327
334
|
const mergeBehavior = settingsData.mergeBehavior ?? { mode: "local" };
|
|
328
|
-
if (mergeBehavior.mode === "github-draft-pr" && input.type === "issue") {
|
|
329
|
-
getLogger().info("Creating placeholder commit for draft PR...");
|
|
330
|
-
const { executeGitCommand: executeGitCommand2, PLACEHOLDER_COMMIT_PREFIX, pushBranchToRemote } = await import("./git-GUNOPP4Q.js");
|
|
331
|
-
await executeGitCommand2(
|
|
332
|
-
[
|
|
333
|
-
"commit",
|
|
334
|
-
"--allow-empty",
|
|
335
|
-
"--no-verify",
|
|
336
|
-
"-m",
|
|
337
|
-
`${PLACEHOLDER_COMMIT_PREFIX} Temporary commit for draft PR (will be removed on finish)`
|
|
338
|
-
],
|
|
339
|
-
{ cwd: worktreePath }
|
|
340
|
-
);
|
|
341
|
-
getLogger().debug("Placeholder commit created");
|
|
342
|
-
getLogger().info("Pushing branch to remote for draft PR...");
|
|
343
|
-
await pushBranchToRemote(branchName, worktreePath, { dryRun: false });
|
|
344
|
-
const { PRManager } = await import("./PRManager-A63LT3NF.js");
|
|
335
|
+
if (mergeBehavior.mode === "github-draft-pr" && (input.type === "issue" || input.type === "branch")) {
|
|
345
336
|
const prManager = new PRManager(settingsData);
|
|
346
|
-
|
|
347
|
-
|
|
337
|
+
getLogger().info("Fetching from origin...");
|
|
338
|
+
await executeGitCommand(["fetch", "origin"], { cwd: worktreePath });
|
|
339
|
+
let remoteBranchExists = false;
|
|
340
|
+
try {
|
|
341
|
+
await executeGitCommand(["rev-parse", "--verify", `origin/${branchName}`], { cwd: worktreePath });
|
|
342
|
+
remoteBranchExists = true;
|
|
343
|
+
getLogger().info(`Remote branch origin/${branchName} already exists, resetting local to match...`);
|
|
344
|
+
} catch (error) {
|
|
345
|
+
if (error instanceof GitCommandError && (error.stderr.includes("unknown revision") || error.stderr.includes("Needed a single revision") || error.stderr.includes("bad revision"))) {
|
|
346
|
+
getLogger().debug(`Remote branch origin/${branchName} does not exist`);
|
|
347
|
+
} else {
|
|
348
|
+
throw error;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (remoteBranchExists) {
|
|
352
|
+
await executeGitCommand(["reset", "--hard", `origin/${branchName}`], { cwd: worktreePath });
|
|
353
|
+
await executeGitCommand(["branch", "--set-upstream-to", `origin/${branchName}`], { cwd: worktreePath });
|
|
354
|
+
getLogger().success("Local branch reset to match remote");
|
|
355
|
+
} else {
|
|
356
|
+
getLogger().info("Creating placeholder commit for draft PR...");
|
|
357
|
+
await executeGitCommand(
|
|
358
|
+
[
|
|
359
|
+
"commit",
|
|
360
|
+
"--allow-empty",
|
|
361
|
+
"--no-verify",
|
|
362
|
+
"-m",
|
|
363
|
+
`${PLACEHOLDER_COMMIT_PREFIX} Temporary commit for draft PR (will be removed on finish)`
|
|
364
|
+
],
|
|
365
|
+
{ cwd: worktreePath }
|
|
366
|
+
);
|
|
367
|
+
getLogger().debug("Placeholder commit created");
|
|
368
|
+
getLogger().info("Pushing branch to remote for draft PR...");
|
|
369
|
+
await pushBranchToRemote(branchName, worktreePath, { dryRun: false });
|
|
370
|
+
}
|
|
371
|
+
const existingPR = await prManager.checkForExistingPR(branchName, worktreePath);
|
|
372
|
+
if (existingPR) {
|
|
373
|
+
draftPrNumber = existingPR.number;
|
|
374
|
+
draftPrUrl = existingPR.url;
|
|
375
|
+
getLogger().success(`Found existing PR: ${existingPR.url}`);
|
|
376
|
+
} else {
|
|
377
|
+
const prTitle = (issueData == null ? void 0 : issueData.title) ?? `Work on ${branchName}`;
|
|
378
|
+
const prBody = input.type === "issue" ? `PR for issue #${input.identifier}
|
|
379
|
+
|
|
380
|
+
This PR was created automatically by iloom.` : `Branch: ${branchName}
|
|
348
381
|
|
|
349
382
|
This PR was created automatically by iloom.`;
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
383
|
+
getLogger().info("Creating draft PR...");
|
|
384
|
+
const prResult = await prManager.createDraftPR(
|
|
385
|
+
branchName,
|
|
386
|
+
prTitle,
|
|
387
|
+
prBody,
|
|
388
|
+
worktreePath
|
|
389
|
+
);
|
|
390
|
+
draftPrNumber = prResult.number;
|
|
391
|
+
draftPrUrl = prResult.url;
|
|
392
|
+
getLogger().success(`Draft PR created: ${prResult.url}`);
|
|
393
|
+
}
|
|
360
394
|
}
|
|
361
395
|
const allMetadata = await this.metadataManager.listAllMetadata();
|
|
362
396
|
const usedHexColors = allMetadata.filter((metadata) => metadata.colorHex !== null).map((metadata) => metadata.colorHex);
|
|
@@ -392,8 +426,8 @@ This PR was created automatically by iloom.`;
|
|
|
392
426
|
const setArguments = (_j = input.options) == null ? void 0 : _j.setArguments;
|
|
393
427
|
const executablePath = (_k = input.options) == null ? void 0 : _k.executablePath;
|
|
394
428
|
if (enableClaude || enableCode || enableDevServer || enableTerminal) {
|
|
395
|
-
const { LoomLauncher } = await import("./LoomLauncher-
|
|
396
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
429
|
+
const { LoomLauncher } = await import("./LoomLauncher-3I47SUPV.js");
|
|
430
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-X2Y72GRL.js");
|
|
397
431
|
const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
|
|
398
432
|
const launcher = new LoomLauncher(claudeContext, this.settings);
|
|
399
433
|
await launcher.launchLoom({
|
|
@@ -428,6 +462,9 @@ This PR was created automatically by iloom.`;
|
|
|
428
462
|
}
|
|
429
463
|
}
|
|
430
464
|
const pr_numbers = input.type === "pr" ? [String(input.identifier)] : [];
|
|
465
|
+
if (draftPrNumber && !pr_numbers.includes(String(draftPrNumber))) {
|
|
466
|
+
pr_numbers.push(String(draftPrNumber));
|
|
467
|
+
}
|
|
431
468
|
const sessionId = generateRandomSessionId();
|
|
432
469
|
let issueUrls = {};
|
|
433
470
|
if (input.type === "issue" && (issueData == null ? void 0 : issueData.url)) {
|
|
@@ -541,7 +578,7 @@ This PR was created automatically by iloom.`;
|
|
|
541
578
|
async checkAndWarnChildLooms(branchName) {
|
|
542
579
|
let targetBranch = branchName;
|
|
543
580
|
if (!targetBranch) {
|
|
544
|
-
const { getCurrentBranch } = await import("./git-
|
|
581
|
+
const { getCurrentBranch } = await import("./git-W3XUIFTR.js");
|
|
545
582
|
targetBranch = await getCurrentBranch();
|
|
546
583
|
}
|
|
547
584
|
if (!targetBranch) {
|
|
@@ -640,13 +677,27 @@ This PR was created automatically by iloom.`;
|
|
|
640
677
|
);
|
|
641
678
|
}
|
|
642
679
|
}
|
|
643
|
-
const branchExistedLocally = await branchExists(branchName);
|
|
680
|
+
const branchExistedLocally = await branchExists(branchName, process.cwd(), false);
|
|
644
681
|
if (input.type !== "pr" && branchExistedLocally) {
|
|
645
682
|
throw new Error(
|
|
646
683
|
`Cannot create worktree: branch '${branchName}' already exists. Use 'git branch -D ${branchName}' to delete it first if needed.`
|
|
647
684
|
);
|
|
648
685
|
}
|
|
649
|
-
const
|
|
686
|
+
const mergeBehavior = settingsData.mergeBehavior ?? { mode: "local" };
|
|
687
|
+
const isPRMode = mergeBehavior.mode === "github-pr" || mergeBehavior.mode === "github-draft-pr";
|
|
688
|
+
const isChildLoom = !!input.parentLoom;
|
|
689
|
+
let baseBranch;
|
|
690
|
+
if (isChildLoom) {
|
|
691
|
+
baseBranch = ((_a = input.parentLoom) == null ? void 0 : _a.branchName) ?? input.baseBranch;
|
|
692
|
+
} else if (isPRMode && input.type !== "pr") {
|
|
693
|
+
getLogger().info("Fetching from origin to ensure latest main branch...");
|
|
694
|
+
await fetchOrigin(this.gitWorktree.workingDirectory);
|
|
695
|
+
const mainBranch = settingsData.mainBranch ?? "main";
|
|
696
|
+
baseBranch = `origin/${mainBranch}`;
|
|
697
|
+
getLogger().info(`Branching from ${baseBranch}`);
|
|
698
|
+
} else {
|
|
699
|
+
baseBranch = input.baseBranch;
|
|
700
|
+
}
|
|
650
701
|
await this.gitWorktree.createWorktree({
|
|
651
702
|
path: worktreePath,
|
|
652
703
|
branch: branchName,
|
|
@@ -1047,8 +1098,8 @@ This PR was created automatically by iloom.`;
|
|
|
1047
1098
|
const executablePath = (_i = input.options) == null ? void 0 : _i.executablePath;
|
|
1048
1099
|
if (enableClaude || enableCode || enableDevServer || enableTerminal) {
|
|
1049
1100
|
getLogger().info("Launching workspace components...");
|
|
1050
|
-
const { LoomLauncher } = await import("./LoomLauncher-
|
|
1051
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
1101
|
+
const { LoomLauncher } = await import("./LoomLauncher-3I47SUPV.js");
|
|
1102
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-X2Y72GRL.js");
|
|
1052
1103
|
const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
|
|
1053
1104
|
const launcher = new LoomLauncher(claudeContext, this.settings);
|
|
1054
1105
|
await launcher.launchLoom({
|
|
@@ -1783,7 +1834,41 @@ var DatabaseManager = class {
|
|
|
1783
1834
|
};
|
|
1784
1835
|
|
|
1785
1836
|
// src/lib/ResourceCleanup.ts
|
|
1837
|
+
import path5 from "path";
|
|
1838
|
+
|
|
1839
|
+
// src/utils/recap-archiver.ts
|
|
1786
1840
|
import path4 from "path";
|
|
1841
|
+
import os2 from "os";
|
|
1842
|
+
import fs6 from "fs-extra";
|
|
1843
|
+
var RECAPS_DIR = path4.join(os2.homedir(), ".config", "iloom-ai", "recaps");
|
|
1844
|
+
var ARCHIVED_DIR = path4.join(RECAPS_DIR, "archived");
|
|
1845
|
+
function slugifyPath(loomPath) {
|
|
1846
|
+
let slug = loomPath.replace(/[/\\]+$/, "");
|
|
1847
|
+
slug = slug.replace(/[/\\]/g, "___");
|
|
1848
|
+
slug = slug.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
1849
|
+
return `${slug}.json`;
|
|
1850
|
+
}
|
|
1851
|
+
async function archiveRecap(worktreePath) {
|
|
1852
|
+
const filename = slugifyPath(worktreePath);
|
|
1853
|
+
const sourcePath = path4.join(RECAPS_DIR, filename);
|
|
1854
|
+
if (!await fs6.pathExists(sourcePath)) {
|
|
1855
|
+
getLogger().debug(`No recap file to archive for worktree: ${worktreePath}`);
|
|
1856
|
+
return;
|
|
1857
|
+
}
|
|
1858
|
+
const content = await fs6.readFile(sourcePath, "utf8");
|
|
1859
|
+
const data = JSON.parse(content);
|
|
1860
|
+
const archivedData = {
|
|
1861
|
+
...data,
|
|
1862
|
+
archivedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1863
|
+
};
|
|
1864
|
+
await fs6.ensureDir(ARCHIVED_DIR, { mode: 493 });
|
|
1865
|
+
const destPath = path4.join(ARCHIVED_DIR, filename);
|
|
1866
|
+
await fs6.writeFile(destPath, JSON.stringify(archivedData, null, 2), { mode: 420 });
|
|
1867
|
+
await fs6.unlink(sourcePath);
|
|
1868
|
+
getLogger().debug(`Recap archived for worktree: ${worktreePath}`);
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
// src/lib/ResourceCleanup.ts
|
|
1787
1872
|
var ResourceCleanup = class {
|
|
1788
1873
|
constructor(gitWorktree, processManager, database, cliIsolation, settingsManager) {
|
|
1789
1874
|
this.gitWorktree = gitWorktree;
|
|
@@ -1883,7 +1968,7 @@ ${blockerMessage}`);
|
|
|
1883
1968
|
}
|
|
1884
1969
|
let databaseConfig = null;
|
|
1885
1970
|
if (!options.keepDatabase && worktree) {
|
|
1886
|
-
const envFilePath =
|
|
1971
|
+
const envFilePath = path5.join(worktree.path, ".env");
|
|
1887
1972
|
try {
|
|
1888
1973
|
const shouldCleanup = this.database ? await this.database.shouldUseDatabaseBranching(envFilePath) : false;
|
|
1889
1974
|
databaseConfig = { shouldCleanup, envFilePath };
|
|
@@ -1951,6 +2036,33 @@ ${blockerMessage}`);
|
|
|
1951
2036
|
});
|
|
1952
2037
|
}
|
|
1953
2038
|
}
|
|
2039
|
+
if (worktree) {
|
|
2040
|
+
if (options.dryRun) {
|
|
2041
|
+
operations.push({
|
|
2042
|
+
type: "recap",
|
|
2043
|
+
success: true,
|
|
2044
|
+
message: `[DRY RUN] Would archive recap file for: ${worktree.path}`
|
|
2045
|
+
});
|
|
2046
|
+
} else {
|
|
2047
|
+
try {
|
|
2048
|
+
await archiveRecap(worktree.path);
|
|
2049
|
+
operations.push({
|
|
2050
|
+
type: "recap",
|
|
2051
|
+
success: true,
|
|
2052
|
+
message: `Recap file archived`
|
|
2053
|
+
});
|
|
2054
|
+
} catch (error) {
|
|
2055
|
+
const err = error instanceof Error ? error : new Error("Unknown error");
|
|
2056
|
+
getLogger().warn(`Recap archival failed: ${err.message}`);
|
|
2057
|
+
operations.push({
|
|
2058
|
+
type: "recap",
|
|
2059
|
+
success: false,
|
|
2060
|
+
message: "Recap archival failed (non-fatal)",
|
|
2061
|
+
error: err.message
|
|
2062
|
+
});
|
|
2063
|
+
}
|
|
2064
|
+
}
|
|
2065
|
+
}
|
|
1954
2066
|
if (options.deleteBranch && worktree) {
|
|
1955
2067
|
if (options.dryRun) {
|
|
1956
2068
|
operations.push({
|
|
@@ -2115,6 +2227,35 @@ ${blockerMessage}`);
|
|
|
2115
2227
|
}
|
|
2116
2228
|
}
|
|
2117
2229
|
}
|
|
2230
|
+
if (worktree) {
|
|
2231
|
+
if (options.dryRun) {
|
|
2232
|
+
operations.push({
|
|
2233
|
+
type: "metadata",
|
|
2234
|
+
success: true,
|
|
2235
|
+
message: `[DRY RUN] Would delete metadata for worktree: ${worktree.path}`
|
|
2236
|
+
});
|
|
2237
|
+
} else {
|
|
2238
|
+
try {
|
|
2239
|
+
await this.metadataManager.deleteMetadata(worktree.path);
|
|
2240
|
+
getLogger().info(`Metadata deleted for worktree: ${worktree.path}`);
|
|
2241
|
+
operations.push({
|
|
2242
|
+
type: "metadata",
|
|
2243
|
+
success: true,
|
|
2244
|
+
message: "Metadata deleted"
|
|
2245
|
+
});
|
|
2246
|
+
} catch (error) {
|
|
2247
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
2248
|
+
errors.push(err);
|
|
2249
|
+
getLogger().warn(`Metadata deletion failed: ${err.message}`);
|
|
2250
|
+
operations.push({
|
|
2251
|
+
type: "metadata",
|
|
2252
|
+
success: false,
|
|
2253
|
+
message: "Metadata deletion failed (non-fatal)",
|
|
2254
|
+
error: err.message
|
|
2255
|
+
});
|
|
2256
|
+
}
|
|
2257
|
+
}
|
|
2258
|
+
}
|
|
2118
2259
|
const success = errors.length === 0;
|
|
2119
2260
|
return {
|
|
2120
2261
|
identifier: displayIdentifier,
|
|
@@ -2257,7 +2398,7 @@ ${blockerMessage}`);
|
|
|
2257
2398
|
return false;
|
|
2258
2399
|
}
|
|
2259
2400
|
try {
|
|
2260
|
-
const envFilePath =
|
|
2401
|
+
const envFilePath = path5.join(worktreePath, ".env");
|
|
2261
2402
|
const shouldCleanup = await this.database.shouldUseDatabaseBranching(envFilePath);
|
|
2262
2403
|
let cwd;
|
|
2263
2404
|
try {
|
|
@@ -2441,4 +2582,4 @@ export {
|
|
|
2441
2582
|
DatabaseManager,
|
|
2442
2583
|
ResourceCleanup
|
|
2443
2584
|
};
|
|
2444
|
-
//# sourceMappingURL=chunk-
|
|
2585
|
+
//# sourceMappingURL=chunk-6Y3FTRJL.js.map
|