better-opencode-async-agents 0.1.0

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/LICENSE +21 -0
  3. package/README.md +67 -0
  4. package/dist/constants.d.ts +11 -0
  5. package/dist/constants.d.ts.map +1 -0
  6. package/dist/fork/index.d.ts +37 -0
  7. package/dist/fork/index.d.ts.map +1 -0
  8. package/dist/helpers.d.ts +33 -0
  9. package/dist/helpers.d.ts.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +14539 -0
  13. package/dist/index.js.map +96 -0
  14. package/dist/manager/events.d.ts +32 -0
  15. package/dist/manager/events.d.ts.map +1 -0
  16. package/dist/manager/index.d.ts +100 -0
  17. package/dist/manager/index.d.ts.map +1 -0
  18. package/dist/manager/notifications.d.ts +32 -0
  19. package/dist/manager/notifications.d.ts.map +1 -0
  20. package/dist/manager/polling.d.ts +49 -0
  21. package/dist/manager/polling.d.ts.map +1 -0
  22. package/dist/manager/task-lifecycle.d.ts +51 -0
  23. package/dist/manager/task-lifecycle.d.ts.map +1 -0
  24. package/dist/prompts.d.ts +85 -0
  25. package/dist/prompts.d.ts.map +1 -0
  26. package/dist/storage.d.ts +29 -0
  27. package/dist/storage.d.ts.map +1 -0
  28. package/dist/tiktoken_bg-qvs99b75.wasm +0 -0
  29. package/dist/tools/cancel.d.ts +13 -0
  30. package/dist/tools/cancel.d.ts.map +1 -0
  31. package/dist/tools/clear.d.ts +8 -0
  32. package/dist/tools/clear.d.ts.map +1 -0
  33. package/dist/tools/index.d.ts +6 -0
  34. package/dist/tools/index.d.ts.map +1 -0
  35. package/dist/tools/list.d.ts +6 -0
  36. package/dist/tools/list.d.ts.map +1 -0
  37. package/dist/tools/output.d.ts +15 -0
  38. package/dist/tools/output.d.ts.map +1 -0
  39. package/dist/tools/resume.d.ts +40 -0
  40. package/dist/tools/resume.d.ts.map +1 -0
  41. package/dist/tools/task.d.ts +15 -0
  42. package/dist/tools/task.d.ts.map +1 -0
  43. package/dist/types.d.ts +57 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/package.json +86 -0
