@iloom/cli 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +21 -2
  3. package/dist/{ClaudeContextManager-X2Y72GRL.js → ClaudeContextManager-HR5JQKAI.js} +4 -4
  4. package/dist/{ClaudeService-7P32TTES.js → ClaudeService-TK7FMC2X.js} +3 -3
  5. package/dist/{GitHubService-O7T6CFAJ.js → GitHubService-TGWJN4V4.js} +3 -3
  6. package/dist/{LoomLauncher-3I47SUPV.js → LoomLauncher-73NXL2CL.js} +4 -4
  7. package/dist/README.md +21 -2
  8. package/dist/{SettingsManager-QR7V2IW2.js → SettingsManager-AW3JTJHD.js} +2 -2
  9. package/dist/{build-IC4CJRMP.js → build-THZI572G.js} +6 -6
  10. package/dist/{chunk-POU2UMWN.js → chunk-3I4ONZRT.js} +3 -3
  11. package/dist/{chunk-TRUMP4DA.js → chunk-4CO6KG5S.js} +26 -3
  12. package/dist/chunk-4CO6KG5S.js.map +1 -0
  13. package/dist/{chunk-MZPRBNYC.js → chunk-6IIL5M2L.js} +2 -2
  14. package/dist/{chunk-2JPXGGP4.js → chunk-A7NJF73J.js} +2 -2
  15. package/dist/{chunk-H6ST2TGP.js → chunk-AR5QKYNE.js} +3 -3
  16. package/dist/{chunk-Y5O2ALDZ.js → chunk-CWRI4JC3.js} +2 -2
  17. package/dist/{chunk-I3HMNWQQ.js → chunk-DGG2VY7B.js} +3 -3
  18. package/dist/{chunk-ENGCJIYQ.js → chunk-FJDRTVJX.js} +3 -3
  19. package/dist/chunk-FJDRTVJX.js.map +1 -0
  20. package/dist/{chunk-NTTSUAVM.js → chunk-IZIYLYPK.js} +2 -2
  21. package/dist/{chunk-TGRK3CHF.js → chunk-KJTVU3HZ.js} +4 -4
  22. package/dist/{chunk-3P6J4IZZ.js → chunk-KXGQYLFZ.js} +3 -3
  23. package/dist/{chunk-USSL2X4A.js → chunk-NUACL52E.js} +2 -2
  24. package/dist/{chunk-JT5LZRMI.js → chunk-NWMORW3U.js} +2 -2
  25. package/dist/{chunk-Y5HSSIK2.js → chunk-OFDN5NKS.js} +4 -3
  26. package/dist/{chunk-Y5HSSIK2.js.map → chunk-OFDN5NKS.js.map} +1 -1
  27. package/dist/{chunk-HZXBHMVM.js → chunk-R4YWBGY6.js} +3 -3
  28. package/dist/{chunk-XFEK2X2D.js → chunk-RI2YL6TK.js} +9 -3
  29. package/dist/chunk-RI2YL6TK.js.map +1 -0
  30. package/dist/{chunk-4ZIHFUPN.js → chunk-SOSQILHO.js} +64 -36
  31. package/dist/chunk-SOSQILHO.js.map +1 -0
  32. package/dist/{chunk-4GAJJUYS.js → chunk-TC7APDKU.js} +2 -2
  33. package/dist/{chunk-OK7LUTRW.js → chunk-ULSWCPQG.js} +3 -3
  34. package/dist/{chunk-5LVVQGB3.js → chunk-VPTAX5TR.js} +7 -7
  35. package/dist/chunk-VPTAX5TR.js.map +1 -0
  36. package/dist/{chunk-RD7OPXZK.js → chunk-W6DP5RVR.js} +3 -3
  37. package/dist/{chunk-J7FJ6PUT.js → chunk-WHI5KEOX.js} +2 -2
  38. package/dist/{chunk-2HZX6AMR.js → chunk-YKFCCV6S.js} +2 -2
  39. package/dist/{chunk-OAVJR4PM.js → chunk-Z2TWEXR7.js} +2 -2
  40. package/dist/{cleanup-D3CSRBBZ.js → cleanup-PJRIFFU4.js} +16 -16
  41. package/dist/cli.js +62 -61
  42. package/dist/cli.js.map +1 -1
  43. package/dist/{commit-IWGT42XN.js → commit-IVP3M4HG.js} +10 -9
  44. package/dist/commit-IVP3M4HG.js.map +1 -0
  45. package/dist/{compile-EOWJORKO.js → compile-R2J65HBQ.js} +6 -6
  46. package/dist/{contribute-WSJTV2RX.js → contribute-VDZXHK5Y.js} +4 -4
  47. package/dist/{dev-server-Q6M62ATG.js → dev-server-7F622OEO.js} +8 -8
  48. package/dist/{feedback-QPNDZQRV.js → feedback-E7VET7CL.js} +6 -6
  49. package/dist/{git-W3XUIFTR.js → git-2QDQ2X2S.js} +3 -3
  50. package/dist/{ignite-OPO6EDYT.js → ignite-IW35CDBD.js} +10 -10
  51. package/dist/index.d.ts +15 -0
  52. package/dist/index.js +11 -4
  53. package/dist/index.js.map +1 -1
  54. package/dist/{init-ALYWKNWG.js → init-676DHF6R.js} +5 -5
  55. package/dist/{issues-L7TBUPXT.js → issues-PJSOLOBJ.js} +31 -9
  56. package/dist/issues-PJSOLOBJ.js.map +1 -0
  57. package/dist/{lint-IHUH45OC.js → lint-CJM7BAIM.js} +6 -6
  58. package/dist/mcp/issue-management-server.js +2 -2
  59. package/dist/mcp/issue-management-server.js.map +1 -1
  60. package/dist/{open-KWOV2OFO.js → open-544H7JF5.js} +8 -8
  61. package/dist/{plan-BRJBFJHF.js → plan-Q7ELXDLC.js} +12 -12
  62. package/dist/prompts/init-prompt.txt +39 -21
  63. package/dist/{rebase-AJOJOZUG.js → rebase-YND35CIE.js} +5 -5
  64. package/dist/{recap-GKJXMDXW.js → recap-3W7COH7D.js} +5 -5
  65. package/dist/{run-QEUVZF7J.js → run-QUXJKDQQ.js} +8 -8
  66. package/dist/schema/settings.schema.json +15 -0
  67. package/dist/{shell-DAAVG4YN.js → shell-QGECBLST.js} +5 -5
  68. package/dist/{summary-ZKOA35PT.js → summary-G2T4452H.js} +9 -9
  69. package/dist/{test-5GPWWO3P.js → test-EA5NQFDC.js} +6 -6
  70. package/dist/{test-git-EJUKDB7F.js → test-git-M7LSLEFL.js} +3 -3
  71. package/dist/{test-prefix-23TOBUXY.js → test-prefix-64NAAUON.js} +3 -3
  72. package/dist/{test-webserver-CKROHFBQ.js → test-webserver-OK6Z5FJM.js} +5 -5
  73. package/dist/{vscode-6TOLFCI2.js → vscode-AR5NNXXI.js} +5 -5
  74. package/package.json +1 -1
  75. package/dist/chunk-4ZIHFUPN.js.map +0 -1
  76. package/dist/chunk-5LVVQGB3.js.map +0 -1
  77. package/dist/chunk-ENGCJIYQ.js.map +0 -1
  78. package/dist/chunk-TRUMP4DA.js.map +0 -1
  79. package/dist/chunk-XFEK2X2D.js.map +0 -1
  80. package/dist/commit-IWGT42XN.js.map +0 -1
  81. package/dist/issues-L7TBUPXT.js.map +0 -1
  82. /package/dist/{ClaudeContextManager-X2Y72GRL.js.map → ClaudeContextManager-HR5JQKAI.js.map} +0 -0
  83. /package/dist/{ClaudeService-7P32TTES.js.map → ClaudeService-TK7FMC2X.js.map} +0 -0
  84. /package/dist/{GitHubService-O7T6CFAJ.js.map → GitHubService-TGWJN4V4.js.map} +0 -0
  85. /package/dist/{LoomLauncher-3I47SUPV.js.map → LoomLauncher-73NXL2CL.js.map} +0 -0
  86. /package/dist/{SettingsManager-QR7V2IW2.js.map → SettingsManager-AW3JTJHD.js.map} +0 -0
  87. /package/dist/{build-IC4CJRMP.js.map → build-THZI572G.js.map} +0 -0
  88. /package/dist/{chunk-POU2UMWN.js.map → chunk-3I4ONZRT.js.map} +0 -0
  89. /package/dist/{chunk-MZPRBNYC.js.map → chunk-6IIL5M2L.js.map} +0 -0
  90. /package/dist/{chunk-2JPXGGP4.js.map → chunk-A7NJF73J.js.map} +0 -0
  91. /package/dist/{chunk-H6ST2TGP.js.map → chunk-AR5QKYNE.js.map} +0 -0
  92. /package/dist/{chunk-Y5O2ALDZ.js.map → chunk-CWRI4JC3.js.map} +0 -0
  93. /package/dist/{chunk-I3HMNWQQ.js.map → chunk-DGG2VY7B.js.map} +0 -0
  94. /package/dist/{chunk-NTTSUAVM.js.map → chunk-IZIYLYPK.js.map} +0 -0
  95. /package/dist/{chunk-TGRK3CHF.js.map → chunk-KJTVU3HZ.js.map} +0 -0
  96. /package/dist/{chunk-3P6J4IZZ.js.map → chunk-KXGQYLFZ.js.map} +0 -0
  97. /package/dist/{chunk-USSL2X4A.js.map → chunk-NUACL52E.js.map} +0 -0
  98. /package/dist/{chunk-JT5LZRMI.js.map → chunk-NWMORW3U.js.map} +0 -0
  99. /package/dist/{chunk-HZXBHMVM.js.map → chunk-R4YWBGY6.js.map} +0 -0
  100. /package/dist/{chunk-4GAJJUYS.js.map → chunk-TC7APDKU.js.map} +0 -0
  101. /package/dist/{chunk-OK7LUTRW.js.map → chunk-ULSWCPQG.js.map} +0 -0
  102. /package/dist/{chunk-RD7OPXZK.js.map → chunk-W6DP5RVR.js.map} +0 -0
  103. /package/dist/{chunk-J7FJ6PUT.js.map → chunk-WHI5KEOX.js.map} +0 -0
  104. /package/dist/{chunk-2HZX6AMR.js.map → chunk-YKFCCV6S.js.map} +0 -0
  105. /package/dist/{chunk-OAVJR4PM.js.map → chunk-Z2TWEXR7.js.map} +0 -0
  106. /package/dist/{cleanup-D3CSRBBZ.js.map → cleanup-PJRIFFU4.js.map} +0 -0
  107. /package/dist/{compile-EOWJORKO.js.map → compile-R2J65HBQ.js.map} +0 -0
  108. /package/dist/{contribute-WSJTV2RX.js.map → contribute-VDZXHK5Y.js.map} +0 -0
  109. /package/dist/{dev-server-Q6M62ATG.js.map → dev-server-7F622OEO.js.map} +0 -0
  110. /package/dist/{feedback-QPNDZQRV.js.map → feedback-E7VET7CL.js.map} +0 -0
  111. /package/dist/{git-W3XUIFTR.js.map → git-2QDQ2X2S.js.map} +0 -0
  112. /package/dist/{ignite-OPO6EDYT.js.map → ignite-IW35CDBD.js.map} +0 -0
  113. /package/dist/{init-ALYWKNWG.js.map → init-676DHF6R.js.map} +0 -0
  114. /package/dist/{lint-IHUH45OC.js.map → lint-CJM7BAIM.js.map} +0 -0
  115. /package/dist/{open-KWOV2OFO.js.map → open-544H7JF5.js.map} +0 -0
  116. /package/dist/{plan-BRJBFJHF.js.map → plan-Q7ELXDLC.js.map} +0 -0
  117. /package/dist/{rebase-AJOJOZUG.js.map → rebase-YND35CIE.js.map} +0 -0
  118. /package/dist/{recap-GKJXMDXW.js.map → recap-3W7COH7D.js.map} +0 -0
  119. /package/dist/{run-QEUVZF7J.js.map → run-QUXJKDQQ.js.map} +0 -0
  120. /package/dist/{shell-DAAVG4YN.js.map → shell-QGECBLST.js.map} +0 -0
  121. /package/dist/{summary-ZKOA35PT.js.map → summary-G2T4452H.js.map} +0 -0
  122. /package/dist/{test-5GPWWO3P.js.map → test-EA5NQFDC.js.map} +0 -0
  123. /package/dist/{test-git-EJUKDB7F.js.map → test-git-M7LSLEFL.js.map} +0 -0
  124. /package/dist/{test-prefix-23TOBUXY.js.map → test-prefix-64NAAUON.js.map} +0 -0
  125. /package/dist/{test-webserver-CKROHFBQ.js.map → test-webserver-OK6Z5FJM.js.map} +0 -0
  126. /package/dist/{vscode-6TOLFCI2.js.map → vscode-AR5NNXXI.js.map} +0 -0
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-BYUMEDDD.js";
5
5
  import {
6
6
  ShellCompletion
7
- } from "./chunk-JT5LZRMI.js";
7
+ } from "./chunk-NWMORW3U.js";
8
8
  import {
9
9
  FirstRunManager
10
10
  } from "./chunk-Q7POFB5Q.js";
