Skip to content

Comments

Clean up code and improve thread processing workflow#1797

Merged
MrgSub merged 1 commit intostagingfrom
ZEROClean_up_code_and_improve_thread_processing_workflow
Jul 22, 2025
Merged

Clean up code and improve thread processing workflow#1797
MrgSub merged 1 commit intostagingfrom
ZEROClean_up_code_and_improve_thread_processing_workflow

Conversation

@MrgSub
Copy link
Collaborator

@MrgSub MrgSub commented Jul 22, 2025

Clean up Gmail thread processing and improve error handling

Description

This PR improves the Gmail thread processing workflow by:

  1. Removing unnecessary console logs and debug statements
  2. Adding proper type annotations instead of using any
  3. Removing unused PartyKit request routing code
  4. Enhancing thread processing by tracking both changed and added threads separately
  5. Adding JSDoc comments to key workflow functions
  6. Implementing thread syncing for newly added threads
  7. Fixing a non-null assertion by removing the ! operator

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ⚡ Performance improvement

Areas Affected

  • Email Integration (Gmail, IMAP, etc.)
  • Data Storage/Management

Testing Done

  • Manual testing performed

Checklist

  • I have performed a self-review of my code
  • My code follows the project's style guidelines
  • I have commented my code, particularly in complex areas
  • My changes generate no new warnings

Additional Notes

The thread processing logic now distinguishes between threads that were changed and threads that were newly added, allowing for more efficient processing. Added JSDoc comments to improve code documentation and maintainability.


By submitting this pull request, I confirm that my contribution is made under the terms of the project's license.

Summary by CodeRabbit

  • Bug Fixes

    • Improved handling of thread synchronization in workflows, ensuring newly added threads are properly synced before processing.
    • Reduced unnecessary debug logging for cleaner output.
  • Documentation

    • Added JSDoc comments to key workflow functions for better clarity.
  • Refactor

    • Enhanced type safety in workflow parameters and return types.
    • Simplified and reordered import statements for improved code organization.

@jazzberry-ai
Copy link

jazzberry-ai bot commented Jul 22, 2025

Bug Report

Name Severity Example test case Description
Unbounded Concurrency in syncThread High Add a large number of new threads to a connection. The Effect.all call for syncing threads uses unbounded concurrency, which could overwhelm the Gmail API and lead to rate limits or crashes.
Unhandled Errors during syncThread Medium A Gmail API error occurs during thread synchronization. The Effect.tryPromise used to call agent.syncThread catches errors, but they are not properly handled, potentially leading to data inconsistency or missed updates.
Incorrect Type Assertion in runThreadWorkflow Low The metadata in threadSummary does not match the expected type { summary: string; lastMsg: string }. The code still casts to any initially. If the metadata field doesn't match the expected type { summary: string; lastMsg: string }, there could be runtime errors due to unexpected properties or missing properties.

Comments? Email us. Your free trial ends in 7 days.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jul 22, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

The changes refine server-side logic by reducing debug logging, removing a special-case request routing path, and improving type safety and documentation in workflow and agent modules. Workflow processing now distinguishes between threads that are added versus changed, synchronizing new threads before further processing. Minor import reordering and internal code cleanups are also included.

Changes

File(s) Change Summary
apps/server/src/main.ts Removed non-null assertion, eliminated special-case fetch routing, and reduced debug logging in queue processing.
apps/server/src/pipelines.effect.ts Improved type safety, added JSDoc comments, distinguished added vs. changed threads in workflow logic.
apps/server/src/routes/agent/index.ts Reordered imports; simplified internal method by removing unnecessary assignment and logging.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Server
    participant ZeroAgent

    User->>Server: Trigger Zero Workflow
    Server->>Server: Identify threadsAdded and threadsChanged
    alt threadsAdded not empty
        Server->>ZeroAgent: syncThread for each thread in threadsAdded
    end
    alt threadsChanged not empty
        Server->>Server: Process each thread in threadsChanged
    end
Loading

Estimated code review effort

3 (~45 minutes)

