@iloom/cli 0.1.18 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +53 -6
  2. package/dist/ClaudeContextManager-LVCYRM6Q.js +13 -0
  3. package/dist/ClaudeService-WVTWB3DK.js +12 -0
  4. package/dist/{GitHubService-SH4H6VS5.js → GitHubService-7E2S5NNZ.js} +3 -3
  5. package/dist/{LoomLauncher-FB2MV2ZI.js → LoomLauncher-CTSWJL35.js} +7 -7
  6. package/dist/{PromptTemplateManager-WM5GIPEF.js → PromptTemplateManager-WII75TKH.js} +2 -2
  7. package/dist/README.md +771 -0
  8. package/dist/{SettingsManager-SKLUVE3K.js → SettingsManager-XOYCLH3D.js} +2 -2
  9. package/dist/{add-issue-L5HX6LEV.js → add-issue-OBI325W7.js} +7 -7
  10. package/dist/{chunk-SLIMABFA.js → chunk-2PLUQT6J.js} +2 -2
  11. package/dist/{chunk-VVH3ANF2.js → chunk-4IV6W4U5.js} +4 -4
  12. package/dist/{chunk-PV3GAXQO.js → chunk-6LEQW46Y.js} +2 -2
  13. package/dist/{chunk-6OTVPRXH.js → chunk-CVLAZRNB.js} +2 -2
  14. package/dist/{chunk-FXV24OYZ.js → chunk-DJUGYNQE.js} +9 -2
  15. package/dist/{chunk-FXV24OYZ.js.map → chunk-DJUGYNQE.js.map} +1 -1
  16. package/dist/{chunk-KOCQAD2E.js → chunk-HBVFXN7R.js} +3 -3
  17. package/dist/{chunk-HURVAQRK.js → chunk-LHP6ROUM.js} +4 -4
  18. package/dist/{chunk-PXZBAC2M.js → chunk-MFU53H6J.js} +2 -2
  19. package/dist/{chunk-L4QGC27H.js → chunk-PVAVNJKS.js} +13 -1
  20. package/dist/chunk-PVAVNJKS.js.map +1 -0
  21. package/dist/{chunk-PR7FKQBG.js → chunk-RF2YI2XJ.js} +2 -2
  22. package/dist/{chunk-DGEKUT7Q.js → chunk-SWCRXDZC.js} +34 -6
  23. package/dist/chunk-SWCRXDZC.js.map +1 -0
  24. package/dist/{chunk-Q2KYPAH2.js → chunk-SYOSCMIT.js} +6 -6
  25. package/dist/{chunk-VYQLLHZ7.js → chunk-T3KEIB4D.js} +6 -2
  26. package/dist/{chunk-VYQLLHZ7.js.map → chunk-T3KEIB4D.js.map} +1 -1
  27. package/dist/{chunk-IIPTBZQW.js → chunk-TS6DL67T.js} +2 -2
  28. package/dist/{chunk-IO4WFTL2.js → chunk-VETG35MF.js} +2 -2
  29. package/dist/{chunk-RSRO7564.js → chunk-ZE74H5BR.js} +28 -3
  30. package/dist/chunk-ZE74H5BR.js.map +1 -0
  31. package/dist/{claude-7LUVDZZ4.js → claude-ZIWDG4XG.js} +2 -2
  32. package/dist/{cleanup-ZHROIBSQ.js → cleanup-FEIVZSIV.js} +5 -5
  33. package/dist/cli.js +41 -31
  34. package/dist/cli.js.map +1 -1
  35. package/dist/contribute-EMZKCAC6.js +259 -0
  36. package/dist/contribute-EMZKCAC6.js.map +1 -0
  37. package/dist/{enhance-VVMAKMVZ.js → enhance-MNA4ZGXW.js} +7 -7
  38. package/dist/{feedback-AKHD7QIM.js → feedback-LFNMQBAZ.js} +6 -6
  39. package/dist/{finish-WGPISUEH.js → finish-TX5CJICB.js} +411 -17
  40. package/dist/finish-TX5CJICB.js.map +1 -0
  41. package/dist/{git-OUYMVYJX.js → git-WC6HZLOT.js} +2 -2
  42. package/dist/{ignite-JEN3K3OT.js → ignite-MQWVJEAB.js} +125 -10
  43. package/dist/ignite-MQWVJEAB.js.map +1 -0
  44. package/dist/index.d.ts +23 -0
  45. package/dist/index.js +75 -7
  46. package/dist/index.js.map +1 -1
  47. package/dist/{init-EVUT4ZQJ.js → init-GJDYN2IK.js} +7 -7
  48. package/dist/mcp/{claude-YHHHLSXH.js → claude-NDFOCQQQ.js} +2 -2
  49. package/dist/mcp/github-comment-server.js.map +1 -1
  50. package/dist/mcp/{terminal-SDCMDVD7.js → terminal-OMNRFWB3.js} +28 -3
  51. package/dist/mcp/terminal-OMNRFWB3.js.map +1 -0
  52. package/dist/{open-ETZUFSE4.js → open-NXSN7XOC.js} +4 -4
  53. package/dist/prompts/init-prompt.txt +32 -1
  54. package/dist/prompts/issue-prompt.txt +141 -9
  55. package/dist/{rebase-KBWFDZCN.js → rebase-DUNFOJVS.js} +6 -6
  56. package/dist/{remote-GJEZWRCC.js → remote-ZCXJVVNW.js} +4 -2
  57. package/dist/{run-4SVQ3WEU.js → run-O7ZK7CKA.js} +4 -4
  58. package/dist/schema/settings.schema.json +18 -0
  59. package/dist/{start-2NEZU7SE.js → start-73I5W7WW.js} +16 -16
  60. package/dist/{terminal-3D6TUAKJ.js → terminal-BIRBZ4AZ.js} +2 -2
  61. package/dist/{test-git-MKZATGZN.js → test-git-T76HOTIA.js} +3 -3
  62. package/dist/{test-prefix-ZNLWDI3K.js → test-prefix-6HJUVQMH.js} +3 -3
  63. package/dist/{test-tabs-JRKY3QMM.js → test-tabs-RXDBZ6J7.js} +2 -2
  64. package/package.json +3 -2
  65. package/dist/ClaudeContextManager-LD3VB6EM.js +0 -13
  66. package/dist/ClaudeService-CFFI7DD5.js +0 -12
  67. package/dist/chunk-DGEKUT7Q.js.map +0 -1
  68. package/dist/chunk-L4QGC27H.js.map +0 -1
  69. package/dist/chunk-RSRO7564.js.map +0 -1
  70. package/dist/finish-WGPISUEH.js.map +0 -1
  71. package/dist/ignite-JEN3K3OT.js.map +0 -1
  72. package/dist/mcp/terminal-SDCMDVD7.js.map +0 -1
  73. /package/dist/{ClaudeContextManager-LD3VB6EM.js.map → ClaudeContextManager-LVCYRM6Q.js.map} +0 -0
  74. /package/dist/{ClaudeService-CFFI7DD5.js.map → ClaudeService-WVTWB3DK.js.map} +0 -0
  75. /package/dist/{GitHubService-SH4H6VS5.js.map → GitHubService-7E2S5NNZ.js.map} +0 -0
  76. /package/dist/{LoomLauncher-FB2MV2ZI.js.map → LoomLauncher-CTSWJL35.js.map} +0 -0
  77. /package/dist/{PromptTemplateManager-WM5GIPEF.js.map → PromptTemplateManager-WII75TKH.js.map} +0 -0
  78. /package/dist/{SettingsManager-SKLUVE3K.js.map → SettingsManager-XOYCLH3D.js.map} +0 -0
  79. /package/dist/{add-issue-L5HX6LEV.js.map → add-issue-OBI325W7.js.map} +0 -0
  80. /package/dist/{chunk-SLIMABFA.js.map → chunk-2PLUQT6J.js.map} +0 -0
  81. /package/dist/{chunk-VVH3ANF2.js.map → chunk-4IV6W4U5.js.map} +0 -0
  82. /package/dist/{chunk-PV3GAXQO.js.map → chunk-6LEQW46Y.js.map} +0 -0
  83. /package/dist/{chunk-6OTVPRXH.js.map → chunk-CVLAZRNB.js.map} +0 -0
  84. /package/dist/{chunk-KOCQAD2E.js.map → chunk-HBVFXN7R.js.map} +0 -0
  85. /package/dist/{chunk-HURVAQRK.js.map → chunk-LHP6ROUM.js.map} +0 -0
  86. /package/dist/{chunk-PXZBAC2M.js.map → chunk-MFU53H6J.js.map} +0 -0
  87. /package/dist/{chunk-PR7FKQBG.js.map → chunk-RF2YI2XJ.js.map} +0 -0
  88. /package/dist/{chunk-Q2KYPAH2.js.map → chunk-SYOSCMIT.js.map} +0 -0
  89. /package/dist/{chunk-IIPTBZQW.js.map → chunk-TS6DL67T.js.map} +0 -0
  90. /package/dist/{chunk-IO4WFTL2.js.map → chunk-VETG35MF.js.map} +0 -0
  91. /package/dist/{claude-7LUVDZZ4.js.map → claude-ZIWDG4XG.js.map} +0 -0
  92. /package/dist/{cleanup-ZHROIBSQ.js.map → cleanup-FEIVZSIV.js.map} +0 -0
  93. /package/dist/{enhance-VVMAKMVZ.js.map → enhance-MNA4ZGXW.js.map} +0 -0
  94. /package/dist/{feedback-AKHD7QIM.js.map → feedback-LFNMQBAZ.js.map} +0 -0
  95. /package/dist/{git-OUYMVYJX.js.map → git-WC6HZLOT.js.map} +0 -0
  96. /package/dist/{init-EVUT4ZQJ.js.map → init-GJDYN2IK.js.map} +0 -0
  97. /package/dist/mcp/{claude-YHHHLSXH.js.map → claude-NDFOCQQQ.js.map} +0 -0
  98. /package/dist/{open-ETZUFSE4.js.map → open-NXSN7XOC.js.map} +0 -0
  99. /package/dist/{rebase-KBWFDZCN.js.map → rebase-DUNFOJVS.js.map} +0 -0
  100. /package/dist/{remote-GJEZWRCC.js.map → remote-ZCXJVVNW.js.map} +0 -0
  101. /package/dist/{run-4SVQ3WEU.js.map → run-O7ZK7CKA.js.map} +0 -0
  102. /package/dist/{start-2NEZU7SE.js.map → start-73I5W7WW.js.map} +0 -0
  103. /package/dist/{terminal-3D6TUAKJ.js.map → terminal-BIRBZ4AZ.js.map} +0 -0
  104. /package/dist/{test-git-MKZATGZN.js.map → test-git-T76HOTIA.js.map} +0 -0
  105. /package/dist/{test-prefix-ZNLWDI3K.js.map → test-prefix-6HJUVQMH.js.map} +0 -0
  106. /package/dist/{test-tabs-JRKY3QMM.js.map → test-tabs-RXDBZ6J7.js.map} +0 -0