11
11
  import {
12
12
  AgentManager
13
13
  } from "./chunk-B7U6OKUR.js";
14
- import "./chunk-4GAJJUYS.js";
14
+ import "./chunk-TC7APDKU.js";
15
15
  import {
16
16
  parseGitRemotes
17
17
  } from "./chunk-FXDYIV3K.js";
@@ -21,8 +21,8 @@ import {
21
21
  import {
22
22
  getRepoRoot,
23
23
  isFileGitignored
24
- } from "./chunk-H6ST2TGP.js";
25
- import "./chunk-XFEK2X2D.js";
24
+ } from "./chunk-AR5QKYNE.js";
25
+ import "./chunk-RI2YL6TK.js";
26
26
  import "./chunk-KBEIQP4G.js";
27
27
  import "./chunk-7JDMYTFZ.js";
28
28
  import {
@@ -425,4 +425,4 @@ var InitCommand = class {
425
425
  export {
426
426
  InitCommand
427
427
  };
428
- //# sourceMappingURL=init-ALYWKNWG.js.map
428
+ //# sourceMappingURL=init-676DHF6R.js.map
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  IssueTrackerFactory
4
- } from "./chunk-3P6J4IZZ.js";
4
+ } from "./chunk-KXGQYLFZ.js";
5
5
  import {
6
6
  fetchLinearIssueList
7
- } from "./chunk-ENGCJIYQ.js";
7
+ } from "./chunk-FJDRTVJX.js";
8
8
  import {
9
9
  findMainWorktreePathWithSettings
10
- } from "./chunk-H6ST2TGP.js";
10
+ } from "./chunk-AR5QKYNE.js";
11
11
  import {
12
12
  SettingsManager
13
- } from "./chunk-XFEK2X2D.js";
13
+ } from "./chunk-RI2YL6TK.js";
14
14
  import "./chunk-KBEIQP4G.js";
