@iloom/cli 0.5.4 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -4
- package/dist/{ClaudeContextManager-PQ46VILL.js → ClaudeContextManager-6J2EB4QU.js} +5 -5
- package/dist/{ClaudeService-6OMO552H.js → ClaudeService-O2PB22GX.js} +4 -4
- package/dist/{LoomLauncher-ZHDTPKED.js → LoomLauncher-5LFM4LXB.js} +5 -5
- package/dist/ProjectCapabilityDetector-S5FLNCFI.js +11 -0
- package/dist/{PromptTemplateManager-5GNF7FCP.js → PromptTemplateManager-C3DK6XZL.js} +2 -2
- package/dist/README.md +116 -4
- package/dist/{SettingsManager-CNYBGXDT.js → SettingsManager-35F5RUJH.js} +2 -2
- package/dist/agents/iloom-framework-detector.md +366 -0
- package/dist/agents/iloom-issue-analyze-and-plan.md +0 -10
- package/dist/agents/iloom-issue-implementer.md +1 -1
- package/dist/agents/iloom-issue-planner.md +0 -10
- package/dist/build-FJVYP7EV.js +27 -0
- package/dist/build-FJVYP7EV.js.map +1 -0
- package/dist/{chunk-SHVB3EFE.js → chunk-64O2UIWO.js} +44 -19
- package/dist/chunk-64O2UIWO.js.map +1 -0
- package/dist/{chunk-FXJKNVZW.js → chunk-6U6VI4SZ.js} +3 -3
- package/dist/{chunk-QPS6TZUW.js → chunk-7WANFUIK.js} +2 -2
- package/dist/{chunk-LVLRMP7V.js → chunk-AXX3QIKK.js} +58 -14
- package/dist/chunk-AXX3QIKK.js.map +1 -0
- package/dist/chunk-BXCPJJYM.js +133 -0
- package/dist/chunk-BXCPJJYM.js.map +1 -0
- package/dist/{chunk-ESP2FF52.js → chunk-EK3XCAAS.js} +2 -2
- package/dist/{chunk-IDUICCZY.js → chunk-F6WVM437.js} +3 -1
- package/dist/chunk-F6WVM437.js.map +1 -0
- package/dist/{chunk-TKL7RBEF.js → chunk-GEXP5IOF.js} +3 -3
- package/dist/{chunk-J7GHNTYK.js → chunk-K7SEEHKO.js} +3 -3
- package/dist/{chunk-NRDY6XO3.js → chunk-PMVWQBWS.js} +73 -17
- package/dist/chunk-PMVWQBWS.js.map +1 -0
- package/dist/{chunk-NKRQNER7.js → chunk-Q7POFB5Q.js} +1 -55
- package/dist/chunk-Q7POFB5Q.js.map +1 -0
- package/dist/{chunk-N4ZJVATC.js → chunk-SN3Z6EZO.js} +11 -7
- package/dist/chunk-SN3Z6EZO.js.map +1 -0
- package/dist/chunk-TRQ76ISK.js +159 -0
- package/dist/chunk-TRQ76ISK.js.map +1 -0
- package/dist/{chunk-ZXWTOJXA.js → chunk-UB4TFAXJ.js} +38 -9
- package/dist/chunk-UB4TFAXJ.js.map +1 -0
- package/dist/{chunk-YPOG7WY4.js → chunk-UQIXZ3BA.js} +2 -2
- package/dist/{chunk-K5G5SFWY.js → chunk-W6WVRHJ6.js} +13 -1
- package/dist/chunk-W6WVRHJ6.js.map +1 -0
- package/dist/{chunk-E4F7KASE.js → chunk-WIJWIKAN.js} +3 -3
- package/dist/{chunk-EBISESAP.js → chunk-ZPSTA5PR.js} +16 -6
- package/dist/chunk-ZPSTA5PR.js.map +1 -0
- package/dist/{cleanup-H5QUWBWE.js → cleanup-OU2HFOOG.js} +11 -11
- package/dist/cli.js +107 -69
- package/dist/cli.js.map +1 -1
- package/dist/compile-ULNO5F7Q.js +57 -0
- package/dist/compile-ULNO5F7Q.js.map +1 -0
- package/dist/{contribute-VP73TPAL.js → contribute-T7ENST5N.js} +3 -3
- package/dist/{dev-server-H5FFXIVX.js → dev-server-4RCDJ5MU.js} +9 -9
- package/dist/{feedback-567ZH2O7.js → feedback-O4Q55SVS.js} +8 -8
- package/dist/{git-UHUNQZBA.js → git-FVMGBHC2.js} +3 -3
- package/dist/{ignite-VPP4PMF4.js → ignite-VHV65WEZ.js} +12 -8
- package/dist/ignite-VHV65WEZ.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/{init-4ZR2XXZA.js → init-HB34Q5FH.js} +8 -7
- package/dist/lint-5JMCWE4Y.js +27 -0
- package/dist/lint-5JMCWE4Y.js.map +1 -0
- package/dist/{open-6HBQHPUL.js → open-WHVUYGPY.js} +9 -9
- package/dist/prompts/init-prompt.txt +108 -0
- package/dist/prompts/issue-prompt.txt +12 -12
- package/dist/{rebase-SRBOVC4M.js → rebase-5EY3Q6XP.js} +5 -5
- package/dist/{recap-X7FTTKPP.js → recap-VOOUXOGP.js} +5 -5
- package/dist/{run-5FU76FFE.js → run-NCRK5NPR.js} +9 -9
- package/dist/schema/settings.schema.json +8 -0
- package/dist/{shell-UQJDI36V.js → shell-SBLXVOVJ.js} +5 -5
- package/dist/{summary-MOKN7RM2.js → summary-CVFAMDOJ.js} +6 -6
- package/dist/test-3KIVXI6J.js +27 -0
- package/dist/test-3KIVXI6J.js.map +1 -0
- package/dist/{test-git-GB3B6QNT.js → test-git-ZB6AGGRW.js} +3 -3
- package/dist/{test-prefix-YQNNTCY3.js → test-prefix-FBGXKMPA.js} +3 -3
- package/package.json +2 -1
- package/dist/ProjectCapabilityDetector-34LU7JJ4.js +0 -9
- package/dist/chunk-2ZPFJQ3B.js +0 -63
- package/dist/chunk-2ZPFJQ3B.js.map +0 -1
- package/dist/chunk-EBISESAP.js.map +0 -1
- package/dist/chunk-IDUICCZY.js.map +0 -1
- package/dist/chunk-K5G5SFWY.js.map +0 -1
- package/dist/chunk-LVLRMP7V.js.map +0 -1
- package/dist/chunk-N4ZJVATC.js.map +0 -1
- package/dist/chunk-NKRQNER7.js.map +0 -1
- package/dist/chunk-NRDY6XO3.js.map +0 -1
- package/dist/chunk-SHVB3EFE.js.map +0 -1
- package/dist/chunk-ZXWTOJXA.js.map +0 -1
- package/dist/ignite-VPP4PMF4.js.map +0 -1
- /package/dist/{ClaudeContextManager-PQ46VILL.js.map → ClaudeContextManager-6J2EB4QU.js.map} +0 -0
- /package/dist/{ClaudeService-6OMO552H.js.map → ClaudeService-O2PB22GX.js.map} +0 -0
- /package/dist/{LoomLauncher-ZHDTPKED.js.map → LoomLauncher-5LFM4LXB.js.map} +0 -0
- /package/dist/{ProjectCapabilityDetector-34LU7JJ4.js.map → ProjectCapabilityDetector-S5FLNCFI.js.map} +0 -0
- /package/dist/{PromptTemplateManager-5GNF7FCP.js.map → PromptTemplateManager-C3DK6XZL.js.map} +0 -0
- /package/dist/{SettingsManager-CNYBGXDT.js.map → SettingsManager-35F5RUJH.js.map} +0 -0
- /package/dist/{chunk-FXJKNVZW.js.map → chunk-6U6VI4SZ.js.map} +0 -0
- /package/dist/{chunk-QPS6TZUW.js.map → chunk-7WANFUIK.js.map} +0 -0
- /package/dist/{chunk-ESP2FF52.js.map → chunk-EK3XCAAS.js.map} +0 -0
- /package/dist/{chunk-TKL7RBEF.js.map → chunk-GEXP5IOF.js.map} +0 -0
- /package/dist/{chunk-J7GHNTYK.js.map → chunk-K7SEEHKO.js.map} +0 -0
- /package/dist/{chunk-YPOG7WY4.js.map → chunk-UQIXZ3BA.js.map} +0 -0
- /package/dist/{chunk-E4F7KASE.js.map → chunk-WIJWIKAN.js.map} +0 -0
- /package/dist/{cleanup-H5QUWBWE.js.map → cleanup-OU2HFOOG.js.map} +0 -0
- /package/dist/{contribute-VP73TPAL.js.map → contribute-T7ENST5N.js.map} +0 -0
- /package/dist/{dev-server-H5FFXIVX.js.map → dev-server-4RCDJ5MU.js.map} +0 -0
- /package/dist/{feedback-567ZH2O7.js.map → feedback-O4Q55SVS.js.map} +0 -0
- /package/dist/{git-UHUNQZBA.js.map → git-FVMGBHC2.js.map} +0 -0
- /package/dist/{init-4ZR2XXZA.js.map → init-HB34Q5FH.js.map} +0 -0
- /package/dist/{open-6HBQHPUL.js.map → open-WHVUYGPY.js.map} +0 -0
- /package/dist/{rebase-SRBOVC4M.js.map → rebase-5EY3Q6XP.js.map} +0 -0
- /package/dist/{recap-X7FTTKPP.js.map → recap-VOOUXOGP.js.map} +0 -0
- /package/dist/{run-5FU76FFE.js.map → run-NCRK5NPR.js.map} +0 -0
- /package/dist/{shell-UQJDI36V.js.map → shell-SBLXVOVJ.js.map} +0 -0
- /package/dist/{summary-MOKN7RM2.js.map → summary-CVFAMDOJ.js.map} +0 -0
- /package/dist/{test-git-GB3B6QNT.js.map → test-git-ZB6AGGRW.js.map} +0 -0
- /package/dist/{test-prefix-YQNNTCY3.js.map → test-prefix-FBGXKMPA.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/PromptTemplateManager.ts"],"sourcesContent":["import { readFile } from 'fs/promises'\nimport { accessSync } from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nimport { logger } from '../utils/logger.js'\n\nexport interface TemplateVariables {\n\tISSUE_NUMBER?: string | number\n\tPR_NUMBER?: number\n\tISSUE_TITLE?: string\n\tPR_TITLE?: string\n\tWORKSPACE_PATH?: string\n\tPORT?: number\n\tONE_SHOT_MODE?: boolean\n\tINTERACTIVE_MODE?: boolean\n\tSETTINGS_SCHEMA?: string\n\tSETTINGS_GLOBAL_JSON?: string\n\tSETTINGS_JSON?: string\n\tSETTINGS_LOCAL_JSON?: string\n\tSHELL_TYPE?: string\n\tSHELL_CONFIG_PATH?: string\n\tSHELL_CONFIG_CONTENT?: string\n\tREMOTES_INFO?: string\n\tMULTIPLE_REMOTES?: string\n\tSINGLE_REMOTE?: string\n\tSINGLE_REMOTE_NAME?: string\n\tSINGLE_REMOTE_URL?: string\n\tNO_REMOTES?: string\n\tREADME_CONTENT?: string\n\tSETTINGS_SCHEMA_CONTENT?: string\n\tFIRST_TIME_USER?: boolean\n\tVSCODE_SETTINGS_GITIGNORED?: string\n\t// Session summary template variables\n\tSESSION_CONTEXT?: string // Session ID for Claude to reference its conversation\n\tBRANCH_NAME?: string // Branch being finished\n\tLOOM_TYPE?: string // 'issue' or 'pr'\n\tCOMPACT_SUMMARIES?: string // Extracted compact summaries from session transcript\n\tRECAP_DATA?: string // Formatted recap data (goal, complexity, entries, artifacts)\n\t// Draft PR mode variables - mutually exclusive with standard issue mode\n\tDRAFT_PR_NUMBER?: number // PR number for draft PR workflow\n\tDRAFT_PR_MODE?: boolean // True when using github-draft-pr merge mode\n\tSTANDARD_ISSUE_MODE?: boolean // True when using standard issue commenting (not draft PR)\n\t// Multi-language support variables - mutually exclusive\n\tHAS_PACKAGE_JSON?: boolean // True when project has package.json\n\tNO_PACKAGE_JSON?: boolean // True when project does not have package.json (non-Node.js projects)\n}\n\nexport class PromptTemplateManager {\n\tprivate templateDir: string\n\n\tconstructor(templateDir?: string) {\n\t\tif (templateDir) {\n\t\t\tthis.templateDir = templateDir\n\t\t} else {\n\t\t\t// Find templates relative to the package installation\n\t\t\t// When running from dist/, templates are copied to dist/prompts/\n\t\t\tconst currentFileUrl = import.meta.url\n\t\t\tconst currentFilePath = fileURLToPath(currentFileUrl)\n\t\t\tconst distDir = path.dirname(currentFilePath) // dist directory (may be chunked file location)\n\n\t\t\t// Walk up to find the dist directory (in case of chunked files)\n\t\t\tlet templateDir = path.join(distDir, 'prompts')\n\t\t\tlet currentDir = distDir\n\n\t\t\t// Try to find the prompts directory by walking up\n\t\t\twhile (currentDir !== path.dirname(currentDir)) {\n\t\t\t\tconst candidatePath = path.join(currentDir, 'prompts')\n\t\t\t\ttry {\n\t\t\t\t\t// Check if this directory exists (sync check for constructor)\n\t\t\t\t\taccessSync(candidatePath)\n\t\t\t\t\ttemplateDir = candidatePath\n\t\t\t\t\tbreak\n\t\t\t\t} catch {\n\t\t\t\t\tcurrentDir = path.dirname(currentDir)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.templateDir = templateDir\n\t\t\tlogger.debug('PromptTemplateManager initialized', {\n\t\t\t\tcurrentFilePath,\n\t\t\t\tdistDir,\n\t\t\t\ttemplateDir: this.templateDir\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Load a template file by name\n\t */\n\tasync loadTemplate(templateName: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary'): Promise<string> {\n\t\tconst templatePath = path.join(this.templateDir, `${templateName}-prompt.txt`)\n\n\t\tlogger.debug('Loading template', {\n\t\t\ttemplateName,\n\t\t\ttemplateDir: this.templateDir,\n\t\t\ttemplatePath\n\t\t})\n\n\t\ttry {\n\t\t\treturn await readFile(templatePath, 'utf-8')\n\t\t} catch (error) {\n\t\t\tlogger.error('Failed to load template', { templateName, templatePath, error })\n\t\t\tthrow new Error(`Template not found: ${templatePath}`)\n\t\t}\n\t}\n\n\t/**\n\t * Substitute variables in a template string\n\t */\n\tsubstituteVariables(template: string, variables: TemplateVariables): string {\n\t\tlet result = template\n\n\t\t// Process conditional sections first\n\t\tresult = this.processConditionalSections(result, variables)\n\n\t\t// Replace each variable if it exists\n\t\tif (variables.ISSUE_NUMBER !== undefined) {\n\t\t\tresult = result.replace(/ISSUE_NUMBER/g, String(variables.ISSUE_NUMBER))\n\t\t}\n\n\t\tif (variables.PR_NUMBER !== undefined) {\n\t\t\tresult = result.replace(/PR_NUMBER/g, String(variables.PR_NUMBER))\n\t\t}\n\n\t\tif (variables.ISSUE_TITLE !== undefined) {\n\t\t\tresult = result.replace(/ISSUE_TITLE/g, variables.ISSUE_TITLE)\n\t\t}\n\n\t\tif (variables.PR_TITLE !== undefined) {\n\t\t\tresult = result.replace(/PR_TITLE/g, variables.PR_TITLE)\n\t\t}\n\n\t\tif (variables.WORKSPACE_PATH !== undefined) {\n\t\t\tresult = result.replace(/WORKSPACE_PATH/g, variables.WORKSPACE_PATH)\n\t\t}\n\n\t\tif (variables.PORT !== undefined) {\n\t\t\tresult = result.replace(/PORT/g, String(variables.PORT))\n\t\t}\n\n\t\tif (variables.SETTINGS_SCHEMA !== undefined) {\n\t\t\tresult = result.replace(/SETTINGS_SCHEMA/g, variables.SETTINGS_SCHEMA)\n\t\t}\n\n\t\tif (variables.SETTINGS_GLOBAL_JSON !== undefined) {\n\t\t\tresult = result.replace(/SETTINGS_GLOBAL_JSON/g, variables.SETTINGS_GLOBAL_JSON)\n\t\t}\n\n\t\tif (variables.SETTINGS_JSON !== undefined) {\n\t\t\tresult = result.replace(/SETTINGS_JSON/g, variables.SETTINGS_JSON)\n\t\t}\n\n\t\tif (variables.SETTINGS_LOCAL_JSON !== undefined) {\n\t\t\tresult = result.replace(/SETTINGS_LOCAL_JSON/g, variables.SETTINGS_LOCAL_JSON)\n\t\t}\n\n\t\tif (variables.SHELL_TYPE !== undefined) {\n\t\t\tresult = result.replace(/SHELL_TYPE/g, variables.SHELL_TYPE)\n\t\t}\n\n\t\tif (variables.SHELL_CONFIG_PATH !== undefined) {\n\t\t\tresult = result.replace(/SHELL_CONFIG_PATH/g, variables.SHELL_CONFIG_PATH)\n\t\t}\n\n\t\tif (variables.SHELL_CONFIG_CONTENT !== undefined) {\n\t\t\tresult = result.replace(/SHELL_CONFIG_CONTENT/g, variables.SHELL_CONFIG_CONTENT)\n\t\t}\n\n\t\tif (variables.REMOTES_INFO !== undefined) {\n\t\t\tresult = result.replace(/REMOTES_INFO/g, variables.REMOTES_INFO)\n\t\t}\n\n\t\tif (variables.MULTIPLE_REMOTES !== undefined) {\n\t\t\tresult = result.replace(/MULTIPLE_REMOTES/g, variables.MULTIPLE_REMOTES)\n\t\t}\n\n\t\tif (variables.SINGLE_REMOTE !== undefined) {\n\t\t\tresult = result.replace(/SINGLE_REMOTE/g, variables.SINGLE_REMOTE)\n\t\t}\n\n\t\tif (variables.SINGLE_REMOTE_NAME !== undefined) {\n\t\t\tresult = result.replace(/SINGLE_REMOTE_NAME/g, variables.SINGLE_REMOTE_NAME)\n\t\t}\n\n\t\tif (variables.SINGLE_REMOTE_URL !== undefined) {\n\t\t\tresult = result.replace(/SINGLE_REMOTE_URL/g, variables.SINGLE_REMOTE_URL)\n\t\t}\n\n\t\tif (variables.NO_REMOTES !== undefined) {\n\t\t\tresult = result.replace(/NO_REMOTES/g, variables.NO_REMOTES)\n\t\t}\n\n\t\tif (variables.README_CONTENT !== undefined) {\n\t\t\tresult = result.replace(/README_CONTENT/g, variables.README_CONTENT)\n\t\t}\n\n\t\tif (variables.SETTINGS_SCHEMA_CONTENT !== undefined) {\n\t\t\tresult = result.replace(/SETTINGS_SCHEMA_CONTENT/g, variables.SETTINGS_SCHEMA_CONTENT)\n\t\t}\n\n\t\tif (variables.VSCODE_SETTINGS_GITIGNORED !== undefined) {\n\t\t\tresult = result.replace(/VSCODE_SETTINGS_GITIGNORED/g, variables.VSCODE_SETTINGS_GITIGNORED)\n\t\t}\n\n\t\t// Session summary template variables\n\t\tif (variables.SESSION_CONTEXT !== undefined) {\n\t\t\tresult = result.replace(/SESSION_CONTEXT/g, variables.SESSION_CONTEXT)\n\t\t}\n\n\t\tif (variables.BRANCH_NAME !== undefined) {\n\t\t\tresult = result.replace(/BRANCH_NAME/g, variables.BRANCH_NAME)\n\t\t}\n\n\t\tif (variables.LOOM_TYPE !== undefined) {\n\t\t\tresult = result.replace(/LOOM_TYPE/g, variables.LOOM_TYPE)\n\t\t}\n\n\t\tif (variables.COMPACT_SUMMARIES !== undefined) {\n\t\t\tresult = result.replace(/COMPACT_SUMMARIES/g, variables.COMPACT_SUMMARIES)\n\t\t}\n\n\t\t// Draft PR mode variable substitution\n\t\tif (variables.DRAFT_PR_NUMBER !== undefined) {\n\t\t\tresult = result.replace(/DRAFT_PR_NUMBER/g, String(variables.DRAFT_PR_NUMBER))\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Process conditional sections in template\n\t * Format: {{#IF ONE_SHOT_MODE}}content{{/IF ONE_SHOT_MODE}}\n\t *\n\t * Note: /s flag allows . to match newlines\n\t */\n\tprivate processConditionalSections(template: string, variables: TemplateVariables): string {\n\t\tlet result = template\n\n\t\t// Process ONE_SHOT_MODE conditionals\n\t\tconst oneShotRegex = /\\{\\{#IF ONE_SHOT_MODE\\}\\}(.*?)\\{\\{\\/IF ONE_SHOT_MODE\\}\\}/gs\n\n\t\tif (variables.ONE_SHOT_MODE === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(oneShotRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(oneShotRegex, '')\n\t\t}\n\n\t\t// Process SETTINGS_JSON conditionals\n\t\tconst settingsJsonRegex = /\\{\\{#IF SETTINGS_JSON\\}\\}(.*?)\\{\\{\\/IF SETTINGS_JSON\\}\\}/gs\n\n\t\tif (variables.SETTINGS_JSON !== undefined && variables.SETTINGS_JSON !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(settingsJsonRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(settingsJsonRegex, '')\n\t\t}\n\n\t\t// Process SETTINGS_GLOBAL_JSON conditionals\n\t\tconst settingsGlobalJsonRegex = /\\{\\{#IF SETTINGS_GLOBAL_JSON\\}\\}(.*?)\\{\\{\\/IF SETTINGS_GLOBAL_JSON\\}\\}/gs\n\n\t\tif (variables.SETTINGS_GLOBAL_JSON !== undefined && variables.SETTINGS_GLOBAL_JSON !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(settingsGlobalJsonRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(settingsGlobalJsonRegex, '')\n\t\t}\n\n\t\t// Process SETTINGS_LOCAL_JSON conditionals\n\t\tconst settingsLocalJsonRegex = /\\{\\{#IF SETTINGS_LOCAL_JSON\\}\\}(.*?)\\{\\{\\/IF SETTINGS_LOCAL_JSON\\}\\}/gs\n\n\t\tif (variables.SETTINGS_LOCAL_JSON !== undefined && variables.SETTINGS_LOCAL_JSON !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(settingsLocalJsonRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(settingsLocalJsonRegex, '')\n\t\t}\n\n\t\t// Process MULTIPLE_REMOTES conditionals\n\t\tconst multipleRemotesRegex = /\\{\\{#IF MULTIPLE_REMOTES\\}\\}(.*?)\\{\\{\\/IF MULTIPLE_REMOTES\\}\\}/gs\n\n\t\tif (variables.MULTIPLE_REMOTES !== undefined && variables.MULTIPLE_REMOTES !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(multipleRemotesRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(multipleRemotesRegex, '')\n\t\t}\n\n\t\t// Process SINGLE_REMOTE conditionals\n\t\tconst singleRemoteRegex = /\\{\\{#IF SINGLE_REMOTE\\}\\}(.*?)\\{\\{\\/IF SINGLE_REMOTE\\}\\}/gs\n\n\t\tif (variables.SINGLE_REMOTE !== undefined && variables.SINGLE_REMOTE !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(singleRemoteRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(singleRemoteRegex, '')\n\t\t}\n\n\t\t// Process NO_REMOTES conditionals\n\t\tconst noRemotesRegex = /\\{\\{#IF NO_REMOTES\\}\\}(.*?)\\{\\{\\/IF NO_REMOTES\\}\\}/gs\n\n\t\tif (variables.NO_REMOTES !== undefined && variables.NO_REMOTES !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(noRemotesRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(noRemotesRegex, '')\n\t\t}\n\n\t\t// Process FIRST_TIME_USER conditionals\n\t\tconst firstTimeUserRegex = /\\{\\{#IF FIRST_TIME_USER\\}\\}(.*?)\\{\\{\\/IF FIRST_TIME_USER\\}\\}/gs\n\n\t\tif (variables.FIRST_TIME_USER === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(firstTimeUserRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(firstTimeUserRegex, '')\n\t\t}\n\n\t\t// Process INTERACTIVE_MODE conditionals\n\t\tconst interactiveModeRegex = /\\{\\{#IF INTERACTIVE_MODE\\}\\}(.*?)\\{\\{\\/IF INTERACTIVE_MODE\\}\\}/gs\n\n\t\tif (variables.INTERACTIVE_MODE === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(interactiveModeRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(interactiveModeRegex, '')\n\t\t}\n\n\t\t// Process COMPACT_SUMMARIES conditionals\n\t\tconst compactSummariesRegex = /\\{\\{#IF COMPACT_SUMMARIES\\}\\}(.*?)\\{\\{\\/IF COMPACT_SUMMARIES\\}\\}/gs\n\n\t\tif (variables.COMPACT_SUMMARIES !== undefined && variables.COMPACT_SUMMARIES !== '') {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(compactSummariesRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(compactSummariesRegex, '')\n\t\t}\n\n\t\t// Process DRAFT_PR_MODE conditionals\n\t\tconst draftPrModeRegex = /\\{\\{#IF DRAFT_PR_MODE\\}\\}(.*?)\\{\\{\\/IF DRAFT_PR_MODE\\}\\}/gs\n\n\t\tif (variables.DRAFT_PR_MODE === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(draftPrModeRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(draftPrModeRegex, '')\n\t\t}\n\n\t\t// Process STANDARD_ISSUE_MODE conditionals\n\t\tconst standardIssueModeRegex = /\\{\\{#IF STANDARD_ISSUE_MODE\\}\\}(.*?)\\{\\{\\/IF STANDARD_ISSUE_MODE\\}\\}/gs\n\n\t\tif (variables.STANDARD_ISSUE_MODE === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(standardIssueModeRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(standardIssueModeRegex, '')\n\t\t}\n\n\t\t// Process HAS_PACKAGE_JSON conditionals\n\t\tconst hasPackageJsonRegex = /\\{\\{#IF HAS_PACKAGE_JSON\\}\\}(.*?)\\{\\{\\/IF HAS_PACKAGE_JSON\\}\\}/gs\n\n\t\tif (variables.HAS_PACKAGE_JSON === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(hasPackageJsonRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(hasPackageJsonRegex, '')\n\t\t}\n\n\t\t// Process NO_PACKAGE_JSON conditionals\n\t\tconst noPackageJsonRegex = /\\{\\{#IF NO_PACKAGE_JSON\\}\\}(.*?)\\{\\{\\/IF NO_PACKAGE_JSON\\}\\}/gs\n\n\t\tif (variables.NO_PACKAGE_JSON === true) {\n\t\t\t// Include the content, remove the conditional markers\n\t\t\tresult = result.replace(noPackageJsonRegex, '$1')\n\t\t} else {\n\t\t\t// Remove the entire conditional block\n\t\t\tresult = result.replace(noPackageJsonRegex, '')\n\t\t}\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Get a fully processed prompt for a workflow type\n\t */\n\tasync getPrompt(\n\t\ttype: 'issue' | 'pr' | 'regular' | 'init' | 'session-summary',\n\t\tvariables: TemplateVariables\n\t): Promise<string> {\n\t\tconst template = await this.loadTemplate(type)\n\t\treturn this.substituteVariables(template, variables)\n\t}\n}\n"],"mappings":"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","names":["templateDir"]}
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
findMainWorktreePathWithSettings,
|
|
5
5
|
findWorktreeForBranch,
|
|
6
6
|
getMergeTargetBranch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GEXP5IOF.js";
|
|
8
8
|
import {
|
|
9
9
|
SettingsManager
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-F6WVM437.js";
|
|
11
11
|
import {
|
|
12
12
|
MetadataManager
|
|
13
13
|
} from "./chunk-CFUWQHCJ.js";
|
|
@@ -369,4 +369,4 @@ To recover:
|
|
|
369
369
|
export {
|
|
370
370
|
MergeManager
|
|
371
371
|
};
|
|
372
|
-
//# sourceMappingURL=chunk-
|
|
372
|
+
//# sourceMappingURL=chunk-WIJWIKAN.js.map
|
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
+
getExplicitCapabilities,
|
|
4
|
+
getPackageConfig,
|
|
3
5
|
hasWebDependencies,
|
|
4
|
-
parseBinField
|
|
5
|
-
|
|
6
|
-
} from "./chunk-2ZPFJQ3B.js";
|
|
6
|
+
parseBinField
|
|
7
|
+
} from "./chunk-BXCPJJYM.js";
|
|
7
8
|
|
|
8
9
|
// src/lib/ProjectCapabilityDetector.ts
|
|
9
10
|
var ProjectCapabilityDetector = class {
|
|
10
11
|
/**
|
|
11
|
-
* Detect project capabilities by analyzing package
|
|
12
|
+
* Detect project capabilities by analyzing package configuration
|
|
13
|
+
*
|
|
14
|
+
* Detection priority:
|
|
15
|
+
* 1. Explicit capabilities from package.iloom.json (for non-Node.js projects)
|
|
16
|
+
* 2. Inferred capabilities from package.json (bin field, web dependencies)
|
|
17
|
+
*
|
|
12
18
|
* @param worktreePath Path to the worktree directory
|
|
13
19
|
* @returns Project capabilities and bin entries
|
|
14
20
|
*/
|
|
15
21
|
async detectCapabilities(worktreePath) {
|
|
16
22
|
try {
|
|
17
|
-
const pkgJson = await
|
|
23
|
+
const pkgJson = await getPackageConfig(worktreePath);
|
|
24
|
+
const explicitCapabilities = getExplicitCapabilities(pkgJson);
|
|
25
|
+
if (explicitCapabilities.length > 0) {
|
|
26
|
+
return { capabilities: explicitCapabilities, binEntries: {} };
|
|
27
|
+
}
|
|
18
28
|
const capabilities = [];
|
|
19
29
|
if (pkgJson.bin) {
|
|
20
30
|
capabilities.push("cli");
|
|
@@ -36,4 +46,4 @@ var ProjectCapabilityDetector = class {
|
|
|
36
46
|
export {
|
|
37
47
|
ProjectCapabilityDetector
|
|
38
48
|
};
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-ZPSTA5PR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/ProjectCapabilityDetector.ts"],"sourcesContent":["import { getPackageConfig, parseBinField, hasWebDependencies, getExplicitCapabilities } from '../utils/package-json.js'\nimport type { ProjectCapability } from '../types/loom.js'\n\nexport interface ProjectCapabilities {\n capabilities: ProjectCapability[]\n binEntries: Record<string, string>\n}\n\nexport class ProjectCapabilityDetector {\n /**\n * Detect project capabilities by analyzing package configuration\n *\n * Detection priority:\n * 1. Explicit capabilities from package.iloom.json (for non-Node.js projects)\n * 2. Inferred capabilities from package.json (bin field, web dependencies)\n *\n * @param worktreePath Path to the worktree directory\n * @returns Project capabilities and bin entries\n */\n async detectCapabilities(worktreePath: string): Promise<ProjectCapabilities> {\n try {\n const pkgJson = await getPackageConfig(worktreePath)\n\n // Check for explicit capabilities first (from package.iloom.json)\n const explicitCapabilities = getExplicitCapabilities(pkgJson)\n if (explicitCapabilities.length > 0) {\n // For non-Node.js projects with explicit capabilities,\n // binEntries is empty (no bin field parsing needed)\n return { capabilities: explicitCapabilities, binEntries: {} }\n }\n\n // Fall back to inferring capabilities from package.json\n const capabilities: ProjectCapability[] = []\n\n // CLI detection: has bin field\n if (pkgJson.bin) {\n capabilities.push('cli')\n }\n\n // Web detection: has web framework dependencies\n if (hasWebDependencies(pkgJson)) {\n capabilities.push('web')\n }\n\n // Parse bin entries for CLI projects\n const binEntries = pkgJson.bin ? parseBinField(pkgJson.bin, pkgJson.name) : {}\n\n return { capabilities, binEntries }\n } catch (error) {\n // Handle missing package.json - return empty capabilities for non-Node.js projects\n if (error instanceof Error && error.message.includes('package.json not found')) {\n return { capabilities: [], binEntries: {} }\n }\n // Re-throw other errors (invalid JSON, etc.)\n throw error\n }\n }\n}\n"],"mappings":";;;;;;;;;AAQO,IAAM,4BAAN,MAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWrC,MAAM,mBAAmB,cAAoD;AAC3E,QAAI;AACF,YAAM,UAAU,MAAM,iBAAiB,YAAY;AAGnD,YAAM,uBAAuB,wBAAwB,OAAO;AAC5D,UAAI,qBAAqB,SAAS,GAAG;AAGnC,eAAO,EAAE,cAAc,sBAAsB,YAAY,CAAC,EAAE;AAAA,MAC9D;AAGA,YAAM,eAAoC,CAAC;AAG3C,UAAI,QAAQ,KAAK;AACf,qBAAa,KAAK,KAAK;AAAA,MACzB;AAGA,UAAI,mBAAmB,OAAO,GAAG;AAC/B,qBAAa,KAAK,KAAK;AAAA,MACzB;AAGA,YAAM,aAAa,QAAQ,MAAM,cAAc,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC;AAE7E,aAAO,EAAE,cAAc,WAAW;AAAA,IACpC,SAAS,OAAO;AAEd,UAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,wBAAwB,GAAG;AAC9E,eAAO,EAAE,cAAc,CAAC,GAAG,YAAY,CAAC,EAAE;AAAA,MAC5C;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
|
@@ -5,25 +5,25 @@ import {
|
|
|
5
5
|
EnvironmentManager,
|
|
6
6
|
LoomManager,
|
|
7
7
|
ResourceCleanup
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-LVLRMP7V.js";
|
|
8
|
+
} from "./chunk-PMVWQBWS.js";
|
|
10
9
|
import {
|
|
11
10
|
ProcessManager
|
|
12
11
|
} from "./chunk-VU3QMIP2.js";
|
|
12
|
+
import "./chunk-AXX3QIKK.js";
|
|
13
13
|
import {
|
|
14
14
|
IdentifierParser
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-UQIXZ3BA.js";
|
|
16
16
|
import {
|
|
17
17
|
createNeonProviderFromSettings
|
|
18
18
|
} from "./chunk-7LSSNB7Y.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-BXCPJJYM.js";
|
|
20
20
|
import {
|
|
21
21
|
GitWorktreeManager
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-EK3XCAAS.js";
|
|
23
|
+
import "./chunk-GEXP5IOF.js";
|
|
24
24
|
import {
|
|
25
25
|
SettingsManager
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-F6WVM437.js";
|
|
27
27
|
import "./chunk-CFUWQHCJ.js";
|
|
28
28
|
import {
|
|
29
29
|
promptConfirmation
|
|
@@ -76,8 +76,8 @@ var CleanupCommand = class {
|
|
|
76
76
|
);
|
|
77
77
|
if (!this.loomManager) {
|
|
78
78
|
const { GitHubService } = await import("./GitHubService-S2OGUTDR.js");
|
|
79
|
-
const { ClaudeContextManager } = await import("./ClaudeContextManager-
|
|
80
|
-
const { ProjectCapabilityDetector } = await import("./ProjectCapabilityDetector-
|
|
79
|
+
const { ClaudeContextManager } = await import("./ClaudeContextManager-6J2EB4QU.js");
|
|
80
|
+
const { ProjectCapabilityDetector } = await import("./ProjectCapabilityDetector-S5FLNCFI.js");
|
|
81
81
|
const { DefaultBranchNamingService } = await import("./BranchNamingService-B5PVRR7F.js");
|
|
82
82
|
this.loomManager = new LoomManager(
|
|
83
83
|
this.gitWorktreeManager,
|
|
@@ -278,7 +278,7 @@ var CleanupCommand = class {
|
|
|
278
278
|
const { force, dryRun } = parsed.options;
|
|
279
279
|
let parsedInput = await this.identifierParser.parseForPatternDetection(identifier);
|
|
280
280
|
if (parsedInput.type === "branch" && parsedInput.branchName) {
|
|
281
|
-
const { extractIssueNumber } = await import("./git-
|
|
281
|
+
const { extractIssueNumber } = await import("./git-FVMGBHC2.js");
|
|
282
282
|
const extractedNumber = extractIssueNumber(parsedInput.branchName);
|
|
283
283
|
if (extractedNumber !== null) {
|
|
284
284
|
parsedInput = {
|
|
@@ -477,4 +477,4 @@ var CleanupCommand = class {
|
|
|
477
477
|
export {
|
|
478
478
|
CleanupCommand
|
|
479
479
|
};
|
|
480
|
-
//# sourceMappingURL=cleanup-
|
|
480
|
+
//# sourceMappingURL=cleanup-OU2HFOOG.js.map
|
package/dist/cli.js
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SessionSummaryService
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-K7SEEHKO.js";
|
|
5
5
|
import "./chunk-NXMDEL3F.js";
|
|
6
|
-
import {
|
|
7
|
-
IssueTrackerFactory,
|
|
8
|
-
generateIssueManagementMcpConfig
|
|
9
|
-
} from "./chunk-6YSFTPKW.js";
|
|
10
|
-
import "./chunk-7Q66W4OH.js";
|
|
11
6
|
import {
|
|
12
7
|
CLIIsolationManager,
|
|
13
8
|
DatabaseManager,
|
|
14
9
|
EnvironmentManager,
|
|
15
10
|
LoomManager,
|
|
16
11
|
ResourceCleanup
|
|
17
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PMVWQBWS.js";
|
|
18
13
|
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
IssueTrackerFactory,
|
|
15
|
+
generateIssueManagementMcpConfig
|
|
16
|
+
} from "./chunk-6YSFTPKW.js";
|
|
17
|
+
import "./chunk-7Q66W4OH.js";
|
|
23
18
|
import {
|
|
24
19
|
ProcessManager
|
|
25
20
|
} from "./chunk-VU3QMIP2.js";
|
|
21
|
+
import {
|
|
22
|
+
detectPackageManager,
|
|
23
|
+
installDependencies,
|
|
24
|
+
runScript
|
|
25
|
+
} from "./chunk-AXX3QIKK.js";
|
|
26
26
|
import {
|
|
27
27
|
IdentifierParser
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-UQIXZ3BA.js";
|
|
29
29
|
import {
|
|
30
30
|
createNeonProviderFromSettings
|
|
31
31
|
} from "./chunk-7LSSNB7Y.js";
|
|
32
32
|
import {
|
|
33
33
|
InitCommand,
|
|
34
34
|
ShellCompletion
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-UB4TFAXJ.js";
|
|
36
36
|
import {
|
|
37
37
|
FirstRunManager
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-Q7POFB5Q.js";
|
|
39
39
|
import "./chunk-F2PWIRV4.js";
|
|
40
40
|
import {
|
|
41
41
|
IssueEnhancementService,
|
|
42
42
|
capitalizeFirstLetter
|
|
43
43
|
} from "./chunk-7HIRPCKU.js";
|
|
44
|
-
import {
|
|
45
|
-
AgentManager
|
|
46
|
-
} from "./chunk-N4ZJVATC.js";
|
|
47
44
|
import {
|
|
48
45
|
ProjectCapabilityDetector
|
|
49
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-ZPSTA5PR.js";
|
|
47
|
+
import {
|
|
48
|
+
getPackageConfig,
|
|
49
|
+
hasScript
|
|
50
|
+
} from "./chunk-BXCPJJYM.js";
|
|
50
51
|
import {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
} from "./chunk-2ZPFJQ3B.js";
|
|
52
|
+
AgentManager
|
|
53
|
+
} from "./chunk-SN3Z6EZO.js";
|
|
54
54
|
import {
|
|
55
55
|
MergeManager
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-WIJWIKAN.js";
|
|
57
57
|
import {
|
|
58
58
|
GitWorktreeManager
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-EK3XCAAS.js";
|
|
60
60
|
import {
|
|
61
61
|
PRManager
|
|
62
62
|
} from "./chunk-5IWU3HXE.js";
|
|
@@ -74,9 +74,9 @@ import {
|
|
|
74
74
|
} from "./chunk-O7VL5N6S.js";
|
|
75
75
|
import {
|
|
76
76
|
ClaudeContextManager
|
|
77
|
-
} from "./chunk-
|
|
78
|
-
import "./chunk-
|
|
79
|
-
import "./chunk-
|
|
77
|
+
} from "./chunk-7WANFUIK.js";
|
|
78
|
+
import "./chunk-6U6VI4SZ.js";
|
|
79
|
+
import "./chunk-W6WVRHJ6.js";
|
|
80
80
|
import {
|
|
81
81
|
extractSettingsOverrides
|
|
82
82
|
} from "./chunk-GYCR2LOU.js";
|
|
@@ -94,10 +94,10 @@ import {
|
|
|
94
94
|
pushBranchToRemote,
|
|
95
95
|
removePlaceholderCommitFromHead,
|
|
96
96
|
removePlaceholderCommitFromHistory
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-GEXP5IOF.js";
|
|
98
98
|
import {
|
|
99
99
|
SettingsManager
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-F6WVM437.js";
|
|
101
101
|
import {
|
|
102
102
|
MetadataManager
|
|
103
103
|
} from "./chunk-CFUWQHCJ.js";
|
|
@@ -148,7 +148,7 @@ async function getProjectRoot() {
|
|
|
148
148
|
async function needsFirstRunSetup() {
|
|
149
149
|
const projectRoot = await getProjectRoot();
|
|
150
150
|
const firstRunManager = new FirstRunManager();
|
|
151
|
-
const
|
|
151
|
+
const isConfigured = await firstRunManager.isProjectConfigured(projectRoot);
|
|
152
152
|
if (isConfigured) {
|
|
153
153
|
logger.debug("needsFirstRunSetup: Project is tracked as configured globally");
|
|
154
154
|
return false;
|
|
@@ -867,7 +867,7 @@ var ValidationRunner = class {
|
|
|
867
867
|
const stepStartTime = Date.now();
|
|
868
868
|
let scriptToRun = null;
|
|
869
869
|
try {
|
|
870
|
-
const pkgJson = await
|
|
870
|
+
const pkgJson = await getPackageConfig(worktreePath);
|
|
871
871
|
const hasCompileScript = hasScript(pkgJson, "compile");
|
|
872
872
|
const hasTypecheckScript = hasScript(pkgJson, "typecheck");
|
|
873
873
|
if (hasCompileScript) {
|
|
@@ -947,7 +947,7 @@ Run '${runCommand}' to see detailed errors.`
|
|
|
947
947
|
async runLint(worktreePath, dryRun) {
|
|
948
948
|
const stepStartTime = Date.now();
|
|
949
949
|
try {
|
|
950
|
-
const pkgJson = await
|
|
950
|
+
const pkgJson = await getPackageConfig(worktreePath);
|
|
951
951
|
const hasLintScript = hasScript(pkgJson, "lint");
|
|
952
952
|
if (!hasLintScript) {
|
|
953
953
|
getLogger().debug("Skipping lint - no lint script found");
|
|
@@ -1020,7 +1020,7 @@ Run '${runCommand}' to see detailed errors.`
|
|
|
1020
1020
|
async runTests(worktreePath, dryRun) {
|
|
1021
1021
|
const stepStartTime = Date.now();
|
|
1022
1022
|
try {
|
|
1023
|
-
const pkgJson = await
|
|
1023
|
+
const pkgJson = await getPackageConfig(worktreePath);
|
|
1024
1024
|
const hasTestScript = hasScript(pkgJson, "test");
|
|
1025
1025
|
if (!hasTestScript) {
|
|
1026
1026
|
getLogger().debug("Skipping tests - no test script found");
|
|
@@ -1134,12 +1134,10 @@ Run '${runCommand}' to see detailed errors.`
|
|
|
1134
1134
|
}
|
|
1135
1135
|
/**
|
|
1136
1136
|
* Get validation command string for prompts
|
|
1137
|
+
* Uses il commands for multi-language project support
|
|
1137
1138
|
*/
|
|
1138
|
-
getValidationCommand(validationType,
|
|
1139
|
-
|
|
1140
|
-
return `npm run ${validationType}`;
|
|
1141
|
-
}
|
|
1142
|
-
return `${packageManager} ${validationType}`;
|
|
1139
|
+
getValidationCommand(validationType, _packageManager) {
|
|
1140
|
+
return `il ${validationType}`;
|
|
1143
1141
|
}
|
|
1144
1142
|
/**
|
|
1145
1143
|
* Get Claude prompt for specific validation type
|
|
@@ -1606,24 +1604,24 @@ var BuildRunner = class {
|
|
|
1606
1604
|
async runBuild(buildPath, options = {}) {
|
|
1607
1605
|
const startTime = Date.now();
|
|
1608
1606
|
try {
|
|
1609
|
-
const pkgJson = await
|
|
1607
|
+
const pkgJson = await getPackageConfig(buildPath);
|
|
1610
1608
|
const hasBuildScript = hasScript(pkgJson, "build");
|
|
1611
1609
|
if (!hasBuildScript) {
|
|
1612
1610
|
getLogger().debug("Skipping build - no build script found");
|
|
1613
1611
|
return {
|
|
1614
1612
|
success: true,
|
|
1615
1613
|
skipped: true,
|
|
1616
|
-
reason: "No build script found in package
|
|
1614
|
+
reason: "No build script found in package configuration",
|
|
1617
1615
|
duration: Date.now() - startTime
|
|
1618
1616
|
};
|
|
1619
1617
|
}
|
|
1620
1618
|
} catch (error) {
|
|
1621
1619
|
if (error instanceof Error && error.message.includes("package.json not found")) {
|
|
1622
|
-
getLogger().debug("Skipping build - no package
|
|
1620
|
+
getLogger().debug("Skipping build - no package configuration found");
|
|
1623
1621
|
return {
|
|
1624
1622
|
success: true,
|
|
1625
1623
|
skipped: true,
|
|
1626
|
-
reason: "No package
|
|
1624
|
+
reason: "No package configuration found in project",
|
|
1627
1625
|
duration: Date.now() - startTime
|
|
1628
1626
|
};
|
|
1629
1627
|
}
|
|
@@ -1769,7 +1767,7 @@ var FinishCommand = class {
|
|
|
1769
1767
|
* Main entry point for finish command
|
|
1770
1768
|
*/
|
|
1771
1769
|
async execute(input) {
|
|
1772
|
-
var _a, _b;
|
|
1770
|
+
var _a, _b, _c, _d;
|
|
1773
1771
|
const isJsonMode = input.options.json === true;
|
|
1774
1772
|
const result = {
|
|
1775
1773
|
success: false,
|
|
@@ -1780,13 +1778,13 @@ var FinishCommand = class {
|
|
|
1780
1778
|
};
|
|
1781
1779
|
if (isJsonMode) {
|
|
1782
1780
|
const settings2 = await this.settingsManager.loadSettings();
|
|
1783
|
-
if (((_a = settings2.mergeBehavior) == null ? void 0 : _a.mode) === "github-pr" && input.options.cleanup === void 0) {
|
|
1784
|
-
throw new Error(
|
|
1781
|
+
if ((((_a = settings2.mergeBehavior) == null ? void 0 : _a.mode) === "github-pr" || ((_b = settings2.mergeBehavior) == null ? void 0 : _b.mode) === "github-draft-pr") && input.options.cleanup === void 0) {
|
|
1782
|
+
throw new Error('JSON mode with "github-pr"/"github-draft-pr" workflow requires --cleanup or --no-cleanup flag. Use: il finish --json --cleanup <identifier>');
|
|
1785
1783
|
}
|
|
1786
1784
|
}
|
|
1787
1785
|
const settings = await this.settingsManager.loadSettings();
|
|
1788
1786
|
let repo;
|
|
1789
|
-
const needsRepo = ((
|
|
1787
|
+
const needsRepo = ((_c = settings.mergeBehavior) == null ? void 0 : _c.mode) === "github-pr" || ((_d = settings.mergeBehavior) == null ? void 0 : _d.mode) === "github-draft-pr" || this.issueTracker.providerName === "github";
|
|
1790
1788
|
if (needsRepo && await hasMultipleRemotes()) {
|
|
1791
1789
|
repo = await getConfiguredRepoFromSettings(settings);
|
|
1792
1790
|
getLogger().info(`Using GitHub repository: ${repo}`);
|
|
@@ -2917,14 +2915,14 @@ async function validateGhCliForCommand(command) {
|
|
|
2917
2915
|
const settings = await settingsManager.loadSettings();
|
|
2918
2916
|
const provider = IssueTrackerFactory.getProviderName(settings);
|
|
2919
2917
|
const mergeBehaviorMode = (_a = settings.mergeBehavior) == null ? void 0 : _a.mode;
|
|
2920
|
-
needsGhCli = provider === "github" || mergeBehaviorMode === "github-pr";
|
|
2918
|
+
needsGhCli = provider === "github" || mergeBehaviorMode === "github-pr" || mergeBehaviorMode === "github-draft-pr";
|
|
2921
2919
|
} catch {
|
|
2922
2920
|
needsGhCli = true;
|
|
2923
2921
|
}
|
|
2924
2922
|
}
|
|
2925
2923
|
if (!ghAvailable) {
|
|
2926
2924
|
if (needsGhCli) {
|
|
2927
|
-
const errorMessage = alwaysRequireGh.includes(commandName) ? `The "${commandName}" command requires GitHub CLI (gh) to be installed.` : `GitHub CLI (gh) is required when using GitHub as the issue tracker or "github-pr" merge mode.`;
|
|
2925
|
+
const errorMessage = alwaysRequireGh.includes(commandName) ? `The "${commandName}" command requires GitHub CLI (gh) to be installed.` : `GitHub CLI (gh) is required when using GitHub as the issue tracker or "github-pr"/"github-draft-pr" merge mode.`;
|
|
2928
2926
|
logger.error(errorMessage);
|
|
2929
2927
|
logger.info("");
|
|
2930
2928
|
logger.info("To install GitHub CLI:");
|
|
@@ -2940,10 +2938,10 @@ async function validateGhCliForCommand(command) {
|
|
|
2940
2938
|
const settings = await settingsManager.loadSettings();
|
|
2941
2939
|
const provider = IssueTrackerFactory.getProviderName(settings);
|
|
2942
2940
|
const mergeBehaviorMode = (_b = settings.mergeBehavior) == null ? void 0 : _b.mode;
|
|
2943
|
-
if (provider === "github" || mergeBehaviorMode === "github-pr") {
|
|
2941
|
+
if (provider === "github" || mergeBehaviorMode === "github-pr" || mergeBehaviorMode === "github-draft-pr") {
|
|
2944
2942
|
logger.warn("GitHub CLI (gh) is not installed.");
|
|
2945
2943
|
logger.warn(
|
|
2946
|
-
|
|
2944
|
+
'Some features may not work correctly with your current configuration (GitHub provider or "github-pr"/"github-draft-pr" merge mode).'
|
|
2947
2945
|
);
|
|
2948
2946
|
logger.info("To install: brew install gh (macOS) or see https://github.com/cli/cli#installation");
|
|
2949
2947
|
logger.info("");
|
|
@@ -2999,14 +2997,14 @@ async function autoLaunchInitForMultipleRemotes() {
|
|
|
2999
2997
|
await waitForKeypress2("Press any key to start configuration...");
|
|
3000
2998
|
logger.info("");
|
|
3001
2999
|
try {
|
|
3002
|
-
const { InitCommand: InitCommand2 } = await import("./init-
|
|
3000
|
+
const { InitCommand: InitCommand2 } = await import("./init-HB34Q5FH.js");
|
|
3003
3001
|
const initCommand = new InitCommand2();
|
|
3004
3002
|
const customInitialMessage = "Help me configure which git remote iloom should use for GitHub operations. I have multiple remotes and need to select the correct one.";
|
|
3005
3003
|
await initCommand.execute(customInitialMessage);
|
|
3006
3004
|
logger.info("");
|
|
3007
3005
|
logger.info("Configuration complete! Continuing with your original command...");
|
|
3008
3006
|
logger.info("");
|
|
3009
|
-
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-
|
|
3007
|
+
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-35F5RUJH.js");
|
|
3010
3008
|
const settingsManager = new SettingsManager2();
|
|
3011
3009
|
const settings = await settingsManager.loadSettings();
|
|
3012
3010
|
const { hasMultipleRemotes: hasMultipleRemotes2 } = await import("./remote-IJAMOEAP.js");
|
|
@@ -3100,7 +3098,7 @@ program.command("add-issue").alias("a").description("Create and enhance GitHub i
|
|
|
3100
3098
|
});
|
|
3101
3099
|
program.command("feedback").alias("f").description("Submit feedback/bug report to iloom-cli repository").argument("<description>", "Feedback title (>30 chars, >2 spaces; or any non-empty text when --body provided)").option("--body <text>", "Body text for feedback (added after diagnostics)").action(async (description, options) => {
|
|
3102
3100
|
try {
|
|
3103
|
-
const { FeedbackCommand } = await import("./feedback-
|
|
3101
|
+
const { FeedbackCommand } = await import("./feedback-O4Q55SVS.js");
|
|
3104
3102
|
const command = new FeedbackCommand();
|
|
3105
3103
|
const feedbackOptions = {};
|
|
3106
3104
|
if (options.body !== void 0) {
|
|
@@ -3183,7 +3181,7 @@ program.command("finish").alias("dn").description("Merge work and cleanup worksp
|
|
|
3183
3181
|
});
|
|
3184
3182
|
program.command("rebase").description("Rebase current branch on main with Claude-assisted conflict resolution").option("-f, --force", "Skip confirmation prompts").option("-n, --dry-run", "Preview actions without executing").action(async (options) => {
|
|
3185
3183
|
try {
|
|
3186
|
-
const { RebaseCommand } = await import("./rebase-
|
|
3184
|
+
const { RebaseCommand } = await import("./rebase-5EY3Q6XP.js");
|
|
3187
3185
|
const command = new RebaseCommand();
|
|
3188
3186
|
await command.execute(options);
|
|
3189
3187
|
} catch (error) {
|
|
@@ -3195,7 +3193,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
|
|
|
3195
3193
|
new Option("--one-shot <mode>", "One-shot automation mode").choices(["default", "noReview", "bypassPermissions"]).default("default")
|
|
3196
3194
|
).action(async (options) => {
|
|
3197
3195
|
try {
|
|
3198
|
-
const { IgniteCommand } = await import("./ignite-
|
|
3196
|
+
const { IgniteCommand } = await import("./ignite-VHV65WEZ.js");
|
|
3199
3197
|
const command = new IgniteCommand();
|
|
3200
3198
|
await command.execute(options.oneShot ?? "default");
|
|
3201
3199
|
} catch (error) {
|
|
@@ -3206,7 +3204,7 @@ program.command("spin").alias("ignite").description("Launch Claude with auto-det
|
|
|
3206
3204
|
program.command("open").description("Open workspace in browser or run CLI tool").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
|
|
3207
3205
|
try {
|
|
3208
3206
|
const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
|
|
3209
|
-
const { OpenCommand } = await import("./open-
|
|
3207
|
+
const { OpenCommand } = await import("./open-WHVUYGPY.js");
|
|
3210
3208
|
const cmd = new OpenCommand();
|
|
3211
3209
|
const input = identifier ? { identifier, args } : { args };
|
|
3212
3210
|
await cmd.execute(input);
|
|
@@ -3218,7 +3216,7 @@ program.command("open").description("Open workspace in browser or run CLI tool")
|
|
|
3218
3216
|
program.command("run").description("Run CLI tool or open workspace in browser").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").allowUnknownOption().action(async (identifier, _options, command) => {
|
|
3219
3217
|
try {
|
|
3220
3218
|
const args = (command == null ? void 0 : command.args) ? command.args.slice(identifier ? 1 : 0) : [];
|
|
3221
|
-
const { RunCommand } = await import("./run-
|
|
3219
|
+
const { RunCommand } = await import("./run-NCRK5NPR.js");
|
|
3222
3220
|
const cmd = new RunCommand();
|
|
3223
3221
|
const input = identifier ? { identifier, args } : { args };
|
|
3224
3222
|
await cmd.execute(input);
|
|
@@ -3229,7 +3227,7 @@ program.command("run").description("Run CLI tool or open workspace in browser").
|
|
|
3229
3227
|
});
|
|
3230
3228
|
program.command("dev-server").alias("dev").description("Start dev server for workspace (foreground)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").option("--json", "Output as JSON").action(async (identifier, options) => {
|
|
3231
3229
|
try {
|
|
3232
|
-
const { DevServerCommand } = await import("./dev-server-
|
|
3230
|
+
const { DevServerCommand } = await import("./dev-server-4RCDJ5MU.js");
|
|
3233
3231
|
const cmd = new DevServerCommand();
|
|
3234
3232
|
await cmd.execute({ identifier, json: options == null ? void 0 : options.json });
|
|
3235
3233
|
} catch (error) {
|
|
@@ -3239,7 +3237,7 @@ program.command("dev-server").alias("dev").description("Start dev server for wor
|
|
|
3239
3237
|
});
|
|
3240
3238
|
program.command("shell").alias("terminal").description("Open interactive shell with workspace environment").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
3241
3239
|
try {
|
|
3242
|
-
const { ShellCommand } = await import("./shell-
|
|
3240
|
+
const { ShellCommand } = await import("./shell-SBLXVOVJ.js");
|
|
3243
3241
|
const cmd = new ShellCommand();
|
|
3244
3242
|
await cmd.execute({ identifier });
|
|
3245
3243
|
} catch (error) {
|
|
@@ -3247,10 +3245,50 @@ program.command("shell").alias("terminal").description("Open interactive shell w
|
|
|
3247
3245
|
process.exit(1);
|
|
3248
3246
|
}
|
|
3249
3247
|
});
|
|
3248
|
+
program.command("build").description("Run the build script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
3249
|
+
try {
|
|
3250
|
+
const { BuildCommand } = await import("./build-FJVYP7EV.js");
|
|
3251
|
+
const cmd = new BuildCommand();
|
|
3252
|
+
await cmd.execute(identifier ? { identifier } : {});
|
|
3253
|
+
} catch (error) {
|
|
3254
|
+
logger.error(`Build failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3255
|
+
process.exit(1);
|
|
3256
|
+
}
|
|
3257
|
+
});
|
|
3258
|
+
program.command("lint").description("Run the lint script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
3259
|
+
try {
|
|
3260
|
+
const { LintCommand } = await import("./lint-5JMCWE4Y.js");
|
|
3261
|
+
const cmd = new LintCommand();
|
|
3262
|
+
await cmd.execute(identifier ? { identifier } : {});
|
|
3263
|
+
} catch (error) {
|
|
3264
|
+
logger.error(`Lint failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3265
|
+
process.exit(1);
|
|
3266
|
+
}
|
|
3267
|
+
});
|
|
3268
|
+
program.command("test").description("Run the test script").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
3269
|
+
try {
|
|
3270
|
+
const { TestCommand } = await import("./test-3KIVXI6J.js");
|
|
3271
|
+
const cmd = new TestCommand();
|
|
3272
|
+
await cmd.execute(identifier ? { identifier } : {});
|
|
3273
|
+
} catch (error) {
|
|
3274
|
+
logger.error(`Test failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3275
|
+
process.exit(1);
|
|
3276
|
+
}
|
|
3277
|
+
});
|
|
3278
|
+
program.command("compile").alias("typecheck").description("Run the compile or typecheck script (prefers compile if both exist)").argument("[identifier]", "Issue number, PR number, or branch name (auto-detected if omitted)").action(async (identifier) => {
|
|
3279
|
+
try {
|
|
3280
|
+
const { CompileCommand } = await import("./compile-ULNO5F7Q.js");
|
|
3281
|
+
const cmd = new CompileCommand();
|
|
3282
|
+
await cmd.execute(identifier ? { identifier } : {});
|
|
3283
|
+
} catch (error) {
|
|
3284
|
+
logger.error(`Compile failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
3285
|
+
process.exit(1);
|
|
3286
|
+
}
|
|
3287
|
+
});
|
|
3250
3288
|
program.command("cleanup").alias("remove").alias("clean").description("Remove workspaces").argument("[identifier]", "Branch name or issue number to cleanup (auto-detected)").option("-l, --list", "List all worktrees").option("-a, --all", "Remove all worktrees (interactive confirmation)").option("-i, --issue <number>", "Cleanup by issue number", parseInt).option("-f, --force", "Skip confirmations and force removal").option("--dry-run", "Show what would be done without doing it").option("--json", "Output result as JSON").action(async (identifier, options) => {
|
|
3251
3289
|
const executeAction = async () => {
|
|
3252
3290
|
try {
|
|
3253
|
-
const { CleanupCommand } = await import("./cleanup-
|
|
3291
|
+
const { CleanupCommand } = await import("./cleanup-OU2HFOOG.js");
|
|
3254
3292
|
const command = new CleanupCommand();
|
|
3255
3293
|
const input = {
|
|
3256
3294
|
options: options ?? {}
|
|
@@ -3339,7 +3377,7 @@ program.command("projects").description("List configured iloom projects").option
|
|
|
3339
3377
|
});
|
|
3340
3378
|
program.command("init").alias("config").description("Initialize iloom configuration").argument("[prompt]", 'Custom initial message to send to Claude (defaults to "Help me configure iloom settings.")').action(async (prompt) => {
|
|
3341
3379
|
try {
|
|
3342
|
-
const { InitCommand: InitCommand2 } = await import("./init-
|
|
3380
|
+
const { InitCommand: InitCommand2 } = await import("./init-HB34Q5FH.js");
|
|
3343
3381
|
const command = new InitCommand2();
|
|
3344
3382
|
const trimmedPrompt = prompt == null ? void 0 : prompt.trim();
|
|
3345
3383
|
const customPrompt = trimmedPrompt && trimmedPrompt.length > 0 ? trimmedPrompt : void 0;
|
|
@@ -3351,7 +3389,7 @@ program.command("init").alias("config").description("Initialize iloom configurat
|
|
|
3351
3389
|
});
|
|
3352
3390
|
program.command("contribute").description("Set up local development environment for contributing to iloom").action(async () => {
|
|
3353
3391
|
try {
|
|
3354
|
-
const { ContributeCommand } = await import("./contribute-
|
|
3392
|
+
const { ContributeCommand } = await import("./contribute-T7ENST5N.js");
|
|
3355
3393
|
const command = new ContributeCommand();
|
|
3356
3394
|
await command.execute();
|
|
3357
3395
|
} catch (error) {
|
|
@@ -3431,9 +3469,9 @@ program.command("test-github").description("Test GitHub integration (Issue #3)")
|
|
|
3431
3469
|
program.command("test-claude").description("Test Claude integration (Issue #10)").option("--detect", "Test Claude CLI detection").option("--version", "Get Claude CLI version").option("--branch <title>", "Test branch name generation with given title").option("--issue <number>", "Issue number for branch generation", "123").option("--launch <prompt>", "Launch Claude with a prompt (headless)").option("--interactive", "Launch Claude interactively (requires --launch)").option("--template <name>", "Test template loading").action(async (options) => {
|
|
3432
3470
|
try {
|
|
3433
3471
|
const { detectClaudeCli: detectClaudeCli2, getClaudeVersion, generateBranchName, launchClaude: launchClaude2 } = await import("./claude-H33OQMXO.js");
|
|
3434
|
-
const { PromptTemplateManager } = await import("./PromptTemplateManager-
|
|
3435
|
-
const { ClaudeService } = await import("./ClaudeService-
|
|
3436
|
-
const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-
|
|
3472
|
+
const { PromptTemplateManager } = await import("./PromptTemplateManager-C3DK6XZL.js");
|
|
3473
|
+
const { ClaudeService } = await import("./ClaudeService-O2PB22GX.js");
|
|
3474
|
+
const { ClaudeContextManager: ClaudeContextManager2 } = await import("./ClaudeContextManager-6J2EB4QU.js");
|
|
3437
3475
|
logger.info("Testing Claude Integration\n");
|
|
3438
3476
|
if (options.detect) {
|
|
3439
3477
|
logger.info("Detecting Claude CLI...");
|
|
@@ -3581,7 +3619,7 @@ program.command("test-webserver").description("Test if a web server is running o
|
|
|
3581
3619
|
});
|
|
3582
3620
|
program.command("test-git").description("Test Git integration - findMainWorktreePath() function (reads .iloom/settings.json)").action(async () => {
|
|
3583
3621
|
try {
|
|
3584
|
-
const { TestGitCommand } = await import("./test-git-
|
|
3622
|
+
const { TestGitCommand } = await import("./test-git-ZB6AGGRW.js");
|
|
3585
3623
|
const command = new TestGitCommand();
|
|
3586
3624
|
await command.execute();
|
|
3587
3625
|
} catch (error) {
|
|
@@ -3607,7 +3645,7 @@ program.command("test-tabs").description("Test iTerm2 dual tab functionality - o
|
|
|
3607
3645
|
});
|
|
3608
3646
|
program.command("test-prefix").description("Test worktree prefix configuration - preview worktree paths (reads .iloom/settings.json)").action(async () => {
|
|
3609
3647
|
try {
|
|
3610
|
-
const { TestPrefixCommand } = await import("./test-prefix-
|
|
3648
|
+
const { TestPrefixCommand } = await import("./test-prefix-FBGXKMPA.js");
|
|
3611
3649
|
const command = new TestPrefixCommand();
|
|
3612
3650
|
await command.execute();
|
|
3613
3651
|
} catch (error) {
|
|
@@ -3621,7 +3659,7 @@ program.command("test-prefix").description("Test worktree prefix configuration -
|
|
|
3621
3659
|
program.command("summary").description("Generate Claude session summary for a loom").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--with-comment", "Post summary as a comment to the issue/PR").option("--json", "Output result as JSON").action(async (identifier, options) => {
|
|
3622
3660
|
const executeAction = async () => {
|
|
3623
3661
|
try {
|
|
3624
|
-
const { SummaryCommand } = await import("./summary-
|
|
3662
|
+
const { SummaryCommand } = await import("./summary-CVFAMDOJ.js");
|
|
3625
3663
|
const command = new SummaryCommand();
|
|
3626
3664
|
const result = await command.execute({ identifier, options });
|
|
3627
3665
|
if (options.json && result) {
|
|
@@ -3650,7 +3688,7 @@ program.command("summary").description("Generate Claude session summary for a lo
|
|
|
3650
3688
|
program.command("recap").description("Get recap for a loom (defaults to current directory)").argument("[identifier]", "Issue number, PR number (pr/123), or branch name (auto-detected if omitted)").option("--json", "Output as JSON with filePath for file watching").action(async (identifier, options) => {
|
|
3651
3689
|
const executeAction = async () => {
|
|
3652
3690
|
try {
|
|
3653
|
-
const { RecapCommand } = await import("./recap-
|
|
3691
|
+
const { RecapCommand } = await import("./recap-VOOUXOGP.js");
|
|
3654
3692
|
const command = new RecapCommand();
|
|
3655
3693
|
const result = await command.execute({ identifier, json: options.json });
|
|
3656
3694
|
if (options.json && result) {
|
|
@@ -3679,7 +3717,7 @@ program.command("recap").description("Get recap for a loom (defaults to current
|
|
|
3679
3717
|
program.command("test-neon").description("Test Neon integration and debug configuration").action(async () => {
|
|
3680
3718
|
var _a;
|
|
3681
3719
|
try {
|
|
3682
|
-
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-
|
|
3720
|
+
const { SettingsManager: SettingsManager2 } = await import("./SettingsManager-35F5RUJH.js");
|
|
3683
3721
|
const { createNeonProviderFromSettings: createNeonProviderFromSettings2 } = await import("./neon-helpers-3KBC4A3Y.js");
|
|
3684
3722
|
logger.info("Testing Neon Integration\n");
|
|
3685
3723
|
logger.info("1. Settings Configuration:");
|