@@ -0,0 +1,32 @@
1
+ import type { BackgroundTask } from "../types";
2
+ /**
3
+ * Starts the event subscription to listen for session events.
4
+ * Automatically reconnects on errors or stream closure.
5
+ */
6
+ export declare function startEventSubscription(client: {
7
+ event: {
8
+ subscribe: () => Promise<{
9
+ stream: AsyncIterable<{
10
+ type: string;
11
+ properties?: Record<string, unknown>;
12
+ }>;
13
+ }>;
14
+ };
15
+ }, handleEvent: (event: {
16
+ type: string;
17
+ properties?: Record<string, unknown>;
18
+ }) => void): Promise<void>;
19
+ /**
20
+ * Handles incoming events and triggers appropriate actions.
21
+ * Primary completion detection mechanism via session.idle events.
22
+ */
23
+ export declare function handleEvent(event: {
24
+ type: string;
25
+ properties?: Record<string, unknown>;
26
+ }, callbacks: {
27
+ clearAllTasks: () => void;
28
+ getTasksArray: () => BackgroundTask[];
29
+ notifyParentSession: (task: BackgroundTask) => void;
30
+ persistTask: (task: BackgroundTask) => void;
31
+ }): void;
32
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/manager/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/C;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE;IACN,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,OAAO,CAAC;YACvB,MAAM,EAAE,aAAa,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;aAAE,CAAC,CAAC;SAC/E,CAAC,CAAC;KACJ,CAAC;CACH,EACD,WAAW,EAAE,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,KAAK,IAAI,GACnF,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE;IACL,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,EACD,SAAS,EAAE;IACT,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,cAAc,EAAE,CAAC;IACtC,mBAAmB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACpD,WAAW,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CAC7C,GACA,IAAI,CA4EN"}
@@ -0,0 +1,100 @@
1
+ import type { PluginInput } from "@opencode-ai/plugin";
2
+ import type { BackgroundTask, LaunchInput } from "../types";
3
+ /**
4
+ * BackgroundManager class for managing background agent tasks.
5
+ *
6
+ * This class uses composition pattern - methods are extracted into separate files
7
+ * that are imported and used by the main class. Private state remains in class instance.
8
+ */
9
+ export declare class BackgroundManager {
10
+ private client;
11
+ private directory;
12
+ private pollingInterval?;
13
+ private animationFrame;
14
+ private currentBatchId;
15
+ private tasks;
16
+ private originalParentSessionID;
17
+ constructor(ctx: PluginInput);
18
+ /**
19
+ * Loads persisted tasks from disk on startup.
20
+ * Only loads metadata - full task state is reconstructed lazily.
21
+ */
22
+ private loadPersistedTasks;
23
+ launch(input: LaunchInput): Promise<BackgroundTask>;
24
+ /**
25
+ * Persists a task to disk storage.
26
+ * Public for use by resume operations.
27
+ */
28
+ persistTask(task: BackgroundTask): Promise<void>;
29
+ cancelTask(taskId: string): Promise<void>;
30
+ /**
31
+ * Clears all tasks from memory (for UI cleanup).
32
+ * Does NOT delete from disk - tasks remain resumable.
33
+ */
34
+ clearAllTasks(): void;
35
+ /**
36
+ * Permanently deletes a task from both memory and disk.
37
+ * Use for explicit cleanup when task is no longer needed.
38
+ */
39
+ deleteTask(sessionID: string): Promise<void>;
40
+ getTask(id: string): BackgroundTask | undefined;
41
+ /**
42
+ * Finds all tasks matching a given prefix.
43
+ * Returns tasks sorted by creation time (most recent first).
44
+ */
45
+ findTasksByPrefix(prefix: string): BackgroundTask[];
46
+ /**
47
+ * Resolves a task ID or prefix to a full session ID (memory only).
48
+ * Accepts full ID, short ID, or any unique prefix.
49
+ * On ambiguous prefix, returns most recently created task.
50
+ * @returns Full session ID or null if not found
51
+ */
52
+ resolveTaskId(idOrPrefix: string): string | null;
53
+ /**
54
+ * Resolves a task ID or prefix to a full session ID, checking disk if not in memory.
55
+ * Use this for resume operations where task may have been cleaned from memory.
56
+ * @returns Full session ID or null if not found
57
+ */
58
+ resolveTaskIdWithFallback(idOrPrefix: string): Promise<string | null>;
59
+ /**
60
+ * Gets a task, checking disk if not in memory.
61
+ * Use this for operations that need to work with persisted tasks.
62
+ */
63
+ getTaskWithFallback(id: string): Promise<BackgroundTask | undefined>;
64
+ getAllTasks(): BackgroundTask[];
65
+ getTaskMessages(sessionID: string): Promise<Array<{
66
+ info?: {
67
+ role?: string;
68
+ };
69
+ parts?: Array<{
70
+ type?: string;
71
+ text?: string;
72
+ }>;
73
+ }>>;
74
+ checkAndUpdateTaskStatus(task: BackgroundTask, skipNotification?: boolean): Promise<BackgroundTask>;
75
+ checkSessionExists(sessionID: string): Promise<boolean>;
76
+ /**
77
+ * Wait for a single task to complete (used by background_output with block=true).
78
+ * Returns the task or null if not found.
79
+ */
80
+ waitForTask(taskId: string, timeoutMs: number): Promise<BackgroundTask | null>;
81
+ /**
82
+ * Wait for multiple tasks to complete (used by background_block tool).
83
+ * Returns a Map of task_id -> task (or null if not found).
84
+ */
85
+ waitForTasks(taskIds: string[], timeoutMs: number): Promise<Map<string, BackgroundTask | null>>;
86
+ sendResumePrompt(task: BackgroundTask, message: string, timeoutMs: number): Promise<string>;
87
+ sendResumePromptAsync(task: BackgroundTask, message: string, toolContext: {
88
+ sessionID: string;
89
+ messageID: string;
90
+ agent: string;
91
+ }): Promise<void>;
92
+ private getOrCreateBatchId;
93
+ private startPolling;
94
+ private stopPolling;
95
+ private pollRunningTasks;
96
+ private showProgressToast;
97
+ private notifyParentSession;
98
+ private startEventSubscription;
99
+ }
100
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { BackgroundTask, OpencodeClient } from "../types";
2
+ /**
3
+ * Shows a toast notification with progress information about running and completed background tasks.
4
+ */
5
+ export declare function showProgressToast(allTasks: BackgroundTask[], animationFrame: number, client: OpencodeClient, getTasksArray: () => BackgroundTask[]): void;
6
+ /**
7
+ * Notifies the parent session when a background task completes, fails, or is cancelled.
8
+ */
9
+ export declare function notifyParentSession(task: BackgroundTask, client: OpencodeClient, directory: string, getTasksArray: () => BackgroundTask[]): void;
10
+ /**
11
+ * Notifies the parent session when a resume operation completes successfully.
12
+ */
13
+ export declare function notifyResumeComplete(task: BackgroundTask, client: OpencodeClient, directory: string, toolContext: {
14
+ sessionID: string;
15
+ agent: string;
16
+ }, getTaskMessages: (sessionID: string) => Promise<Array<{
17
+ info?: {
18
+ role?: string;
19
+ };
20
+ parts?: Array<{
21
+ type?: string;
22
+ text?: string;
23
+ }>;
24
+ }>>, getTasksArray?: () => BackgroundTask[]): Promise<void>;
25
+ /**
26
+ * Notifies the parent session when a resume operation fails.
27
+ */
28
+ export declare function notifyResumeError(task: BackgroundTask, errorMessage: string, client: OpencodeClient, directory: string, toolContext: {
29
+ sessionID: string;
30
+ agent: string;
31
+ }, getTasksArray?: () => BackgroundTask[]): Promise<void>;
32
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/manager/notifications.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/D;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,cAAc,EAAE,EAC1B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,MAAM,cAAc,EAAE,GACpC,IAAI,CA4GN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,cAAc,EAAE,GACpC,IAAI,CAoFN;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACjD,eAAe,EAAE,CACf,SAAS,EAAE,MAAM,KACd,OAAO,CACV,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CACrF,EACD,aAAa,CAAC,EAAE,MAAM,cAAc,EAAE,GACrC,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACjD,aAAa,CAAC,EAAE,MAAM,cAAc,EAAE,GACrC,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -0,0 +1,49 @@
1
+ import type { BackgroundTask, OpencodeClient } from "../types";
2
+ export declare function startPolling(pollingInterval: Timer | undefined, pollFn: () => void): Timer | undefined;
3
+ /**
4
+ * Stop polling for task status updates.
5
+ *
6
+ * Clears the polling interval.
7
+ */
8
+ export declare function stopPolling(pollingInterval: Timer | undefined): void;
9
+ /**
10
+ * FALLBACK: Poll running/resumed tasks to check their status and progress.
11
+ *
12
+ * Primary completion detection is via session.idle events. This polling
13
+ * function serves as a fallback mechanism when events are missed.
14
+ *
15
+ * This function:
16
+ * - Checks if parent session still exists
17
+ * - Updates task status when sessions become idle (fallback detection)
18
+ * - Updates task progress (tool calls, etc.)
19
+ * - Cleans up old completed tasks
20
+ * - Stops polling when no active tasks remain
21
+ */
22
+ export declare function pollRunningTasks(client: OpencodeClient, tasks: Map<string, BackgroundTask>, originalParentSessionID: string | null, updateTaskProgress: (task: BackgroundTask) => Promise<void>, notifyParentSession: (task: BackgroundTask) => void, clearAllTasks: () => void, stopPolling: () => void, showProgressToast: (allTasks: BackgroundTask[]) => void, getTasksArray: () => BackgroundTask[], getTaskMessages?: (sessionID: string) => Promise<Array<{
23
+ info?: {
24
+ role?: string;
25
+ };
26
+ parts?: Array<{
27
+ type?: string;
28
+ text?: string;
29
+ }>;
30
+ }>>, persistTask?: (task: BackgroundTask) => void): Promise<void>;
31
+ /**
32
+ * Update task progress information.
33
+ *
34
+ * Fetches messages from the task's session and updates:
35
+ * - Tool call count
36
+ * - Last 3 tools used
37
+ * - Last update timestamp
38
+ */
39
+ export declare function updateTaskProgress(task: BackgroundTask, client: OpencodeClient): Promise<void>;
40
+ /**
41
+ * Format a duration between two dates as a human-readable string.
42
+ *
43
+ * Examples:
44
+ * - "5s" (5 seconds)
45
+ * - "2m 30s" (2 minutes 30 seconds)
46
+ * - "1h 15m 20s" (1 hour 15 minutes 20 seconds)
47
+ */
48
+ export declare function formatDuration(start: Date, end?: Date): string;
49
+ //# sourceMappingURL=polling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../src/manager/polling.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAe/D,wBAAgB,YAAY,CAC1B,eAAe,EAAE,KAAK,GAAG,SAAS,EAClC,MAAM,EAAE,MAAM,IAAI,GACjB,KAAK,GAAG,SAAS,CAMnB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,eAAe,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI,CAIpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,uBAAuB,EAAE,MAAM,GAAG,IAAI,EACtC,kBAAkB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,EAC3D,mBAAmB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,EACnD,aAAa,EAAE,MAAM,IAAI,EACzB,WAAW,EAAE,MAAM,IAAI,EACvB,iBAAiB,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,IAAI,EACvD,aAAa,EAAE,MAAM,cAAc,EAAE,EACrC,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,MAAM,KACd,OAAO,CACV,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CACrF,EACD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GAC3C,OAAO,CAAC,IAAI,CAAC,CAsHf;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAa9D"}
@@ -0,0 +1,51 @@
1
+ import type { BackgroundTask, LaunchInput, OpencodeClient } from "../types";
2
+ export declare function launchTask(input: LaunchInput, tasks: Map<string, BackgroundTask>, client: OpencodeClient, getOrCreateBatchId: () => string, setOriginalParentSessionID: (sessionID: string | null) => void, startPolling: () => void, notifyParentSession: (task: BackgroundTask) => void): Promise<BackgroundTask>;
3
+ /**
4
+ * Cancel a running task.
5
+ *
6
+ * Aborts the background session and marks the task as cancelled.
7
+ */
8
+ export declare function cancelTask(taskId: string, tasks: Map<string, BackgroundTask>, client: OpencodeClient): Promise<void>;
9
+ /**
10
+ * Get messages from a task's session.
11
+ */
12
+ export declare function getTaskMessages(sessionID: string, client: OpencodeClient): Promise<Array<{
13
+ info?: {
14
+ role?: string;
15
+ };
16
+ parts?: Array<{
17
+ type?: string;
18
+ text?: string;
19
+ }>;
20
+ }>>;
21
+ /**
22
+ * Check and update task status.
23
+ *
24
+ * If the task's session is idle, marks the task as completed and notifies the parent session.
25
+ * Uses a fallback mechanism: if session status isn't in the response, checks for assistant
26
+ * messages to detect completion (session might have finished and no longer appear in status).
27
+ *
28
+ * @param skipNotification - If true, skip sending notification to parent session.
29
+ * Use this when the parent is blocked waiting for a tool result (e.g., background_output with block=true).
30
+ * @param getTaskMessages - Function to get messages from a session (for fallback detection).
31
+ */
32
+ export declare function checkAndUpdateTaskStatus(task: BackgroundTask, client: OpencodeClient, notifyParentSession: (task: BackgroundTask) => void, skipNotification?: boolean, getTaskMessages?: (sessionID: string) => Promise<Array<{
33
+ info?: {
34
+ role?: string;
35
+ };
36
+ parts?: Array<{
37
+ type?: string;
38
+ text?: string;
39
+ }>;
40
+ }>>): Promise<BackgroundTask>;
41
+ /**
42
+ * Clear all tasks.
43
+ *
44
+ * Stops polling, aborts all running sessions, and clears the tasks Map.
45
+ */
46
+ export declare function clearAllTasks(tasks: Map<string, BackgroundTask>, client: OpencodeClient, stopPolling: () => void): void;
47
+ /**
48
+ * Check if a session exists.
49
+ */
50
+ export declare function checkSessionExists(sessionID: string, client: OpencodeClient): Promise<boolean>;
51
+ //# sourceMappingURL=task-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-lifecycle.d.ts","sourceRoot":"","sources":["../../src/manager/task-lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS5E,wBAAsB,UAAU,CAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,MAAM,EAAE,cAAc,EACtB,kBAAkB,EAAE,MAAM,MAAM,EAChC,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,EAC9D,YAAY,EAAE,MAAM,IAAI,EACxB,mBAAmB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GAClD,OAAO,CAAC,cAAc,CAAC,CA4IzB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,GACrB,OAAO,CACR,KAAK,CAAC;IACJ,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD,CAAC,CACH,CAcA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,cAAc,EACtB,mBAAmB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,EACnD,gBAAgB,UAAQ,EACxB,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAAC,GACjG,OAAO,CAAC,cAAc,CAAC,CA8CzB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,EAClC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,IAAI,GACtB,IAAI,CAUN;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC,CAOlB"}
@@ -0,0 +1,85 @@
1
+ export declare const TOOL_DESCRIPTIONS: {
2
+ backgroundTask: string;
3
+ backgroundList: string;
4
+ backgroundCancel: string;
5
+ backgroundOutput: string;
6
+ backgroundClear: string;
7
+ };
8
+ export declare const SUCCESS_MESSAGES: {
9
+ taskLaunched: (shortTaskId: string) => string;
10
+ taskCancelled: (shortTaskId: string, description: string) => string;
11
+ resumeInitiated: (shortTaskId: string, resumeCount: number) => string;
12
+ clearedAllTasks: (runningCount: number, totalCount: number) => string;
13
+ resumeResponse: (resumeCount: number, textContent: string) => string;
14
+ resumeResponseNoContent: (resumeCount: number) => string;
15
+ };
16
+ export declare const ERROR_MESSAGES: {
17
+ taskNotFound: (taskId: string) => string;
18
+ taskNotFoundWithHint: (taskId: string) => string;
19
+ taskCurrentlyResuming: string;
20
+ onlyCompletedCanResume: (currentStatus: string) => string;
21
+ sessionExpired: string;
22
+ agentRequired: string;
23
+ promptRequired: string;
24
+ launchFailed: (message: string) => string;
25
+ cancelFailed: (message: string) => string;
26
+ listFailed: (message: string) => string;
27
+ outputFailed: (message: string) => string;
28
+ clearFailed: (message: string) => string;
29
+ resumeFailed: (errorMsg: string) => string;
30
+ fetchMessagesFailed: (errMsg: string) => string;
31
+ noTasksFound: string;
32
+ noTasksWithStatus: (status: string) => string;
33
+ noTasksToClear: string;
34
+ };
35
+ export declare const WARNING_MESSAGES: {
36
+ resumeModeIgnoresParams: string;
37
+ };
38
+ export declare const FORK_MESSAGES: {
39
+ forkResumeConflict: string;
40
+ preamble: string;
41
+ };
42
+ export declare const NOTIFICATION_MESSAGES: {
43
+ visibleTaskCompleted: (description: string, duration: string) => string;
44
+ visibleTaskFailed: (description: string, duration: string) => string;
45
+ visibleTaskCancelled: (description: string, duration: string) => string;
46
+ visibleResumeCompleted: (resumeCount: number, duration: string) => string;
47
+ visibleResumeFailed: (resumeCount: number, duration: string) => string;
48
+ taskProgressLine: (completed: number, total: number) => string;
49
+ devHintIndicator: string;
50
+ };
51
+ export declare const SYSTEM_HINT_MESSAGES: {
52
+ runningTasksHint: (taskId: string) => string;
53
+ allTasksDoneHint: (totalCount: number) => string;
54
+ errorHint: (taskId: string, errorMessage: string) => string;
55
+ resumeHint: (taskId: string) => string;
56
+ };
57
+ export declare const TOAST_TITLES: {
58
+ taskCompleted: string;
59
+ taskFailed: string;
60
+ taskCancelled: string;
61
+ backgroundTasksRunning: (spinner: string) => string;
62
+ tasksComplete: string;
63
+ };
64
+ export declare const STATUS_NOTES: {
65
+ running: string;
66
+ failed: (error: string) => string;
67
+ cancelled: string;
68
+ };
69
+ export declare const FORMAT_TEMPLATES: {
70
+ taskStatus: (icon: string, shortTaskId: string, description: string, agent: string, status: string, duration: string, progressSection: string, statusNote: string, promptPreview: string) => string;
71
+ taskResult: (shortTaskId: string, description: string, duration: string, content: string) => string;
72
+ taskResultError: (shortTaskId: string, description: string, duration: string, errMsg: string) => string;
73
+ listHeader: string;
74
+ listSummary: (total: number, running: number, completed: number, errored: number, cancelled: number) => string;
75
+ progressSection: (tools: string[]) => string;
76
+ };
77
+ export declare const PLACEHOLDER_TEXT: {
78
+ noMessagesFound: string;
79
+ noAssistantResponse: string;
80
+ noTextOutput: string;
81
+ noTextResponse: string;
82
+ noResponseFound: string;
83
+ andMoreFinished: (count: number) => string;
84
+ };
85
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,iBAAiB;;;;;;CAoD7B,CAAC;AAMF,eAAO,MAAM,gBAAgB;gCACC,MAAM;iCAKL,MAAM,eAAe,MAAM;mCAMzB,MAAM,eAAe,MAAM;oCAQ1B,MAAM,cAAc,MAAM;kCAK5B,MAAM,eAAe,MAAM;2CAGlB,MAAM;CAE9C,CAAC;AAMF,eAAO,MAAM,cAAc;2BAEF,MAAM;mCACE,MAAM;;4CAKG,MAAM;;;;4BAStB,MAAM;4BACN,MAAM;0BACR,MAAM;4BACJ,MAAM;2BACP,MAAM;6BACJ,MAAM;kCACD,MAAM;;gCAIR,MAAM;;CAEnC,CAAC;AAMF,eAAO,MAAM,gBAAgB;;CAE5B,CAAC;AAMF,eAAO,MAAM,aAAa;;;CAOzB,CAAC;AAMF,eAAO,MAAM,qBAAqB;wCAEI,MAAM,YAAY,MAAM;qCAG3B,MAAM,YAAY,MAAM;wCAGrB,MAAM,YAAY,MAAM;0CAGtB,MAAM,YAAY,MAAM;uCAG3B,MAAM,YAAY,MAAM;kCAG7B,MAAM,SAAS,MAAM;;CAGpD,CAAC;AAMF,eAAO,MAAM,oBAAoB;+BACJ,MAAM;mCAKF,MAAM;wBAIjB,MAAM,gBAAgB,MAAM;yBAI3B,MAAM;CAC5B,CAAC;AAMF,eAAO,MAAM,YAAY;;;;sCAIW,MAAM;;CAMzC,CAAC;AAMF,eAAO,MAAM,YAAY;;oBAEP,MAAM;;CAEvB,CAAC;AAMF,eAAO,MAAM,gBAAgB;uBAEnB,MAAM,eACC,MAAM,eACN,MAAM,SACZ,MAAM,UACL,MAAM,YACJ,MAAM,mBACC,MAAM,cACX,MAAM,iBACH,MAAM;8BAiBG,MAAM,eAAe,MAAM,YAAY,MAAM,WAAW,MAAM;mCAazD,MAAM,eAAe,MAAM,YAAY,MAAM,UAAU,MAAM;;yBAiBnF,MAAM,WACJ,MAAM,aACJ,MAAM,WACR,MAAM,aACJ,MAAM;6BAIM,MAAM,EAAE;CAClC,CAAC;AAMF,eAAO,MAAM,gBAAgB;;;;;;6BAMF,MAAM;CAChC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { PersistedTask } from "./types";
2
+ /**
3
+ * Ensures the storage directory exists.
4
+ * Creates ~/.opencode/plugins/better-opencode-async-agents/ if it doesn't exist.
5
+ */
6
+ export declare function ensureStorageDir(): Promise<void>;
7
+ /**
8
+ * Loads all persisted tasks from disk.
9
+ * Returns empty object if file doesn't exist or is corrupted.
10
+ */
11
+ export declare function loadTasks(): Promise<Record<string, PersistedTask>>;
12
+ /**
13
+ * Saves all tasks to disk.
14
+ */
15
+ export declare function saveTasks(tasks: Record<string, PersistedTask>): Promise<void>;
16
+ /**
17
+ * Saves a single task to disk (read-modify-write).
18
+ */
19
+ export declare function saveTask(sessionID: string, task: PersistedTask): Promise<void>;
20
+ /**
21
+ * Gets a single persisted task from disk.
22
+ * Returns undefined if not found.
23
+ */
24
+ export declare function getPersistedTask(sessionID: string): Promise<PersistedTask | undefined>;
25
+ /**
26
+ * Deletes a single task from disk.
27
+ */
28
+ export declare function deletePersistedTask(sessionID: string): Promise<void>;
29
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA8B7C;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAYtD;AAED;;;GAGG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CA8BxE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBnF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAG5F;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E"}
Binary file
@@ -0,0 +1,13 @@
1
+ import { type ToolDefinition } from "@opencode-ai/plugin";
2
+ import type { BackgroundTask } from "../types";
3
+ /**
4
+ * Creates the background_cancel tool for cancelling running tasks
5
+ * @param manager - BackgroundManager instance with getTask(), cancelTask(), resolveTaskId() methods
6
+ * @returns Tool definition for background_cancel
7
+ */
8
+ export declare function createBackgroundCancel(manager: {
9
+ getTask(taskId: string): BackgroundTask | undefined;
10
+ resolveTaskId(idOrPrefix: string): string | null;
11
+ cancelTask(taskId: string): Promise<void>;
12
+ }): ToolDefinition;
13
+ //# sourceMappingURL=cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/tools/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAGhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C,GAAG,cAAc,CA4BjB"}
@@ -0,0 +1,8 @@
1
+ import { type ToolDefinition } from "@opencode-ai/plugin";
2
+ export declare function createBackgroundClear(manager: {
3
+ getAllTasks(): {
4
+ status: string;
5
+ }[];
6
+ clearAllTasks(): void;
7
+ }): ToolDefinition;
8
+ //# sourceMappingURL=clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../src/tools/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAOhE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,WAAW,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpC,aAAa,IAAI,IAAI,CAAC;CACvB,GAAG,cAAc,CAsBjB"}
@@ -0,0 +1,6 @@
1
+ export { createBackgroundTask } from "./task";
2
+ export { createBackgroundOutput } from "./output";
3
+ export { createBackgroundCancel } from "./cancel";
4
+ export { createBackgroundList } from "./list";
5
+ export { createBackgroundClear } from "./clear";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ToolDefinition } from "@opencode-ai/plugin";
2
+ import type { BackgroundTask } from "../types";
3
+ export declare function createBackgroundList(manager: {
4
+ getAllTasks(): BackgroundTask[];
5
+ }): ToolDefinition;
6
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAGhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,WAAW,IAAI,cAAc,EAAE,CAAC;CACjC,GAAG,cAAc,CAmEjB"}
@@ -0,0 +1,15 @@
1
+ import { type ToolDefinition } from "@opencode-ai/plugin";
2
+ import type { BackgroundTask } from "../types";
3
+ /**
4
+ * Creates the background_output tool for retrieving task status and results
5
+ * @param manager - BackgroundManager instance with getTask(), checkAndUpdateTaskStatus(), waitForTask(), resolveTaskId() methods
6
+ * @returns Tool definition for background_output
7
+ */
8
+ export declare function createBackgroundOutput(manager: {
9
+ getTask(taskId: string): BackgroundTask | undefined;
10
+ resolveTaskId(idOrPrefix: string): string | null;
11
+ checkAndUpdateTaskStatus(task: BackgroundTask, skipNotification?: boolean): Promise<BackgroundTask>;
12
+ waitForTask(taskId: string, timeoutMs: number): Promise<BackgroundTask | null>;
13
+ getTaskMessages(sessionID: string): Promise<any[]>;
14
+ }): ToolDefinition;
15
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/tools/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAGhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAO/C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjD,wBAAwB,CACtB,IAAI,EAAE,cAAc,EACpB,gBAAgB,CAAC,EAAE,OAAO,GACzB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAE/E,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CACpD,GAAG,cAAc,CAyEjB"}
@@ -0,0 +1,40 @@
1
+ import type { BackgroundTask } from "../types";
2
+ export interface ResumeManager {
3
+ getTask(taskId: string): BackgroundTask | undefined;
4
+ resolveTaskId(idOrPrefix: string): string | null;
5
+ resolveTaskIdWithFallback(idOrPrefix: string): Promise<string | null>;
6
+ getTaskWithFallback(id: string): Promise<BackgroundTask | undefined>;
7
+ persistTask(task: BackgroundTask): Promise<void>;
8
+ checkSessionExists(sessionID: string): Promise<boolean>;
9
+ sendResumePromptAsync(task: BackgroundTask, message: string, toolContext: any): Promise<void>;
10
+ }
11
+ export type ResumeValidationResult = {
12
+ valid: true;
13
+ task: BackgroundTask;
14
+ } | {
15
+ valid: false;
16
+ error: string;
17
+ };
18
+ /**
19
+ * Validates that a task can be resumed (async version that checks disk)
20
+ * @param manager - BackgroundManager instance
21
+ * @param taskId - Task ID (full or short) to validate
22
+ * @returns Validation result with task if valid, or error message
23
+ */
24
+ export declare function validateResumeTask(manager: ResumeManager, taskId: string): Promise<ResumeValidationResult>;
25
+ /**
26
+ * Executes the resume operation on a validated task
27
+ * @param manager - BackgroundManager instance
28
+ * @param task - The task to resume (must be validated first)
29
+ * @param prompt - The follow-up prompt to send
30
+ * @param toolContext - Tool context for notifications
31
+ * @returns Success message or error message
32
+ */
33
+ export declare function executeResume(manager: ResumeManager, task: BackgroundTask, prompt: string, toolContext: any): Promise<{
34
+ success: true;
35
+ message: string;
36
+ } | {
37
+ success: false;
38
+ error: string;
39
+ }>;
40
+ //# sourceMappingURL=resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/tools/resume.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM/C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjD,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtE,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACrE,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExD,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/F;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GACrC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMpC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,sBAAsB,CAAC,CAmCjC;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,EAEd,WAAW,EAAE,GAAG,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCjF"}
@@ -0,0 +1,15 @@
1
+ import { type ToolDefinition } from "@opencode-ai/plugin";
2
+ import type { BackgroundTask, LaunchInput } from "../types";
3
+ import { type ResumeManager } from "./resume";
4
+ interface TaskManager extends ResumeManager {
5
+ launch(input: LaunchInput): Promise<BackgroundTask>;
6
+ }
7
+ /**
8
+ * Creates the background_task tool for launching async background agent tasks
9
+ * and resuming completed tasks with follow-up prompts
10
+ * @param manager - BackgroundManager instance with launch() and resume methods
11
+ * @returns Tool definition for background_task
12
+ */
13
+ export declare function createBackgroundTask(manager: TaskManager): ToolDefinition;
14
+ export {};
15
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAQ,MAAM,qBAAqB,CAAC;AAShE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,KAAK,aAAa,EAAqC,MAAM,UAAU,CAAC;AAMjF,UAAU,WAAY,SAAQ,aAAa;IACzC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACrD;AAMD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAkCzE"}
@@ -0,0 +1,57 @@
1
+ import type { PluginInput } from "@opencode-ai/plugin";
2
+ export type BackgroundTaskStatus = "running" | "completed" | "error" | "cancelled" | "resumed";
3
+ export interface TaskProgress {
4
+ toolCalls: number;
5
+ lastTools: string[];
6
+ lastUpdate: string;
7
+ }
8
+ /**
9
+ * Minimal metadata persisted to disk.
10
+ * OpenCode stores chat history, we only store what's not available there.
11
+ */
12
+ export interface PersistedTask {
13
+ description: string;
14
+ agent: string;
15
+ parentSessionID: string;
16
+ createdAt: string;
17
+ status: BackgroundTaskStatus;
18
+ resumeCount?: number;
19
+ isForked?: boolean;
20
+ }
21
+ /**
22
+ * Full task object used in memory.
23
+ * sessionID is the task identifier (no separate id field).
24
+ */
25
+ export interface BackgroundTask {
26
+ sessionID: string;
27
+ parentSessionID: string;
28
+ parentMessageID: string;
29
+ parentAgent: string;
30
+ description: string;
31
+ prompt: string;
32
+ agent: string;
33
+ status: BackgroundTaskStatus;
34
+ startedAt: string;
35
+ completedAt?: string;
36
+ resultRetrievedAt?: string;
37
+ result?: string;
38
+ error?: string;
39
+ progress?: TaskProgress;
40
+ batchId: string;
41
+ resumeCount: number;
42
+ isForked: boolean;
43
+ }
44
+ export interface LaunchInput {
45
+ /** Task ID to resume (if provided, enters resume mode) */
46
+ resume?: string;
47
+ /** Fork parent context to child session (creates session with inherited history) */
48
+ fork?: boolean;
49
+ description: string;
50
+ prompt: string;
51
+ agent: string;
52
+ parentSessionID: string;
53
+ parentMessageID: string;
54
+ parentAgent: string;
55
+ }
56
+ export type OpencodeClient = PluginInput["client"];
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC;AAE/F,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC"}