15
- import "./chunk-Y5HSSIK2.js";
15
+ import "./chunk-OFDN5NKS.js";
16
16
  import {
17
- fetchGitHubIssueList
18
- } from "./chunk-TRUMP4DA.js";
17
+ fetchGitHubIssueList,
18
+ fetchGitHubPRList
19
+ } from "./chunk-4CO6KG5S.js";
19
20
  import "./chunk-7JDMYTFZ.js";
20
21
  import {
21
22
  getLogger
@@ -83,7 +84,7 @@ var IssuesCommand = class {
83
84
  const cached = await readCacheFile(cacheFilePath);
84
85
  if (cached !== null) {
85
86
  logger.debug(`Returning cached issues (${cached.length} items)`);
86
- return cached;
87
+ return cached.map((item) => ({ type: "issue", ...item }));
87
88
  }
88
89
  let results;
89
90
  if (provider === "github") {
@@ -106,6 +107,27 @@ var IssuesCommand = class {
106
107
  } else {
107
108
  throw new Error(`Unsupported issue tracker provider: ${provider}`);
108
109
  }
110
+ results.forEach((item) => {
111
+ item.type = "issue";
112
+ });
113
+ try {
114
+ const prs = await fetchGitHubPRList({
115
+ limit,
116
+ cwd: resolvedProjectPath
117
+ });
118
+ const prItems = prs.map((pr) => ({ ...pr, type: "pr" }));
119
+ results = [...results, ...prItems];
120
+ } catch (error) {
121
+ const stderr = error.stderr ?? "";
122
+ const isExpectedError = error instanceof Error && (error.message.includes("not logged in") || error.message.includes("auth login") || error.message.includes("rate limit") || error.message.includes("ETIMEDOUT") || error.message.includes("ECONNREFUSED") || stderr.includes("not logged in") || stderr.includes("rate limit"));
123
+ if (isExpectedError) {
124
+ logger.warn(`PR fetch failed (non-fatal), continuing with issues only: ${error.message}`);
125
+ } else {
126
+ throw error;
127
+ }
128
+ }
129
+ results.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());
130
+ results = results.slice(0, limit);
109
131
  await writeCacheFile(cacheFilePath, results, resolvedProjectPath, provider);
110
132
  return results;
111
133
  }
@@ -113,4 +135,4 @@ var IssuesCommand = class {
113
135
  export {
114
136
  IssuesCommand
115
137
  };
116
- //# sourceMappingURL=issues-L7TBUPXT.js.map
138
+ //# sourceMappingURL=issues-PJSOLOBJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/issues.ts"],"sourcesContent":["import os from 'os'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport crypto from 'crypto'\nimport { SettingsManager } from '../lib/SettingsManager.js'\nimport { IssueTrackerFactory } from '../lib/IssueTrackerFactory.js'\nimport { findMainWorktreePathWithSettings } from '../utils/git.js'\nimport { fetchGitHubIssueList, fetchGitHubPRList } from '../utils/github.js'\nimport { fetchLinearIssueList } from '../utils/linear.js'\nimport { getLogger } from '../utils/logger-context.js'\n\n/**\n * Unified output interface for issues from any provider\n */\nexport interface IssueListItem {\n id: string\n title: string\n updatedAt: string\n url: string\n state: string\n type?: 'issue' | 'pr'\n}\n\n/**\n * File-based cache structure (follows UpdateNotifier pattern)\n */\ninterface IssuesCacheFile {\n timestamp: number // Date.now() when cached\n projectPath: string // for verification\n provider: string // 'github' | 'linear'\n data: IssueListItem[]\n}\n\n// Cache configuration\nconst CACHE_TTL_MS = 2 * 60 * 1000 // 2 minutes\nconst CACHE_DIR = path.join(os.homedir(), '.config', 'iloom-ai', 'cache')\n\n/**\n * Generate a deterministic cache file path from project path + provider\n */\nfunction getCacheFilePath(projectPath: string, provider: string, limit: number): string {\n const hash = crypto.createHash('md5').update(`${projectPath}:${provider}:${limit}`).digest('hex').slice(0, 12)\n return path.join(CACHE_DIR, `issues-${hash}.json`)\n}\n\n/**\n * Read cache file, return null if missing/expired/corrupted\n * Follows UpdateNotifier.getCachedCheck pattern\n */\nasync function readCacheFile(cacheFilePath: string): Promise<IssueListItem[] | null> {\n try {\n if (!fs.existsSync(cacheFilePath)) return null\n const content = await fs.readFile(cacheFilePath, 'utf8')\n const cache = JSON.parse(content) as IssuesCacheFile\n if (Date.now() - cache.timestamp < CACHE_TTL_MS) return cache.data\n return null // expired\n } catch {\n return null // corrupted or unreadable, treat as cache miss\n }\n}\n\n/**\n * Write cache file following UpdateNotifier.saveCacheFile pattern\n */\nasync function writeCacheFile(\n cacheFilePath: string,\n data: IssueListItem[],\n projectPath: string,\n provider: string,\n): Promise<void> {\n try {\n await fs.ensureDir(CACHE_DIR)\n const cache: IssuesCacheFile = { timestamp: Date.now(), projectPath, provider, data }\n await fs.writeFile(cacheFilePath, JSON.stringify(cache, null, 2), 'utf8')\n } catch {\n // Cache write failure is non-fatal, just log debug\n getLogger().debug(`Failed to write issues cache to ${cacheFilePath}`)\n }\n}\n\nexport interface IssuesCommandOptions {\n projectPath?: string | undefined\n limit?: number | undefined\n}\n\n/**\n * IssuesCommand: List open issues from the configured issue tracker\n *\n * Returns JSON array of issues. Uses file-based caching with ~2 minute TTL.\n * Follows the ProjectsCommand pattern for structure.\n */\nexport class IssuesCommand {\n private readonly settingsManager: SettingsManager\n\n constructor(settingsManager?: SettingsManager) {\n this.settingsManager = settingsManager ?? new SettingsManager()\n }\n\n /**\n * Execute the issues command\n * @param options - Command options\n * @returns Array of issue list items\n */\n async execute(options?: IssuesCommandOptions): Promise<IssueListItem[]> {\n const logger = getLogger()\n const limit = options?.limit ?? 100\n\n // 1. Resolve project root\n let resolvedProjectPath: string\n if (options?.projectPath) {\n resolvedProjectPath = options.projectPath\n } else {\n try {\n resolvedProjectPath = await findMainWorktreePathWithSettings()\n } catch {\n logger.debug('Failed to resolve worktree path, falling back to cwd')\n resolvedProjectPath = process.cwd()\n }\n }\n\n // 2. Load settings from resolved root\n const settings = await this.settingsManager.loadSettings(resolvedProjectPath)\n\n // 3. Determine provider\n const provider = IssueTrackerFactory.getProviderName(settings)\n\n // 4. Check file-based cache\n const cacheFilePath = getCacheFilePath(resolvedProjectPath, provider, limit)\n const cached = await readCacheFile(cacheFilePath)\n if (cached !== null) {\n logger.debug(`Returning cached issues (${cached.length} items)`)\n // Backfill type field for cache entries from before PR support was added\n return cached.map(item => ({ type: 'issue' as const, ...item }))\n }\n\n // 5. Fetch issues based on provider\n let results: IssueListItem[]\n\n if (provider === 'github') {\n results = await fetchGitHubIssueList({\n limit,\n cwd: resolvedProjectPath,\n })\n } else if (provider === 'linear') {\n const teamId = settings.issueManagement?.linear?.teamId\n if (!teamId) {\n throw new Error(\n 'Linear team ID not configured. Set issueManagement.linear.teamId in your settings.json.',\n )\n }\n const apiToken = settings.issueManagement?.linear?.apiToken ?? process.env.LINEAR_API_TOKEN\n results = await fetchLinearIssueList(teamId, {\n limit,\n ...(apiToken ? { apiToken } : {}),\n })\n } else {\n throw new Error(`Unsupported issue tracker provider: ${provider}`)\n }\n\n // Tag issues with type\n results.forEach(item => { item.type = 'issue' })\n\n // 6. Fetch PRs from GitHub (PRs are a GitHub concept regardless of issue tracker)\n try {\n const prs = await fetchGitHubPRList({\n limit,\n cwd: resolvedProjectPath,\n })\n const prItems: IssueListItem[] = prs.map(pr => ({ ...pr, type: 'pr' as const }))\n results = [...results, ...prItems]\n } catch (error) {\n // Only catch expected, non-fatal errors from gh CLI\n // Per CLAUDE.md: \"DO NOT SWALLOW ERRORS\" -- must check specifically\n const stderr = (error as NodeJS.ErrnoException & { stderr?: string }).stderr ?? ''\n const isExpectedError = error instanceof Error && (\n error.message.includes('not logged in') ||\n error.message.includes('auth login') ||\n error.message.includes('rate limit') ||\n error.message.includes('ETIMEDOUT') ||\n error.message.includes('ECONNREFUSED') ||\n stderr.includes('not logged in') ||\n stderr.includes('rate limit')\n )\n if (isExpectedError) {\n logger.warn(`PR fetch failed (non-fatal), continuing with issues only: ${error.message}`)\n } else {\n throw error // Re-throw unexpected errors -- do not swallow\n }\n }\n\n // 7. Sort by updatedAt descending and apply limit\n results.sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())\n results = results.slice(0, limit)\n\n // 8. Write results to cache file\n await writeCacheFile(cacheFilePath, results, resolvedProjectPath, provider)\n\n return results\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ScriptCommandBase
4
- } from "./chunk-TGRK3CHF.js";
5
- import "./chunk-2HZX6AMR.js";
4
+ } from "./chunk-KJTVU3HZ.js";
5
+ import "./chunk-YKFCCV6S.js";
6
6
  import "./chunk-4LKGCFGG.js";
