@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.
- package/LICENSE +1 -1
- package/README.md +6 -4
- package/dist/{BranchNamingService-FLPUUFOB.js → BranchNamingService-AO7BPIUJ.js} +2 -2
- package/dist/{ClaudeContextManager-KE5TBZVZ.js → ClaudeContextManager-Y2YJC6BU.js} +4 -4
- package/dist/{ClaudeService-CRSETT3A.js → ClaudeService-NDVFQRKC.js} +3 -3
- package/dist/{LoomLauncher-NL65LSKP.js → LoomLauncher-U2B3VHPC.js} +4 -4
- package/dist/{PRManager-2ABCWXHW.js → PRManager-6ZJZRG5Z.js} +4 -4
- package/dist/README.md +6 -4
- package/dist/agents/iloom-issue-analyze-and-plan.md +1 -1
- package/dist/agents/iloom-issue-analyzer.md +1 -1
- package/dist/agents/iloom-issue-complexity-evaluator.md +1 -1
- package/dist/agents/iloom-issue-enhancer.md +1 -1
- package/dist/agents/iloom-issue-implementer.md +1 -1
- package/dist/agents/iloom-issue-planner.md +1 -1
- package/dist/agents/iloom-issue-reviewer.md +1 -1
- package/dist/{chunk-FM4KBPVA.js → chunk-3K3WY3BN.js} +2 -118
- package/dist/chunk-3K3WY3BN.js.map +1 -0
- package/dist/{chunk-6TL3BYH6.js → chunk-64HCHVJM.js} +2 -2
- package/dist/{chunk-QQFBMCAH.js → chunk-77VLG2KP.js} +20 -17
- package/dist/chunk-77VLG2KP.js.map +1 -0
- package/dist/{chunk-FEAJR6PN.js → chunk-C7YW5IMS.js} +2 -2
- package/dist/{chunk-DAOS6EC3.js → chunk-CAXFWFV6.js} +5 -3
- package/dist/{chunk-DAOS6EC3.js.map → chunk-CAXFWFV6.js.map} +1 -1
- package/dist/chunk-CFQVOTHO.js +111 -0
- package/dist/chunk-CFQVOTHO.js.map +1 -0
- package/dist/{chunk-AFRICMSW.js → chunk-ENMTWE74.js} +2 -2
- package/dist/{chunk-FP7G7DG3.js → chunk-IGKPPACU.js} +8 -3
- package/dist/chunk-IGKPPACU.js.map +1 -0
- package/dist/{chunk-CNSTXBJ3.js → chunk-KSXA2NOJ.js} +9 -5
- package/dist/chunk-KSXA2NOJ.js.map +1 -0
- package/dist/{chunk-GJMEKEI5.js → chunk-LZBSLO6S.js} +76 -1
- package/dist/chunk-LZBSLO6S.js.map +1 -0
- package/dist/{chunk-YQNSZKKT.js → chunk-NEPH2O4C.js} +8 -4
- package/dist/chunk-NEPH2O4C.js.map +1 -0
- package/dist/{chunk-KVS4XGBQ.js → chunk-O36JLYNW.js} +2 -2
- package/dist/{chunk-C3AKFAIR.js → chunk-Q457PKGH.js} +2 -2
- package/dist/{chunk-EPPPDVHD.js → chunk-TB6475EW.js} +6 -4
- package/dist/chunk-TB6475EW.js.map +1 -0
- package/dist/{chunk-HVQNVRAF.js → chunk-VYKKWU36.js} +96 -3
- package/dist/chunk-VYKKWU36.js.map +1 -0
- package/dist/{chunk-453NC377.js → chunk-WZYBHD7P.js} +3 -106
- package/dist/chunk-WZYBHD7P.js.map +1 -0
- package/dist/chunk-XAMBIVXE.js +121 -0
- package/dist/chunk-XAMBIVXE.js.map +1 -0
- package/dist/{claude-6H36IBHO.js → claude-V4HRPR4Z.js} +2 -2
- package/dist/{cleanup-77U5ATYI.js → cleanup-DB7EFBF3.js} +9 -6
- package/dist/{cleanup-77U5ATYI.js.map → cleanup-DB7EFBF3.js.map} +1 -1
- package/dist/cli.js +104 -156
- package/dist/cli.js.map +1 -1
- package/dist/{commit-ONRXU67O.js → commit-NGMDWWAP.js} +4 -4
- package/dist/{dev-server-UKAPBGUR.js → dev-server-OAP3RZC6.js} +4 -3
- package/dist/{dev-server-UKAPBGUR.js.map → dev-server-OAP3RZC6.js.map} +1 -1
- package/dist/{feedback-K3A4QUSG.js → feedback-ZLAX3BVL.js} +4 -3
- package/dist/{feedback-K3A4QUSG.js.map → feedback-ZLAX3BVL.js.map} +1 -1
- package/dist/{ignite-YUAOJ5PP.js → ignite-HA2OJF6Z.js} +26 -40
- package/dist/ignite-HA2OJF6Z.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/{init-XQQMFDM6.js → init-S6IEGRSX.js} +3 -3
- package/dist/mcp/issue-management-server.js +157 -9
- package/dist/mcp/issue-management-server.js.map +1 -1
- package/dist/{open-QI63XQ4F.js → open-IN3LUZXX.js} +4 -3
- package/dist/{open-QI63XQ4F.js.map → open-IN3LUZXX.js.map} +1 -1
- package/dist/{projects-TWY4RT2Z.js → projects-CTRTTMSK.js} +25 -9
- package/dist/projects-CTRTTMSK.js.map +1 -0
- package/dist/prompts/issue-prompt.txt +16 -0
- package/dist/prompts/pr-prompt.txt +33 -13
- package/dist/prompts/regular-prompt.txt +7 -0
- package/dist/{rebase-QYCRF7JG.js → rebase-RLEVFHWN.js} +3 -3
- package/dist/{run-YDVYORT2.js → run-QEIS2EH2.js} +4 -3
- package/dist/{run-YDVYORT2.js.map → run-QEIS2EH2.js.map} +1 -1
- package/dist/{summary-G6L3VAKK.js → summary-2KLNHVTN.js} +4 -4
- package/dist/{test-webserver-NRMGT2HB.js → test-webserver-J6SMNLU2.js} +3 -2
- package/dist/{test-webserver-NRMGT2HB.js.map → test-webserver-J6SMNLU2.js.map} +1 -1
- package/package.json +1 -1
- package/dist/chunk-453NC377.js.map +0 -1
- package/dist/chunk-CNSTXBJ3.js.map +0 -1
- package/dist/chunk-EPPPDVHD.js.map +0 -1
- package/dist/chunk-FM4KBPVA.js.map +0 -1
- package/dist/chunk-FP7G7DG3.js.map +0 -1
- package/dist/chunk-GJMEKEI5.js.map +0 -1
- package/dist/chunk-HVQNVRAF.js.map +0 -1
- package/dist/chunk-QQFBMCAH.js.map +0 -1
- package/dist/chunk-YQNSZKKT.js.map +0 -1
- package/dist/ignite-YUAOJ5PP.js.map +0 -1
- package/dist/projects-TWY4RT2Z.js.map +0 -1
- /package/dist/{BranchNamingService-FLPUUFOB.js.map → BranchNamingService-AO7BPIUJ.js.map} +0 -0
- /package/dist/{ClaudeContextManager-KE5TBZVZ.js.map → ClaudeContextManager-Y2YJC6BU.js.map} +0 -0
- /package/dist/{ClaudeService-CRSETT3A.js.map → ClaudeService-NDVFQRKC.js.map} +0 -0
- /package/dist/{LoomLauncher-NL65LSKP.js.map → LoomLauncher-U2B3VHPC.js.map} +0 -0
- /package/dist/{PRManager-2ABCWXHW.js.map → PRManager-6ZJZRG5Z.js.map} +0 -0
- /package/dist/{chunk-6TL3BYH6.js.map → chunk-64HCHVJM.js.map} +0 -0
- /package/dist/{chunk-FEAJR6PN.js.map → chunk-C7YW5IMS.js.map} +0 -0
- /package/dist/{chunk-AFRICMSW.js.map → chunk-ENMTWE74.js.map} +0 -0
- /package/dist/{chunk-KVS4XGBQ.js.map → chunk-O36JLYNW.js.map} +0 -0
- /package/dist/{chunk-C3AKFAIR.js.map → chunk-Q457PKGH.js.map} +0 -0
- /package/dist/{claude-6H36IBHO.js.map → claude-V4HRPR4Z.js.map} +0 -0
- /package/dist/{commit-ONRXU67O.js.map → commit-NGMDWWAP.js.map} +0 -0
- /package/dist/{init-XQQMFDM6.js.map → init-S6IEGRSX.js.map} +0 -0
- /package/dist/{rebase-QYCRF7JG.js.map → rebase-RLEVFHWN.js.map} +0 -0
- /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-
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
+
} from "./chunk-O36JLYNW.js";
|
|
5
5
|
import "./chunk-TIYJEEVO.js";
|
|
6
6
|
import "./chunk-WFQ5CLTR.js";
|
|
7
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
8
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
+
} from "./chunk-TB6475EW.js";
|
|
5
5
|
import "./chunk-YETJNRQM.js";
|
|
6
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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:*),
|
|
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:*),
|
|
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:*),
|
|
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:*),
|
|
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-
|
|
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-
|
|
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-
|
|
66
|
+
//# sourceMappingURL=chunk-64HCHVJM.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
calculatePortForBranch,
|
|
4
4
|
calculatePortFromIdentifier
|
|
5
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
397
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
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 (
|
|
577
|
-
|
|
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
|
-
|
|
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-
|
|
1047
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
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-
|
|
2442
|
+
//# sourceMappingURL=chunk-77VLG2KP.js.map
|