@iloom/cli 0.7.3 → 0.7.5

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 (101) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +6 -4
  3. package/dist/{BranchNamingService-FLPUUFOB.js → BranchNamingService-AO7BPIUJ.js} +2 -2
  4. package/dist/{ClaudeContextManager-KE5TBZVZ.js → ClaudeContextManager-Y2YJC6BU.js} +4 -4
  5. package/dist/{ClaudeService-CRSETT3A.js → ClaudeService-NDVFQRKC.js} +3 -3
  6. package/dist/{LoomLauncher-NL65LSKP.js → LoomLauncher-U2B3VHPC.js} +4 -4
  7. package/dist/{PRManager-2ABCWXHW.js → PRManager-6ZJZRG5Z.js} +4 -4
  8. package/dist/README.md +6 -4
  9. package/dist/agents/iloom-issue-analyze-and-plan.md +1 -1
  10. package/dist/agents/iloom-issue-analyzer.md +1 -1
  11. package/dist/agents/iloom-issue-complexity-evaluator.md +1 -1
  12. package/dist/agents/iloom-issue-enhancer.md +1 -1
  13. package/dist/agents/iloom-issue-implementer.md +1 -1
  14. package/dist/agents/iloom-issue-planner.md +1 -1
  15. package/dist/agents/iloom-issue-reviewer.md +1 -1
  16. package/dist/{chunk-FM4KBPVA.js → chunk-3K3WY3BN.js} +2 -118
  17. package/dist/chunk-3K3WY3BN.js.map +1 -0
  18. package/dist/{chunk-6TL3BYH6.js → chunk-64HCHVJM.js} +2 -2
  19. package/dist/{chunk-QQFBMCAH.js → chunk-77VLG2KP.js} +20 -17
  20. package/dist/chunk-77VLG2KP.js.map +1 -0
  21. package/dist/{chunk-FEAJR6PN.js → chunk-C7YW5IMS.js} +2 -2
  22. package/dist/{chunk-DAOS6EC3.js → chunk-CAXFWFV6.js} +5 -3
  23. package/dist/{chunk-DAOS6EC3.js.map → chunk-CAXFWFV6.js.map} +1 -1
  24. package/dist/chunk-CFQVOTHO.js +111 -0
  25. package/dist/chunk-CFQVOTHO.js.map +1 -0
  26. package/dist/{chunk-AFRICMSW.js → chunk-ENMTWE74.js} +2 -2
  27. package/dist/{chunk-FP7G7DG3.js → chunk-IGKPPACU.js} +8 -3
  28. package/dist/chunk-IGKPPACU.js.map +1 -0
  29. package/dist/{chunk-CNSTXBJ3.js → chunk-KSXA2NOJ.js} +9 -5
  30. package/dist/chunk-KSXA2NOJ.js.map +1 -0
  31. package/dist/{chunk-GJMEKEI5.js → chunk-LZBSLO6S.js} +76 -1
  32. package/dist/chunk-LZBSLO6S.js.map +1 -0
  33. package/dist/{chunk-YQNSZKKT.js → chunk-NEPH2O4C.js} +8 -4
  34. package/dist/chunk-NEPH2O4C.js.map +1 -0
  35. package/dist/{chunk-KVS4XGBQ.js → chunk-O36JLYNW.js} +2 -2
  36. package/dist/{chunk-C3AKFAIR.js → chunk-Q457PKGH.js} +2 -2
  37. package/dist/{chunk-EPPPDVHD.js → chunk-TB6475EW.js} +6 -4
  38. package/dist/chunk-TB6475EW.js.map +1 -0
  39. package/dist/{chunk-HVQNVRAF.js → chunk-VYKKWU36.js} +96 -3
  40. package/dist/chunk-VYKKWU36.js.map +1 -0
  41. package/dist/{chunk-453NC377.js → chunk-WZYBHD7P.js} +3 -106
  42. package/dist/chunk-WZYBHD7P.js.map +1 -0
  43. package/dist/chunk-XAMBIVXE.js +121 -0
  44. package/dist/chunk-XAMBIVXE.js.map +1 -0
  45. package/dist/{claude-6H36IBHO.js → claude-V4HRPR4Z.js} +2 -2
  46. package/dist/{cleanup-77U5ATYI.js → cleanup-DB7EFBF3.js} +9 -6
  47. package/dist/{cleanup-77U5ATYI.js.map → cleanup-DB7EFBF3.js.map} +1 -1
  48. package/dist/cli.js +104 -156
  49. package/dist/cli.js.map +1 -1
  50. package/dist/{commit-ONRXU67O.js → commit-NGMDWWAP.js} +4 -4
  51. package/dist/{dev-server-UKAPBGUR.js → dev-server-OAP3RZC6.js} +4 -3
  52. package/dist/{dev-server-UKAPBGUR.js.map → dev-server-OAP3RZC6.js.map} +1 -1
  53. package/dist/{feedback-K3A4QUSG.js → feedback-ZLAX3BVL.js} +4 -3
  54. package/dist/{feedback-K3A4QUSG.js.map → feedback-ZLAX3BVL.js.map} +1 -1
  55. package/dist/{ignite-YUAOJ5PP.js → ignite-HA2OJF6Z.js} +26 -40
  56. package/dist/ignite-HA2OJF6Z.js.map +1 -0
  57. package/dist/index.js +4 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/{init-XQQMFDM6.js → init-S6IEGRSX.js} +3 -3
  60. package/dist/mcp/issue-management-server.js +157 -9
  61. package/dist/mcp/issue-management-server.js.map +1 -1
  62. package/dist/{open-QI63XQ4F.js → open-IN3LUZXX.js} +4 -3
  63. package/dist/{open-QI63XQ4F.js.map → open-IN3LUZXX.js.map} +1 -1
  64. package/dist/{projects-TWY4RT2Z.js → projects-CTRTTMSK.js} +25 -9
  65. package/dist/projects-CTRTTMSK.js.map +1 -0
  66. package/dist/prompts/issue-prompt.txt +16 -0
  67. package/dist/prompts/pr-prompt.txt +33 -13
  68. package/dist/prompts/regular-prompt.txt +7 -0
  69. package/dist/{rebase-QYCRF7JG.js → rebase-RLEVFHWN.js} +3 -3
  70. package/dist/{run-YDVYORT2.js → run-QEIS2EH2.js} +4 -3
  71. package/dist/{run-YDVYORT2.js.map → run-QEIS2EH2.js.map} +1 -1
  72. package/dist/{summary-G6L3VAKK.js → summary-2KLNHVTN.js} +4 -4
  73. package/dist/{test-webserver-NRMGT2HB.js → test-webserver-J6SMNLU2.js} +3 -2
  74. package/dist/{test-webserver-NRMGT2HB.js.map → test-webserver-J6SMNLU2.js.map} +1 -1
  75. package/package.json +1 -1
  76. package/dist/chunk-453NC377.js.map +0 -1
  77. package/dist/chunk-CNSTXBJ3.js.map +0 -1
  78. package/dist/chunk-EPPPDVHD.js.map +0 -1
  79. package/dist/chunk-FM4KBPVA.js.map +0 -1
  80. package/dist/chunk-FP7G7DG3.js.map +0 -1
  81. package/dist/chunk-GJMEKEI5.js.map +0 -1
  82. package/dist/chunk-HVQNVRAF.js.map +0 -1
  83. package/dist/chunk-QQFBMCAH.js.map +0 -1
  84. package/dist/chunk-YQNSZKKT.js.map +0 -1
  85. package/dist/ignite-YUAOJ5PP.js.map +0 -1
  86. package/dist/projects-TWY4RT2Z.js.map +0 -1
  87. /package/dist/{BranchNamingService-FLPUUFOB.js.map → BranchNamingService-AO7BPIUJ.js.map} +0 -0
  88. /package/dist/{ClaudeContextManager-KE5TBZVZ.js.map → ClaudeContextManager-Y2YJC6BU.js.map} +0 -0
  89. /package/dist/{ClaudeService-CRSETT3A.js.map → ClaudeService-NDVFQRKC.js.map} +0 -0
  90. /package/dist/{LoomLauncher-NL65LSKP.js.map → LoomLauncher-U2B3VHPC.js.map} +0 -0
  91. /package/dist/{PRManager-2ABCWXHW.js.map → PRManager-6ZJZRG5Z.js.map} +0 -0
  92. /package/dist/{chunk-6TL3BYH6.js.map → chunk-64HCHVJM.js.map} +0 -0
  93. /package/dist/{chunk-FEAJR6PN.js.map → chunk-C7YW5IMS.js.map} +0 -0
  94. /package/dist/{chunk-AFRICMSW.js.map → chunk-ENMTWE74.js.map} +0 -0
  95. /package/dist/{chunk-KVS4XGBQ.js.map → chunk-O36JLYNW.js.map} +0 -0
  96. /package/dist/{chunk-C3AKFAIR.js.map → chunk-Q457PKGH.js.map} +0 -0
  97. /package/dist/{claude-6H36IBHO.js.map → claude-V4HRPR4Z.js.map} +0 -0
  98. /package/dist/{commit-ONRXU67O.js.map → commit-NGMDWWAP.js.map} +0 -0
  99. /package/dist/{init-XQQMFDM6.js.map → init-S6IEGRSX.js.map} +0 -0
  100. /package/dist/{rebase-QYCRF7JG.js.map → rebase-RLEVFHWN.js.map} +0 -0
  101. /package/dist/{summary-G6L3VAKK.js.map → summary-2KLNHVTN.js.map} +0 -0