7
- import "./chunk-4GAJJUYS.js";
7
+ import "./chunk-TC7APDKU.js";
8
8
  import "./chunk-VOGGLPG5.js";
9
- import "./chunk-H6ST2TGP.js";
10
- import "./chunk-XFEK2X2D.js";
9
+ import "./chunk-AR5QKYNE.js";
10
+ import "./chunk-RI2YL6TK.js";
11
11
  import "./chunk-KBEIQP4G.js";
12
12
  import "./chunk-6MLEBAYZ.js";
13
13
  import "./chunk-VT4PDUYT.js";
@@ -24,4 +24,4 @@ var LintCommand = class extends ScriptCommandBase {
24
24
  export {
25
25
  LintCommand
26
26
  };
27
- //# sourceMappingURL=lint-IHUH45OC.js.map
27
+ //# sourceMappingURL=lint-CJM7BAIM.js.map
@@ -1209,10 +1209,10 @@ async function fetchLinearIssueComments(identifier) {
1209
1209
  handleLinearError(error, "fetchLinearIssueComments");
1210
1210
  }
1211
1211
  }
1212
- async function getLinearChildIssues(identifier) {
1212
+ async function getLinearChildIssues(identifier, options) {
1213
1213
  try {
1214
1214
  logger.debug(`Fetching child issues for Linear issue: ${identifier}`);
1215
- const client = createLinearClient();
1215
+ const client = createLinearClient(options == null ? void 0 : options.apiToken);
1216
1216
  const issue = await client.issue(identifier);
1217
1217
  if (!issue) {
1218
1218
  throw new LinearServiceError("NOT_FOUND", `Linear issue ${identifier} not found`);