package/dist/index.js CHANGED
@@ -231,7 +231,11 @@ var init_SettingsManager = __esm({
231
231
  github: z.object({
232
232
  remote: z.string().min(1, "Remote name cannot be empty").describe("Git remote name to use for GitHub operations")
233
233
  }).optional()
234
- }).optional().describe("Issue management configuration")
234
+ }).optional().describe("Issue management configuration"),
235
+ mergeBehavior: z.object({
236
+ mode: z.enum(["local", "github-pr"]).default("local"),
237
+ remote: z.string().optional()
238
+ }).optional().describe("Merge behavior configuration: local (merge locally) or github-pr (create PR)")
235
239
  });
236
240
  SettingsManager = class {
237
241
  /**
@@ -413,10 +417,13 @@ async function openTerminalWindow(options) {
413
417
  `Terminal window launching not yet supported on ${platform}. Currently only macOS is supported.`
414
418
  );
415
419
  }
416
- const applescript = buildAppleScript(options);
420
+ const hasITerm2 = await detectITerm2();
421
+ const applescript = hasITerm2 ? buildITerm2SingleTabScript(options) : buildAppleScript(options);
417
422
  try {
418
423
  await execa2("osascript", ["-e", applescript]);
419
- await execa2("osascript", ["-e", 'tell application "Terminal" to activate']);
424
+ if (!hasITerm2) {
425
+ await execa2("osascript", ["-e", 'tell application "Terminal" to activate']);
426
+ }
420
427
  } catch (error) {
421
428
  throw new Error(
422
429
  `Failed to open terminal window: ${error instanceof Error ? error.message : "Unknown error"}`
@@ -465,6 +472,28 @@ function escapePathForAppleScript(path5) {
465
472
  function escapeForAppleScript(command) {
466
473
  return command.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
467
474
  }
475
+ function buildITerm2SingleTabScript(options) {
476
+ const command = buildCommandSequence(options);
477
+ let script = 'tell application id "com.googlecode.iterm2"\n';
478
+ script += " create window with default profile\n";
479
+ script += " set s1 to current session of current window\n\n";
480
+ if (options.backgroundColor) {
481
+ const { r, g, b } = options.backgroundColor;
482
+ script += ` set background color of s1 to {${Math.round(r * 257)}, ${Math.round(g * 257)}, ${Math.round(b * 257)}}
483
+ `;
484
+ }
485
+ script += ` tell s1 to write text "${escapeForAppleScript(command)}"
486
+
487
+ `;
488
+ if (options.title) {
489
+ script += ` set name of s1 to "${escapeForAppleScript(options.title)}"
490
+
491
+ `;
492
+ }
493
+ script += " activate\n";
494
+ script += "end tell";
495
+ return script;
496
+ }
468
497
  function buildCommandSequence(options) {
469
498
  const {
470
499
  workspacePath,
@@ -1826,12 +1855,39 @@ async function checkGhAuth() {
1826
1855
  var _a, _b;
1827
1856
  try {
1828
1857
  const output = await executeGhCommand(["auth", "status"]);
1829
- const scopeMatch = output.match(/Token scopes: (.+)/);
1830
- const userMatch = output.match(/Logged in to github\.com as ([^\s]+)/);
1831
- const username = userMatch == null ? void 0 : userMatch[1];
1858
+ const lines = output.split("\n");
1859
+ let username;
1860
+ let scopes = [];
1861
+ for (let i = 0; i < lines.length; i++) {
1862
+ const line = lines[i];
1863
+ const newFormatMatch = line == null ? void 0 : line.match(/Logged in to github\.com account ([^\s(]+)/);
1864
+ if (newFormatMatch) {
1865
+ const accountName = newFormatMatch[1];
1866
+ const nextFewLines = lines.slice(i + 1, i + 5).join("\n");
1867
+ const isActive = nextFewLines.includes("Active account: true");
1868
+ if (isActive || !username && !output.includes("Active account:")) {
1869
+ username = accountName;
1870
+ const scopeMatch = nextFewLines.match(/Token scopes: (.+)/);
1871
+ if (scopeMatch == null ? void 0 : scopeMatch[1]) {
1872
+ scopes = scopeMatch[1].split(", ").map((scope) => scope.replace(/^'|'$/g, ""));
1873
+ }
1874
+ if (isActive) break;
1875
+ }
1876
+ }
1877
+ if (!username) {
1878
+ const oldFormatMatch = line == null ? void 0 : line.match(/Logged in to github\.com as ([^\s]+)/);
1879
+ if (oldFormatMatch) {
1880
+ username = oldFormatMatch[1];
1881
+ }
1882
+ }
1883
+ }
1884
+ if (scopes.length === 0) {
1885
+ const scopeMatch = output.match(/Token scopes: (.+)/);
1886
+ scopes = ((_a = scopeMatch == null ? void 0 : scopeMatch[1]) == null ? void 0 : _a.split(", ").map((scope) => scope.replace(/^'|'$/g, ""))) ?? [];
1887
+ }
1832
1888
  return {
1833
1889
  hasAuth: true,
1834
- scopes: ((_a = scopeMatch == null ? void 0 : scopeMatch[1]) == null ? void 0 : _a.split(", ").map((scope) => scope.replace(/^'|'$/g, ""))) ?? [],
1890
+ scopes,
1835
1891
  ...username && { username }
1836
1892
  };
1837
1893
  } catch (error) {
@@ -2875,6 +2931,12 @@ var PromptTemplateManager = class {
2875
2931
  if (variables.NO_REMOTES !== void 0) {
2876
2932
  result = result.replace(/NO_REMOTES/g, variables.NO_REMOTES);
2877
2933
  }
2934
+ if (variables.README_CONTENT !== void 0) {
2935
+ result = result.replace(/README_CONTENT/g, variables.README_CONTENT);
2936
+ }
2937
+ if (variables.SETTINGS_SCHEMA_CONTENT !== void 0) {
2938
+ result = result.replace(/SETTINGS_SCHEMA_CONTENT/g, variables.SETTINGS_SCHEMA_CONTENT);
2939
+ }
2878
2940
  return result;
2879
2941
  }
2880
2942
  /**
@@ -2921,6 +2983,12 @@ var PromptTemplateManager = class {
2921
2983
  } else {
2922
2984
  result = result.replace(noRemotesRegex, "");
2923
2985
  }
2986
+ const firstTimeUserRegex = /\{\{#IF FIRST_TIME_USER\}\}(.*?)\{\{\/IF FIRST_TIME_USER\}\}/gs;
2987
+ if (variables.FIRST_TIME_USER === true) {
2988
+ result = result.replace(firstTimeUserRegex, "$1");
2989
+ } else {
2990
+ result = result.replace(firstTimeUserRegex, "");
2991
+ }
2924
2992
  return result;
2925
2993
  }
2926
2994
  /**