package/LICENSE CHANGED
@@ -20,7 +20,7 @@ it within your organization. What is prohibited is redistributing or offering
20
20
  access to this software (in original or modified form) as part of something
21
21
  you sell or provide to others.
22
22
 
23
- Change Date: 2030-01-22
23
+ Change Date: 2030-01-25
24
24
  Change License: Apache License 2.0
25
25
 
26
26
  For clarity, on or after the Change Date, the Licensed Work will
package/README.md CHANGED
@@ -79,9 +79,7 @@ iloom uses your existing Claude subscription to build a shared mental model of y
79
79
  il finish
80
80
  ```
81
81
 
82
- **The iloom Difference:** il start doesn't just create a branch. It launches a multi-agent workflow that surfaces assumptions and creates a structured plan in your issue tracker **before you even need to look at your IDE.**
83
-
84
- **→ [Want to know how you'll benefit from iloom?](docs/is-iloom-right-for-you.md)**
82
+ **The iloom Difference:** il start doesn't merely create a branch. It launches a multi-agent workflow that surfaces assumptions and creates a structured plan in your issue tracker **before you even need to look at your IDE.**
85
83
 
86
84
  How It Works: The Multi-Agent Workflow
87
85
  --------------------------------------
@@ -524,7 +522,11 @@ License & Name
524
522
 
525
523
  * ❌ You cannot resell iloom itself as a product or SaaS.
526
524
 
527
- * Converts to Apache 2.0 on 2030-01-22.
525
+ * Converts to Apache 2.0 on 2030-01-25.
528
526
 
529
527
 
530
528
  See [LICENSE](https://raw.githubusercontent.com/iloom-ai/iloom-cli/main/LICENSE) for complete terms.
529
+
530
+ **Terms of Service**
531
+
532
+ By using iloom, you agree to our [Terms of Service](https://iloom.ai/terms).
@@ -3,7 +3,7 @@ import {
3
3
  ClaudeBranchNameStrategy,
4
4
  DefaultBranchNamingService,
5
5
  SimpleBranchNameStrategy
6
- } from "./chunk-C3AKFAIR.js";
6
+ } from "./chunk-Q457PKGH.js";
7
7
  import "./chunk-6MLEBAYZ.js";
8
8
  import "./chunk-VT4PDUYT.js";
9
9
  export {
@@ -11,4 +11,4 @@ export {
11
11
  DefaultBranchNamingService,
12
12
  SimpleBranchNameStrategy
13
13
  };
14
- //# sourceMappingURL=BranchNamingService-FLPUUFOB.js.map
14
+ //# sourceMappingURL=BranchNamingService-AO7BPIUJ.js.map
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeContextManager
4
- } from "./chunk-6TL3BYH6.js";
5
- import "./chunk-KVS4XGBQ.js";
4
+ } from "./chunk-64HCHVJM.js";
5
+ import "./chunk-O36JLYNW.js";
6
6
  import "./chunk-TIYJEEVO.js";
7
7
  import "./chunk-WFQ5CLTR.js";
8
- import "./chunk-FP7G7DG3.js";
8
+ import "./chunk-IGKPPACU.js";
9
9
  import "./chunk-6MLEBAYZ.js";
10
10
  import "./chunk-VT4PDUYT.js";
11
11
  export {
12
12
  ClaudeContextManager
13
13
  };
14
- //# sourceMappingURL=ClaudeContextManager-KE5TBZVZ.js.map
14
+ //# sourceMappingURL=ClaudeContextManager-Y2YJC6BU.js.map
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeService
4
- } from "./chunk-KVS4XGBQ.js";
4
+ } from "./chunk-O36JLYNW.js";
5
5
  import "./chunk-TIYJEEVO.js";
6
6
  import "./chunk-WFQ5CLTR.js";
7
- import "./chunk-FP7G7DG3.js";
7
+ import "./chunk-IGKPPACU.js";
8
8
  import "./chunk-6MLEBAYZ.js";
9
9
  import "./chunk-VT4PDUYT.js";
10
10
  export {
11
11
  ClaudeService
12
12
  };
13
- //# sourceMappingURL=ClaudeService-CRSETT3A.js.map
13
+ //# sourceMappingURL=ClaudeService-NDVFQRKC.js.map
@@ -4,8 +4,8 @@ import {
4
4
  } from "./chunk-O7VL5N6S.js";
5
5
  import {
6
6
  ClaudeContextManager
7
- } from "./chunk-6TL3BYH6.js";
8
- import "./chunk-KVS4XGBQ.js";
7
+ } from "./chunk-64HCHVJM.js";
8
+ import "./chunk-O36JLYNW.js";
9
9
  import "./chunk-TIYJEEVO.js";
10
10
  import {
11
11
  getExecutablePath
@@ -15,7 +15,7 @@ import {
15
15
  generateColorFromBranchName,
16
16
  hexToRgb
17
17
  } from "./chunk-433MOLAU.js";
18
- import "./chunk-FP7G7DG3.js";
18
+ import "./chunk-IGKPPACU.js";
19
19
  import {
20
20
  getLogger
21
21
  } from "./chunk-6MLEBAYZ.js";
@@ -252,4 +252,4 @@ var LoomLauncher = class {
252
252
  export {
253
253
  LoomLauncher
254
254
  };
255
- //# sourceMappingURL=LoomLauncher-NL65LSKP.js.map
255
+ //# sourceMappingURL=LoomLauncher-U2B3VHPC.js.map
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  PRManager
4
- } from "./chunk-EPPPDVHD.js";
4
+ } from "./chunk-TB6475EW.js";
5
5
  import "./chunk-YETJNRQM.js";
6
- import "./chunk-GJMEKEI5.js";
6
+ import "./chunk-LZBSLO6S.js";
7
7
  import "./chunk-HBJITKSZ.js";
8
8
  import "./chunk-FXDYIV3K.js";
9
9
  import "./chunk-GCPAZSGV.js";
10
- import "./chunk-FP7G7DG3.js";
10
+ import "./chunk-IGKPPACU.js";
11
11
  import "./chunk-6MLEBAYZ.js";
12
12
  import "./chunk-VT4PDUYT.js";
13
13
  export {
14
14
  PRManager
15
15
  };
16
- //# sourceMappingURL=PRManager-2ABCWXHW.js.map
16
+ //# sourceMappingURL=PRManager-6ZJZRG5Z.js.map
package/dist/README.md CHANGED
@@ -79,9 +79,7 @@ iloom uses your existing Claude subscription to build a shared mental model of y
79
79
  il finish
80
80
  ```
