@link-assistant/hive-mind 0.41.5 → 0.41.8

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,17 @@
1
1
  # @link-assistant/hive-mind
2
2
 
3
+ ## 0.41.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 80aff72: Add Deno runtime installation support to Ubuntu 24 server installation script and Docker environment
8
+
9
+ ## 0.41.7
10
+
11
+ ### Patch Changes
12
+
13
+ - 781a8e4: Fix: Upload logs when usage limit is reached
14
+
3
15
  ## 0.41.5
4
16
 
5
17
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@link-assistant/hive-mind",
3
- "version": "0.41.5",
3
+ "version": "0.41.8",
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/solve.mjs CHANGED
@@ -875,8 +875,42 @@ try {
875
875
  await log('\nāŒ USAGE LIMIT REACHED!');
876
876
  await log(' The AI tool has reached its usage limit.');
877
877
 
878
- // Post failure comment to PR if we have one
879
- if (prNumber) {
878
+ // If --attach-logs is enabled and we have a PR, attach logs with usage limit details
879
+ if (shouldAttachLogs && sessionId && prNumber) {
880
+ await log('\nšŸ“„ Attaching logs to Pull Request...');
881
+ try {
882
+ // Build resume command
883
+ const resumeCommand = `${process.argv[0]} ${process.argv[1]} ${issueUrl} --resume ${sessionId}`;
884
+ const logUploadSuccess = await attachLogToGitHub({
885
+ logFile: getLogFile(),
886
+ targetType: 'pr',
887
+ targetNumber: prNumber,
888
+ owner,
889
+ repo,
890
+ $,
891
+ log,
892
+ sanitizeLogContent,
893
+ // Mark this as a usage limit case for proper formatting
894
+ isUsageLimit: true,
895
+ limitResetTime: global.limitResetTime,
896
+ toolName: (argv.tool || 'AI tool').toString().toLowerCase() === 'claude' ? 'Claude' :
897
+ (argv.tool || 'AI tool').toString().toLowerCase() === 'codex' ? 'Codex' :
898
+ (argv.tool || 'AI tool').toString().toLowerCase() === 'opencode' ? 'OpenCode' :
899
+ (argv.tool || 'AI tool').toString().toLowerCase() === 'agent' ? 'Agent' : 'AI tool',
900
+ resumeCommand,
901
+ sessionId
902
+ });
903
+
904
+ if (logUploadSuccess) {
905
+ await log(' āœ… Logs uploaded successfully');
906
+ } else {
907
+ await log(' āš ļø Failed to upload logs', { verbose: true });
908
+ }
909
+ } catch (uploadError) {
910
+ await log(` āš ļø Error uploading logs: ${uploadError.message}`, { verbose: true });
911
+ }
912
+ } else if (prNumber) {
913
+ // Fallback: Post simple failure comment if logs are not attached
880
914
  try {
881
915
  const resetTime = global.limitResetTime;
882
916
  const failureComment = resetTime
@@ -894,33 +928,70 @@ try {
894
928
 
895
929
  await safeExit(1, 'Usage limit reached - use --auto-continue-on-limit-reset to wait for reset');
896
930
  } else {
897
- // auto-continue-on-limit-reset is enabled - post waiting comment
931
+ // auto-continue-on-limit-reset is enabled - attach logs and/or post waiting comment
898
932
  if (prNumber && global.limitResetTime) {
899
- try {
900
- // Calculate wait time in d:h:m:s format
901
- const validation = await import('./solve.validation.lib.mjs');
902
- const { calculateWaitTime } = validation;
903
- const waitMs = calculateWaitTime(global.limitResetTime);
904
-
905
- const formatWaitTime = (ms) => {
906
- const seconds = Math.floor(ms / 1000);
907
- const minutes = Math.floor(seconds / 60);
908
- const hours = Math.floor(minutes / 60);
909
- const days = Math.floor(hours / 24);
910
- const s = seconds % 60;
911
- const m = minutes % 60;
912
- const h = hours % 24;
913
- return `${days}:${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
914
- };
915
-
916
- 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}\``;
917
-
918
- const commentResult = await $`gh pr comment ${prNumber} --repo ${owner}/${repo} --body ${waitingComment}`;
919
- if (commentResult.code === 0) {
920
- await log(' Posted waiting comment to PR');
933
+ // If --attach-logs is enabled, upload logs with usage limit details
934
+ if (shouldAttachLogs && sessionId) {
935
+ await log('\nšŸ“„ Attaching logs to Pull Request (auto-continue mode)...');
936
+ try {
937
+ // Build resume command
938
+ const resumeCommand = `${process.argv[0]} ${process.argv[1]} ${issueUrl} --resume ${sessionId}`;
939
+ const logUploadSuccess = await attachLogToGitHub({
940
+ logFile: getLogFile(),
941
+ targetType: 'pr',
942
+ targetNumber: prNumber,
943
+ owner,
944
+ repo,
945
+ $,
946
+ log,
947
+ sanitizeLogContent,
948
+ // Mark this as a usage limit case for proper formatting
949
+ isUsageLimit: true,
950
+ limitResetTime: global.limitResetTime,
951
+ toolName: (argv.tool || 'AI tool').toString().toLowerCase() === 'claude' ? 'Claude' :
952
+ (argv.tool || 'AI tool').toString().toLowerCase() === 'codex' ? 'Codex' :
953
+ (argv.tool || 'AI tool').toString().toLowerCase() === 'opencode' ? 'OpenCode' :
954
+ (argv.tool || 'AI tool').toString().toLowerCase() === 'agent' ? 'Agent' : 'AI tool',
955
+ resumeCommand,
956
+ sessionId
957
+ });
958
+
959
+ if (logUploadSuccess) {
960
+ await log(' āœ… Logs uploaded successfully');
961
+ } else {
962
+ await log(' āš ļø Failed to upload logs', { verbose: true });
963
+ }
964
+ } catch (uploadError) {
965
+ await log(` āš ļø Error uploading logs: ${uploadError.message}`, { verbose: true });
966
+ }
967
+ } else {
968
+ // Fallback: Post simple waiting comment if logs are not attached
969
+ try {
970
+ // Calculate wait time in d:h:m:s format
971
+ const validation = await import('./solve.validation.lib.mjs');
972
+ const { calculateWaitTime } = validation;
973
+ const waitMs = calculateWaitTime(global.limitResetTime);
974
+
975
+ const formatWaitTime = (ms) => {
976
+ const seconds = Math.floor(ms / 1000);
977
+ const minutes = Math.floor(seconds / 60);
978
+ const hours = Math.floor(minutes / 60);
979
+ const days = Math.floor(hours / 24);
980
+ const s = seconds % 60;
981
+ const m = minutes % 60;
982
+ const h = hours % 24;
983
+ return `${days}:${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
984
+ };
985
+
986
+ 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}\``;
987
+
988
+ const commentResult = await $`gh pr comment ${prNumber} --repo ${owner}/${repo} --body ${waitingComment}`;
989
+ if (commentResult.code === 0) {
990
+ await log(' Posted waiting comment to PR');
991
+ }
992
+ } catch (error) {
993
+ await log(` Warning: Could not post waiting comment: ${cleanErrorMessage(error)}`, { verbose: true });
921
994
  }
922
- } catch (error) {
923
- await log(` Warning: Could not post waiting comment: ${cleanErrorMessage(error)}`, { verbose: true });
924
995
  }
925
996
  }
926
997
  }