@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 +31 -0
- package/README.md +4 -4
- package/package.json +1 -1
- package/src/agent.lib.mjs +20 -1
- package/src/agent.prompts.lib.mjs +3 -1
- package/src/architecture-care.prompts.lib.mjs +52 -0
- package/src/claude.command-builder.lib.mjs +2 -2
- package/src/claude.prompts.lib.mjs +3 -1
- package/src/codex.prompts.lib.mjs +3 -1
- package/src/hive.config.lib.mjs +7 -2
- package/src/hive.mjs +1 -1
- package/src/opencode.prompts.lib.mjs +3 -1
- package/src/solve.auto-continue.lib.mjs +5 -4
- package/src/solve.config.lib.mjs +7 -2
- package/src/solve.mjs +8 -8
- package/src/solve.repository.lib.mjs +1 -1
- package/src/solve.results.lib.mjs +9 -5
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-
|
|
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-
|
|
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-
|
|
253
|
+
--auto-resume-on-limit-reset
|
|
254
254
|
)" --solve-overrides "(
|
|
255
255
|
--attach-logs
|
|
256
256
|
--verbose
|
|
257
257
|
--no-tool-check
|
|
258
|
-
--auto-
|
|
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
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
|
-
|
|
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-
|
|
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-
|
|
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
|
package/src/hive.config.lib.mjs
CHANGED
|
@@ -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-
|
|
205
|
+
.option('auto-resume-on-limit-reset', {
|
|
206
206
|
type: 'boolean',
|
|
207
|
-
description: 'Automatically
|
|
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.
|
|
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
|
-
//
|
|
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-
|
|
107
|
-
if (argv.
|
|
108
|
-
resumeArgs.push('--auto-
|
|
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
|
package/src/solve.config.lib.mjs
CHANGED
|
@@ -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-
|
|
148
|
+
.option('auto-resume-on-limit-reset', {
|
|
149
149
|
type: 'boolean',
|
|
150
|
-
description: 'Automatically
|
|
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
|
|
895
|
+
const shouldAutoResumeOnReset = argv.autoResumeOnLimitReset;
|
|
896
896
|
|
|
897
|
-
// If limit was reached but auto-
|
|
898
|
-
if (!
|
|
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-
|
|
975
|
+
await safeExit(1, 'Usage limit reached - use --auto-resume-on-limit-reset to wait for reset');
|
|
976
976
|
} else {
|
|
977
|
-
// auto-
|
|
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-
|
|
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-
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
380
|
-
await log(`\nš AUTO-
|
|
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
|
-
|
|
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}`);
|