81
81
 
82
- **The iloom Difference:** il start doesn't just create a branch. It launches a multi-agent workflow that surfaces assumptions and creates a structured plan in your issue tracker **before you even need to look at your IDE.**
83
-
84
- **→ [Want to know how you'll benefit from iloom?](docs/is-iloom-right-for-you.md)**
82
+ **The iloom Difference:** il start doesn't merely create a branch. It launches a multi-agent workflow that surfaces assumptions and creates a structured plan in your issue tracker **before you even need to look at your IDE.**
85
83
 
86
84
  How It Works: The Multi-Agent Workflow
87
85
  --------------------------------------
@@ -524,7 +522,11 @@ License & Name
524
522
 
525
523
  * ❌ You cannot resell iloom itself as a product or SaaS.
526
524
 
527
- * Converts to Apache 2.0 on 2030-01-22.
525
+ * Converts to Apache 2.0 on 2030-01-25.
528
526
 
529
527
 
530
528
  See [LICENSE](https://raw.githubusercontent.com/iloom-ai/iloom-cli/main/LICENSE) for complete terms.
529
+
530
+ **Terms of Service**
531
+
532
+ By using iloom, you agree to our [Terms of Service](https://iloom.ai/terms).
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-analyze-and-plan
3
3
  description: Combined analysis and planning agent for SIMPLE tasks. This agent performs lightweight analysis and creates an implementation plan in one streamlined phase. Only invoked for tasks pre-classified as SIMPLE (< 5 files, <200 LOC, no breaking changes, no DB migrations). Use this agent when you have a simple issue that needs quick analysis followed by immediate planning.
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__update_comment, mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
4
+ tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
5
  color: teal
6
6
  model: sonnet
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-analyzer
3
3
  description: Use this agent when you need to analyze and research issues, bugs, or enhancement requests. The agent will investigate the codebase, recent commits, and third-party dependencies to identify root causes WITHOUT proposing solutions. Ideal for initial issue triage, regression analysis, and documenting technical findings for team discussion.\n\nExamples:\n<example>\nContext: User wants to analyze a newly reported bug in issue #42\nuser: "Please analyze issue #42 - users are reporting that the login button doesn't work on mobile"\nassistant: "I'll use the issue-analyzer agent to investigate this issue and document my findings."\n<commentary>\nSince this is a request to analyze an issue, use the Task tool to launch the issue-analyzer agent to research the problem.\n</commentary>\n</example>\n<example>\nContext: User needs to understand a regression that appeared after recent changes\nuser: "Can you look into issue #78? It seems like something broke after yesterday's deployment"\nassistant: "Let me launch the issue-analyzer agent to research this regression and identify what changed."\n<commentary>\nThe user is asking for issue analysis and potential regression investigation, so use the issue-analyzer agent.\n</commentary>\n</example>
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__update_comment, mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
4
+ tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
5
  color: pink
6
6
  model: sonnet
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-complexity-evaluator
3
3
  description: Use this agent when you need to quickly assess the complexity of an issue before deciding on the appropriate workflow. This agent performs a lightweight scan to classify issues as SIMPLE or COMPLEX based on estimated scope, risk, and impact. Runs first before any detailed analysis or planning.
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__update_comment, mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact, mcp__recap__set_complexity
4
+ tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact, mcp__recap__set_complexity
5
5
  color: orange
6
6
  model: haiku
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-enhancer
3
3
  description: Use this agent when you need to analyze bug or enhancement reports from a Product Manager perspective. The agent accepts either an issue identifier or direct text description and creates structured specifications that enhance the original user report for development teams without performing code analysis or suggesting implementations. Ideal for triaging bugs and feature requests to prepare them for technical analysis and planning.\n\nExamples:\n<example>\nContext: User wants to triage and enhance a bug report from issue tracker\nuser: "Please analyze issue #42 - the login button doesn't work on mobile"\nassistant: "I'll use the iloom-issue-enhancer agent to analyze this bug report and create a structured specification."\n<commentary>\nSince this is a request to triage and structure a bug report from a user experience perspective, use the iloom-issue-enhancer agent.\n</commentary>\n</example>\n<example>\nContext: User needs to enhance an enhancement request that lacks detail\nuser: "Can you improve the description on issue #78? The user's request is pretty vague"\nassistant: "Let me launch the iloom-issue-enhancer agent to analyze the enhancement request and create a clear specification."\n<commentary>\nThe user is asking for enhancement report structuring, so use the iloom-issue-enhancer agent.\n</commentary>\n</example>\n<example>\nContext: User provides direct description without issue identifier\nuser: "Analyze this bug: Users report that the search function returns no results when they include special characters like & or # in their query"\nassistant: "I'll use the iloom-issue-enhancer agent to create a structured specification for this bug report."\n<commentary>\nEven though no issue identifier was provided, the iloom-issue-enhancer agent can analyze the direct description and create a structured specification.\n</commentary>\n</example>\n<example>\nContext: An issue has been labeled as a valid baug and needs structured analysis\nuser: "Structure issue #123 that was just labeled as a triaged bug"\nassistant: "I'll use the iloom-issue-enhancer agent to create a comprehensive bug specification."\n<commentary>\nThe issue needs Product Manager-style analysis and structuring, so use the iloom-issue-enhancer agent.\n</commentary>\n</example>
4
- tools: Bash, Glob, Grep, Read, WebFetch, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
4
+ tools: Bash, Glob, Grep, Read, WebFetch, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
5
  color: purple
6
6
  model: sonnet
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-implementer
3
3
  description: Use this agent when you need to implement an issue exactly as specified in its comments and description. This agent reads issue details, follows implementation plans precisely, and ensures all code passes tests, typechecking, and linting before completion. Examples:\n\n<example>\nContext: User wants to implement a specific issue.\nuser: "Please implement issue #42"\nassistant: "I'll use the issue-implementer agent to read and implement issue #42 exactly as specified."\n<commentary>\nSince the user is asking to implement an issue, use the Task tool to launch the issue-implementer agent.\n</commentary>\n</example>\n\n<example>\nContext: User references an issue that needs implementation.\nuser: "Can you work on the authentication issue we discussed in #15?"\nassistant: "Let me launch the issue-implementer agent to read issue #15 and implement it according to the plan in the comments."\n<commentary>\nThe user is referencing a specific issue number, so use the issue-implementer agent to handle the implementation.\n</commentary>\n</example>
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules ,mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
4
+ tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules ,mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
5
  model: sonnet
6
6
  color: green
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-planner
3
3
  description: Use this agent when you need to analyze issues and create detailed implementation plans. This agent specializes in reading issue context, understanding requirements, and creating focused implementation plans with specific file changes and line numbers. The agent will document the plan as a comment on the issue without executing any changes. Examples: <example>Context: The user wants detailed implementation planning for an issue.\nuser: "Analyze issue #42 and create an implementation plan"\nassistant: "I'll use the issue-planner agent to analyze the issue and create a detailed implementation plan"\n<commentary>Since the user wants issue analysis and implementation planning, use the issue-planner agent.</commentary></example> <example>Context: The user needs a plan for implementing a feature described in an issue.\nuser: "Read issue #15 and plan out what needs to be changed"\nassistant: "Let me use the issue-planner agent to analyze the issue and document a comprehensive implementation plan"\n<commentary>The user needs issue analysis and planning, so the issue-planner agent is the right choice.</commentary></example>
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__update_comment, mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
4
+ tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__figma-dev-mode-mcp-server__get_code, mcp__figma-dev-mode-mcp-server__get_variable_defs, mcp__figma-dev-mode-mcp-server__get_code_connect_map, mcp__figma-dev-mode-mcp-server__get_screenshot, mcp__figma-dev-mode-mcp-server__get_metadata, mcp__figma-dev-mode-mcp-server__add_code_connect_map, mcp__figma-dev-mode-mcp-server__create_design_system_rules, Bash(git show:*), mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
5
  color: blue
6
6
  model: sonnet
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: iloom-issue-reviewer
3
3
  description: Use this agent when you need to review uncommitted code changes against a specific issue to verify completeness and quality. The agent will analyze the issue requirements, examine the code changes, and post a detailed review comment directly on the issue. Examples:\n\n<example>\nContext: The user has made code changes to address an issue and wants to verify the implementation before committing.\nuser: "I've finished implementing the fix for issue #42, can you review it?"\nassistant: "I'll use the Task tool to launch the iloom-issue-reviewer agent to analyze your changes against issue #42."\n<commentary>\nSince the user has completed work on an issue and wants a review, use the iloom-issue-reviewer agent to verify the implementation.\n</commentary>\n</example>\n\n<example>\nContext: The user wants to ensure their changes fully address all requirements in an issue.\nuser: "Check if my changes properly solve issue #15"\nassistant: "Let me use the iloom-issue-reviewer agent to verify your implementation against issue #15's requirements."\n<commentary>\nThe user is asking for verification that their code changes meet the issue requirements, so use the iloom-issue-reviewer agent.\n</commentary>\n</example>
4
- tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__issue_management__get_issue, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
4
+ tools: Bash, Glob, Grep, Read, Edit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, BashOutput, SlashCommand, ListMcpResourcesTool, ReadMcpResourceTool, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, mcp__issue_management__get_issue, mcp__issue_management__get_pr, mcp__issue_management__get_comment, mcp__issue_management__create_comment, mcp__issue_management__update_comment, mcp__recap__get_recap, mcp__recap__add_entry, mcp__recap__add_artifact
5
5
  model: sonnet
6
6
  color: cyan
7
7
  ---
@@ -8,18 +8,12 @@ import {
8
8
  import {
9
9
  GitHubService
10
10
  } from "./chunk-USJSNHGG.js";
11
- import {
12
- getRepoInfo
13
- } from "./chunk-GCPAZSGV.js";
14
11
  import {
15
12
  promptConfirmation
16
13
  } from "./chunk-ZX3GTM7O.js";
17
14
  import {
18
15
  getLogger
19
16
  } from "./chunk-6MLEBAYZ.js";
20
- import {
21
- logger
22
- } from "./chunk-VT4PDUYT.js";
23
17
 
24
18
  // src/lib/LinearService.ts
25
19
  var LinearService = class {
@@ -224,117 +218,7 @@ var IssueTrackerFactory = class {
224
218
  }
225
219
  };
226
220
 
227
- // src/utils/mcp.ts
228
- import path from "path";
229
- import os from "os";
230
- async function generateIssueManagementMcpConfig(contextType, repo, provider = "github", settings, draftPrNumber) {
231
- var _a, _b, _c, _d;
232
- const effectiveContextType = draftPrNumber ? "pr" : contextType;
233
- let envVars = {
234
- ISSUE_PROVIDER: provider
235
- };
236
- if (draftPrNumber) {
237
- envVars.DRAFT_PR_NUMBER = String(draftPrNumber);
238
- }
239
- if (provider === "github") {
240
- let owner;
241
- let name;
242
- if (repo) {
243
- const parts = repo.split("/");
244
- if (parts.length !== 2 || !parts[0] || !parts[1]) {
245
- throw new Error(`Invalid repo format: ${repo}. Expected "owner/repo"`);
246
- }
247
- owner = parts[0];
248
- name = parts[1];
249
- } else {
250
- const repoInfo = await getRepoInfo();
251
- owner = repoInfo.owner;
252
- name = repoInfo.name;
253
- }
254
- const githubEventName = effectiveContextType === "issue" ? "issues" : effectiveContextType === "pr" ? "pull_request" : void 0;
255
- envVars = {
256
- ...envVars,
257
- REPO_OWNER: owner,
258
- REPO_NAME: name,
259
- GITHUB_API_URL: "https://api.github.com/",
260
- ...githubEventName && { GITHUB_EVENT_NAME: githubEventName }
261
- };
262
- logger.debug("Generated MCP config for GitHub issue management", {
263
- provider,
264
- repoOwner: owner,
265
- repoName: name,
266
- contextType: effectiveContextType ?? "auto-detect",
267
- githubEventName: githubEventName ?? "auto-detect",
268
- draftPrNumber: draftPrNumber ?? void 0
269
- });
270
- } else {
271
- const apiToken = ((_b = (_a = settings == null ? void 0 : settings.issueManagement) == null ? void 0 : _a.linear) == null ? void 0 : _b.apiToken) ?? process.env.LINEAR_API_TOKEN;
272
- if (apiToken) {
273
- envVars.LINEAR_API_TOKEN = apiToken;
274
- }
275
- const teamKey = ((_d = (_c = settings == null ? void 0 : settings.issueManagement) == null ? void 0 : _c.linear) == null ? void 0 : _d.teamId) ?? process.env.LINEAR_TEAM_KEY;
276
- if (teamKey) {
277
- envVars.LINEAR_TEAM_KEY = teamKey;
278
- }
279
- logger.debug("Generated MCP config for Linear issue management", {
280
- provider,
281
- hasApiToken: !!apiToken,
282
- hasTeamKey: !!teamKey,
283
- contextType: contextType ?? "auto-detect"
284
- });
285
- }
286
- const mcpServerConfig = {
287
- mcpServers: {
288
- issue_management: {
289
- transport: "stdio",
290
- command: "node",
291
- args: [path.join(path.dirname(new globalThis.URL(import.meta.url).pathname), "../dist/mcp/issue-management-server.js")],
292
- env: envVars
293
- }
294
- }
295
- };
296
- return [mcpServerConfig];
297
- }
298
- function slugifyPath(loomPath) {
299
- let slug = loomPath.replace(/[/\\]+$/, "");
300
- slug = slug.replace(/[/\\]/g, "___");
301
- slug = slug.replace(/[^a-zA-Z0-9_-]/g, "-");
302
- return `${slug}.json`;
303
- }
304
- function generateRecapMcpConfig(loomPath, loomMetadata) {
305
- const recapsDir = path.join(os.homedir(), ".config", "iloom-ai", "recaps");
306
- const recapFilePath = path.join(recapsDir, slugifyPath(loomPath));
307
- const envVars = {
308
- RECAP_FILE_PATH: recapFilePath,
309
- LOOM_METADATA_JSON: JSON.stringify(loomMetadata)
310
- };
311
- logger.debug("Generated MCP config for recap server", {
312
- loomPath,
313
- recapFilePath,
314
- loomMetadataDescription: loomMetadata.description
315
- });
316
- return [
317
- {
318
- mcpServers: {
319
- recap: {
320
- transport: "stdio",
321
- command: "node",
322
- args: [
323
- path.join(
324
- path.dirname(new globalThis.URL(import.meta.url).pathname),
325
- "../dist/mcp/recap-server.js"
326
- )
327
- ],
328
- env: envVars
329
- }
330
- }
331
- }
332
- ];
333
- }
334
-
335
221
  export {
336
- IssueTrackerFactory,
337
- generateIssueManagementMcpConfig,
338
- generateRecapMcpConfig
222
+ IssueTrackerFactory
339
223
  };
340
- //# sourceMappingURL=chunk-FM4KBPVA.js.map
224
+ //# sourceMappingURL=chunk-3K3WY3BN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/LinearService.ts","../src/lib/IssueTrackerFactory.ts"],"sourcesContent":["/**\n * LinearService - IssueTracker implementation for Linear\n * Implements issue tracking operations using the @linear/sdk\n */\n\nimport type { Issue, PullRequest, IssueTrackerInputDetection } from '../types/index.js'\nimport type { LinearIssue } from '../types/linear.js'\nimport { LinearServiceError } from '../types/linear.js'\nimport {\n fetchLinearIssue,\n createLinearIssue,\n updateLinearIssueState,\n} from '../utils/linear.js'\nimport { promptConfirmation } from '../utils/prompt.js'\nimport type { IssueTracker } from './IssueTracker.js'\nimport { getLogger } from '../utils/logger-context.js'\n\n/**\n * Linear service configuration options\n */\nexport interface LinearServiceConfig {\n /** Linear team key (e.g., \"ENG\", \"PLAT\") */\n teamId?: string\n /** Branch naming template (e.g., \"feat/{{key}}__{{title}}\") */\n branchFormat?: string\n /** Linear API token (lin_api_...). If provided, sets process.env.LINEAR_API_TOKEN */\n apiToken?: string\n}\n\n/**\n * Linear implementation of IssueTracker interface\n */\nexport class LinearService implements IssueTracker {\n // IssueTracker interface implementation\n readonly providerName = 'linear'\n readonly supportsPullRequests = false // Linear doesn't have pull requests\n\n private config: LinearServiceConfig\n private prompter: (message: string) => Promise<boolean>\n\n constructor(\n config?: LinearServiceConfig,\n options?: { prompter?: (message: string) => Promise<boolean> },\n ) {\n this.config = config ?? {}\n this.prompter = options?.prompter ?? promptConfirmation\n\n // Set API token from config if provided (follows mcp.ts pattern)\n if (this.config.apiToken) {\n process.env.LINEAR_API_TOKEN = this.config.apiToken\n }\n }\n\n /**\n * Detect if input matches Linear identifier format (TEAM-NUMBER)\n * @param input - User input string\n * @param _repo - Repository (unused for Linear)\n * @returns Detection result with type and identifier\n */\n public async detectInputType(\n input: string,\n _repo?: string,\n ): Promise<IssueTrackerInputDetection> {\n getLogger().debug(`LinearService.detectInputType called with input: \"${input}\"`)\n\n // Pattern: TEAM-NUMBER (e.g., ENG-123, PLAT-456)\n // Requires at least 2 letters before dash to avoid conflict with PR-123 format\n const linearPattern = /^([A-Z]{2,}-\\d+)$/i\n const match = input.match(linearPattern)\n\n if (!match?.[1]) {\n getLogger().debug(`LinearService: Input \"${input}\" does not match Linear pattern`)\n return { type: 'unknown', identifier: null, rawInput: input }\n }\n\n const identifier = match[1].toUpperCase()\n getLogger().debug(`LinearService: Matched Linear identifier: ${identifier}`)\n\n // Validate the issue exists in Linear\n getLogger().debug(`LinearService: Checking if ${identifier} is a valid Linear issue via SDK`)\n const issue = await this.isValidIssue(identifier)\n\n if (issue) {\n getLogger().debug(`LinearService: Issue ${identifier} found: \"${issue.title}\"`)\n return { type: 'issue', identifier, rawInput: input }\n }\n\n // Not found\n getLogger().debug(`LinearService: Issue ${identifier} NOT found by SDK`)\n return { type: 'unknown', identifier: null, rawInput: input }\n }\n\n /**\n * Fetch a Linear issue by identifier\n * @param identifier - Linear issue identifier (string or number)\n * @param _repo - Repository (unused for Linear)\n * @returns Generic Issue type\n * @throws LinearServiceError if issue not found\n */\n public async fetchIssue(identifier: string | number, _repo?: string): Promise<Issue> {\n const linearIssue = await fetchLinearIssue(String(identifier))\n return this.mapLinearIssueToIssue(linearIssue)\n }\n\n /**\n * Check if an issue identifier is valid (silent validation)\n * @param identifier - Linear issue identifier\n * @param _repo - Repository (unused for Linear)\n * @returns Issue if valid, false if not found\n */\n public async isValidIssue(identifier: string | number, _repo?: string): Promise<Issue | false> {\n try {\n return await this.fetchIssue(identifier)\n } catch (error) {\n // Return false for NOT_FOUND errors (expected during detection)\n if (error instanceof LinearServiceError && error.code === 'NOT_FOUND') {\n return false\n }\n // Re-throw unexpected errors\n throw error\n }\n }\n\n /**\n * Validate issue state and prompt user if closed\n * @param issue - Issue to validate\n * @throws LinearServiceError if user cancels due to closed issue\n */\n public async validateIssueState(issue: Issue): Promise<void> {\n if (issue.state === 'closed') {\n const shouldContinue = await this.prompter(\n `Issue ${issue.number} is closed. Continue anyway?`,\n )\n\n if (!shouldContinue) {\n throw new LinearServiceError('INVALID_STATE', 'User cancelled due to closed issue')\n }\n }\n }\n\n /**\n * Create a new Linear issue\n * @param title - Issue title\n * @param body - Issue description (markdown)\n * @param _repository - Repository (unused for Linear)\n * @param labels - Optional label names\n * @returns Created issue identifier and URL\n * @throws LinearServiceError if teamId not configured or creation fails\n */\n public async createIssue(\n title: string,\n body: string,\n _repository?: string,\n labels?: string[],\n ): Promise<{ number: string | number; url: string }> {\n // Require teamId configuration\n if (!this.config.teamId) {\n throw new LinearServiceError(\n 'INVALID_STATE',\n 'Linear teamId not configured. Run `il init` to configure Linear settings.',\n )\n }\n\n getLogger().info(`Creating Linear issue in team ${this.config.teamId}: ${title}`)\n\n const result = await createLinearIssue(title, body, this.config.teamId, labels)\n\n return {\n number: result.identifier,\n url: result.url,\n }\n }\n\n /**\n * Get the web URL for a Linear issue\n * @param identifier - Linear issue identifier\n * @param _repo - Repository (unused for Linear)\n * @returns Issue URL\n */\n public async getIssueUrl(identifier: string | number, _repo?: string): Promise<string> {\n const issue = await this.fetchIssue(identifier)\n return issue.url\n }\n\n /**\n * Move a Linear issue to \"In Progress\" state\n * @param identifier - Linear issue identifier\n * @throws LinearServiceError if state update fails\n */\n public async moveIssueToInProgress(identifier: string | number): Promise<void> {\n getLogger().info(`Moving Linear issue ${identifier} to In Progress`)\n await updateLinearIssueState(String(identifier), 'In Progress')\n }\n\n /**\n * Extract issue context for AI prompts\n * @param entity - Issue (Linear doesn't have PRs)\n * @returns Formatted context string\n */\n public extractContext(entity: Issue | PullRequest): string {\n // Linear doesn't have PRs, always an issue\n const issue = entity as Issue\n return `Linear Issue ${issue.number}: ${issue.title}\\nState: ${issue.state}\\n\\n${issue.body}`\n }\n\n /**\n * Map Linear API issue to generic Issue type\n * @param linear - Linear issue from SDK\n * @returns Generic Issue type\n */\n private mapLinearIssueToIssue(linear: LinearIssue): Issue {\n return {\n number: linear.identifier, // Keep as string (e.g., \"ENG-123\")\n title: linear.title,\n body: linear.description ?? '',\n state: linear.state ? (linear.state.toLowerCase().includes('done') || linear.state.toLowerCase().includes('completed') || linear.state.toLowerCase().includes('canceled') ? 'closed' : 'open') : 'open',\n labels: [],\n assignees: [],\n url: linear.url,\n }\n }\n}\n","// IssueTrackerFactory - creates appropriate IssueTracker based on settings\n// Follows pattern from database provider instantiation\n\nimport type { IssueTracker } from './IssueTracker.js'\nimport { GitHubService } from './GitHubService.js'\nimport { LinearService, type LinearServiceConfig } from './LinearService.js'\nimport type { IloomSettings } from './SettingsManager.js'\nimport { getLogger } from '../utils/logger-context.js'\n\nexport type IssueTrackerProviderType = 'github' | 'linear'\n\n/**\n * Factory for creating IssueTracker instances based on settings\n * Provides a single point of provider instantiation\n *\n * Usage:\n * const tracker = IssueTrackerFactory.create(settings, { useClaude: true })\n * const issue = await tracker.fetchIssue(123)\n */\nexport class IssueTrackerFactory {\n\t/**\n\t * Create an IssueTracker instance based on settings configuration\n\t * Defaults to GitHub if no provider specified\n\t *\n\t * @param settings - iloom settings containing issueManagement.provider\n\t * @returns IssueTracker instance configured for the specified provider\n\t * @throws Error if provider type is not supported\n\t */\n\tstatic create(settings: IloomSettings): IssueTracker {\n\t\tconst provider = settings.issueManagement?.provider ?? 'github'\n\n\t\tgetLogger().debug(`IssueTrackerFactory: Creating tracker for provider \"${provider}\"`)\n\t\tgetLogger().debug(`IssueTrackerFactory: issueManagement settings:`, JSON.stringify(settings.issueManagement, null, 2))\n\n\t\tswitch (provider) {\n\t\t\tcase 'github':\n\t\t\t\tgetLogger().debug('IssueTrackerFactory: Creating GitHubService')\n\t\t\t\treturn new GitHubService()\n\t\t\tcase 'linear': {\n\t\t\t\tconst linearSettings = settings.issueManagement?.linear\n\t\t\t\tconst linearConfig: LinearServiceConfig = {}\n\n\t\t\t\tif (linearSettings?.teamId) {\n\t\t\t\t\tlinearConfig.teamId = linearSettings.teamId\n\t\t\t\t}\n\t\t\t\tif (linearSettings?.branchFormat) {\n\t\t\t\t\tlinearConfig.branchFormat = linearSettings.branchFormat\n\t\t\t\t}\n\t\t\t\tif (linearSettings?.apiToken) {\n\t\t\t\t\tlinearConfig.apiToken = linearSettings.apiToken\n\t\t\t\t}\n\n\t\t\t\tgetLogger().debug(`IssueTrackerFactory: Creating LinearService with config:`, JSON.stringify(linearConfig, null, 2))\n\t\t\t\treturn new LinearService(linearConfig)\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported issue tracker provider: ${provider}`)\n\t\t}\n\t}\n\n\t/**\n\t * Get the configured provider name from settings\n\t * Defaults to 'github' if not configured\n\t *\n\t * @param settings - iloom settings\n\t * @returns Provider type string\n\t */\n\tstatic getProviderName(settings: IloomSettings): IssueTrackerProviderType {\n\t\treturn (settings.issueManagement?.provider ?? 'github') as IssueTrackerProviderType\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ClaudeService
4
- } from "./chunk-KVS4XGBQ.js";
4
+ } from "./chunk-O36JLYNW.js";
5
5
  import {
6
6
  logger
7
7
  } from "./chunk-VT4PDUYT.js";
@@ -63,4 +63,4 @@ var ClaudeContextManager = class {
63
63
  export {
64
64
  ClaudeContextManager
65
65
  };
66
- //# sourceMappingURL=chunk-6TL3BYH6.js.map
66
+ //# sourceMappingURL=chunk-64HCHVJM.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  calculatePortForBranch,
4
4
  calculatePortFromIdentifier
5
- } from "./chunk-453NC377.js";
5
+ } from "./chunk-CFQVOTHO.js";
6
6
  import {
7
7
  installDependencies,
8
8
  runScript
@@ -31,6 +31,9 @@ import {
31
31
  import {
32
32
  MetadataManager
33
33
  } from "./chunk-VWGKGNJP.js";
34
+ import {
35
+ GitHubService
36
+ } from "./chunk-USJSNHGG.js";
34
37
  import {
35
38
  calculateForegroundColor,
36
39
  generateColorFromBranchName,
@@ -41,7 +44,7 @@ import {
41
44
  } from "./chunk-433MOLAU.js";
42
45
  import {
43
46
  generateRandomSessionId
44
- } from "./chunk-FP7G7DG3.js";
47
+ } from "./chunk-IGKPPACU.js";
45
48
  import {
46
49
  getLogger
47
50
  } from "./chunk-6MLEBAYZ.js";
@@ -191,7 +194,7 @@ var VSCodeIntegration = class {
191
194
 
192
195
  // src/lib/LoomManager.ts
193
196
  var LoomManager = class {
194
- constructor(gitWorktree, issueTracker, branchNaming, environment, _claude, capabilityDetector, cliIsolation, settings, database) {
197
+ constructor(gitWorktree, issueTracker, branchNaming, environment, _claude, capabilityDetector, cliIsolation, settings, database, githubService) {
195
198
  this.gitWorktree = gitWorktree;
196
199
  this.issueTracker = issueTracker;
197
200
  this.branchNaming = branchNaming;
@@ -201,6 +204,7 @@ var LoomManager = class {
201
204
  this.settings = settings;
202
205
  this.database = database;
203
206
  this.metadataManager = new MetadataManager();
207
+ this.githubService = githubService;
204
208
  }
205
209
  /**
206
210
  * Get database branch name for a loom by reading its .env file
@@ -322,11 +326,6 @@ var LoomManager = class {
322
326
  let draftPrUrl = void 0;
323
327
  const mergeBehavior = settingsData.mergeBehavior ?? { mode: "local" };
324
328
  if (mergeBehavior.mode === "github-draft-pr" && input.type === "issue") {
325
- if (!this.issueTracker.supportsPullRequests) {
326
- throw new Error(
327
- `The 'github-draft-pr' merge mode requires a GitHub-compatible issue tracker. Your provider (${this.issueTracker.providerName}) does not support pull requests.`
328
- );
329
- }
330
329
  getLogger().info("Creating placeholder commit for draft PR...");
331
330
  const { executeGitCommand: executeGitCommand2, PLACEHOLDER_COMMIT_PREFIX, pushBranchToRemote } = await import("./git-ENLT2VNI.js");
332
331
  await executeGitCommand2(
@@ -342,7 +341,7 @@ var LoomManager = class {
342
341
  getLogger().debug("Placeholder commit created");
343
342
  getLogger().info("Pushing branch to remote for draft PR...");
344
343
  await pushBranchToRemote(branchName, worktreePath, { dryRun: false });
345
- const { PRManager } = await import("./PRManager-2ABCWXHW.js");
344
+ const { PRManager } = await import("./PRManager-6ZJZRG5Z.js");
346
345
  const prManager = new PRManager(settingsData);
347
346
  const prTitle = (issueData == null ? void 0 : issueData.title) ?? `Work on ${branchName}`;
348
347
  const prBody = `Draft PR for issue #${input.identifier}
@@ -393,8 +392,8 @@ This PR was created automatically by iloom.`;
393
392
  const setArguments = (_j = input.options) == null ? void 0 : _j.setArguments;
394
393
  const executablePath = (_k = input.options) == null ? void 0 : _k.executablePath;
395
394
  if (enableClaude || enableCode || enableDevServer || enableTerminal) {
396
- const { LoomLauncher } = await import("./LoomLauncher-NL65LSKP.js");
397
- const { ClaudeContextManager } = await import("./ClaudeContextManager-KE5TBZVZ.js");
395
+ const { LoomLauncher } = await import("./LoomLauncher-U2B3VHPC.js");
396
+ const { ClaudeContextManager } = await import("./ClaudeContextManager-Y2YJC6BU.js");
398
397
  const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
399
398
  const launcher = new LoomLauncher(claudeContext, this.settings);
400
399
  await launcher.launchLoom({
@@ -573,10 +572,14 @@ This PR was created automatically by iloom.`;
573
572
  if (input.type === "issue") {
574
573
  return await this.issueTracker.fetchIssue(input.identifier);
575
574
  } else if (input.type === "pr") {
576
- if (!this.issueTracker.supportsPullRequests || !this.issueTracker.fetchPR) {
577
- throw new Error("Issue tracker does not support pull requests");
575
+ if (this.issueTracker.supportsPullRequests && this.issueTracker.fetchPR) {
576
+ return await this.issueTracker.fetchPR(input.identifier);
577
+ }
578
+ if (this.githubService) {
579
+ return await this.githubService.fetchPR(input.identifier);
578
580
  }
579
- return await this.issueTracker.fetchPR(input.identifier);
581
+ const github = new GitHubService();
582
+ return await github.fetchPR(input.identifier);
580
583
  }
581
584
  return null;
582
585
  }
@@ -1043,8 +1046,8 @@ This PR was created automatically by iloom.`;
1043
1046
  const executablePath = (_i = input.options) == null ? void 0 : _i.executablePath;
1044
1047
  if (enableClaude || enableCode || enableDevServer || enableTerminal) {
1045
1048
  getLogger().info("Launching workspace components...");
1046
- const { LoomLauncher } = await import("./LoomLauncher-NL65LSKP.js");
1047
- const { ClaudeContextManager } = await import("./ClaudeContextManager-KE5TBZVZ.js");
1049
+ const { LoomLauncher } = await import("./LoomLauncher-U2B3VHPC.js");
1050
+ const { ClaudeContextManager } = await import("./ClaudeContextManager-Y2YJC6BU.js");
1048
1051
  const claudeContext = new ClaudeContextManager(void 0, void 0, this.settings);
1049
1052
  const launcher = new LoomLauncher(claudeContext, this.settings);
1050
1053
  await launcher.launchLoom({
@@ -2436,4 +2439,4 @@ export {
2436
2439
  DatabaseManager,
2437
2440
  ResourceCleanup
2438
2441
  };
2439
- //# sourceMappingURL=chunk-QQFBMCAH.js.map
2442
+ //# sourceMappingURL=chunk-77VLG2KP.js.map