@link-assistant/hive-mind 0.54.6 → 1.0.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @link-assistant/hive-mind
2
2
 
3
+ ## 1.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 2a3848d: Add --prompt-architecture-care flag for managing REQUIREMENTS.md and ARCHITECTURE.md files
8
+
9
+ Adds an optional experimental flag `--prompt-architecture-care` that provides guidance for:
10
+ - Managing REQUIREMENTS.md (high-level why/what documentation)
11
+ - Managing ARCHITECTURE.md (high-level how documentation)
12
+ - TODO.md workflow management for task persistence across sessions
13
+
14
+ The flag is disabled by default and works with all tools (claude, agent, opencode, codex).
15
+
16
+ - a18a664: Fix session ID extraction error for --tool agent
17
+ - Fixed JSON parsing logic in agent tool to extract session IDs from NDJSON output
18
+ - Modified session summary to show informational message for agent tool instead of error
19
+
20
+ ## 1.0.0
21
+
22
+ ### Major Changes
23
+
24
+ - 4e8d141: Rename `--auto-continue-on-limit-reset` to `--auto-resume-on-limit-reset` for clarity
25
+
26
+ BREAKING CHANGE: The `--auto-continue-on-limit-reset` option has been renamed to `--auto-resume-on-limit-reset`. Users must update their commands and configurations to use the new flag name.
27
+
28
+ The option is related to `--resume` for `claude` command and has an entirely different meaning from `--auto-continue` mode. This rename makes the distinction clearer and aligns the terminology with the resume functionality.
29
+
30
+ Migration:
31
+ - Replace `--auto-continue-on-limit-reset` with `--auto-resume-on-limit-reset` in all commands
32
+ - Update environment variables and configuration files accordingly
33
+
3
34
  ## 0.54.6
4
35
 
5
36
  ### Patch Changes
package/README.md CHANGED
@@ -223,12 +223,12 @@ See [docs/HELM.md](./docs/HELM.md) for detailed Helm configuration options.
223
223
  --attach-logs
224
224
  --verbose
225
225
  --no-tool-check
226
- --auto-continue-on-limit-reset
226
+ --auto-resume-on-limit-reset
227
227
  TELEGRAM_SOLVE_OVERRIDES:
228
228
  --attach-logs
229
229
  --verbose
230
230
  --no-tool-check
231
- --auto-continue-on-limit-reset
231
+ --auto-resume-on-limit-reset
232
232
  TELEGRAM_BOT_VERBOSE: true
233
233
  "
234
234
 
@@ -250,12 +250,12 @@ See [docs/HELM.md](./docs/HELM.md) for detailed Helm configuration options.
250
250
  --attach-logs
251
251
  --verbose
252
252
  --no-tool-check
253
- --auto-continue-on-limit-reset
253
+ --auto-resume-on-limit-reset
254
254
  )" --solve-overrides "(
255
255
  --attach-logs
256
256
  --verbose
257
257
  --no-tool-check
258
- --auto-continue-on-limit-reset
258
+ --auto-resume-on-limit-reset
259
259
  )" --verbose
260
260
 
261
261
  # Press CTRL + A + D for detach from screen
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@link-assistant/hive-mind",
3
- "version": "0.54.6",
3
+ "version": "1.0.1",
4
4
  "description": "AI-powered issue solver and hive mind for collaborative problem solving",
5
5
  "main": "src/hive.mjs",
6
6
  "type": "module",
