opencode-orchestrator 0.9.70 → 0.9.74
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/README.md +20 -8
- package/dist/core/agents/concurrency.d.ts +6 -0
- package/dist/core/agents/interfaces/parallel-task.interface.d.ts +1 -0
- package/dist/core/agents/manager/task-poller.d.ts +1 -1
- package/dist/core/agents/manager.d.ts +1 -0
- package/dist/core/agents/persistence/task-wal.d.ts +26 -0
- package/dist/core/agents/types/parallel-task-status.type.d.ts +2 -1
- package/dist/core/notification/os-notify/handler.d.ts +19 -0
- package/dist/core/notification/os-notify/index.d.ts +6 -0
- package/dist/core/notification/os-notify/notifier.d.ts +7 -0
- package/dist/core/notification/os-notify/platform-resolver.d.ts +7 -0
- package/dist/core/notification/os-notify/platform.d.ts +7 -0
- package/dist/core/notification/os-notify/sound-player.d.ts +7 -0
- package/dist/core/notification/os-notify/todo-checker.d.ts +5 -0
- package/dist/core/notification/task-toast-manager.d.ts +2 -1
- package/dist/index.js +837 -97
- package/dist/plugin-handlers/interfaces/event-handler-context.d.ts +2 -0
- package/dist/shared/core/constants/index.d.ts +1 -0
- package/dist/shared/core/constants/status-labels.d.ts +1 -0
- package/dist/shared/core/constants/wal-actions.d.ts +10 -0
- package/dist/shared/index.d.ts +1 -15
- package/dist/shared/loop/constants/index.d.ts +1 -0
- package/dist/shared/loop/constants/todo-status.d.ts +9 -0
- package/dist/shared/notification/os-notify/constants/index.d.ts +6 -0
- package/dist/shared/notification/os-notify/constants/notification-command-keys.d.ts +11 -0
- package/dist/shared/notification/os-notify/constants/notification-commands.d.ts +11 -0
- package/dist/shared/notification/os-notify/constants/notification-defaults.d.ts +5 -0
- package/dist/shared/notification/os-notify/index.d.ts +6 -0
- package/dist/shared/notification/os-notify/interfaces/index.d.ts +5 -0
- package/dist/shared/notification/os-notify/interfaces/notification-config.d.ts +19 -0
- package/dist/shared/notification/os-notify/interfaces/notification-state.d.ts +15 -0
- package/dist/shared/notification/os-notify/types/index.d.ts +4 -0
- package/dist/shared/notification/os-notify/types/notification-commands.d.ts +5 -0
- package/dist/shared/os/constants/index.d.ts +4 -0
- package/dist/shared/os/constants/platform.d.ts +9 -0
- package/dist/shared/os/index.d.ts +5 -0
- package/dist/shared/os/types/index.d.ts +4 -0
- package/dist/shared/os/types/platform.d.ts +5 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[]()
|
|
8
8
|
</div>
|
|
9
9
|
|
|
10
|
-
>
|
|
10
|
+
> **🚀 Multi-Agent Orchestration Plugin for [OpenCode](https://opencode.ai)**
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
## ⚡ Quick Start
|
|
@@ -18,14 +18,14 @@ npm install -g opencode-orchestrator
|
|
|
18
18
|
|
|
19
19
|
Then in OpenCode:
|
|
20
20
|
```bash
|
|
21
|
-
/task "
|
|
21
|
+
/task "Implement a Diablo2 Online Game for Web"
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
## ⭐ Core Philosophy
|
|
25
25
|
|
|
26
26
|
```
|
|
27
27
|
┌───────────────────────────────────────────────────┐
|
|
28
|
-
│ 🔍 EXPLORE → 📝 LEARN → 🔄 ADAPT → ⚡ ACT
|
|
28
|
+
│ 🔍 EXPLORE → 📝 LEARN → 🔄 ADAPT → ⚡ ACT │
|
|
29
29
|
│ Scan Document Adjust Execute │
|
|
30
30
|
└───────────────────────────────────────────────────┘
|
|
31
31
|
```
|
|
@@ -86,14 +86,26 @@ Then in OpenCode:
|
|
|
86
86
|
|
|
87
87
|
| Feature | What It Does |
|
|
88
88
|
|:---------|:-------------|
|
|
89
|
+
| 🚀 **60-80% Optimization**| Smart polling & output caching for massive speed gains |
|
|
89
90
|
| ⚡ **50 Parallel Tasks** | Run up to 50 agents simultaneously |
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
| 🩹 **Auto-Recovery** | Retry failed tasks automatically (up to 3 times) |
|
|
91
|
+
| 🔄 **Non-Stop Recovery** | WAL-based persistence (resumes tasks after crashes) |
|
|
92
|
+
| 🔥 **Multi-File Ops** | Work on different files at the same time |
|
|
93
|
+
| 🛡️ **Self-Scaling** | Dynamic concurrency limits based on success/failure |
|
|
94
|
+
| 🩹 **Memory Integrity** | Strict resource cleanup prevents leaks in long sessions |
|
|
95
95
|
| 🧬 **Adaptive AI** | Agents learn and adapt based on the project |
|
|
96
96
|
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 🏔️ Extreme Resilience & Performance
|
|
100
|
+
|
|
101
|
+
Built for "Infinite Missions," the OpenCode Orchestrator is engineered to handle massive codebases and long-running tasks where absolute stability is non-negotiable.
|
|
102
|
+
|
|
103
|
+
- **🔄 Continuous Operation**: Long-running missions survive process restarts. If the orchestrator or local machine crashes, work resumes exactly where it left off via WAL (Write-Ahead Log) persistence.
|
|
104
|
+
- **⚡ Maximized Resource Efficiency**: Integrated output caching and smart polling reduce API overhead by **60-80%**, allowing for more concurrent agents with less latency.
|
|
105
|
+
- **🛡️ Quality-Based Stability**: Success/Failure tracking automatically scales currency limits. The system adapts to model reliability and rate limits in real-time, ensuring a stable mission even under chaos.
|
|
106
|
+
- **💎 Memory Integrity**: Rigorous resource management guarantees zero memory leaks, even during sessions that last for days.
|
|
107
|
+
|
|
108
|
+
|
|
97
109
|
|
|
98
110
|
## Error Handling
|
|
99
111
|
|
|
@@ -13,6 +13,8 @@ export declare class ConcurrencyController {
|
|
|
13
13
|
private queues;
|
|
14
14
|
private limits;
|
|
15
15
|
private config;
|
|
16
|
+
private successStreak;
|
|
17
|
+
private failureCount;
|
|
16
18
|
constructor(config?: ConcurrencyConfig);
|
|
17
19
|
setLimit(key: string, limit: number): void;
|
|
18
20
|
/**
|
|
@@ -23,6 +25,10 @@ export declare class ConcurrencyController {
|
|
|
23
25
|
getLimit(key: string): number;
|
|
24
26
|
acquire(key: string): Promise<void>;
|
|
25
27
|
release(key: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Report success/failure to adjust concurrency dynamically
|
|
30
|
+
*/
|
|
31
|
+
reportResult(key: string, success: boolean): void;
|
|
26
32
|
getQueueLength(key: string): number;
|
|
27
33
|
getActiveCount(key: string): number;
|
|
28
34
|
/**
|
|
@@ -19,7 +19,7 @@ export declare class TaskPoller {
|
|
|
19
19
|
stop(): void;
|
|
20
20
|
isRunning(): boolean;
|
|
21
21
|
poll(): Promise<void>;
|
|
22
|
-
validateSessionHasOutput(sessionID: string): Promise<boolean>;
|
|
22
|
+
validateSessionHasOutput(sessionID: string, task?: ParallelTask): Promise<boolean>;
|
|
23
23
|
completeTask(task: ParallelTask): Promise<void>;
|
|
24
24
|
private updateTaskProgress;
|
|
25
25
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task WAL (Write-Ahead Log)
|
|
3
|
+
*
|
|
4
|
+
* Handles append-only logging of task state transitions for crash recovery.
|
|
5
|
+
*/
|
|
6
|
+
import { WAL_ACTIONS } from "../../../shared/index.js";
|
|
7
|
+
import type { ParallelTask } from "../interfaces/parallel-task.interface.js";
|
|
8
|
+
export interface WALEntry {
|
|
9
|
+
timestamp: string;
|
|
10
|
+
action: keyof typeof WAL_ACTIONS;
|
|
11
|
+
taskId: string;
|
|
12
|
+
data: Partial<ParallelTask>;
|
|
13
|
+
}
|
|
14
|
+
export declare class TaskWAL {
|
|
15
|
+
private walPath;
|
|
16
|
+
private initialized;
|
|
17
|
+
constructor(customPath?: string);
|
|
18
|
+
init(): Promise<void>;
|
|
19
|
+
log(action: WALEntry["action"], task: ParallelTask): Promise<void>;
|
|
20
|
+
readAll(): Promise<Map<string, ParallelTask>>;
|
|
21
|
+
/**
|
|
22
|
+
* Compact the WAL by writing only the current active tasks
|
|
23
|
+
*/
|
|
24
|
+
compact(activeTasks: ParallelTask[]): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare const taskWAL: TaskWAL;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ParallelTaskStatus - Task status type
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
import { STATUS_LABEL } from "../../../shared/index.js";
|
|
5
|
+
export type ParallelTaskStatus = typeof STATUS_LABEL.PENDING | typeof STATUS_LABEL.RUNNING | typeof STATUS_LABEL.COMPLETED | typeof STATUS_LABEL.FAILED | typeof STATUS_LABEL.ERROR | typeof STATUS_LABEL.TIMEOUT | typeof STATUS_LABEL.CANCELLED;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Notification Handler
|
|
3
|
+
*
|
|
4
|
+
* High-level orchestration for session idle notifications.
|
|
5
|
+
*/
|
|
6
|
+
import type { PluginInput } from "@opencode-ai/plugin";
|
|
7
|
+
import { type NotificationConfig, type NotificationState } from "../../../shared/notification/os-notify/index.js";
|
|
8
|
+
import { type Platform } from "../../../shared/os/index.js";
|
|
9
|
+
export declare function createSessionNotificationHandler(client: PluginInput["client"], config?: NotificationConfig): {
|
|
10
|
+
registerBackgroundSession: (id: string) => Set<string>;
|
|
11
|
+
unregisterBackgroundSession: (id: string) => boolean;
|
|
12
|
+
getPlatform: () => Platform;
|
|
13
|
+
getState: () => Readonly<NotificationState>;
|
|
14
|
+
handleEvent: (event: {
|
|
15
|
+
type: string;
|
|
16
|
+
properties?: unknown;
|
|
17
|
+
}) => Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
export type SessionNotificationHandler = ReturnType<typeof createSessionNotificationHandler>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform Command Resolver
|
|
3
|
+
*
|
|
4
|
+
* Logic for discovering native command paths on the system.
|
|
5
|
+
*/
|
|
6
|
+
import { type NotificationCommandKey } from "../../../shared/notification/os-notify/index.js";
|
|
7
|
+
export declare function resolveCommandPath(key: NotificationCommandKey, commandName: string): Promise<string | null>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OS Platform Utils
|
|
3
|
+
*/
|
|
4
|
+
import { type Platform } from "../../../shared/os/index.js";
|
|
5
|
+
export declare function detectPlatform(): Platform;
|
|
6
|
+
export declare function getDefaultSoundPath(p: Platform): string;
|
|
7
|
+
export declare function preloadPlatformCommands(platform: Platform): void;
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
14
14
|
import type { ConcurrencyController } from "../agents/concurrency.js";
|
|
15
|
+
import { STATUS_LABEL } from "../../shared/index.js";
|
|
15
16
|
type OpencodeClient = PluginInput["client"];
|
|
16
|
-
export type TaskStatus =
|
|
17
|
+
export type TaskStatus = typeof STATUS_LABEL[keyof typeof STATUS_LABEL];
|
|
17
18
|
export interface TrackedTask {
|
|
18
19
|
id: string;
|
|
19
20
|
description: string;
|