@iloom/cli 0.1.17 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -6
- package/dist/ClaudeContextManager-JKR4WGNU.js +13 -0
- package/dist/ClaudeService-55DQGB7T.js +12 -0
- package/dist/{GitHubService-F7Z3XJOS.js → GitHubService-LWP4GKGH.js} +3 -3
- package/dist/{LoomLauncher-MODG2SEM.js → LoomLauncher-UMMLPIZO.js} +7 -7
- package/dist/{PromptTemplateManager-7FINLRDE.js → PromptTemplateManager-WII75TKH.js} +2 -2
- package/dist/README.md +755 -0
- package/dist/{SettingsManager-VAZF26S2.js → SettingsManager-SKLUVE3K.js} +6 -2
- package/dist/{add-issue-22JBNOML.js → add-issue-X56V3XPB.js} +23 -8
- package/dist/add-issue-X56V3XPB.js.map +1 -0
- package/dist/{chunk-Y7SAGNUT.js → chunk-DEPYQRRB.js} +2 -2
- package/dist/{chunk-WKEWRSDB.js → chunk-ELFT36PV.js} +3 -3
- package/dist/chunk-FXV24OYZ.js +83 -0
- package/dist/chunk-FXV24OYZ.js.map +1 -0
- package/dist/{chunk-HPJJSYNS.js → chunk-H5LDRGVK.js} +6 -8
- package/dist/{chunk-HPJJSYNS.js.map → chunk-H5LDRGVK.js.map} +1 -1
- package/dist/{chunk-QEPVTTHD.js → chunk-IO4WFTL2.js} +17 -11
- package/dist/chunk-IO4WFTL2.js.map +1 -0
- package/dist/{chunk-KQDEK2ZW.js → chunk-JXQXSC45.js} +41 -9
- package/dist/chunk-JXQXSC45.js.map +1 -0
- package/dist/{chunk-JQ7VOSTC.js → chunk-KOCQAD2E.js} +3 -3
- package/dist/{chunk-YYSKGAZT.js → chunk-LAPY6NAE.js} +17 -8
- package/dist/chunk-LAPY6NAE.js.map +1 -0
- package/dist/{chunk-O2QWO64Z.js → chunk-PV3GAXQO.js} +56 -3
- package/dist/chunk-PV3GAXQO.js.map +1 -0
- package/dist/chunk-PVAVNJKS.js +188 -0
- package/dist/chunk-PVAVNJKS.js.map +1 -0
- package/dist/{chunk-CP2NU2JC.js → chunk-Q2KYPAH2.js} +7 -7
- package/dist/{chunk-CP2NU2JC.js.map → chunk-Q2KYPAH2.js.map} +1 -1
- package/dist/{chunk-W3DQTW63.js → chunk-USVVV3FP.js} +4 -4
- package/dist/{chunk-SSR5AVRJ.js → chunk-VCMMAFXQ.js} +21 -8
- package/dist/chunk-VCMMAFXQ.js.map +1 -0
- package/dist/chunk-VVH3ANF2.js +307 -0
- package/dist/chunk-VVH3ANF2.js.map +1 -0
- package/dist/{chunk-JBH2ZYYZ.js → chunk-VYQLLHZ7.js} +22 -3
- package/dist/chunk-VYQLLHZ7.js.map +1 -0
- package/dist/{chunk-SJUQ2NDR.js → chunk-ZMNQBJUI.js} +24 -19
- package/dist/chunk-ZMNQBJUI.js.map +1 -0
- package/dist/{chunk-T7QPXANZ.js → chunk-ZWXJBSUW.js} +17 -17
- package/dist/chunk-ZWXJBSUW.js.map +1 -0
- package/dist/{cleanup-3LUWPSM7.js → cleanup-ZHROIBSQ.js} +12 -16
- package/dist/cleanup-ZHROIBSQ.js.map +1 -0
- package/dist/cli.js +107 -49
- package/dist/cli.js.map +1 -1
- package/dist/contribute-3MQJ3XAQ.js +256 -0
- package/dist/contribute-3MQJ3XAQ.js.map +1 -0
- package/dist/{enhance-XJIQHVPD.js → enhance-VGWUX474.js} +18 -8
- package/dist/enhance-VGWUX474.js.map +1 -0
- package/dist/{feedback-23CLXKFT.js → feedback-ZOUCCHN4.js} +8 -8
- package/dist/{finish-3CQZIULO.js → finish-QJSK6Z7J.js} +36 -313
- package/dist/finish-QJSK6Z7J.js.map +1 -0
- package/dist/{git-LVRZ57GJ.js → git-OUYMVYJX.js} +2 -2
- package/dist/{ignite-WXEF2ID5.js → ignite-HICLZEYU.js} +124 -9
- package/dist/ignite-HICLZEYU.js.map +1 -0
- package/dist/index.d.ts +794 -712
- package/dist/index.js +169 -36
- package/dist/index.js.map +1 -1
- package/dist/init-UMKNHNV5.js +339 -0
- package/dist/init-UMKNHNV5.js.map +1 -0
- package/dist/mcp/github-comment-server.js +12 -9
- package/dist/mcp/github-comment-server.js.map +1 -1
- package/dist/neon-helpers-ZVIRPKCI.js +10 -0
- package/dist/{open-X6BTENPV.js → open-ETZUFSE4.js} +15 -17
- package/dist/{open-X6BTENPV.js.map → open-ETZUFSE4.js.map} +1 -1
- package/dist/prompts/init-prompt.txt +748 -0
- package/dist/prompts/issue-prompt.txt +141 -9
- package/dist/rebase-KBWFDZCN.js +95 -0
- package/dist/rebase-KBWFDZCN.js.map +1 -0
- package/dist/remote-GJEZWRCC.js +14 -0
- package/dist/{run-2JCPQAX3.js → run-4SVQ3WEU.js} +15 -17
- package/dist/{run-2JCPQAX3.js.map → run-4SVQ3WEU.js.map} +1 -1
- package/dist/schema/settings.schema.json +51 -1
- package/dist/{start-LWVRBJ6S.js → start-CT2ZEFP2.js} +54 -53
- package/dist/{start-LWVRBJ6S.js.map → start-CT2ZEFP2.js.map} +1 -1
- package/dist/{test-git-XPF4SZXJ.js → test-git-MKZATGZN.js} +3 -3
- package/dist/{test-prefix-XGFXFAYN.js → test-prefix-ZNLWDI3K.js} +3 -3
- package/dist/{update-DN3FSNKY.js → update-4TDDUR5K.js} +10 -4
- package/dist/{update-DN3FSNKY.js.map → update-4TDDUR5K.js.map} +1 -1
- package/package.json +3 -2
- package/dist/ClaudeContextManager-XOSXQ67R.js +0 -13
- package/dist/ClaudeService-YSZ6EXWP.js +0 -12
- package/dist/NeonProvider-PAGPUH7F.js +0 -12
- package/dist/add-issue-22JBNOML.js.map +0 -1
- package/dist/chunk-37DYYFVK.js +0 -29
- package/dist/chunk-37DYYFVK.js.map +0 -1
- package/dist/chunk-F3XBU2R7.js +0 -110
- package/dist/chunk-F3XBU2R7.js.map +0 -1
- package/dist/chunk-JBH2ZYYZ.js.map +0 -1
- package/dist/chunk-KQDEK2ZW.js.map +0 -1
- package/dist/chunk-O2QWO64Z.js.map +0 -1
- package/dist/chunk-QEPVTTHD.js.map +0 -1
- package/dist/chunk-SJUQ2NDR.js.map +0 -1
- package/dist/chunk-SSR5AVRJ.js.map +0 -1
- package/dist/chunk-T7QPXANZ.js.map +0 -1
- package/dist/chunk-YYSKGAZT.js.map +0 -1
- package/dist/cleanup-3LUWPSM7.js.map +0 -1
- package/dist/enhance-XJIQHVPD.js.map +0 -1
- package/dist/env-MDFL4ZXL.js +0 -23
- package/dist/finish-3CQZIULO.js.map +0 -1
- package/dist/ignite-WXEF2ID5.js.map +0 -1
- package/dist/init-RHACUR4E.js +0 -123
- package/dist/init-RHACUR4E.js.map +0 -1
- /package/dist/{ClaudeContextManager-XOSXQ67R.js.map → ClaudeContextManager-JKR4WGNU.js.map} +0 -0
- /package/dist/{ClaudeService-YSZ6EXWP.js.map → ClaudeService-55DQGB7T.js.map} +0 -0
- /package/dist/{GitHubService-F7Z3XJOS.js.map → GitHubService-LWP4GKGH.js.map} +0 -0
- /package/dist/{LoomLauncher-MODG2SEM.js.map → LoomLauncher-UMMLPIZO.js.map} +0 -0
- /package/dist/{NeonProvider-PAGPUH7F.js.map → PromptTemplateManager-WII75TKH.js.map} +0 -0
- /package/dist/{PromptTemplateManager-7FINLRDE.js.map → SettingsManager-SKLUVE3K.js.map} +0 -0
- /package/dist/{chunk-Y7SAGNUT.js.map → chunk-DEPYQRRB.js.map} +0 -0
- /package/dist/{chunk-WKEWRSDB.js.map → chunk-ELFT36PV.js.map} +0 -0
- /package/dist/{chunk-JQ7VOSTC.js.map → chunk-KOCQAD2E.js.map} +0 -0
- /package/dist/{chunk-W3DQTW63.js.map → chunk-USVVV3FP.js.map} +0 -0
- /package/dist/{feedback-23CLXKFT.js.map → feedback-ZOUCCHN4.js.map} +0 -0
- /package/dist/{SettingsManager-VAZF26S2.js.map → git-OUYMVYJX.js.map} +0 -0
- /package/dist/{env-MDFL4ZXL.js.map → neon-helpers-ZVIRPKCI.js.map} +0 -0
- /package/dist/{git-LVRZ57GJ.js.map → remote-GJEZWRCC.js.map} +0 -0
- /package/dist/{test-git-XPF4SZXJ.js.map → test-git-MKZATGZN.js.map} +0 -0
- /package/dist/{test-prefix-XGFXFAYN.js.map → test-prefix-ZNLWDI3K.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -147,7 +147,9 @@ var SettingsManager_exports = {};
|
|
|
147
147
|
__export(SettingsManager_exports, {
|
|
148
148
|
AgentSettingsSchema: () => AgentSettingsSchema,
|
|
149
149
|
CapabilitiesSettingsSchema: () => CapabilitiesSettingsSchema,
|
|
150
|
+
DatabaseProvidersSettingsSchema: () => DatabaseProvidersSettingsSchema,
|
|
150
151
|
IloomSettingsSchema: () => IloomSettingsSchema,
|
|
152
|
+
NeonSettingsSchema: () => NeonSettingsSchema,
|
|
151
153
|
SettingsManager: () => SettingsManager,
|
|
152
154
|
WorkflowPermissionSchema: () => WorkflowPermissionSchema,
|
|
153
155
|
WorkflowsSettingsSchema: () => WorkflowsSettingsSchema
|
|
@@ -156,7 +158,7 @@ import { readFile } from "fs/promises";
|
|
|
156
158
|
import path from "path";
|
|
157
159
|
import { z } from "zod";
|
|
158
160
|
import deepmerge from "deepmerge";
|
|
159
|
-
var AgentSettingsSchema, WorkflowPermissionSchema, WorkflowsSettingsSchema, CapabilitiesSettingsSchema, IloomSettingsSchema, SettingsManager;
|
|
161
|
+
var AgentSettingsSchema, WorkflowPermissionSchema, WorkflowsSettingsSchema, CapabilitiesSettingsSchema, NeonSettingsSchema, DatabaseProvidersSettingsSchema, IloomSettingsSchema, SettingsManager;
|
|
160
162
|
var init_SettingsManager = __esm({
|
|
161
163
|
"src/lib/SettingsManager.ts"() {
|
|
162
164
|
"use strict";
|
|
@@ -186,6 +188,15 @@ var init_SettingsManager = __esm({
|
|
|
186
188
|
databaseUrlEnvVarName: z.string().min(1, "Database URL variable name cannot be empty").regex(/^[A-Z_][A-Z0-9_]*$/, "Must be valid env var name (uppercase, underscores)").optional().default("DATABASE_URL").describe("Name of environment variable for database connection URL")
|
|
187
189
|
}).optional()
|
|
188
190
|
}).optional();
|
|
191
|
+
NeonSettingsSchema = z.object({
|
|
192
|
+
projectId: z.string().min(1).regex(/^[a-zA-Z0-9-]+$/, "Neon project ID must contain only letters, numbers, and hyphens").describe('Neon project ID found in your project URL (e.g., "fantastic-fox-3566354")'),
|
|
193
|
+
parentBranch: z.string().min(1).describe("Branch from which new database branches are created")
|
|
194
|
+
});
|
|
195
|
+
DatabaseProvidersSettingsSchema = z.object({
|
|
196
|
+
neon: NeonSettingsSchema.optional().describe(
|
|
197
|
+
"Neon database configuration. Requires Neon CLI installed and authenticated for database branching."
|
|
198
|
+
)
|
|
199
|
+
}).optional();
|
|
189
200
|
IloomSettingsSchema = z.object({
|
|
190
201
|
mainBranch: z.string().min(1, "Settings 'mainBranch' cannot be empty").optional().describe("Name of the main/primary branch for the repository"),
|
|
191
202
|
worktreePrefix: z.string().optional().refine(
|
|
@@ -211,8 +222,16 @@ var init_SettingsManager = __esm({
|
|
|
211
222
|
),
|
|
212
223
|
protectedBranches: z.array(z.string().min(1, "Protected branch name cannot be empty")).optional().describe('List of branches that cannot be deleted (defaults to [mainBranch, "main", "master", "develop"])'),
|
|
213
224
|
workflows: WorkflowsSettingsSchema.describe("Per-workflow-type permission configurations"),
|
|
214
|
-
agents: z.record(z.string(), AgentSettingsSchema).optional().nullable().describe(
|
|
215
|
-
|
|
225
|
+
agents: z.record(z.string(), AgentSettingsSchema).optional().nullable().describe(
|
|
226
|
+
"Per-agent configuration overrides. Available agents: iloom-issue-analyzer (analyzes issues), iloom-issue-planner (creates implementation plans), iloom-issue-analyze-and-plan (combined analysis and planning), iloom-issue-complexity-evaluator (evaluates complexity), iloom-issue-enhancer (enhances issue descriptions), iloom-issue-implementer (implements code changes), iloom-issue-reviewer (reviews code changes against requirements)"
|
|
227
|
+
),
|
|
228
|
+
capabilities: CapabilitiesSettingsSchema.describe("Project capability configurations"),
|
|
229
|
+
databaseProviders: DatabaseProvidersSettingsSchema.describe("Database provider configurations"),
|
|
230
|
+
issueManagement: z.object({
|
|
231
|
+
github: z.object({
|
|
232
|
+
remote: z.string().min(1, "Remote name cannot be empty").describe("Git remote name to use for GitHub operations")
|
|
233
|
+
}).optional()
|
|
234
|
+
}).optional().describe("Issue management configuration")
|
|
216
235
|
});
|
|
217
236
|
SettingsManager = class {
|
|
218
237
|
/**
|
|
@@ -1445,14 +1464,15 @@ var GitWorktreeManager = class {
|
|
|
1445
1464
|
}
|
|
1446
1465
|
/**
|
|
1447
1466
|
* Check if a worktree is the main repository worktree
|
|
1448
|
-
*
|
|
1449
|
-
*
|
|
1450
|
-
*
|
|
1467
|
+
* Uses findMainWorktreePathWithSettings to determine the main worktree based on settings.
|
|
1468
|
+
*
|
|
1469
|
+
* @param worktree - The worktree to check
|
|
1470
|
+
* @param settingsManager - SettingsManager instance for loading settings
|
|
1471
|
+
* @returns true if the worktree is the main worktree
|
|
1451
1472
|
*/
|
|
1452
|
-
async isMainWorktree(worktree) {
|
|
1453
|
-
const
|
|
1454
|
-
|
|
1455
|
-
return mainWorktree !== void 0 && mainWorktree.path === worktree.path;
|
|
1473
|
+
async isMainWorktree(worktree, settingsManager) {
|
|
1474
|
+
const mainWorktreePath = await findMainWorktreePathWithSettings(worktree.path, settingsManager);
|
|
1475
|
+
return worktree.path === mainWorktreePath;
|
|
1456
1476
|
}
|
|
1457
1477
|
/**
|
|
1458
1478
|
* Check if a worktree is a PR worktree based on naming patterns
|
|
@@ -1735,13 +1755,17 @@ var GitWorktreeManager = class {
|
|
|
1735
1755
|
* Remove multiple worktrees
|
|
1736
1756
|
* Returns a summary of successes and failures
|
|
1737
1757
|
* Automatically filters out the main worktree
|
|
1758
|
+
*
|
|
1759
|
+
* @param worktrees - Array of worktrees to remove
|
|
1760
|
+
* @param settingsManager - SettingsManager instance for determining main worktree
|
|
1761
|
+
* @param options - Cleanup options
|
|
1738
1762
|
*/
|
|
1739
|
-
async removeWorktrees(worktrees, options = {}) {
|
|
1763
|
+
async removeWorktrees(worktrees, settingsManager, options = {}) {
|
|
1740
1764
|
const successes = [];
|
|
1741
1765
|
const failures = [];
|
|
1742
1766
|
const skipped = [];
|
|
1743
1767
|
for (const worktree of worktrees) {
|
|
1744
|
-
if (await this.isMainWorktree(worktree)) {
|
|
1768
|
+
if (await this.isMainWorktree(worktree, settingsManager)) {
|
|
1745
1769
|
skipped.push({ worktree, reason: "Cannot remove main worktree" });
|
|
1746
1770
|
continue;
|
|
1747
1771
|
}
|
|
@@ -1802,12 +1826,39 @@ async function checkGhAuth() {
|
|
|
1802
1826
|
var _a, _b;
|
|
1803
1827
|
try {
|
|
1804
1828
|
const output = await executeGhCommand(["auth", "status"]);
|
|
1805
|
-
const
|
|
1806
|
-
|
|
1807
|
-
|
|
1829
|
+
const lines = output.split("\n");
|
|
1830
|
+
let username;
|
|
1831
|
+
let scopes = [];
|
|
1832
|
+
for (let i = 0; i < lines.length; i++) {
|
|
1833
|
+
const line = lines[i];
|
|
1834
|
+
const newFormatMatch = line == null ? void 0 : line.match(/Logged in to github\.com account ([^\s(]+)/);
|
|
1835
|
+
if (newFormatMatch) {
|
|
1836
|
+
const accountName = newFormatMatch[1];
|
|
1837
|
+
const nextFewLines = lines.slice(i + 1, i + 5).join("\n");
|
|
1838
|
+
const isActive = nextFewLines.includes("Active account: true");
|
|
1839
|
+
if (isActive || !username && !output.includes("Active account:")) {
|
|
1840
|
+
username = accountName;
|
|
1841
|
+
const scopeMatch = nextFewLines.match(/Token scopes: (.+)/);
|
|
1842
|
+
if (scopeMatch == null ? void 0 : scopeMatch[1]) {
|
|
1843
|
+
scopes = scopeMatch[1].split(", ").map((scope) => scope.replace(/^'|'$/g, ""));
|
|
1844
|
+
}
|
|
1845
|
+
if (isActive) break;
|
|
1846
|
+
}
|
|
1847
|
+
}
|
|
1848
|
+
if (!username) {
|
|
1849
|
+
const oldFormatMatch = line == null ? void 0 : line.match(/Logged in to github\.com as ([^\s]+)/);
|
|
1850
|
+
if (oldFormatMatch) {
|
|
1851
|
+
username = oldFormatMatch[1];
|
|
1852
|
+
}
|
|
1853
|
+
}
|
|
1854
|
+
}
|
|
1855
|
+
if (scopes.length === 0) {
|
|
1856
|
+
const scopeMatch = output.match(/Token scopes: (.+)/);
|
|
1857
|
+
scopes = ((_a = scopeMatch == null ? void 0 : scopeMatch[1]) == null ? void 0 : _a.split(", ").map((scope) => scope.replace(/^'|'$/g, ""))) ?? [];
|
|
1858
|
+
}
|
|
1808
1859
|
return {
|
|
1809
1860
|
hasAuth: true,
|
|
1810
|
-
scopes
|
|
1861
|
+
scopes,
|
|
1811
1862
|
...username && { username }
|
|
1812
1863
|
};
|
|
1813
1864
|
} catch (error) {
|
|
@@ -1835,15 +1886,19 @@ async function fetchGhIssue(issueNumber, repo) {
|
|
|
1835
1886
|
}
|
|
1836
1887
|
return executeGhCommand(args);
|
|
1837
1888
|
}
|
|
1838
|
-
async function fetchGhPR(prNumber) {
|
|
1839
|
-
logger.debug("Fetching GitHub PR", { prNumber });
|
|
1840
|
-
|
|
1889
|
+
async function fetchGhPR(prNumber, repo) {
|
|
1890
|
+
logger.debug("Fetching GitHub PR", { prNumber, repo });
|
|
1891
|
+
const args = [
|
|
1841
1892
|
"pr",
|
|
1842
1893
|
"view",
|
|
1843
1894
|
String(prNumber),
|
|
1844
1895
|
"--json",
|
|
1845
1896
|
"number,title,body,state,headRefName,baseRefName,url,isDraft,mergeable,createdAt,updatedAt"
|
|
1846
|
-
]
|
|
1897
|
+
];
|
|
1898
|
+
if (repo) {
|
|
1899
|
+
args.push("--repo", repo);
|
|
1900
|
+
}
|
|
1901
|
+
return executeGhCommand(args);
|
|
1847
1902
|
}
|
|
1848
1903
|
async function fetchProjectList(owner) {
|
|
1849
1904
|
const result = await executeGhCommand([
|
|
@@ -2005,29 +2060,29 @@ var GitHubService = class {
|
|
|
2005
2060
|
this.prompter = (options == null ? void 0 : options.prompter) ?? promptConfirmation;
|
|
2006
2061
|
}
|
|
2007
2062
|
// Input detection
|
|
2008
|
-
async detectInputType(input) {
|
|
2063
|
+
async detectInputType(input, repo) {
|
|
2009
2064
|
const numberMatch = input.match(/^#?(\d+)$/);
|
|
2010
2065
|
if (!(numberMatch == null ? void 0 : numberMatch[1])) {
|
|
2011
2066
|
return { type: "unknown", number: null, rawInput: input };
|
|
2012
2067
|
}
|
|
2013
2068
|
const number = parseInt(numberMatch[1], 10);
|
|
2014
2069
|
logger.debug("Checking if input is a PR", { number });
|
|
2015
|
-
const pr = await this.isValidPR(number);
|
|
2070
|
+
const pr = await this.isValidPR(number, repo);
|
|
2016
2071
|
if (pr) {
|
|
2017
2072
|
return { type: "pr", number, rawInput: input };
|
|
2018
2073
|
}
|
|
2019
2074
|
logger.debug("Checking if input is an issue", { number });
|
|
2020
|
-
const issue = await this.isValidIssue(number);
|
|
2075
|
+
const issue = await this.isValidIssue(number, repo);
|
|
2021
2076
|
if (issue) {
|
|
2022
2077
|
return { type: "issue", number, rawInput: input };
|
|
2023
2078
|
}
|
|
2024
2079
|
return { type: "unknown", number: null, rawInput: input };
|
|
2025
2080
|
}
|
|
2026
2081
|
// Issue fetching with validation
|
|
2027
|
-
async fetchIssue(issueNumber) {
|
|
2082
|
+
async fetchIssue(issueNumber, repo) {
|
|
2028
2083
|
var _a;
|
|
2029
2084
|
try {
|
|
2030
|
-
return await this.fetchIssueInternal(issueNumber);
|
|
2085
|
+
return await this.fetchIssueInternal(issueNumber, repo);
|
|
2031
2086
|
} catch (error) {
|
|
2032
2087
|
if (error instanceof Error && "stderr" in error && ((_a = error.stderr) == null ? void 0 : _a.includes("Could not resolve"))) {
|
|
2033
2088
|
throw new GitHubError(
|
|
@@ -2040,10 +2095,10 @@ var GitHubService = class {
|
|
|
2040
2095
|
}
|
|
2041
2096
|
}
|
|
2042
2097
|
// Silent issue validation (for detection phase)
|
|
2043
|
-
async isValidIssue(issueNumber) {
|
|
2098
|
+
async isValidIssue(issueNumber, repo) {
|
|
2044
2099
|
var _a;
|
|
2045
2100
|
try {
|
|
2046
|
-
return await this.fetchIssueInternal(issueNumber);
|
|
2101
|
+
return await this.fetchIssueInternal(issueNumber, repo);
|
|
2047
2102
|
} catch (error) {
|
|
2048
2103
|
if (error instanceof Error && "stderr" in error && ((_a = error.stderr) == null ? void 0 : _a.includes("Could not resolve"))) {
|
|
2049
2104
|
return false;
|
|
@@ -2052,8 +2107,8 @@ var GitHubService = class {
|
|
|
2052
2107
|
}
|
|
2053
2108
|
}
|
|
2054
2109
|
// Internal issue fetching logic (shared by fetchIssue and isValidIssue)
|
|
2055
|
-
async fetchIssueInternal(issueNumber) {
|
|
2056
|
-
const ghIssue = await fetchGhIssue(issueNumber);
|
|
2110
|
+
async fetchIssueInternal(issueNumber, repo) {
|
|
2111
|
+
const ghIssue = await fetchGhIssue(issueNumber, repo);
|
|
2057
2112
|
return this.mapGitHubIssueToIssue(ghIssue);
|
|
2058
2113
|
}
|
|
2059
2114
|
async validateIssueState(issue) {
|
|
@@ -2070,10 +2125,10 @@ var GitHubService = class {
|
|
|
2070
2125
|
}
|
|
2071
2126
|
}
|
|
2072
2127
|
// PR fetching with validation
|
|
2073
|
-
async fetchPR(prNumber) {
|
|
2128
|
+
async fetchPR(prNumber, repo) {
|
|
2074
2129
|
var _a;
|
|
2075
2130
|
try {
|
|
2076
|
-
return await this.fetchPRInternal(prNumber);
|
|
2131
|
+
return await this.fetchPRInternal(prNumber, repo);
|
|
2077
2132
|
} catch (error) {
|
|
2078
2133
|
if (error instanceof Error && "stderr" in error && ((_a = error.stderr) == null ? void 0 : _a.includes("Could not resolve"))) {
|
|
2079
2134
|
throw new GitHubError(
|
|
@@ -2086,10 +2141,10 @@ var GitHubService = class {
|
|
|
2086
2141
|
}
|
|
2087
2142
|
}
|
|
2088
2143
|
// Silent PR validation (for detection phase)
|
|
2089
|
-
async isValidPR(prNumber) {
|
|
2144
|
+
async isValidPR(prNumber, repo) {
|
|
2090
2145
|
var _a;
|
|
2091
2146
|
try {
|
|
2092
|
-
return await this.fetchPRInternal(prNumber);
|
|
2147
|
+
return await this.fetchPRInternal(prNumber, repo);
|
|
2093
2148
|
} catch (error) {
|
|
2094
2149
|
if (error instanceof Error && "stderr" in error && ((_a = error.stderr) == null ? void 0 : _a.includes("Could not resolve"))) {
|
|
2095
2150
|
return false;
|
|
@@ -2098,8 +2153,8 @@ var GitHubService = class {
|
|
|
2098
2153
|
}
|
|
2099
2154
|
}
|
|
2100
2155
|
// Internal PR fetching logic (shared by fetchPR and isValidPR)
|
|
2101
|
-
async fetchPRInternal(prNumber) {
|
|
2102
|
-
const ghPR = await fetchGhPR(prNumber);
|
|
2156
|
+
async fetchPRInternal(prNumber, repo) {
|
|
2157
|
+
const ghPR = await fetchGhPR(prNumber, repo);
|
|
2103
2158
|
return this.mapGitHubPRToPullRequest(ghPR);
|
|
2104
2159
|
}
|
|
2105
2160
|
async validatePRState(pr) {
|
|
@@ -2811,12 +2866,54 @@ var PromptTemplateManager = class {
|
|
|
2811
2866
|
if (variables.PORT !== void 0) {
|
|
2812
2867
|
result = result.replace(/PORT/g, String(variables.PORT));
|
|
2813
2868
|
}
|
|
2869
|
+
if (variables.SETTINGS_SCHEMA !== void 0) {
|
|
2870
|
+
result = result.replace(/SETTINGS_SCHEMA/g, variables.SETTINGS_SCHEMA);
|
|
2871
|
+
}
|
|
2872
|
+
if (variables.SETTINGS_JSON !== void 0) {
|
|
2873
|
+
result = result.replace(/SETTINGS_JSON/g, variables.SETTINGS_JSON);
|
|
2874
|
+
}
|
|
2875
|
+
if (variables.SETTINGS_LOCAL_JSON !== void 0) {
|
|
2876
|
+
result = result.replace(/SETTINGS_LOCAL_JSON/g, variables.SETTINGS_LOCAL_JSON);
|
|
2877
|
+
}
|
|
2878
|
+
if (variables.SHELL_TYPE !== void 0) {
|
|
2879
|
+
result = result.replace(/SHELL_TYPE/g, variables.SHELL_TYPE);
|
|
2880
|
+
}
|
|
2881
|
+
if (variables.SHELL_CONFIG_PATH !== void 0) {
|
|
2882
|
+
result = result.replace(/SHELL_CONFIG_PATH/g, variables.SHELL_CONFIG_PATH);
|
|
2883
|
+
}
|
|
2884
|
+
if (variables.SHELL_CONFIG_CONTENT !== void 0) {
|
|
2885
|
+
result = result.replace(/SHELL_CONFIG_CONTENT/g, variables.SHELL_CONFIG_CONTENT);
|
|
2886
|
+
}
|
|
2887
|
+
if (variables.REMOTES_INFO !== void 0) {
|
|
2888
|
+
result = result.replace(/REMOTES_INFO/g, variables.REMOTES_INFO);
|
|
2889
|
+
}
|
|
2890
|
+
if (variables.MULTIPLE_REMOTES !== void 0) {
|
|
2891
|
+
result = result.replace(/MULTIPLE_REMOTES/g, variables.MULTIPLE_REMOTES);
|
|
2892
|
+
}
|
|
2893
|
+
if (variables.SINGLE_REMOTE !== void 0) {
|
|
2894
|
+
result = result.replace(/SINGLE_REMOTE/g, variables.SINGLE_REMOTE);
|
|
2895
|
+
}
|
|
2896
|
+
if (variables.SINGLE_REMOTE_NAME !== void 0) {
|
|
2897
|
+
result = result.replace(/SINGLE_REMOTE_NAME/g, variables.SINGLE_REMOTE_NAME);
|
|
2898
|
+
}
|
|
2899
|
+
if (variables.SINGLE_REMOTE_URL !== void 0) {
|
|
2900
|
+
result = result.replace(/SINGLE_REMOTE_URL/g, variables.SINGLE_REMOTE_URL);
|
|
2901
|
+
}
|
|
2902
|
+
if (variables.NO_REMOTES !== void 0) {
|
|
2903
|
+
result = result.replace(/NO_REMOTES/g, variables.NO_REMOTES);
|
|
2904
|
+
}
|
|
2905
|
+
if (variables.README_CONTENT !== void 0) {
|
|
2906
|
+
result = result.replace(/README_CONTENT/g, variables.README_CONTENT);
|
|
2907
|
+
}
|
|
2908
|
+
if (variables.SETTINGS_SCHEMA_CONTENT !== void 0) {
|
|
2909
|
+
result = result.replace(/SETTINGS_SCHEMA_CONTENT/g, variables.SETTINGS_SCHEMA_CONTENT);
|
|
2910
|
+
}
|
|
2814
2911
|
return result;
|
|
2815
2912
|
}
|
|
2816
2913
|
/**
|
|
2817
2914
|
* Process conditional sections in template
|
|
2818
2915
|
* Format: {{#IF ONE_SHOT_MODE}}content{{/IF ONE_SHOT_MODE}}
|
|
2819
|
-
*
|
|
2916
|
+
*
|
|
2820
2917
|
* Note: /s flag allows . to match newlines
|
|
2821
2918
|
*/
|
|
2822
2919
|
processConditionalSections(template, variables) {
|
|
@@ -2827,6 +2924,42 @@ var PromptTemplateManager = class {
|
|
|
2827
2924
|
} else {
|
|
2828
2925
|
result = result.replace(oneShotRegex, "");
|
|
2829
2926
|
}
|
|
2927
|
+
const settingsJsonRegex = /\{\{#IF SETTINGS_JSON\}\}(.*?)\{\{\/IF SETTINGS_JSON\}\}/gs;
|
|
2928
|
+
if (variables.SETTINGS_JSON !== void 0 && variables.SETTINGS_JSON !== "") {
|
|
2929
|
+
result = result.replace(settingsJsonRegex, "$1");
|
|
2930
|
+
} else {
|
|
2931
|
+
result = result.replace(settingsJsonRegex, "");
|
|
2932
|
+
}
|
|
2933
|
+
const settingsLocalJsonRegex = /\{\{#IF SETTINGS_LOCAL_JSON\}\}(.*?)\{\{\/IF SETTINGS_LOCAL_JSON\}\}/gs;
|
|
2934
|
+
if (variables.SETTINGS_LOCAL_JSON !== void 0 && variables.SETTINGS_LOCAL_JSON !== "") {
|
|
2935
|
+
result = result.replace(settingsLocalJsonRegex, "$1");
|
|
2936
|
+
} else {
|
|
2937
|
+
result = result.replace(settingsLocalJsonRegex, "");
|
|
2938
|
+
}
|
|
2939
|
+
const multipleRemotesRegex = /\{\{#IF MULTIPLE_REMOTES\}\}(.*?)\{\{\/IF MULTIPLE_REMOTES\}\}/gs;
|
|
2940
|
+
if (variables.MULTIPLE_REMOTES !== void 0 && variables.MULTIPLE_REMOTES !== "") {
|
|
2941
|
+
result = result.replace(multipleRemotesRegex, "$1");
|
|
2942
|
+
} else {
|
|
2943
|
+
result = result.replace(multipleRemotesRegex, "");
|
|
2944
|
+
}
|
|
2945
|
+
const singleRemoteRegex = /\{\{#IF SINGLE_REMOTE\}\}(.*?)\{\{\/IF SINGLE_REMOTE\}\}/gs;
|
|
2946
|
+
if (variables.SINGLE_REMOTE !== void 0 && variables.SINGLE_REMOTE !== "") {
|
|
2947
|
+
result = result.replace(singleRemoteRegex, "$1");
|
|
2948
|
+
} else {
|
|
2949
|
+
result = result.replace(singleRemoteRegex, "");
|
|
2950
|
+
}
|
|
2951
|
+
const noRemotesRegex = /\{\{#IF NO_REMOTES\}\}(.*?)\{\{\/IF NO_REMOTES\}\}/gs;
|
|
2952
|
+
if (variables.NO_REMOTES !== void 0 && variables.NO_REMOTES !== "") {
|
|
2953
|
+
result = result.replace(noRemotesRegex, "$1");
|
|
2954
|
+
} else {
|
|
2955
|
+
result = result.replace(noRemotesRegex, "");
|
|
2956
|
+
}
|
|
2957
|
+
const firstTimeUserRegex = /\{\{#IF FIRST_TIME_USER\}\}(.*?)\{\{\/IF FIRST_TIME_USER\}\}/gs;
|
|
2958
|
+
if (variables.FIRST_TIME_USER === true) {
|
|
2959
|
+
result = result.replace(firstTimeUserRegex, "$1");
|
|
2960
|
+
} else {
|
|
2961
|
+
result = result.replace(firstTimeUserRegex, "");
|
|
2962
|
+
}
|
|
2830
2963
|
return result;
|
|
2831
2964
|
}
|
|
2832
2965
|
/**
|