Possibly related PRs

  • hotfixes #1753: Builds on the syncThread method signature update used in runZeroWorkflow and runThreadWorkflow, directly continuing the refactor.
  • Fix CRON to Queue #1568: Modifies the queue method’s batch processing logic, related to this PR’s removal of debug logs and special-case routing in the same method.
  • fix deployment #1712: Enhances concurrency and thread sync logic in runZeroWorkflow, closely related to this PR’s workflow refinements and logging removals.

Poem

Hopping through the server code,
I trimmed the logs and lightened the load.
No more detours or noisy debug trails,
Workflows now with clearer details.
Threads sync in order, all tidy and neat—
This rabbit’s refactor is quite the treat!
🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9b2aa94 and cbee32e.

📒 Files selected for processing (3)
  • apps/server/src/main.ts (1 hunks)
  • apps/server/src/pipelines.effect.ts (7 hunks)
  • apps/server/src/routes/agent/index.ts (3 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@MrgSub MrgSub marked this pull request as ready for review July 22, 2025 20:40
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

Copy link
Collaborator Author

MrgSub commented Jul 22, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

}
console.log('[THREAD_WORKFLOW] Found existing thread summary');
return threadSummary[0].metadata as any;
return threadSummary[0].metadata as { summary: string; lastMsg: string };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider defining an interface for the metadata structure instead of using a type assertion. This would improve type safety and align with the Google TypeScript Style Guide's preference for type annotations over assertions:

interface ThreadSummaryMetadata {
  summary: string;
  lastMsg: string;
}

// Then use it like:
return threadSummary[0].metadata as ThreadSummaryMetadata;

Even better would be to properly type the database response so no assertion is needed at all.

Spotted by Diamond (based on custom rules)

Is this helpful? React 👍 or 👎 to let us know.

cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cubic analysis

3 issues found across 3 files • Review in cubic

React with 👍 or 👎 to teach cubic. You can also tag @cubic-dev-ai to give feedback, ask questions, or re-run the review.

