opencode-matrixx 2.6.13 → 2.6.14
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 +25 -21
- package/dist/agents/architect/default.d.ts +1 -1
- package/dist/agents/architect/gpt.d.ts +1 -1
- package/dist/agents/builtin-agents/architect-agent.d.ts +0 -1
- package/dist/agents/builtin-agents/general-agents.d.ts +0 -1
- package/dist/agents/builtin-agents/keymaker-agent.d.ts +0 -1
- package/dist/agents/builtin-agents/morpheus-agent.d.ts +0 -1
- package/dist/agents/builtin-agents.d.ts +1 -1
- package/dist/agents/keymaker.d.ts +1 -1
- package/dist/agents/morpheus.d.ts +1 -1
- package/dist/agents/mouse/agent.d.ts +2 -2
- package/dist/agents/mouse/deepseek.d.ts +1 -1
- package/dist/agents/mouse/default.d.ts +1 -1
- package/dist/agents/mouse/gpt.d.ts +1 -1
- package/dist/agents/mouse/mimo.d.ts +1 -1
- package/dist/agents/mouse/qwen.d.ts +1 -1
- package/dist/agents/mouse/shared.d.ts +3 -3
- package/dist/agents/oracle/plan-generation.d.ts +1 -1
- package/dist/agents/seraph.d.ts +1 -1
- package/dist/cli.js +11 -9
- package/dist/config/schema/experimental.d.ts +1 -1
- package/dist/config/schema/hooks.d.ts +2 -5
- package/dist/config/schema/matrixx-config.d.ts +4 -6
- package/dist/config/schema/tasks.d.ts +5 -1
- package/dist/create-hooks.d.ts +1 -4
- package/dist/features/background-agent/manager.d.ts +5 -2
- package/dist/features/background-agent/reconcile.d.ts +8 -1
- package/dist/features/builtin-commands/templates/handoff.d.ts +1 -1
- package/dist/features/builtin-commands/templates/init-deep.d.ts +1 -1
- package/dist/features/builtin-commands/templates/refactor.d.ts +1 -1
- package/dist/features/builtin-commands/templates/remove-deadcode.d.ts +1 -1
- package/dist/features/builtin-commands/templates/stop-continuation.d.ts +1 -1
- package/dist/features/task-session-scope/ancestry.d.ts +23 -0
- package/dist/features/task-session-scope/index.d.ts +2 -0
- package/dist/features/task-session-scope/session-task-pending.d.ts +83 -0
- package/dist/hooks/architect/system-reminder-templates.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -5
- package/dist/hooks/keyword-detector/ultrawork/deepseek.d.ts +1 -1
- package/dist/hooks/keyword-detector/ultrawork/default.d.ts +1 -1
- package/dist/hooks/keyword-detector/ultrawork/gemini.d.ts +1 -1
- package/dist/hooks/keyword-detector/ultrawork/glm.d.ts +1 -1
- package/dist/hooks/keyword-detector/ultrawork/mimo.d.ts +1 -1
- package/dist/hooks/plan-persister/hook.d.ts +1 -1
- package/dist/hooks/session-notification-scheduler.d.ts +1 -1
- package/dist/hooks/session-notification.d.ts +9 -2
- package/dist/hooks/task-continuation-enforcer/handler.d.ts +0 -1
- package/dist/hooks/task-continuation-enforcer/index.d.ts +0 -1
- package/dist/hooks/task-continuation-enforcer/staleness.d.ts +10 -0
- package/dist/hooks/task-continuation-enforcer/todo.d.ts +2 -1
- package/dist/hooks/task-continuation-enforcer/types.d.ts +0 -8
- package/dist/hooks/task-notepad-writer/constants.d.ts +42 -0
- package/dist/hooks/task-notepad-writer/hook.d.ts +14 -0
- package/dist/hooks/task-notepad-writer/index.d.ts +2 -0
- package/dist/hooks/task-notepad-writer/notepad-path.d.ts +36 -0
- package/dist/index.js +1545 -2092
- package/dist/matrixx.schema.json +31 -18
- package/dist/plugin/hooks/create-continuation-hooks.d.ts +1 -3
- package/dist/plugin/hooks/create-core-hooks.d.ts +1 -2
- package/dist/plugin/hooks/create-tool-guard-hooks.d.ts +2 -3
- package/dist/plugin-handlers/task-permissions.d.ts +48 -0
- package/dist/shared/logger.d.ts +1 -0
- package/dist/shared/system-directive.d.ts +0 -1
- package/dist/shared/task-system-gating.d.ts +24 -4
- package/dist/tools/session-manager/constants.d.ts +1 -1
- package/dist/tools/session-manager/storage.d.ts +44 -0
- package/dist/tools/session-manager/tools.d.ts +2 -1
- package/dist/tools/task/create-one.d.ts +21 -0
- package/dist/tools/task/types.d.ts +56 -1
- package/package.json +1 -1
- package/dist/hooks/compaction-todo-preserver/hook.d.ts +0 -24
- package/dist/hooks/compaction-todo-preserver/index.d.ts +0 -2
- package/dist/hooks/session-todo-status.d.ts +0 -2
- package/dist/hooks/task-notepad/constants.d.ts +0 -10
- package/dist/hooks/task-notepad/hook.d.ts +0 -12
- package/dist/hooks/task-notepad/index.d.ts +0 -3
- package/dist/hooks/task-notepad/types.d.ts +0 -16
- package/dist/hooks/tasks-todowrite-disabler/constants.d.ts +0 -3
- package/dist/hooks/tasks-todowrite-disabler/hook.d.ts +0 -14
- package/dist/hooks/tasks-todowrite-disabler/index.d.ts +0 -2
- package/dist/hooks/todo-continuation-enforcer/abort-detection.d.ts +0 -4
- package/dist/hooks/todo-continuation-enforcer/constants.d.ts +0 -10
- package/dist/hooks/todo-continuation-enforcer/continuation-injection.d.ts +0 -12
- package/dist/hooks/todo-continuation-enforcer/countdown.d.ts +0 -14
- package/dist/hooks/todo-continuation-enforcer/handler.d.ts +0 -15
- package/dist/hooks/todo-continuation-enforcer/idle-event.d.ts +0 -11
- package/dist/hooks/todo-continuation-enforcer/index.d.ts +0 -4
- package/dist/hooks/todo-continuation-enforcer/message-directory.d.ts +0 -1
- package/dist/hooks/todo-continuation-enforcer/non-idle-events.d.ts +0 -6
- package/dist/hooks/todo-continuation-enforcer/session-state.d.ts +0 -10
- package/dist/hooks/todo-continuation-enforcer/todo.d.ts +0 -2
- package/dist/hooks/todo-continuation-enforcer/types.d.ts +0 -61
package/dist/matrixx.schema.json
CHANGED
|
@@ -160,7 +160,6 @@
|
|
|
160
160
|
"type": "string",
|
|
161
161
|
"enum": [
|
|
162
162
|
"task-continuation-enforcer",
|
|
163
|
-
"todo-continuation-enforcer",
|
|
164
163
|
"context-window-monitor",
|
|
165
164
|
"session-recovery",
|
|
166
165
|
"session-notification",
|
|
@@ -184,7 +183,6 @@
|
|
|
184
183
|
"matrix-loop",
|
|
185
184
|
"category-skill-reminder",
|
|
186
185
|
"compaction-context-injector",
|
|
187
|
-
"compaction-todo-preserver",
|
|
188
186
|
"auto-slash-command",
|
|
189
187
|
"edit-error-recovery",
|
|
190
188
|
"delegate-task-retry",
|
|
@@ -196,7 +194,6 @@
|
|
|
196
194
|
"unstable-agent-babysitter",
|
|
197
195
|
"task-resume-info",
|
|
198
196
|
"stop-continuation-guard",
|
|
199
|
-
"tasks-todowrite-disabler",
|
|
200
197
|
"write-existing-file-guard",
|
|
201
198
|
"anthropic-effort",
|
|
202
199
|
"hashline-read-enhancer",
|
|
@@ -211,7 +208,6 @@
|
|
|
211
208
|
"webfetch-redirect-guard",
|
|
212
209
|
"tool-pair-validator",
|
|
213
210
|
"quality-gate",
|
|
214
|
-
"task-notepad",
|
|
215
211
|
"design-intent-preserver",
|
|
216
212
|
"rtk-bash-rewriter",
|
|
217
213
|
"evolution-watcher",
|
|
@@ -224,10 +220,27 @@
|
|
|
224
220
|
"knowledge-hub-injector",
|
|
225
221
|
"knowledge-hub-search-nudge",
|
|
226
222
|
"dcp-nudge-sanitizer",
|
|
227
|
-
"nudge-loop-breaker"
|
|
223
|
+
"nudge-loop-breaker",
|
|
224
|
+
"task-notepad-writer"
|
|
228
225
|
]
|
|
229
226
|
},
|
|
230
|
-
{}
|
|
227
|
+
{},
|
|
228
|
+
{
|
|
229
|
+
"type": "string",
|
|
230
|
+
"const": "todo-continuation-enforcer"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"type": "string",
|
|
234
|
+
"const": "compaction-todo-preserver"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"type": "string",
|
|
238
|
+
"const": "tasks-todowrite-disabler"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"type": "string",
|
|
242
|
+
"const": "task-notepad"
|
|
243
|
+
}
|
|
231
244
|
]
|
|
232
245
|
}
|
|
233
246
|
},
|
|
@@ -3937,7 +3950,6 @@
|
|
|
3937
3950
|
"type": "boolean"
|
|
3938
3951
|
},
|
|
3939
3952
|
"task_system": {
|
|
3940
|
-
"default": true,
|
|
3941
3953
|
"type": "boolean"
|
|
3942
3954
|
},
|
|
3943
3955
|
"plugin_load_timeout_ms": {
|
|
@@ -3961,9 +3973,6 @@
|
|
|
3961
3973
|
"type": "boolean"
|
|
3962
3974
|
}
|
|
3963
3975
|
},
|
|
3964
|
-
"required": [
|
|
3965
|
-
"task_system"
|
|
3966
|
-
],
|
|
3967
3976
|
"additionalProperties": false
|
|
3968
3977
|
},
|
|
3969
3978
|
"dcp": {
|
|
@@ -4850,10 +4859,15 @@
|
|
|
4850
4859
|
"type": "string"
|
|
4851
4860
|
},
|
|
4852
4861
|
"stale_after_hours": {
|
|
4853
|
-
"description": "Pending tasks with no file activity for this many hours are considered stale
|
|
4854
|
-
"type": "
|
|
4855
|
-
"minimum":
|
|
4856
|
-
|
|
4862
|
+
"description": "Pending tasks with no file activity for this many hours are considered stale and excluded from task-continuation directives. Accepts fractional hours (minimum 0.25 = 15 minutes); there is no separate minutes companion key. Default 24.",
|
|
4863
|
+
"type": "number",
|
|
4864
|
+
"minimum": 0.25
|
|
4865
|
+
},
|
|
4866
|
+
"background_stale_after_hours": {
|
|
4867
|
+
"description": "Window used only by the background-agent completion gates: a pending/in_progress task with no file activity for this many hours stops blocking completion of its background handle. Separate from stale_after_hours because a missed nudge and a wedged handle are different failures. Accepts fractional hours (min 0.25). Default 2.",
|
|
4868
|
+
"default": 2,
|
|
4869
|
+
"type": "number",
|
|
4870
|
+
"minimum": 0.25
|
|
4857
4871
|
},
|
|
4858
4872
|
"session_scoped": {
|
|
4859
4873
|
"description": "When true, the task-continuation-enforcer only considers tasks created by the current session (or its subagent sessions). When false, all project tasks are considered regardless of session origin.",
|
|
@@ -4991,10 +5005,9 @@
|
|
|
4991
5005
|
]
|
|
4992
5006
|
},
|
|
4993
5007
|
"stale_after_hours": {
|
|
4994
|
-
"description": "Pending tasks with no file activity for this many hours are considered stale
|
|
4995
|
-
"type": "
|
|
4996
|
-
"minimum":
|
|
4997
|
-
"maximum": 9007199254740991
|
|
5008
|
+
"description": "Pending tasks with no file activity for this many hours are considered stale and excluded from task-continuation directives. Accepts fractional hours (minimum 0.25 = 15 minutes); there is no separate minutes companion key. Default 24.",
|
|
5009
|
+
"type": "number",
|
|
5010
|
+
"minimum": 0.25
|
|
4998
5011
|
},
|
|
4999
5012
|
"session_scoped": {
|
|
5000
5013
|
"description": "When true, the task-continuation-enforcer only considers tasks created by the current session (or its subagent sessions). When false, all project tasks are considered regardless of session origin.",
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import type { HookName, MatrixxConfig } from "../../config";
|
|
2
2
|
import type { BackgroundManager } from "../../features/background-agent";
|
|
3
|
-
import { createArchitectHook, createBackgroundNotificationHook, createCompactionContextInjector,
|
|
3
|
+
import { createArchitectHook, createBackgroundNotificationHook, createCompactionContextInjector, createEvolutionCompressorHook, createEvolutionHitlHook, createNudgeLoopBreakerHook, createPlanPersister, createStopContinuationGuardHook, createTaskContinuationEnforcer } from "../../hooks";
|
|
4
4
|
import type { PluginContext } from "../types";
|
|
5
5
|
import { createUnstableAgentBabysitter } from "../unstable-agent-babysitter";
|
|
6
6
|
export type ContinuationHooks = {
|
|
7
7
|
stopContinuationGuard: ReturnType<typeof createStopContinuationGuardHook> | null;
|
|
8
8
|
compactionContextInjector: ReturnType<typeof createCompactionContextInjector> | null;
|
|
9
|
-
compactionTodoPreserver: ReturnType<typeof createCompactionTodoPreserverHook> | null;
|
|
10
|
-
todoContinuationEnforcer: ReturnType<typeof createTodoContinuationEnforcer> | null;
|
|
11
9
|
taskContinuationEnforcer: ReturnType<typeof createTaskContinuationEnforcer> | null;
|
|
12
10
|
unstableAgentBabysitter: ReturnType<typeof createUnstableAgentBabysitter> | null;
|
|
13
11
|
nudgeLoopBreaker: ReturnType<typeof createNudgeLoopBreakerHook> | null;
|
|
@@ -21,7 +21,6 @@ export declare function createCoreHooks(args: {
|
|
|
21
21
|
directoryAgentsInjector: ReturnType<typeof import("../../hooks").createDirectoryAgentsInjectorHook> | null;
|
|
22
22
|
emptyTaskResponseDetector: ReturnType<typeof import("../../hooks").createEmptyTaskResponseDetectorHook> | null;
|
|
23
23
|
rulesInjector: ReturnType<typeof import("../../hooks").createRulesInjectorHook> | null;
|
|
24
|
-
tasksTodowriteDisabler: ReturnType<typeof import("../../hooks").createTasksTodowriteDisablerHook> | null;
|
|
25
24
|
writeExistingFileGuard: ReturnType<typeof import("../../hooks").createWriteExistingFileGuardHook> | null;
|
|
26
25
|
hashlineReadEnhancer: ReturnType<typeof import("../../hooks").createHashlineReadEnhancerHook> | null;
|
|
27
26
|
secretLeakGuard: ReturnType<typeof import("../../hooks").createSecretLeakGuardHook> | null;
|
|
@@ -32,8 +31,8 @@ export declare function createCoreHooks(args: {
|
|
|
32
31
|
readImageResizer: ReturnType<typeof import("../../hooks").createReadImageResizerHook> | null;
|
|
33
32
|
webfetchRedirectGuard: ReturnType<typeof import("../../hooks").createWebFetchRedirectGuardHook> | null;
|
|
34
33
|
qualityGate: ReturnType<typeof import("../../hooks").createQualityGateHook> | null;
|
|
35
|
-
taskNotepad: ReturnType<typeof import("../../hooks").createTaskNotepadHook> | null;
|
|
36
34
|
taskEditGuard: ReturnType<typeof import("../../hooks").createTaskEditGuardHook> | null;
|
|
35
|
+
taskNotepadWriter: ReturnType<typeof import("../../hooks").createTaskNotepadWriterHook> | null;
|
|
37
36
|
documentReaderGuard: ReturnType<typeof import("../../hooks").createDocumentReaderGuardHook> | null;
|
|
38
37
|
knowledgeHubGuard: ReturnType<typeof import("../../hooks").createKnowledgeHubGuardHook> | null;
|
|
39
38
|
knowledgeHubSearchNudge: ReturnType<typeof import("../../hooks").createKnowledgeHubSearchNudgeHook> | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HookName, MatrixxConfig } from "../../config";
|
|
2
|
-
import { createBackgroundTaskBlockerHook, createBashFileReadGuardHook, createCommentCheckerHooks, createContextModeEnforcerHook, createDirectoryAgentsInjectorHook, createDocumentReaderGuardHook, createEmptyTaskResponseDetectorHook, createEnvFileWriteGuardHook, createEvolutionWatcherHook, createHashlineReadEnhancerHook, createJsonErrorRecoveryHook, createKnowledgeHubGuardHook, createKnowledgeHubSearchNudgeHook, createQualityGateHook, createReadImageResizerHook, createRulesInjectorHook, createSecretLeakGuardHook, createTaskEditGuardHook,
|
|
2
|
+
import { createBackgroundTaskBlockerHook, createBashFileReadGuardHook, createCommentCheckerHooks, createContextModeEnforcerHook, createDirectoryAgentsInjectorHook, createDocumentReaderGuardHook, createEmptyTaskResponseDetectorHook, createEnvFileWriteGuardHook, createEvolutionWatcherHook, createHashlineReadEnhancerHook, createJsonErrorRecoveryHook, createKnowledgeHubGuardHook, createKnowledgeHubSearchNudgeHook, createQualityGateHook, createReadImageResizerHook, createRulesInjectorHook, createSecretLeakGuardHook, createTaskEditGuardHook, createTaskNotepadWriterHook, createToolOutputTruncatorHook, createWebFetchRedirectGuardHook, createWriteExistingFileGuardHook } from "../../hooks";
|
|
3
3
|
import type { PluginContext } from "../types";
|
|
4
4
|
export type ToolGuardHooks = {
|
|
5
5
|
backgroundTaskBlocker: ReturnType<typeof createBackgroundTaskBlockerHook> | null;
|
|
@@ -8,7 +8,6 @@ export type ToolGuardHooks = {
|
|
|
8
8
|
directoryAgentsInjector: ReturnType<typeof createDirectoryAgentsInjectorHook> | null;
|
|
9
9
|
emptyTaskResponseDetector: ReturnType<typeof createEmptyTaskResponseDetectorHook> | null;
|
|
10
10
|
rulesInjector: ReturnType<typeof createRulesInjectorHook> | null;
|
|
11
|
-
tasksTodowriteDisabler: ReturnType<typeof createTasksTodowriteDisablerHook> | null;
|
|
12
11
|
writeExistingFileGuard: ReturnType<typeof createWriteExistingFileGuardHook> | null;
|
|
13
12
|
hashlineReadEnhancer: ReturnType<typeof createHashlineReadEnhancerHook> | null;
|
|
14
13
|
secretLeakGuard: ReturnType<typeof createSecretLeakGuardHook> | null;
|
|
@@ -19,8 +18,8 @@ export type ToolGuardHooks = {
|
|
|
19
18
|
readImageResizer: ReturnType<typeof createReadImageResizerHook> | null;
|
|
20
19
|
webfetchRedirectGuard: ReturnType<typeof createWebFetchRedirectGuardHook> | null;
|
|
21
20
|
qualityGate: ReturnType<typeof createQualityGateHook> | null;
|
|
22
|
-
taskNotepad: ReturnType<typeof createTaskNotepadHook> | null;
|
|
23
21
|
taskEditGuard: ReturnType<typeof createTaskEditGuardHook> | null;
|
|
22
|
+
taskNotepadWriter: ReturnType<typeof createTaskNotepadWriterHook> | null;
|
|
24
23
|
documentReaderGuard: ReturnType<typeof createDocumentReaderGuardHook> | null;
|
|
25
24
|
knowledgeHubGuard: ReturnType<typeof createKnowledgeHubGuardHook> | null;
|
|
26
25
|
knowledgeHubSearchNudge: ReturnType<typeof createKnowledgeHubSearchNudgeHook> | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task-store permission grants.
|
|
3
|
+
*
|
|
4
|
+
* The task store (`.matrixx/tasks/`) is a separate write channel from the
|
|
5
|
+
* codebase. An agent whose prompt tells it to track work with tasks must be
|
|
6
|
+
* able to reach it, no matter which agent happens to hold delegation rights.
|
|
7
|
+
*/
|
|
8
|
+
/** The legacy todo tools are denied for every task-capable agent. */
|
|
9
|
+
export declare const denyTodoTools: {
|
|
10
|
+
readonly todowrite: "deny";
|
|
11
|
+
readonly todoread: "deny";
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Tracking only: the agent may read and write its own task-store records but
|
|
15
|
+
* may not delegate. Granted to every primary-capable agent.
|
|
16
|
+
*/
|
|
17
|
+
export declare const taskStorePermissions: {
|
|
18
|
+
readonly todowrite: "deny";
|
|
19
|
+
readonly todoread: "deny";
|
|
20
|
+
readonly "task_*": "allow";
|
|
21
|
+
};
|
|
22
|
+
/** Tracking plus outgoing delegation via the task tool. */
|
|
23
|
+
export declare const fullTaskPermissions: {
|
|
24
|
+
readonly todowrite: "deny";
|
|
25
|
+
readonly todoread: "deny";
|
|
26
|
+
readonly task: "allow";
|
|
27
|
+
readonly "task_*": "allow";
|
|
28
|
+
readonly teammate: "allow";
|
|
29
|
+
};
|
|
30
|
+
type AgentLike = {
|
|
31
|
+
mode?: string;
|
|
32
|
+
permission?: Record<string, unknown>;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* An agent that can be driven as a top-level session is expected to track its
|
|
36
|
+
* own work in the task store. Derived from the declared mode, never from a
|
|
37
|
+
* hardcoded name list — a name list is exactly what let the original drift go
|
|
38
|
+
* unnoticed.
|
|
39
|
+
*/
|
|
40
|
+
export declare function isTaskStorePrimary(agent: AgentLike): boolean;
|
|
41
|
+
/** The permission defaults a primary-capable agent is missing. */
|
|
42
|
+
export declare function deriveTaskPermissions(agent: AgentLike): Record<string, string>;
|
|
43
|
+
/**
|
|
44
|
+
* Fill-only merge (the architect arm's `??=` pattern): a factory value or an
|
|
45
|
+
* explicit user override in their own config is never overwritten here.
|
|
46
|
+
*/
|
|
47
|
+
export declare function grantTaskPermissions(agent: AgentLike): void;
|
|
48
|
+
export {};
|
package/dist/shared/logger.d.ts
CHANGED
|
@@ -33,7 +33,6 @@ export declare function hasSystemReminder(text: string): boolean;
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function removeSystemReminders(text: string): string;
|
|
35
35
|
export declare const SystemDirectiveTypes: {
|
|
36
|
-
readonly TODO_CONTINUATION: "TODO CONTINUATION";
|
|
37
36
|
readonly TASK_CONTINUATION: "TASK CONTINUATION";
|
|
38
37
|
readonly MATRIX_LOOP: "MATRIX LOOP";
|
|
39
38
|
readonly MISSION_CONTINUATION: "MISSION CONTINUATION";
|
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import type { MatrixxConfig } from "../config/schema";
|
|
2
2
|
import type { TasksConfig } from "../config/schema/tasks";
|
|
3
3
|
export declare const TASK_SYSTEM_DEFAULT: true;
|
|
4
|
-
export type ResolvedTasksConfig = Required<Pick<TasksConfig, "enabled" | "scope" | "session_scoped">> & Pick<TasksConfig, "storage_path" | "task_list_id" | "stale_after_hours" | "pollTimeoutMs">;
|
|
4
|
+
export type ResolvedTasksConfig = Required<Pick<TasksConfig, "enabled" | "scope" | "session_scoped">> & Pick<TasksConfig, "storage_path" | "task_list_id" | "stale_after_hours" | "pollTimeoutMs" | "background_stale_after_hours">;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Fallback for `tasks.background_stale_after_hours` when the key is absent.
|
|
7
|
+
* Kept here, next to the resolution that applies it, so the default and its
|
|
8
|
+
* use site cannot drift; re-exported from the enforcer's `staleness.ts` where
|
|
9
|
+
* the other staleness default lives.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_BACKGROUND_STALE_AFTER_HOURS = 2;
|
|
12
|
+
/**
|
|
13
|
+
* Point the one-time deprecation toast at an OpenCode client. Pass
|
|
14
|
+
* `undefined` to detach. Failures are swallowed — a toast is never worth a
|
|
15
|
+
* broken config load.
|
|
16
|
+
*/
|
|
17
|
+
export declare function bindTaskSystemDeprecationToast(client: unknown): void;
|
|
18
|
+
/** Test-only: allow the one-time warning to fire again. */
|
|
19
|
+
export declare function resetTaskSystemDeprecationWarning(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Merge the canonical `tasks` section with the remaining legacy locations:
|
|
9
22
|
* `morpheus.tasks.*` → same-named key, `task.pollTimeoutMs` → pollTimeoutMs.
|
|
23
|
+
*
|
|
24
|
+
* `enabled` is NOT derived from the config: the file-backed task system is
|
|
25
|
+
* unconditional and always resolves to `TASK_SYSTEM_DEFAULT`. The three keys
|
|
26
|
+
* that used to gate it (`tasks.enabled`, `experimental.task_system`,
|
|
27
|
+
* `new_task_system_enabled`) are parsed, ignored, and reported once per session
|
|
28
|
+
* via `warn` plus a single startup toast. Nothing here throws.
|
|
29
|
+
*
|
|
10
30
|
* Pure derivation, no mutation — safe to call on every read.
|
|
11
31
|
*/
|
|
12
32
|
export declare function resolveTasksConfig(config: Partial<MatrixxConfig> | undefined | null): ResolvedTasksConfig;
|
|
@@ -2,7 +2,7 @@ export { MESSAGE_STORAGE, OPENCODE_STORAGE, PART_STORAGE, SESSION_STORAGE } from
|
|
|
2
2
|
export declare const TODO_DIR: string;
|
|
3
3
|
export declare const TRANSCRIPT_DIR: string;
|
|
4
4
|
export declare const SESSION_LIST_DESCRIPTION = "List all OpenCode sessions with optional filtering.\n\nReturns a list of available session IDs with metadata including message count, date range, and agents used.\n\nArguments:\n- limit (optional): Maximum number of sessions to return\n- from_date (optional): Filter sessions from this date (ISO 8601 format)\n- to_date (optional): Filter sessions until this date (ISO 8601 format)\n\nExample output:\n| Session ID | Messages | First | Last | Agents |\n|------------|----------|-------|------|--------|\n| ses_abc123 | 45 | 2025-12-20 | 2025-12-24 | build, oracle |\n| ses_def456 | 12 | 2025-12-19 | 2025-12-19 | build |";
|
|
5
|
-
export declare const SESSION_READ_DESCRIPTION = "Read messages and history from an OpenCode session.\n\nReturns a formatted view of session messages with role, timestamp, and content. Optionally includes
|
|
5
|
+
export declare const SESSION_READ_DESCRIPTION = "Read messages and history from an OpenCode session.\n\nReturns a formatted view of session messages with role, timestamp, and content. Optionally includes task state and transcript data.\n\nArguments:\n- session_id (required): Session ID to read\n- include_todos (optional): Include the session's task state from the task store if available (default: false). Every task attributed to the session is listed, including one that has been untouched long enough to be stale, so an unfinished item is never hidden from this diagnostic.\n- include_transcript (optional): Include transcript log if available (default: false)\n- limit (optional): Maximum number of messages to return (default: all)\n\nExample output:\nSession: ses_abc123\nMessages: 45\nDate Range: 2025-12-20 to 2025-12-24\n\n[Message 1] user (2025-12-20 10:30:00)\nHello, can you help me with...\n\n[Message 2] assistant (2025-12-20 10:30:15)\nOf course! Let me help you with...";
|
|
6
6
|
export declare const SESSION_SEARCH_DESCRIPTION = "Search for content within OpenCode session messages.\n\nPerforms full-text search across session messages and returns matching excerpts with context.\n\nArguments:\n- query (required): Search query string\n- session_id (optional): Search within specific session only (default: all sessions)\n- case_sensitive (optional): Case-sensitive search (default: false)\n- limit (optional): Maximum number of results to return (default: 20)\n\nExample output:\nFound 3 matches across 2 sessions:\n\n[ses_abc123] Message msg_001 (user)\n...implement the **session manager** tool...\n\n[ses_abc123] Message msg_005 (assistant)\n...I'll create a **session manager** with full search...\n\n[ses_def456] Message msg_012 (user)\n...use the **session manager** to find...";
|
|
7
7
|
export declare const SESSION_INFO_DESCRIPTION = "Get metadata and statistics about an OpenCode session.\n\nReturns detailed information about a session including message count, date range, agents used, and available data sources.\n\nArguments:\n- session_id (required): Session ID to inspect\n\nExample output:\nSession ID: ses_abc123\nMessages: 45\nDate Range: 2025-12-20 10:30:00 to 2025-12-24 15:45:30\nDuration: 4 days, 5 hours\nAgents Used: build, oracle, librarian\nHas Todos: Yes (12 items, 8 completed)\nHas Transcript: Yes (234 entries)";
|
|
8
8
|
export declare const SESSION_DELETE_DESCRIPTION = "Delete an OpenCode session and all associated data.\n\nRemoves session messages, parts, todos, and transcript. This operation cannot be undone.\n\nArguments:\n- session_id (required): Session ID to delete\n- confirm (required): Must be true to confirm deletion\n\nExample:\nsession_delete(session_id=\"ses_abc123\", confirm=true)\nSuccessfully deleted session ses_abc123";
|
|
@@ -1,14 +1,58 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
+
import type { MatrixxConfig } from "../../config/schema";
|
|
2
3
|
import type { SessionInfo, SessionMessage, SessionMetadata, TodoItem } from "./types";
|
|
3
4
|
interface GetMainSessionsOptions {
|
|
4
5
|
directory?: string;
|
|
5
6
|
}
|
|
6
7
|
export declare function setStorageClient(client: PluginInput["client"]): void;
|
|
7
8
|
export declare function resetStorageClient(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Thread `ctx.directory` into the storage layer. `createSessionManagerTools` is the
|
|
11
|
+
* single construction point of this module, so the directory is held in a module
|
|
12
|
+
* setter for the same reason the SDK client is: `getSessionInfo` is a second
|
|
13
|
+
* consumer of the task read and has no directory of its own, so an explicit
|
|
14
|
+
* parameter would have to be threaded through both public signatures. Passing no
|
|
15
|
+
* directory makes the task store resolve to its global default, matching
|
|
16
|
+
* `getTaskDir`'s own contract when `directory` is omitted; this function needs a
|
|
17
|
+
* concrete string, so an unset directory falls back to `process.cwd()` exactly as
|
|
18
|
+
* `getTaskDir` does for a relative `storage_path`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function setStorageDirectory(directory: string | undefined): void;
|
|
21
|
+
/**
|
|
22
|
+
* Thread the plugin config into the task read, for the same reason as the directory:
|
|
23
|
+
* `getSessionInfo` is a second consumer of `readSessionTodos` and carries neither a
|
|
24
|
+
* config nor a directory of its own. Without it the read always resolves the
|
|
25
|
+
* `process.cwd()`-relative project store, which silently returns nothing for a user
|
|
26
|
+
* who configured `tasks.storage_path` or `tasks.scope: "global"` — the `include_todos`
|
|
27
|
+
* diagnostic would be permanently empty for exactly those users.
|
|
28
|
+
*/
|
|
29
|
+
export declare function setStorageConfig(config: Partial<MatrixxConfig> | undefined): void;
|
|
8
30
|
export declare function getMainSessions(options: GetMainSessionsOptions): Promise<SessionMetadata[]>;
|
|
9
31
|
export declare function getAllSessions(): Promise<string[]>;
|
|
10
32
|
export { getMessageDir } from "../../shared/opencode-message-dir";
|
|
11
33
|
export declare function sessionExists(sessionID: string): Promise<boolean>;
|
|
12
34
|
export declare function readSessionMessages(sessionID: string): Promise<SessionMessage[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Read the file-backed task store for one session. Replaces the legacy read of
|
|
37
|
+
* OpenCode's own todo state, which had two branches: the SDK endpoint and a "stable
|
|
38
|
+
* mode" scan of OpenCode's on-disk todo directory. Both are gone.
|
|
39
|
+
*
|
|
40
|
+
* There is deliberately no `isSqliteBackend()` split here, unlike the message and
|
|
41
|
+
* session readers in this file. That distinction exists because those endpoints
|
|
42
|
+
* differ per backend; the task store is a plugin-owned local directory, so it is
|
|
43
|
+
* backend-independent and one read covers both. Do not "restore" the branch.
|
|
44
|
+
*
|
|
45
|
+
* Fails open via `readSessionTasks`: a missing store or an unreadable file yields
|
|
46
|
+
* `[]` rather than throwing, matching the contract of the reads it replaces.
|
|
47
|
+
*
|
|
48
|
+
* `excludeStale: false` is an explicit local opt-out, not a change of default.
|
|
49
|
+
* `SessionTaskQuery.excludeStale` stays `true` so a completion gate cannot leak a
|
|
50
|
+
* pending handle forever; that bound belongs to the gates, not to this read. This
|
|
51
|
+
* is the `include_todos` / `SessionInfo.todos` diagnostic, and the native list it
|
|
52
|
+
* replaced applied no staleness filter at all, so inheriting the default silently
|
|
53
|
+
* dropped an untouched-but-unfinished task from the view a user inspects when
|
|
54
|
+
* asking "what is this session carrying?" — which is why a session could report
|
|
55
|
+
* `has_todos: true` and render an empty list.
|
|
56
|
+
*/
|
|
13
57
|
export declare function readSessionTodos(sessionID: string): Promise<TodoItem[]>;
|
|
14
58
|
export declare function getSessionInfo(sessionID: string): Promise<SessionInfo | null>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
2
|
import { type ToolDefinition } from "@opencode-ai/plugin/tool";
|
|
3
|
-
|
|
3
|
+
import type { MatrixxConfig } from "../../config/schema";
|
|
4
|
+
export declare function createSessionManagerTools(ctx: PluginInput, pluginConfig?: Partial<MatrixxConfig>): Record<string, ToolDefinition>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TaskCreateInput, TaskObject } from "./types";
|
|
2
|
+
export type CreateOneResult = {
|
|
3
|
+
outcome: "created";
|
|
4
|
+
task: TaskObject;
|
|
5
|
+
} | {
|
|
6
|
+
outcome: "deduplicated";
|
|
7
|
+
id: string;
|
|
8
|
+
subject: string;
|
|
9
|
+
};
|
|
10
|
+
export interface CreateOneOptions {
|
|
11
|
+
input: TaskCreateInput;
|
|
12
|
+
taskDir: string;
|
|
13
|
+
directory: string;
|
|
14
|
+
threadID: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The caller owns the storage lock. This reads and writes one task and nothing
|
|
18
|
+
* else, so a batch can call it strictly sequentially and have item N's write
|
|
19
|
+
* already on disk when item N+1 runs its dedup scan.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createOneTask(options: CreateOneOptions): CreateOneResult;
|
|
@@ -6,6 +6,13 @@ export declare const TaskStatusSchema: z.ZodEnum<{
|
|
|
6
6
|
in_progress: "in_progress";
|
|
7
7
|
}>;
|
|
8
8
|
export type TaskStatus = z.infer<typeof TaskStatusSchema>;
|
|
9
|
+
/** Optional with no default: pre-existing task files must keep loading unmodified. */
|
|
10
|
+
export declare const TaskPrioritySchema: z.ZodEnum<{
|
|
11
|
+
low: "low";
|
|
12
|
+
medium: "medium";
|
|
13
|
+
high: "high";
|
|
14
|
+
}>;
|
|
15
|
+
export type TaskPriority = z.infer<typeof TaskPrioritySchema>;
|
|
9
16
|
/** Task ID must match T-{uuid}-style format (rejects truncated IDs like "T-"). */
|
|
10
17
|
export declare const TaskIdSchema: z.ZodString;
|
|
11
18
|
export declare const TaskObjectSchema: z.ZodObject<{
|
|
@@ -27,6 +34,11 @@ export declare const TaskObjectSchema: z.ZodObject<{
|
|
|
27
34
|
parentID: z.ZodOptional<z.ZodString>;
|
|
28
35
|
threadID: z.ZodString;
|
|
29
36
|
projectRoot: z.ZodOptional<z.ZodString>;
|
|
37
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
38
|
+
low: "low";
|
|
39
|
+
medium: "medium";
|
|
40
|
+
high: "high";
|
|
41
|
+
}>>;
|
|
30
42
|
}, z.core.$strict>;
|
|
31
43
|
export type TaskObject = z.infer<typeof TaskObjectSchema>;
|
|
32
44
|
export declare const TaskSchema: z.ZodObject<{
|
|
@@ -48,8 +60,17 @@ export declare const TaskSchema: z.ZodObject<{
|
|
|
48
60
|
parentID: z.ZodOptional<z.ZodString>;
|
|
49
61
|
threadID: z.ZodString;
|
|
50
62
|
projectRoot: z.ZodOptional<z.ZodString>;
|
|
63
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
64
|
+
low: "low";
|
|
65
|
+
medium: "medium";
|
|
66
|
+
high: "high";
|
|
67
|
+
}>>;
|
|
51
68
|
}, z.core.$strict>;
|
|
52
69
|
export type Task = TaskObject;
|
|
70
|
+
/**
|
|
71
|
+
* Strict on purpose: `status` belongs to `task_update`, and silently dropping a
|
|
72
|
+
* key the caller was told about is how an argument shape drifts from the schema.
|
|
73
|
+
*/
|
|
53
74
|
export declare const TaskCreateInputSchema: z.ZodObject<{
|
|
54
75
|
subject: z.ZodString;
|
|
55
76
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -60,8 +81,37 @@ export declare const TaskCreateInputSchema: z.ZodObject<{
|
|
|
60
81
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
61
82
|
repoURL: z.ZodOptional<z.ZodString>;
|
|
62
83
|
parentID: z.ZodOptional<z.ZodString>;
|
|
63
|
-
|
|
84
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
85
|
+
low: "low";
|
|
86
|
+
medium: "medium";
|
|
87
|
+
high: "high";
|
|
88
|
+
}>>;
|
|
89
|
+
}, z.core.$strict>;
|
|
64
90
|
export type TaskCreateInput = z.infer<typeof TaskCreateInputSchema>;
|
|
91
|
+
/**
|
|
92
|
+
* Batch form of `task_create`. A top-level array is unrepresentable: the SDK
|
|
93
|
+
* types `args` as a ZodRawShape (a flat record of zod types) and validates it
|
|
94
|
+
* into a ZodObject before `execute` runs, so a declared `items` key is the only
|
|
95
|
+
* expressible way to create more than one task in a single call.
|
|
96
|
+
*
|
|
97
|
+
* Items are `unknown` here on purpose: each one is validated separately by
|
|
98
|
+
* `TaskCreateInputSchema` so a bad item fails alone instead of failing the call.
|
|
99
|
+
*/
|
|
100
|
+
export declare const TaskCreateBatchInputSchema: z.ZodObject<{
|
|
101
|
+
items: z.ZodArray<z.ZodUnknown>;
|
|
102
|
+
}, z.core.$strict>;
|
|
103
|
+
export type TaskCreateBatchInput = z.infer<typeof TaskCreateBatchInputSchema>;
|
|
104
|
+
/** One entry of the `tasks` array in the single, always-present response envelope. */
|
|
105
|
+
export type CreatedTaskSummary = {
|
|
106
|
+
id: string;
|
|
107
|
+
subject: string;
|
|
108
|
+
deduplicated?: boolean;
|
|
109
|
+
};
|
|
110
|
+
/** A batch item that failed validation on its own; `index` is its position in `items`. */
|
|
111
|
+
export type TaskCreateItemError = {
|
|
112
|
+
index: number;
|
|
113
|
+
message: string;
|
|
114
|
+
};
|
|
65
115
|
export declare const TaskListInputSchema: z.ZodObject<{
|
|
66
116
|
status: z.ZodOptional<z.ZodEnum<{
|
|
67
117
|
deleted: "deleted";
|
|
@@ -93,6 +143,11 @@ export declare const TaskUpdateInputSchema: z.ZodObject<{
|
|
|
93
143
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
94
144
|
repoURL: z.ZodOptional<z.ZodString>;
|
|
95
145
|
parentID: z.ZodOptional<z.ZodString>;
|
|
146
|
+
priority: z.ZodOptional<z.ZodEnum<{
|
|
147
|
+
low: "low";
|
|
148
|
+
medium: "medium";
|
|
149
|
+
high: "high";
|
|
150
|
+
}>>;
|
|
96
151
|
}, z.core.$strip>;
|
|
97
152
|
export type TaskUpdateInput = z.infer<typeof TaskUpdateInputSchema>;
|
|
98
153
|
export declare const TaskDeleteInputSchema: z.ZodObject<{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-matrixx",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.14",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
-
interface TodoSnapshot {
|
|
3
|
-
id: string;
|
|
4
|
-
content: string;
|
|
5
|
-
status: "pending" | "in_progress" | "completed" | "cancelled";
|
|
6
|
-
priority?: "low" | "medium" | "high";
|
|
7
|
-
}
|
|
8
|
-
type TodoWriter = (input: {
|
|
9
|
-
sessionID: string;
|
|
10
|
-
todos: TodoSnapshot[];
|
|
11
|
-
}) => Promise<void>;
|
|
12
|
-
export declare function _resetForTesting(): void;
|
|
13
|
-
export declare function _setWriterForTesting(writer: TodoWriter | null | undefined): void;
|
|
14
|
-
export interface CompactionTodoPreserver {
|
|
15
|
-
capture: (sessionID: string) => Promise<void>;
|
|
16
|
-
event: (input: {
|
|
17
|
-
event: {
|
|
18
|
-
type: string;
|
|
19
|
-
properties?: unknown;
|
|
20
|
-
};
|
|
21
|
-
}) => Promise<void>;
|
|
22
|
-
}
|
|
23
|
-
export declare function createCompactionTodoPreserverHook(ctx: PluginInput): CompactionTodoPreserver;
|
|
24
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare const HOOK_NAME = "task-notepad";
|
|
2
|
-
export declare const PLAN_DIR_NAME = ".matrixx";
|
|
3
|
-
export declare const PLANS_SUBDIR = "plans";
|
|
4
|
-
export declare const NOTEPAD_DIR_NAME = "notepads";
|
|
5
|
-
export declare const TASKS_SUBDIR = "tasks";
|
|
6
|
-
export declare const PLAN_EXTENSION = ".md";
|
|
7
|
-
export declare const NOTEPAD_EXTENSION = ".md";
|
|
8
|
-
export declare const TODO_TOOL_NAMES: Set<string>;
|
|
9
|
-
export declare const TASK_NOTEPAD_FRAGMENT = "task-notepad";
|
|
10
|
-
export declare const TODO_FETCH_ERROR_FRAGMENT = "Failed to fetch todos for task-notepad";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { TaskNotepadContext } from "./types";
|
|
2
|
-
export declare function createTaskNotepadHook(ctx: TaskNotepadContext): {
|
|
3
|
-
"tool.execute.after": (input: {
|
|
4
|
-
tool: string;
|
|
5
|
-
sessionID: string;
|
|
6
|
-
callID: string;
|
|
7
|
-
}, output: {
|
|
8
|
-
title: string;
|
|
9
|
-
output: string;
|
|
10
|
-
metadata: Record<string, unknown>;
|
|
11
|
-
} | undefined) => Promise<void>;
|
|
12
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
-
type TodoStatus = "pending" | "in_progress" | "completed" | "cancelled";
|
|
3
|
-
type TodoPriority = "low" | "medium" | "high";
|
|
4
|
-
export interface TodoSnapshot {
|
|
5
|
-
id: string;
|
|
6
|
-
content: string;
|
|
7
|
-
status: TodoStatus;
|
|
8
|
-
priority?: TodoPriority;
|
|
9
|
-
}
|
|
10
|
-
export interface PlanFile {
|
|
11
|
-
name: string;
|
|
12
|
-
path: string;
|
|
13
|
-
mtimeMs: number;
|
|
14
|
-
}
|
|
15
|
-
export type TaskNotepadContext = Pick<PluginInput, "client" | "directory">;
|
|
16
|
-
export {};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export declare const HOOK_NAME = "tasks-todowrite-disabler";
|
|
2
|
-
export declare const BLOCKED_TOOLS: string[];
|
|
3
|
-
export declare const REPLACEMENT_MESSAGE = "TodoRead/TodoWrite are DISABLED because tasks.enabled is true.\n\n**ACTION REQUIRED**: RE-REGISTER what you were about to write as Todo using Task tools NOW. Then ASSIGN yourself and START WORKING immediately.\n\n**Use these tools instead:**\n- TaskCreate: Create new task with auto-generated ID\n- TaskUpdate: Update status, assign owner, add dependencies\n- TaskList: List active tasks with dependency info\n- TaskGet: Get full task details\n\n**Workflow:**\n1. TaskCreate({ subject: \"your task description\" })\n2. TaskUpdate({ id: \"T-xxx\", status: \"in_progress\", owner: \"your-thread-id\" })\n3. DO THE WORK\n4. TaskUpdate({ id: \"T-xxx\", status: \"completed\" })\n\nCRITICAL: 1 task = 1 task. Fire independent tasks concurrently.\n\n**STOP! DO NOT START WORKING DIRECTLY - NO MATTER HOW SMALL THE TASK!**\nEven if the task seems trivial (1 line fix, simple edit, quick change), you MUST:\n1. FIRST register it with TaskCreate\n2. THEN mark it in_progress\n3. ONLY THEN do the actual work\n4. FINALLY mark it completed\n\n**WHY?** Task tracking = visibility = accountability. Skipping registration = invisible work = chaos.\n\nDO NOT retry TodoWrite. Convert to TaskCreate NOW.";
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export interface TasksTodowriteDisablerConfig {
|
|
2
|
-
experimental?: {
|
|
3
|
-
task_system?: boolean;
|
|
4
|
-
};
|
|
5
|
-
}
|
|
6
|
-
export declare function createTasksTodowriteDisablerHook(config: TasksTodowriteDisablerConfig): {
|
|
7
|
-
"tool.execute.before": (input: {
|
|
8
|
-
tool: string;
|
|
9
|
-
sessionID: string;
|
|
10
|
-
callID: string;
|
|
11
|
-
}, _output: {
|
|
12
|
-
args: Record<string, unknown>;
|
|
13
|
-
}) => Promise<void>;
|
|
14
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare const HOOK_NAME = "todo-continuation-enforcer";
|
|
2
|
-
export declare const DEFAULT_SKIP_AGENTS: string[];
|
|
3
|
-
export declare const CONTINUATION_PROMPT: string;
|
|
4
|
-
export declare const COUNTDOWN_SECONDS = 2;
|
|
5
|
-
export declare const TOAST_DURATION_MS = 900;
|
|
6
|
-
export declare const COUNTDOWN_GRACE_PERIOD_MS = 500;
|
|
7
|
-
export declare const ABORT_WINDOW_MS = 3000;
|
|
8
|
-
export declare const CONTINUATION_COOLDOWN_MS = 30000;
|
|
9
|
-
export declare const MAX_CONSECUTIVE_FAILURES = 5;
|
|
10
|
-
export declare const FAILURE_RESET_WINDOW_MS: number;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
-
import type { BackgroundManager } from "../../features/background-agent";
|
|
3
|
-
import type { SessionStateStore } from "./session-state";
|
|
4
|
-
import type { ResolvedMessageInfo } from "./types";
|
|
5
|
-
export declare function injectContinuation(args: {
|
|
6
|
-
ctx: PluginInput;
|
|
7
|
-
sessionID: string;
|
|
8
|
-
backgroundManager?: BackgroundManager;
|
|
9
|
-
skipAgents?: string[];
|
|
10
|
-
resolvedInfo?: ResolvedMessageInfo;
|
|
11
|
-
sessionStateStore: SessionStateStore;
|
|
12
|
-
}): Promise<void>;
|