package/src/agent.lib.mjs CHANGED
@@ -405,7 +405,26 @@ export const executeAgentCommand = async params => {
405
405
  for await (const chunk of execCommand.stream()) {
406
406
  if (chunk.type === 'stdout') {
407
407
  const output = chunk.data.toString();
408
- await log(output);
408
+ // Split output into individual lines for NDJSON parsing
409
+ // Agent outputs NDJSON (newline-delimited JSON) format where each line is a separate JSON object
410
+ // This allows us to parse each event independently and extract structured data like session IDs
411
+ const lines = output.split('\n');
412
+ for (const line of lines) {
413
+ if (!line.trim()) continue;
414
+ try {
415
+ const data = JSON.parse(line);
416
+ // Output formatted JSON
417
+ await log(JSON.stringify(data, null, 2));
418
+ // Capture session ID from the first message
419
+ if (!sessionId && data.sessionID) {
420
+ sessionId = data.sessionID;
421
+ await log(`šŸ“Œ Session ID: ${sessionId}`);
422
+ }
423
+ } catch {
424
+ // Not JSON - log as plain text
425
+ await log(line);
426
+ }
427
+ }
409
428
  lastMessage = output;
410
429
  fullOutput += output; // Collect for both pricing calculation and error detection
411
430
  }
@@ -3,6 +3,8 @@
3
3
  * Handles building prompts for Agent commands
4
4
  */
5
5
 
6
+ import { getArchitectureCareSubPrompt } from './architecture-care.prompts.lib.mjs';
7
+
6
8
  /**
7
9
  * Build the user prompt for Agent
8
10
  * @param {Object} params - Parameters for building the user prompt
@@ -183,7 +185,7 @@ GitHub CLI command patterns.
183
185
  - When adding PR comment, use gh pr comment NUMBER --body "text" --repo OWNER/REPO.
184
186
  - When adding issue comment, use gh issue comment NUMBER --body "text" --repo OWNER/REPO.
185
187
  - When viewing PR details, use gh pr view NUMBER --repo OWNER/REPO.
186
- - When filtering with jq, use gh api repos/${owner}/${repo}/pulls/${prNumber}/comments --paginate --jq 'reverse | .[0:5]'.`;
188
+ - When filtering with jq, use gh api repos/${owner}/${repo}/pulls/${prNumber}/comments --paginate --jq 'reverse | .[0:5]'.${getArchitectureCareSubPrompt(argv)}`;
187
189
  };
188
190
 
189
191
  // Export all functions as default object too
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Architecture care sub-prompt module
3
+ * Provides guidance for managing REQUIREMENTS.md, ARCHITECTURE.md, and TODO.md files
4
+ *
5
+ * This is an experimental feature enabled via --prompt-architecture-care flag
6
+ */
7
+
8
+ /**
9
+ * Build the architecture care sub-prompt content
10
+ * @returns {string} The formatted sub-prompt for architecture documentation care
11
+ */
12
+ export const buildArchitectureCareSubPrompt = () => {
13
+ return `
14
+ Architecture and Requirements Documentation Care.
15
+ - REQUIREMENTS.md is a file that gives high level description on why/what it is for and so on relative to the entire repository.
16
+ - ARCHITECTURE.md is a file that gives high level description on how it was implemented so far.
17
+ - When any issue or comment changes how we see REQUIREMENTS.md or ARCHITECTURE.md, these files should be updated accordingly.
18
+ - When REQUIREMENTS.md or ARCHITECTURE.md files get too large, consider creating additional README.md, REQUIREMENTS.md, and ARCHITECTURE.md files in separate folders.
19
+ - When creating nested documentation files, make sure the root files have references to inner level documentation.
20
+ - When working with documentation, each README.md, REQUIREMENTS.md, and ARCHITECTURE.md scope should be related to the entire folder where such file exists.
21
+ - When you make changes that affect the high-level purpose, goals, or requirements of the project, update REQUIREMENTS.md.
22
+ - When you make changes that affect the implementation, architecture, or design patterns of the project, update ARCHITECTURE.md.
23
+ - When reviewing your changes before committing, check if REQUIREMENTS.md or ARCHITECTURE.md need updates based on the scope of your changes.
24
+
25
+ TODO.md Workflow Management.
26
+ - At the start of each working session, check if TODO.md exists in the repository root.
27
+ - When TODO.md exists, read it first and continue finishing all items listed in it before starting any new work.
28
+ - When all items in TODO.md are completed, delete the TODO.md file to indicate work is done.
29
+ - When you cannot finish all tasks in the current working session, create or update TODO.md with all remaining tasks that need to be completed.
30
+ - When creating TODO.md, use a clear markdown checklist format with each item as a separate line.
31
+ - When updating TODO.md during a session, remove completed items and add any newly discovered tasks that couldn't be finished.
32
+ - TODO.md serves as a persistent task list across working sessions, ensuring continuity and nothing is forgotten between sessions.
33
+ - When starting work on a repository, the priority is: (1) Check TODO.md, (2) Complete TODO.md items, (3) Work on current issue/task, (4) Update TODO.md if needed before ending session.`;
34
+ };
35
+
36
+ /**
37
+ * Get the architecture care sub-prompt if enabled
38
+ * @param {Object} argv - Command line arguments
39
+ * @returns {string} The sub-prompt content or empty string if disabled
40
+ */
41
+ export const getArchitectureCareSubPrompt = argv => {
42
+ if (argv && argv.promptArchitectureCare) {
43
+ return buildArchitectureCareSubPrompt();
44
+ }
45
+ return '';
46
+ };
47
+
48
+ // Export all functions as default object too
49
+ export default {
50
+ buildArchitectureCareSubPrompt,
51
+ getArchitectureCareSubPrompt,
52
+ };
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * (cd "/path/to/workdir" && claude --resume <session-id>)
11
11
  *
12
- * This is the same pattern used by --auto-continue-on-limit-reset and allows users to:
12
+ * This is the same pattern used by --auto-resume-on-limit-reset and allows users to:
13
13
  * 1. Resume sessions directly using Claude CLI (not through solve.mjs)
14
14
  * 2. Investigate issues interactively in the working directory
15
15
  * 3. Continue work after usage limits reset
@@ -26,7 +26,7 @@
26
26
  *
27
27
  * This generates a copy-pasteable command that users can execute directly
28
28
  * to resume a Claude session in interactive mode. This is the same pattern
29
- * used by --auto-continue-on-limit-reset.
29
+ * used by --auto-resume-on-limit-reset.
30
30
  *
31
31
  * The command includes all necessary flags to match how the original session was run:
32
32
  * - --resume <sessionId>: Resume from the specified session
@@ -3,6 +3,8 @@
3
3
  * Handles building prompts for Claude commands
4
4
  */
5
5
 
6
+ import { getArchitectureCareSubPrompt } from './architecture-care.prompts.lib.mjs';
7
+
6
8
  /**
7
9
  * Build the user prompt for Claude
8
10
  * @param {Object} params - Parameters for building the user prompt
@@ -241,7 +243,7 @@ Plan sub-agent usage.
241
243
  - When using the Plan sub-agent, you can add it as the first item in your todo list.
242
244
  - When you delegate planning, use the Task tool with subagent_type="Plan" before starting implementation work.`
243
245
  : ''
244
- }`;
246
+ }${getArchitectureCareSubPrompt(argv)}`;
245
247
  };
246
248
 
247
249
  // Export all functions as default object too
@@ -3,6 +3,8 @@
3
3
  * Handles building prompts for Codex CLI commands
4
4
  */
5
5
 
6
+ import { getArchitectureCareSubPrompt } from './architecture-care.prompts.lib.mjs';
7
+
6
8
  /**
7
9
  * Build the user prompt for Codex
8
10
  * @param {Object} params - Parameters for building the user prompt
@@ -191,7 +193,7 @@ GitHub CLI command patterns.
191
193
  - When adding PR comment, use gh pr comment NUMBER --body "text" --repo OWNER/REPO.
192
194
  - When adding issue comment, use gh issue comment NUMBER --body "text" --repo OWNER/REPO.
193
195
  - When viewing PR details, use gh pr view NUMBER --repo OWNER/REPO.
194
- - When filtering with jq, use gh api repos/\${owner}/\${repo}/pulls/\${prNumber}/comments --paginate --jq 'reverse | .[0:5]'.`;
196
+ - When filtering with jq, use gh api repos/\${owner}/\${repo}/pulls/\${prNumber}/comments --paginate --jq 'reverse | .[0:5]'.${getArchitectureCareSubPrompt(argv)}`;
195
197
  };
196
198
 
197
199
  // Export all functions as default object too
@@ -202,9 +202,9 @@ export const createYargsConfig = yargsInstance => {
202
202
  description: 'Pass --auto-continue to solve for each issue (continues with existing PRs instead of creating new ones)',
203
203
  default: true,
204
204
  })
205
- .option('auto-continue-on-limit-reset', {
205
+ .option('auto-resume-on-limit-reset', {
206
206
  type: 'boolean',
207
- description: 'Automatically continue when AI tool limit resets (calculates reset time and waits). Passed to solve command.',
207
+ description: 'Automatically resume when AI tool limit resets (calculates reset time and waits). Passed to solve command.',
208
208
  default: false,
209
209
  })
210
210
  .option('think', {
@@ -281,6 +281,11 @@ export const createYargsConfig = yargsInstance => {
281
281
  description: 'Include prompt to check related/sibling pull requests when studying related work. Enabled by default, use --no-prompt-check-sibling-pull-requests to disable.',
282
282
  default: true,
283
283
  })
284
+ .option('prompt-architecture-care', {
285
+ type: 'boolean',
286
+ description: '[EXPERIMENTAL] Include guidance for managing REQUIREMENTS.md and ARCHITECTURE.md files. When enabled, agents will update these documentation files when changes affect requirements or architecture.',
287
+ default: false,
288
+ })
284
289
  .parserConfiguration({
285
290
  'boolean-negation': true,
286
291
  'strip-dashed': false,
package/src/hive.mjs CHANGED
@@ -745,7 +745,7 @@ if (isDirectExecution) {
745
745
  if (argv.dryRun) args.push('--dry-run');
746
746
  if (argv.skipToolConnectionCheck || argv.toolConnectionCheck === false) args.push('--skip-tool-connection-check');
747
747
  args.push(argv.autoContinue ? '--auto-continue' : '--no-auto-continue');
748
- if (argv.autoContinueOnLimitReset) args.push('--auto-continue-on-limit-reset');
748
+ if (argv.autoResumeOnLimitReset) args.push('--auto-resume-on-limit-reset');
749
749
  if (argv.think) args.push('--think', argv.think);
750
750
  if (argv.promptPlanSubAgent) args.push('--prompt-plan-sub-agent');
751
751
  if (!argv.sentry) args.push('--no-sentry');
@@ -3,6 +3,8 @@
3
3
  * Handles building prompts for OpenCode commands
4
4
  */
5
5
 
6
+ import { getArchitectureCareSubPrompt } from './architecture-care.prompts.lib.mjs';
7
+
6
8
  /**
7
9
  * Build the user prompt for OpenCode
8
10
  * @param {Object} params - Parameters for building the user prompt
@@ -182,7 +184,7 @@ GitHub CLI command patterns.
182
184
  - When adding PR comment, use gh pr comment NUMBER --body "text" --repo OWNER/REPO.
183
185
  - When adding issue comment, use gh issue comment NUMBER --body "text" --repo OWNER/REPO.
184
186
  - When viewing PR details, use gh pr view NUMBER --repo OWNER/REPO.
185
- - When filtering with jq, use gh api repos/${owner}/${repo}/pulls/${prNumber}/comments --paginate --jq 'reverse | .[0:5]'.`;
187
+ - When filtering with jq, use gh api repos/${owner}/${repo}/pulls/${prNumber}/comments --paginate --jq 'reverse | .[0:5]'.${getArchitectureCareSubPrompt(argv)}`;
186
188
  };
187
189
 
188
190
  // Export all functions as default object too
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // Auto-continue module for solve command
3
+ // Session continuation module for solve command
4
+ // Handles session resumption, PR detection, and limit reset waiting
4
5
  // Extracted from solve.mjs to keep files under 1500 lines
5
6
 
6
7
  // Use use-m to dynamically import modules for cross-runtime compatibility
@@ -103,9 +104,9 @@ export const autoContinueWhenLimitResets = async (issueUrl, sessionId, argv, sho
103
104
  sessionId,
104
105
  ];
105
106
 
106
- // Preserve auto-continue flag
107
- if (argv.autoContinueOnLimitReset) {
108
- resumeArgs.push('--auto-continue-on-limit-reset');
107
+ // Preserve auto-resume flag
108
+ if (argv.autoResumeOnLimitReset) {
109
+ resumeArgs.push('--auto-resume-on-limit-reset');
109
110
  }
110
111
 
111
112
  // Preserve other flags from original invocation
@@ -145,9 +145,9 @@ export const createYargsConfig = yargsInstance => {
145
145
  description: 'Continue with existing PR when issue URL is provided (instead of creating new PR)',
146
146
  default: true,
147
147
  })
148
- .option('auto-continue-on-limit-reset', {
148
+ .option('auto-resume-on-limit-reset', {
149
149
  type: 'boolean',
150
- description: 'Automatically continue when AI tool limit resets (calculates reset time and waits)',
150
+ description: 'Automatically resume when AI tool limit resets (calculates reset time and waits)',
151
151
  default: false,
152
152
  })
153
153
  .option('auto-resume-on-errors', {
@@ -278,6 +278,11 @@ export const createYargsConfig = yargsInstance => {
278
278
  description: 'Enable automatic issue creation for spotted bugs/errors not related to main task. Issues will include reproducible examples, workarounds, and fix suggestions. Works for both current and third-party repositories. Only supported for --tool claude.',
279
279
  default: false,
280
280
  })
281
+ .option('prompt-architecture-care', {
282
+ type: 'boolean',
283
+ description: '[EXPERIMENTAL] Include guidance for managing REQUIREMENTS.md and ARCHITECTURE.md files. When enabled, agents will update these documentation files when changes affect requirements or architecture.',
284
+ default: false,
285
+ })
281
286
  .option('prompt-case-studies', {
282
287
  type: 'boolean',
283
288
  description: 'Create comprehensive case study documentation for the issue including logs, analysis, timeline, root cause investigation, and proposed solutions. Organizes findings into ./docs/case-studies/issue-{id}/ directory. Only supported for --tool claude.',
package/src/solve.mjs CHANGED
@@ -892,10 +892,10 @@ try {
892
892
 
893
893
  // Handle limit reached scenario
894
894
  if (limitReached) {
895
- const shouldAutoContinueOnReset = argv.autoContinueOnLimitReset;
895
+ const shouldAutoResumeOnReset = argv.autoResumeOnLimitReset;
896
896
 
897
- // If limit was reached but auto-continue-on-limit-reset is NOT enabled, fail immediately
898
- if (!shouldAutoContinueOnReset) {
897
+ // If limit was reached but auto-resume-on-limit-reset is NOT enabled, fail immediately
898
+ if (!shouldAutoResumeOnReset) {
899
899
  await log('\nāŒ USAGE LIMIT REACHED!');
900
900
  await log(' The AI tool has reached its usage limit.');
901
901
 
@@ -972,9 +972,9 @@ try {
972
972
  }
973
973
  }
974
974
 
975
- await safeExit(1, 'Usage limit reached - use --auto-continue-on-limit-reset to wait for reset');
975
+ await safeExit(1, 'Usage limit reached - use --auto-resume-on-limit-reset to wait for reset');
976
976
  } else {
977
- // auto-continue-on-limit-reset is enabled - attach logs and/or post waiting comment
977
+ // auto-resume-on-limit-reset is enabled - attach logs and/or post waiting comment
978
978
  if (prNumber && global.limitResetTime) {
979
979
  // If --attach-logs is enabled, upload logs with usage limit details
980
980
  if (shouldAttachLogs && sessionId) {
@@ -1030,7 +1030,7 @@ try {
1030
1030
  // Build Claude CLI resume command
1031
1031
  const tool = argv.tool || 'claude';
1032
1032
  const resumeCmd = tool === 'claude' ? buildClaudeResumeCommand({ tempDir, sessionId, model: argv.model }) : null;
1033
- const waitingComment = `ā³ **Usage Limit Reached - Waiting to Continue**\n\nThe AI tool has reached its usage limit. Auto-continue is enabled with \`--auto-continue-on-limit-reset\`.\n\n**Reset time:** ${global.limitResetTime}\n**Wait time:** ${formatWaitTime(waitMs)} (days:hours:minutes:seconds)\n\nThe session will automatically resume when the limit resets.\n\nSession ID: \`${sessionId}\`${resumeCmd ? `\n\nTo resume manually:\n\`\`\`bash\n${resumeCmd}\n\`\`\`` : ''}`;
1033
+ const waitingComment = `ā³ **Usage Limit Reached - Waiting to Continue**\n\nThe AI tool has reached its usage limit. Auto-resume is enabled with \`--auto-resume-on-limit-reset\`.\n\n**Reset time:** ${global.limitResetTime}\n**Wait time:** ${formatWaitTime(waitMs)} (days:hours:minutes:seconds)\n\nThe session will automatically resume when the limit resets.\n\nSession ID: \`${sessionId}\`${resumeCmd ? `\n\nTo resume manually:\n\`\`\`bash\n${resumeCmd}\n\`\`\`` : ''}`;
1034
1034
 
1035
1035
  const commentResult = await $`gh pr comment ${prNumber} --repo ${owner}/${repo} --body ${waitingComment}`;
1036
1036
  if (commentResult.code === 0) {
@@ -1044,9 +1044,9 @@ try {
1044
1044
  }
1045
1045
  }
1046
1046
 
1047
- // Handle failure cases, but skip exit if limit reached with auto-continue enabled
1047
+ // Handle failure cases, but skip exit if limit reached with auto-resume enabled
1048
1048
  // This allows the code to continue to showSessionSummary() where autoContinueWhenLimitResets() is called
1049
- const shouldSkipFailureExitForAutoLimitContinue = limitReached && argv.autoContinueOnLimitReset;
1049
+ const shouldSkipFailureExitForAutoLimitContinue = limitReached && argv.autoResumeOnLimitReset;
1050
1050
 
1051
1051
  if (!success && !shouldSkipFailureExitForAutoLimitContinue) {
1052
1052
  // Show claude resume command only for --tool claude (or default) on failure
@@ -1171,7 +1171,7 @@ export const checkoutPrBranch = async (tempDir, branchName, prForkRemote, prFork
1171
1171
  // Cleanup temporary directory
1172
1172
  export const cleanupTempDirectory = async (tempDir, argv, limitReached) => {
1173
1173
  // Determine if we should skip cleanup
1174
- const shouldKeepDirectory = !argv.autoCleanup || argv.resume || limitReached || (argv.autoContinueOnLimitReset && global.limitResetTime);
1174
+ const shouldKeepDirectory = !argv.autoCleanup || argv.resume || limitReached || (argv.autoResumeOnLimitReset && global.limitResetTime);
1175
1175
 
1176
1176
  if (!shouldKeepDirectory) {
1177
1177
  try {
@@ -27,7 +27,7 @@ import { safeExit } from './exit-handler.lib.mjs';
27
27
  const githubLib = await import('./github.lib.mjs');
28
28
  const { sanitizeLogContent, attachLogToGitHub } = githubLib;
29
29
 
30
- // Import auto-continue functions
30
+ // Import continuation functions (session resumption, PR detection)
31
31
  const autoContinue = await import('./solve.auto-continue.lib.mjs');
32
32
  const { autoContinueWhenLimitResets } = autoContinue;
33
33
 
@@ -354,7 +354,6 @@ export const showSessionSummary = async (sessionId, limitReached, argv, issueUrl
354
354
  if (sessionId) {
355
355
  await log(`āœ… Session ID: ${sessionId}`);
356
356
  // Always use absolute path for log file display
357
- const path = await use('path');
358
357
  const absoluteLogPath = path.resolve(getLogFile());
359
358
  await log(`āœ… Complete log file: ${absoluteLogPath}`);
360
359
 
@@ -376,8 +375,8 @@ export const showSessionSummary = async (sessionId, limitReached, argv, issueUrl
376
375
  if (limitReached) {
377
376
  await log('ā° LIMIT REACHED DETECTED!');
378
377
 
379
- if (argv.autoContinueOnLimitReset && global.limitResetTime) {
380
- await log(`\nšŸ”„ AUTO-CONTINUE ON LIMIT RESET ENABLED - Will resume at ${global.limitResetTime}`);
378
+ if (argv.autoResumeOnLimitReset && global.limitResetTime) {
379
+ await log(`\nšŸ”„ AUTO-RESUME ON LIMIT RESET ENABLED - Will resume at ${global.limitResetTime}`);
381
380
  await autoContinueWhenLimitResets(issueUrl, sessionId, argv, shouldAttachLogs);
382
381
  } else {
383
382
  if (global.limitResetTime) {
@@ -402,7 +401,12 @@ export const showSessionSummary = async (sessionId, limitReached, argv, issueUrl
402
401
 
403
402
  // Don't show log preview, it's too technical
404
403
  } else {
405
- await log('āŒ No session ID extracted');
404
+ // For agent tool, session IDs may not be meaningful for resuming, so don't show as error
405
+ if (argv.tool !== 'agent') {
406
+ await log('āŒ No session ID extracted');
407
+ } else {
408
+ await log('ā„¹ļø Agent tool completed (session IDs not used for resuming)');
409
+ }
406
410
  // Always use absolute path for log file display
407
411
  const logFilePath = path.resolve(getLogFile());
408
412
  await log(`šŸ“ Log file available: ${logFilePath}`);