const syncThreadsResults = yield* Effect.all(
threadWorkflowParams.map((threadId) =>
Effect.tryPromise({
try: async () => await agent.syncThread({ threadId }),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rule violated: Prevent Side Effects or Logic Inside Render Functions or Loops

  Calls to agent.syncThread are executed inside a map loop with unbounded concurrency, violating the rule against performing side-effects inside loops. This risks uncontrolled parallel API calls and rate-limit issues.
Prompt for AI agents
Address the following comment on apps/server/src/pipelines.effect.ts at line 318:

<comment>Calls to agent.syncThread are executed inside a map loop with unbounded concurrency, violating the rule against performing side-effects inside loops. This risks uncontrolled parallel API calls and rate-limit issues.</comment>

<file context>
@@ -265,36 +271,63 @@ export const runZeroWorkflow = (
       });
 
       // Extract thread IDs from history
-      const threadIds = new Set&lt;string&gt;();
+      const threadsChanged = new Set&lt;string&gt;();
+      const threadsAdded = new Set&lt;string&gt;();
       history.forEach((historyItem) =&gt; {
         if (historyItem.messagesAdded) {
           historyItem.messagesAdded.forEach((messageAdded) =&gt; {
</file context>

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
apps/server/src/main.ts (1)

27-27: Remove the unused import routePartykitRequest.

The ESLint warning indicates this import is no longer used in the file after the removal of special-case request routing.

-import { routePartykitRequest } from 'partyserver';
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d66e05a and 9b2aa94.

📒 Files selected for processing (3)
  • apps/server/src/main.ts (1 hunks)
  • apps/server/src/pipelines.effect.ts (6 hunks)
  • apps/server/src/routes/agent/index.ts (3 hunks)
📓 Path-based instructions (3)
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit Inference Engine (AGENT.md)

**/*.{js,jsx,ts,tsx}: Use 2-space indentation
Use single quotes
Limit lines to 100 characters in width
Semicolons are required

Files:

  • apps/server/src/main.ts
  • apps/server/src/routes/agent/index.ts
  • apps/server/src/pipelines.effect.ts
**/*.{js,jsx,ts,tsx,css}

📄 CodeRabbit Inference Engine (AGENT.md)

Use Prettier with sort-imports and Tailwind plugins

Files:

  • apps/server/src/main.ts
  • apps/server/src/routes/agent/index.ts
  • apps/server/src/pipelines.effect.ts
**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (AGENT.md)

Enable TypeScript strict mode

Files:

  • apps/server/src/main.ts
  • apps/server/src/routes/agent/index.ts
  • apps/server/src/pipelines.effect.ts
🧠 Learnings (3)
📓 Common learnings
Learnt from: retrogtx
PR: Mail-0/Zero#1468
File: apps/server/src/trpc/routes/mail.ts:386-391
Timestamp: 2025-06-27T04:59:29.731Z
Learning: In apps/server/src/trpc/routes/mail.ts, the attachment processing logic conditionally handles mixed attachment types - it preserves existing File-like objects with arrayBuffer methods while only converting serialized attachments that need processing through toAttachmentFiles.
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.495Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
Learnt from: danteissaias
PR: Mail-0/Zero#618
File: apps/mail/components/mail/mail-iframe.tsx:12-12
Timestamp: 2025-04-07T20:46:11.697Z
Learning: In the Mail-0/Zero application, sender emails are guaranteed to be non-empty when passed to components that handle them, making additional empty string validation unnecessary.
apps/server/src/main.ts (4)

Learnt from: retrogtx
PR: #1468
File: apps/server/src/trpc/routes/mail.ts:386-391
Timestamp: 2025-06-27T04:59:29.731Z
Learning: In apps/server/src/trpc/routes/mail.ts, the attachment processing logic conditionally handles mixed attachment types - it preserves existing File-like objects with arrayBuffer methods while only converting serialized attachments that need processing through toAttachmentFiles.

Learnt from: retrogtx
PR: #1622
File: apps/server/src/lib/email-verification.ts:189-189
Timestamp: 2025-07-05T05:27:24.623Z
Learning: During testing phases, debug logging should be kept active in apps/server/src/lib/email-verification.ts for BIMI validation and email verification debugging, even if it's verbose.

Learnt from: retrogtx
PR: #1734
File: apps/server/src/lib/driver/google.ts:211-221
Timestamp: 2025-07-15T06:46:33.349Z
Learning: In apps/server/src/lib/driver/google.ts, the normalization of "draft" to "drafts" in the count() method is necessary because the navigation item in apps/mail/config/navigation.ts has id: 'drafts' (plural) while the Google API returns "draft" (singular). The nav-main.tsx component matches stats by comparing stat.label with item.id, so the backend must return "drafts" for the draft counter badge to appear in the sidebar.

Learnt from: retrogtx
PR: #1468
File: apps/server/src/trpc/routes/mail.ts:331-331
Timestamp: 2025-06-28T03:56:09.376Z
Learning: In apps/server/src/trpc/routes/mail.ts, the user indicated they are not using ISO format for the scheduleAt parameter, despite the frontend code showing toISOString() usage in the ScheduleSendPicker component.

apps/server/src/routes/agent/index.ts (1)

Learnt from: retrogtx
PR: #1734
File: apps/server/src/lib/driver/google.ts:211-221
Timestamp: 2025-07-15T06:46:33.349Z
Learning: In apps/server/src/lib/driver/google.ts, the normalization of "draft" to "drafts" in the count() method is necessary because the navigation item in apps/mail/config/navigation.ts has id: 'drafts' (plural) while the Google API returns "draft" (singular). The nav-main.tsx component matches stats by comparing stat.label with item.id, so the backend must return "drafts" for the draft counter badge to appear in the sidebar.

🪛 GitHub Actions: autofix.ci
apps/server/src/main.ts

[warning] 27-27: ESLint: Identifier 'routePartykitRequest' is imported but never used. (no-unused-vars). Consider removing this import.

🧰 Additional context used
📓 Path-based instructions (3)
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit Inference Engine (AGENT.md)

**/*.{js,jsx,ts,tsx}: Use 2-space indentation
Use single quotes
Limit lines to 100 characters in width
Semicolons are required

Files:

  • apps/server/src/main.ts
  • apps/server/src/routes/agent/index.ts
  • apps/server/src/pipelines.effect.ts
**/*.{js,jsx,ts,tsx,css}

📄 CodeRabbit Inference Engine (AGENT.md)

Use Prettier with sort-imports and Tailwind plugins

Files:

  • apps/server/src/main.ts
  • apps/server/src/routes/agent/index.ts
  • apps/server/src/pipelines.effect.ts
**/*.{ts,tsx}

📄 CodeRabbit Inference Engine (AGENT.md)

Enable TypeScript strict mode

Files:

  • apps/server/src/main.ts
  • apps/server/src/routes/agent/index.ts
  • apps/server/src/pipelines.effect.ts
🧠 Learnings (3)
📓 Common learnings
Learnt from: retrogtx
PR: Mail-0/Zero#1468
File: apps/server/src/trpc/routes/mail.ts:386-391
Timestamp: 2025-06-27T04:59:29.731Z
Learning: In apps/server/src/trpc/routes/mail.ts, the attachment processing logic conditionally handles mixed attachment types - it preserves existing File-like objects with arrayBuffer methods while only converting serialized attachments that need processing through toAttachmentFiles.
Learnt from: JagjeevanAK
PR: Mail-0/Zero#1583
File: apps/docs/package.json:1-0
Timestamp: 2025-07-01T12:53:32.495Z
Learning: The Zero project prefers to handle dependency updates through automated tools like Dependabot rather than immediate manual updates, allowing for proper testing and validation through their established workflow.
Learnt from: danteissaias
PR: Mail-0/Zero#618
File: apps/mail/components/mail/mail-iframe.tsx:12-12
Timestamp: 2025-04-07T20:46:11.697Z
Learning: In the Mail-0/Zero application, sender emails are guaranteed to be non-empty when passed to components that handle them, making additional empty string validation unnecessary.
apps/server/src/main.ts (4)

Learnt from: retrogtx
PR: #1468
File: apps/server/src/trpc/routes/mail.ts:386-391
Timestamp: 2025-06-27T04:59:29.731Z
Learning: In apps/server/src/trpc/routes/mail.ts, the attachment processing logic conditionally handles mixed attachment types - it preserves existing File-like objects with arrayBuffer methods while only converting serialized attachments that need processing through toAttachmentFiles.

Learnt from: retrogtx
PR: #1622
File: apps/server/src/lib/email-verification.ts:189-189
Timestamp: 2025-07-05T05:27:24.623Z
Learning: During testing phases, debug logging should be kept active in apps/server/src/lib/email-verification.ts for BIMI validation and email verification debugging, even if it's verbose.

Learnt from: retrogtx
PR: #1734
File: apps/server/src/lib/driver/google.ts:211-221
Timestamp: 2025-07-15T06:46:33.349Z
Learning: In apps/server/src/lib/driver/google.ts, the normalization of "draft" to "drafts" in the count() method is necessary because the navigation item in apps/mail/config/navigation.ts has id: 'drafts' (plural) while the Google API returns "draft" (singular). The nav-main.tsx component matches stats by comparing stat.label with item.id, so the backend must return "drafts" for the draft counter badge to appear in the sidebar.

Learnt from: retrogtx
PR: #1468
File: apps/server/src/trpc/routes/mail.ts:331-331
Timestamp: 2025-06-28T03:56:09.376Z
Learning: In apps/server/src/trpc/routes/mail.ts, the user indicated they are not using ISO format for the scheduleAt parameter, despite the frontend code showing toISOString() usage in the ScheduleSendPicker component.

apps/server/src/routes/agent/index.ts (1)

Learnt from: retrogtx
PR: #1734
File: apps/server/src/lib/driver/google.ts:211-221
Timestamp: 2025-07-15T06:46:33.349Z
Learning: In apps/server/src/lib/driver/google.ts, the normalization of "draft" to "drafts" in the count() method is necessary because the navigation item in apps/mail/config/navigation.ts has id: 'drafts' (plural) while the Google API returns "draft" (singular). The nav-main.tsx component matches stats by comparing stat.label with item.id, so the backend must return "drafts" for the draft counter badge to appear in the sidebar.

🪛 GitHub Actions: autofix.ci
apps/server/src/main.ts

[warning] 27-27: ESLint: Identifier 'routePartykitRequest' is imported but never used. (no-unused-vars). Consider removing this import.

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: cubic · AI code reviewer
  • GitHub Check: Cursor Bugbot
🔇 Additional comments (6)
apps/server/src/main.ts (1)

694-694: Good catch on removing the non-null assertion!

The removal of the ! operator is a good practice since subHeader is already validated at line 681. This makes the code safer and more maintainable.

apps/server/src/routes/agent/index.ts (1)

855-855: Clean removal of unnecessary assignment and logging.

The direct await without capturing the result is cleaner since the return value wasn't being used. This aligns well with the PR's objective to remove debug statements.

apps/server/src/pipelines.effect.ts (4)

68-68: Good type refinement for serviceAccount.

Narrowing the type from any to { project_id: string } improves type safety and makes the expected structure explicit.


90-95: Excellent addition of JSDoc comments.

The documentation clearly describes the purpose and parameters of these workflow functions, improving code maintainability.

Also applies to: 443-447


274-326: Smart optimization of thread synchronization logic.

The separation of threadsChanged and threadsAdded enables more efficient processing by only syncing threads when there are new additions. This prevents unnecessary work for label-only changes.


654-656: Good type safety improvements.

Removing the explicit any type annotation and refining the return type to { summary: string; lastMsg: string } improves type safety and code clarity.

Also applies to: 734-734

@MrgSub MrgSub force-pushed the ZEROClean_up_code_and_improve_thread_processing_workflow branch from 9b2aa94 to cbee32e Compare July 22, 2025 20:52
@jazzberry-ai
Copy link

jazzberry-ai bot commented Jul 22, 2025

Bug Report

Potential Race Condition in Thread Syncing
Medium
Simultaneous or near-simultaneous calls to runZeroWorkflow with the same connectionId and overlapping history could lead to a race condition when syncing threads.
The runZeroWorkflow function identifies threads that have changed (added or modified) based on history. It then iterates through these threads and calls agent.syncThread for each new thread. The synchronization of threads is done via Effect.allSuccesses with concurrency: 1. However, if two runZeroWorkflow calls are made nearly simultaneously for the same connection, both could identify the same "new" threads and attempt to sync them. While Effect.allSuccesses will handle individual failures gracefully, it does not prevent the duplicate agent.syncThread calls from being queued. This can lead to unnecessary API calls, increased load, and potentially hitting rate limits, even though the first call to syncThread would have already handled the synchronization.

The problem arises because the determination of "new" threads and the subsequent synchronization are not atomic operations with respect to the connection.

Comments? Email us. Your free trial ends in 7 days.

Copy link
Collaborator Author

MrgSub commented Jul 22, 2025

Merge activity

  • Jul 22, 8:52 PM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Jul 22, 8:53 PM UTC: @MrgSub merged this pull request with Graphite.

@MrgSub MrgSub merged commit 101b732 into staging Jul 22, 2025
4 of 6 checks passed
@MrgSub MrgSub deleted the ZEROClean_up_code_and_improve_thread_processing_workflow branch July 22, 2025 20:53
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Void Return Type Causes Length Access Error

The addition of discard: true to Effect.all on line 394 changes its return type to void. However, line 397 attempts to access threadResults.length, which will result in a runtime error as void has no length property.

apps/server/src/pipelines.effect.ts#L393-L397

),
{ concurrency: 1, discard: true }, // Process up to 5 threads concurrently
);
yield* Console.log('[ZERO_WORKFLOW] All thread workflows completed:', threadResults.length);

Fix in CursorFix in Web


Was this report helpful? Give feedback by reacting with 👍 or 👎

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant