evil-omo 3.12.5 → 3.13.1
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/dist/agents/prometheus/system-prompt.d.ts +1 -1
- package/dist/cli/index.js +61 -18
- package/dist/config/schema/evil-omo-config.d.ts +31 -0
- package/dist/config/schema/hooks.d.ts +1 -1
- package/dist/config/schema/openclaw.d.ts +64 -0
- package/dist/config/schema.d.ts +1 -0
- package/dist/create-hooks.d.ts +1 -1
- package/dist/evil-omo.schema.json +141 -0
- package/dist/features/background-agent/constants.d.ts +3 -3
- package/dist/features/boulder-state/index.d.ts +1 -0
- package/dist/features/boulder-state/storage.d.ts +10 -1
- package/dist/features/boulder-state/top-level-task.d.ts +2 -0
- package/dist/features/boulder-state/types.d.ts +28 -0
- package/dist/hooks/atlas/boulder-continuation-injector.d.ts +2 -0
- package/dist/hooks/atlas/subagent-session-id.d.ts +7 -1
- package/dist/hooks/atlas/tool-execute-after.d.ts +2 -1
- package/dist/hooks/atlas/tool-execute-before.d.ts +2 -0
- package/dist/hooks/atlas/types.d.ts +13 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/keyword-detector/constants.d.ts +1 -1
- package/dist/hooks/keyword-detector/ultrawork/index.d.ts +1 -1
- package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +5 -0
- package/dist/hooks/openclaw.d.ts +11 -0
- package/dist/hooks/preemptive-compaction-degradation-monitor.d.ts +55 -0
- package/dist/hooks/preemptive-compaction-no-text-tail.d.ts +18 -0
- package/dist/hooks/session-recovery/storage/thinking-prepend.d.ts +27 -2
- package/dist/hooks/todo-continuation-enforcer/compaction-guard.d.ts +2 -0
- package/dist/hooks/todo-continuation-enforcer/handler.d.ts +0 -1
- package/dist/hooks/todo-continuation-enforcer/idle-event.d.ts +0 -1
- package/dist/hooks/todo-continuation-enforcer/types.d.ts +2 -1
- package/dist/hooks/webfetch-redirect-guard/constants.d.ts +6 -0
- package/dist/hooks/webfetch-redirect-guard/hook.d.ts +19 -0
- package/dist/hooks/webfetch-redirect-guard/index.d.ts +1 -0
- package/dist/hooks/webfetch-redirect-guard/redirect-resolution.d.ts +16 -0
- package/dist/index.js +1592 -860
- package/dist/openclaw/config.d.ts +8 -0
- package/dist/openclaw/daemon.d.ts +1 -0
- package/dist/openclaw/dispatcher.d.ts +16 -0
- package/dist/openclaw/index.d.ts +5 -0
- package/dist/openclaw/reply-listener.d.ts +31 -0
- package/dist/openclaw/session-registry.d.ts +17 -0
- package/dist/openclaw/tmux.d.ts +8 -0
- package/dist/openclaw/types.d.ts +38 -0
- package/dist/plugin/chat-message.d.ts +5 -4
- package/dist/plugin/chat-params.d.ts +5 -1
- package/dist/plugin/event.d.ts +0 -1
- package/dist/plugin/hooks/create-continuation-hooks.d.ts +1 -2
- package/dist/plugin/hooks/create-core-hooks.d.ts +1 -0
- package/dist/plugin/hooks/create-tool-guard-hooks.d.ts +2 -1
- package/dist/plugin/normalize-tool-arg-schemas.d.ts +1 -0
- package/dist/plugin/system-transform.d.ts +1 -9
- package/dist/plugin-handlers/prometheus-agent-config-builder.d.ts +1 -0
- package/dist/plugin-interface.d.ts +2 -3
- package/dist/shared/first-message-variant.d.ts +0 -1
- package/dist/shared/jsonc-parser.d.ts +4 -0
- package/dist/shared/shell-env.d.ts +1 -1
- package/dist/tools/delegate-task/categories.d.ts +1 -0
- package/dist/tools/delegate-task/constants.d.ts +2 -2
- package/dist/tools/delegate-task/model-selection.d.ts +1 -0
- package/dist/tools/delegate-task/subagent-resolver.d.ts +1 -1
- package/dist/tools/hashline-edit/formatter-trigger.d.ts +38 -0
- package/dist/tools/hashline-edit/hashline-edit-executor.d.ts +2 -1
- package/dist/tools/hashline-edit/tools.d.ts +2 -1
- package/package.json +12 -12
- package/bin/evil-omo.test.ts +0 -82
- package/dist/hooks/gpt-permission-continuation/assistant-message.d.ts +0 -23
- package/dist/hooks/gpt-permission-continuation/constants.d.ts +0 -4
- package/dist/hooks/gpt-permission-continuation/detector.d.ts +0 -1
- package/dist/hooks/gpt-permission-continuation/handler.d.ts +0 -12
- package/dist/hooks/gpt-permission-continuation/index.d.ts +0 -13
- package/dist/hooks/gpt-permission-continuation/session-state.d.ts +0 -15
|
@@ -25,4 +25,4 @@ export declare function getPrometheusPromptSource(model?: string): PrometheusPro
|
|
|
25
25
|
* Gemini models → Gemini-optimized prompt (aggressive tool-call enforcement, thinking checkpoints)
|
|
26
26
|
* Default (Claude, etc.) → Claude-optimized prompt (modular sections)
|
|
27
27
|
*/
|
|
28
|
-
export declare function getPrometheusPrompt(model?: string): string;
|
|
28
|
+
export declare function getPrometheusPrompt(model?: string, disabledTools?: readonly string[]): string;
|
package/dist/cli/index.js
CHANGED
|
@@ -6067,7 +6067,8 @@ var init_hook_names = __esm(() => {
|
|
|
6067
6067
|
"sisyphus-orchestrator": "atlas",
|
|
6068
6068
|
"sisyphus-gpt-hephaestus-reminder": "no-sisyphus-gpt",
|
|
6069
6069
|
"empty-message-sanitizer": null,
|
|
6070
|
-
"delegate-task-english-directive": null
|
|
6070
|
+
"delegate-task-english-directive": null,
|
|
6071
|
+
"gpt-permission-continuation": null
|
|
6071
6072
|
};
|
|
6072
6073
|
});
|
|
6073
6074
|
|
|
@@ -6573,6 +6574,10 @@ var init_model_requirements = __esm(() => {
|
|
|
6573
6574
|
},
|
|
6574
6575
|
quick: {
|
|
6575
6576
|
fallbackChain: [
|
|
6577
|
+
{
|
|
6578
|
+
providers: ["openai", "github-copilot", "opencode"],
|
|
6579
|
+
model: "gpt-5.4-mini"
|
|
6580
|
+
},
|
|
6576
6581
|
{
|
|
6577
6582
|
providers: ["anthropic", "github-copilot", "opencode"],
|
|
6578
6583
|
model: "claude-haiku-4-5"
|
|
@@ -7510,7 +7515,7 @@ var init_openai_only_model_catalog = __esm(() => {
|
|
|
7510
7515
|
};
|
|
7511
7516
|
OPENAI_ONLY_CATEGORY_OVERRIDES = {
|
|
7512
7517
|
artistry: { model: "openai/gpt-5.4", variant: "xhigh" },
|
|
7513
|
-
quick: { model: "openai/gpt-5.
|
|
7518
|
+
quick: { model: "openai/gpt-5.4-mini" },
|
|
7514
7519
|
"visual-engineering": { model: "openai/gpt-5.4", variant: "high" },
|
|
7515
7520
|
writing: { model: "openai/gpt-5.4", variant: "medium" }
|
|
7516
7521
|
};
|
|
@@ -8967,7 +8972,7 @@ var {
|
|
|
8967
8972
|
// package.json
|
|
8968
8973
|
var package_default = {
|
|
8969
8974
|
name: "evil-omo",
|
|
8970
|
-
version: "3.
|
|
8975
|
+
version: "3.13.1",
|
|
8971
8976
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
8972
8977
|
main: "dist/index.js",
|
|
8973
8978
|
types: "dist/index.d.ts",
|
|
@@ -9043,17 +9048,17 @@ var package_default = {
|
|
|
9043
9048
|
typescript: "^5.7.3"
|
|
9044
9049
|
},
|
|
9045
9050
|
optionalDependencies: {
|
|
9046
|
-
"evil-omo-darwin-arm64": "3.
|
|
9047
|
-
"evil-omo-darwin-x64": "3.
|
|
9048
|
-
"evil-omo-darwin-x64-baseline": "3.
|
|
9049
|
-
"evil-omo-linux-x64": "3.
|
|
9050
|
-
"evil-omo-linux-x64-baseline": "3.
|
|
9051
|
-
"evil-omo-linux-arm64": "3.
|
|
9052
|
-
"evil-omo-linux-x64-musl": "3.
|
|
9053
|
-
"evil-omo-linux-x64-musl-baseline": "3.
|
|
9054
|
-
"evil-omo-linux-arm64-musl": "3.
|
|
9055
|
-
"evil-omo-windows-x64": "3.
|
|
9056
|
-
"evil-omo-windows-x64-baseline": "3.
|
|
9051
|
+
"evil-omo-darwin-arm64": "3.13.1",
|
|
9052
|
+
"evil-omo-darwin-x64": "3.13.1",
|
|
9053
|
+
"evil-omo-darwin-x64-baseline": "3.13.1",
|
|
9054
|
+
"evil-omo-linux-x64": "3.13.1",
|
|
9055
|
+
"evil-omo-linux-x64-baseline": "3.13.1",
|
|
9056
|
+
"evil-omo-linux-arm64": "3.13.1",
|
|
9057
|
+
"evil-omo-linux-x64-musl": "3.13.1",
|
|
9058
|
+
"evil-omo-linux-x64-musl-baseline": "3.13.1",
|
|
9059
|
+
"evil-omo-linux-arm64-musl": "3.13.1",
|
|
9060
|
+
"evil-omo-windows-x64": "3.13.1",
|
|
9061
|
+
"evil-omo-windows-x64-baseline": "3.13.1"
|
|
9057
9062
|
},
|
|
9058
9063
|
overrides: {
|
|
9059
9064
|
"@opencode-ai/sdk": "^1.2.24"
|
|
@@ -9924,7 +9929,7 @@ async function promptInstallConfig(detected) {
|
|
|
9924
9929
|
message: "Will you integrate Google Gemini?",
|
|
9925
9930
|
options: [
|
|
9926
9931
|
{ value: "no", label: "No", hint: "Frontend/docs agents will use fallback" },
|
|
9927
|
-
{ value: "yes", label: "Yes", hint: "Beautiful UI generation with Gemini 3 Pro" }
|
|
9932
|
+
{ value: "yes", label: "Yes", hint: "Beautiful UI generation with Gemini 3.1 Pro" }
|
|
9928
9933
|
],
|
|
9929
9934
|
initialValue: initial.gemini
|
|
9930
9935
|
});
|
|
@@ -24577,7 +24582,6 @@ var GitMasterConfigSchema = exports_external.object({
|
|
|
24577
24582
|
});
|
|
24578
24583
|
// src/config/schema/hooks.ts
|
|
24579
24584
|
var HookNameSchema = exports_external.enum([
|
|
24580
|
-
"gpt-permission-continuation",
|
|
24581
24585
|
"todo-continuation-enforcer",
|
|
24582
24586
|
"context-window-monitor",
|
|
24583
24587
|
"session-recovery",
|
|
@@ -24625,12 +24629,45 @@ var HookNameSchema = exports_external.enum([
|
|
|
24625
24629
|
"anthropic-effort",
|
|
24626
24630
|
"hashline-read-enhancer",
|
|
24627
24631
|
"read-image-resizer",
|
|
24628
|
-
"todo-description-override"
|
|
24632
|
+
"todo-description-override",
|
|
24633
|
+
"webfetch-redirect-guard"
|
|
24629
24634
|
]);
|
|
24630
24635
|
// src/config/schema/notification.ts
|
|
24631
24636
|
var NotificationConfigSchema = exports_external.object({
|
|
24632
24637
|
force_enable: exports_external.boolean().optional()
|
|
24633
24638
|
});
|
|
24639
|
+
// src/config/schema/openclaw.ts
|
|
24640
|
+
var OpenClawGatewaySchema = exports_external.object({
|
|
24641
|
+
type: exports_external.enum(["http", "command"]).default("http"),
|
|
24642
|
+
url: exports_external.string().optional(),
|
|
24643
|
+
method: exports_external.string().default("POST"),
|
|
24644
|
+
headers: exports_external.record(exports_external.string(), exports_external.string()).optional(),
|
|
24645
|
+
command: exports_external.string().optional(),
|
|
24646
|
+
timeout: exports_external.number().optional()
|
|
24647
|
+
});
|
|
24648
|
+
var OpenClawHookSchema = exports_external.object({
|
|
24649
|
+
enabled: exports_external.boolean().default(true),
|
|
24650
|
+
gateway: exports_external.string(),
|
|
24651
|
+
instruction: exports_external.string()
|
|
24652
|
+
});
|
|
24653
|
+
var OpenClawReplyListenerConfigSchema = exports_external.object({
|
|
24654
|
+
discordBotToken: exports_external.string().optional(),
|
|
24655
|
+
discordChannelId: exports_external.string().optional(),
|
|
24656
|
+
discordMention: exports_external.string().optional(),
|
|
24657
|
+
authorizedDiscordUserIds: exports_external.array(exports_external.string()).default([]),
|
|
24658
|
+
telegramBotToken: exports_external.string().optional(),
|
|
24659
|
+
telegramChatId: exports_external.string().optional(),
|
|
24660
|
+
pollIntervalMs: exports_external.number().default(3000),
|
|
24661
|
+
rateLimitPerMinute: exports_external.number().default(10),
|
|
24662
|
+
maxMessageLength: exports_external.number().default(500),
|
|
24663
|
+
includePrefix: exports_external.boolean().default(true)
|
|
24664
|
+
});
|
|
24665
|
+
var OpenClawConfigSchema = exports_external.object({
|
|
24666
|
+
enabled: exports_external.boolean().default(false),
|
|
24667
|
+
gateways: exports_external.record(exports_external.string(), OpenClawGatewaySchema).default({}),
|
|
24668
|
+
hooks: exports_external.record(exports_external.string(), OpenClawHookSchema).default({}),
|
|
24669
|
+
replyListener: OpenClawReplyListenerConfigSchema.optional()
|
|
24670
|
+
});
|
|
24634
24671
|
// src/config/schema/ralph-loop.ts
|
|
24635
24672
|
var RalphLoopConfigSchema = exports_external.object({
|
|
24636
24673
|
enabled: exports_external.boolean().default(false),
|
|
@@ -24756,6 +24793,7 @@ var OhMyOpenCodeConfigSchema = exports_external.object({
|
|
|
24756
24793
|
ralph_loop: RalphLoopConfigSchema.optional(),
|
|
24757
24794
|
background_task: BackgroundTaskConfigSchema.optional(),
|
|
24758
24795
|
notification: NotificationConfigSchema.optional(),
|
|
24796
|
+
openclaw: OpenClawConfigSchema.optional(),
|
|
24759
24797
|
babysitting: BabysittingConfigSchema.optional(),
|
|
24760
24798
|
git_master: GitMasterConfigSchema.optional(),
|
|
24761
24799
|
browser_automation_engine: BrowserAutomationConfigSchema.optional(),
|
|
@@ -26748,6 +26786,7 @@ var NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}`;
|
|
|
26748
26786
|
// src/features/boulder-state/storage.ts
|
|
26749
26787
|
import { existsSync as existsSync11, readFileSync as readFileSync9, writeFileSync as writeFileSync5, mkdirSync as mkdirSync3, readdirSync } from "fs";
|
|
26750
26788
|
import { dirname as dirname2, join as join10, basename } from "path";
|
|
26789
|
+
var RESERVED_KEYS = new Set(["__proto__", "prototype", "constructor"]);
|
|
26751
26790
|
function getBoulderFilePath(directory) {
|
|
26752
26791
|
return join10(directory, BOULDER_DIR, BOULDER_FILE);
|
|
26753
26792
|
}
|
|
@@ -26765,6 +26804,9 @@ function readBoulderState(directory) {
|
|
|
26765
26804
|
if (!Array.isArray(parsed.session_ids)) {
|
|
26766
26805
|
parsed.session_ids = [];
|
|
26767
26806
|
}
|
|
26807
|
+
if (!parsed.task_sessions || typeof parsed.task_sessions !== "object" || Array.isArray(parsed.task_sessions)) {
|
|
26808
|
+
parsed.task_sessions = {};
|
|
26809
|
+
}
|
|
26768
26810
|
return parsed;
|
|
26769
26811
|
} catch {
|
|
26770
26812
|
return null;
|
|
@@ -26783,7 +26825,7 @@ function getPlanProgress(planPath) {
|
|
|
26783
26825
|
return {
|
|
26784
26826
|
total,
|
|
26785
26827
|
completed,
|
|
26786
|
-
isComplete: total
|
|
26828
|
+
isComplete: total > 0 && completed === total
|
|
26787
26829
|
};
|
|
26788
26830
|
} catch {
|
|
26789
26831
|
return { total: 0, completed: 0, isComplete: true };
|
|
@@ -27253,6 +27295,7 @@ async function waitForEventProcessorShutdown(eventProcessor, timeoutMs = EVENT_P
|
|
|
27253
27295
|
}
|
|
27254
27296
|
async function run(options) {
|
|
27255
27297
|
process.env.OPENCODE_CLI_RUN_MODE = "true";
|
|
27298
|
+
process.env.OPENCODE_CLIENT = "run";
|
|
27256
27299
|
const startTime = Date.now();
|
|
27257
27300
|
const {
|
|
27258
27301
|
message,
|
|
@@ -1337,6 +1337,37 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
|
|
|
1337
1337
|
notification: z.ZodOptional<z.ZodObject<{
|
|
1338
1338
|
force_enable: z.ZodOptional<z.ZodBoolean>;
|
|
1339
1339
|
}, z.core.$strip>>;
|
|
1340
|
+
openclaw: z.ZodOptional<z.ZodObject<{
|
|
1341
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1342
|
+
gateways: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
1343
|
+
type: z.ZodDefault<z.ZodEnum<{
|
|
1344
|
+
command: "command";
|
|
1345
|
+
http: "http";
|
|
1346
|
+
}>>;
|
|
1347
|
+
url: z.ZodOptional<z.ZodString>;
|
|
1348
|
+
method: z.ZodDefault<z.ZodString>;
|
|
1349
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
1350
|
+
command: z.ZodOptional<z.ZodString>;
|
|
1351
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
1352
|
+
}, z.core.$strip>>>;
|
|
1353
|
+
hooks: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
1354
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1355
|
+
gateway: z.ZodString;
|
|
1356
|
+
instruction: z.ZodString;
|
|
1357
|
+
}, z.core.$strip>>>;
|
|
1358
|
+
replyListener: z.ZodOptional<z.ZodObject<{
|
|
1359
|
+
discordBotToken: z.ZodOptional<z.ZodString>;
|
|
1360
|
+
discordChannelId: z.ZodOptional<z.ZodString>;
|
|
1361
|
+
discordMention: z.ZodOptional<z.ZodString>;
|
|
1362
|
+
authorizedDiscordUserIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1363
|
+
telegramBotToken: z.ZodOptional<z.ZodString>;
|
|
1364
|
+
telegramChatId: z.ZodOptional<z.ZodString>;
|
|
1365
|
+
pollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
1366
|
+
rateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
1367
|
+
maxMessageLength: z.ZodDefault<z.ZodNumber>;
|
|
1368
|
+
includePrefix: z.ZodDefault<z.ZodBoolean>;
|
|
1369
|
+
}, z.core.$strip>>;
|
|
1370
|
+
}, z.core.$strip>>;
|
|
1340
1371
|
babysitting: z.ZodOptional<z.ZodObject<{
|
|
1341
1372
|
timeout_ms: z.ZodDefault<z.ZodNumber>;
|
|
1342
1373
|
}, z.core.$strip>>;
|
|
@@ -3,7 +3,6 @@ export declare const HookNameSchema: z.ZodEnum<{
|
|
|
3
3
|
atlas: "atlas";
|
|
4
4
|
"ralph-loop": "ralph-loop";
|
|
5
5
|
"start-work": "start-work";
|
|
6
|
-
"gpt-permission-continuation": "gpt-permission-continuation";
|
|
7
6
|
"todo-continuation-enforcer": "todo-continuation-enforcer";
|
|
8
7
|
"context-window-monitor": "context-window-monitor";
|
|
9
8
|
"session-recovery": "session-recovery";
|
|
@@ -49,5 +48,6 @@ export declare const HookNameSchema: z.ZodEnum<{
|
|
|
49
48
|
"hashline-read-enhancer": "hashline-read-enhancer";
|
|
50
49
|
"read-image-resizer": "read-image-resizer";
|
|
51
50
|
"todo-description-override": "todo-description-override";
|
|
51
|
+
"webfetch-redirect-guard": "webfetch-redirect-guard";
|
|
52
52
|
}>;
|
|
53
53
|
export type HookName = z.infer<typeof HookNameSchema>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const OpenClawGatewaySchema: z.ZodObject<{
|
|
3
|
+
type: z.ZodDefault<z.ZodEnum<{
|
|
4
|
+
command: "command";
|
|
5
|
+
http: "http";
|
|
6
|
+
}>>;
|
|
7
|
+
url: z.ZodOptional<z.ZodString>;
|
|
8
|
+
method: z.ZodDefault<z.ZodString>;
|
|
9
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
10
|
+
command: z.ZodOptional<z.ZodString>;
|
|
11
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
export declare const OpenClawHookSchema: z.ZodObject<{
|
|
14
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
15
|
+
gateway: z.ZodString;
|
|
16
|
+
instruction: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export declare const OpenClawReplyListenerConfigSchema: z.ZodObject<{
|
|
19
|
+
discordBotToken: z.ZodOptional<z.ZodString>;
|
|
20
|
+
discordChannelId: z.ZodOptional<z.ZodString>;
|
|
21
|
+
discordMention: z.ZodOptional<z.ZodString>;
|
|
22
|
+
authorizedDiscordUserIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
23
|
+
telegramBotToken: z.ZodOptional<z.ZodString>;
|
|
24
|
+
telegramChatId: z.ZodOptional<z.ZodString>;
|
|
25
|
+
pollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
rateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
maxMessageLength: z.ZodDefault<z.ZodNumber>;
|
|
28
|
+
includePrefix: z.ZodDefault<z.ZodBoolean>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
export declare const OpenClawConfigSchema: z.ZodObject<{
|
|
31
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
32
|
+
gateways: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
33
|
+
type: z.ZodDefault<z.ZodEnum<{
|
|
34
|
+
command: "command";
|
|
35
|
+
http: "http";
|
|
36
|
+
}>>;
|
|
37
|
+
url: z.ZodOptional<z.ZodString>;
|
|
38
|
+
method: z.ZodDefault<z.ZodString>;
|
|
39
|
+
headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
40
|
+
command: z.ZodOptional<z.ZodString>;
|
|
41
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
42
|
+
}, z.core.$strip>>>;
|
|
43
|
+
hooks: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
44
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
45
|
+
gateway: z.ZodString;
|
|
46
|
+
instruction: z.ZodString;
|
|
47
|
+
}, z.core.$strip>>>;
|
|
48
|
+
replyListener: z.ZodOptional<z.ZodObject<{
|
|
49
|
+
discordBotToken: z.ZodOptional<z.ZodString>;
|
|
50
|
+
discordChannelId: z.ZodOptional<z.ZodString>;
|
|
51
|
+
discordMention: z.ZodOptional<z.ZodString>;
|
|
52
|
+
authorizedDiscordUserIds: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
53
|
+
telegramBotToken: z.ZodOptional<z.ZodString>;
|
|
54
|
+
telegramChatId: z.ZodOptional<z.ZodString>;
|
|
55
|
+
pollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
56
|
+
rateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
57
|
+
maxMessageLength: z.ZodDefault<z.ZodNumber>;
|
|
58
|
+
includePrefix: z.ZodDefault<z.ZodBoolean>;
|
|
59
|
+
}, z.core.$strip>>;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
export type OpenClawConfig = z.infer<typeof OpenClawConfigSchema>;
|
|
62
|
+
export type OpenClawGateway = z.infer<typeof OpenClawGatewaySchema>;
|
|
63
|
+
export type OpenClawHook = z.infer<typeof OpenClawHookSchema>;
|
|
64
|
+
export type OpenClawReplyListenerConfig = z.infer<typeof OpenClawReplyListenerConfigSchema>;
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export * from "./schema/git-env-prefix";
|
|
|
14
14
|
export * from "./schema/git-master";
|
|
15
15
|
export * from "./schema/hooks";
|
|
16
16
|
export * from "./schema/notification";
|
|
17
|
+
export * from "./schema/openclaw";
|
|
17
18
|
export * from "./schema/evil-omo-config";
|
|
18
19
|
export * from "./schema/ralph-loop";
|
|
19
20
|
export * from "./schema/runtime-fallback";
|
package/dist/create-hooks.d.ts
CHANGED
|
@@ -27,7 +27,6 @@ export declare function createHooks(args: {
|
|
|
27
27
|
disposeHooks: () => void;
|
|
28
28
|
categorySkillReminder: ReturnType<typeof import("./hooks").createCategorySkillReminderHook> | null;
|
|
29
29
|
autoSlashCommand: ReturnType<typeof import("./hooks").createAutoSlashCommandHook> | null;
|
|
30
|
-
gptPermissionContinuation: ReturnType<typeof import("./hooks").createGptPermissionContinuationHook> | null;
|
|
31
30
|
stopContinuationGuard: ReturnType<typeof import("./hooks").createStopContinuationGuardHook> | null;
|
|
32
31
|
compactionContextInjector: ReturnType<typeof import("./hooks").createCompactionContextInjector> | null;
|
|
33
32
|
compactionTodoPreserver: ReturnType<typeof import("./hooks").createCompactionTodoPreserverHook> | null;
|
|
@@ -51,6 +50,7 @@ export declare function createHooks(args: {
|
|
|
51
50
|
jsonErrorRecovery: ReturnType<typeof import("./hooks").createJsonErrorRecoveryHook> | null;
|
|
52
51
|
readImageResizer: ReturnType<typeof import("./hooks").createReadImageResizerHook> | null;
|
|
53
52
|
todoDescriptionOverride: ReturnType<typeof import("./hooks").createTodoDescriptionOverrideHook> | null;
|
|
53
|
+
webfetchRedirectGuard: ReturnType<typeof import("./hooks").createWebFetchRedirectGuardHook> | null;
|
|
54
54
|
contextWindowMonitor: ReturnType<typeof import("./hooks").createContextWindowMonitorHook> | null;
|
|
55
55
|
preemptiveCompaction: ReturnType<typeof import("./hooks").createPreemptiveCompactionHook> | null;
|
|
56
56
|
sessionRecovery: ReturnType<typeof import("./hooks").createSessionRecoveryHook> | null;
|
|
@@ -3695,6 +3695,147 @@
|
|
|
3695
3695
|
},
|
|
3696
3696
|
"additionalProperties": false
|
|
3697
3697
|
},
|
|
3698
|
+
"openclaw": {
|
|
3699
|
+
"type": "object",
|
|
3700
|
+
"properties": {
|
|
3701
|
+
"enabled": {
|
|
3702
|
+
"default": false,
|
|
3703
|
+
"type": "boolean"
|
|
3704
|
+
},
|
|
3705
|
+
"gateways": {
|
|
3706
|
+
"default": {},
|
|
3707
|
+
"type": "object",
|
|
3708
|
+
"propertyNames": {
|
|
3709
|
+
"type": "string"
|
|
3710
|
+
},
|
|
3711
|
+
"additionalProperties": {
|
|
3712
|
+
"type": "object",
|
|
3713
|
+
"properties": {
|
|
3714
|
+
"type": {
|
|
3715
|
+
"default": "http",
|
|
3716
|
+
"type": "string",
|
|
3717
|
+
"enum": [
|
|
3718
|
+
"http",
|
|
3719
|
+
"command"
|
|
3720
|
+
]
|
|
3721
|
+
},
|
|
3722
|
+
"url": {
|
|
3723
|
+
"type": "string"
|
|
3724
|
+
},
|
|
3725
|
+
"method": {
|
|
3726
|
+
"default": "POST",
|
|
3727
|
+
"type": "string"
|
|
3728
|
+
},
|
|
3729
|
+
"headers": {
|
|
3730
|
+
"type": "object",
|
|
3731
|
+
"propertyNames": {
|
|
3732
|
+
"type": "string"
|
|
3733
|
+
},
|
|
3734
|
+
"additionalProperties": {
|
|
3735
|
+
"type": "string"
|
|
3736
|
+
}
|
|
3737
|
+
},
|
|
3738
|
+
"command": {
|
|
3739
|
+
"type": "string"
|
|
3740
|
+
},
|
|
3741
|
+
"timeout": {
|
|
3742
|
+
"type": "number"
|
|
3743
|
+
}
|
|
3744
|
+
},
|
|
3745
|
+
"required": [
|
|
3746
|
+
"type",
|
|
3747
|
+
"method"
|
|
3748
|
+
],
|
|
3749
|
+
"additionalProperties": false
|
|
3750
|
+
}
|
|
3751
|
+
},
|
|
3752
|
+
"hooks": {
|
|
3753
|
+
"default": {},
|
|
3754
|
+
"type": "object",
|
|
3755
|
+
"propertyNames": {
|
|
3756
|
+
"type": "string"
|
|
3757
|
+
},
|
|
3758
|
+
"additionalProperties": {
|
|
3759
|
+
"type": "object",
|
|
3760
|
+
"properties": {
|
|
3761
|
+
"enabled": {
|
|
3762
|
+
"default": true,
|
|
3763
|
+
"type": "boolean"
|
|
3764
|
+
},
|
|
3765
|
+
"gateway": {
|
|
3766
|
+
"type": "string"
|
|
3767
|
+
},
|
|
3768
|
+
"instruction": {
|
|
3769
|
+
"type": "string"
|
|
3770
|
+
}
|
|
3771
|
+
},
|
|
3772
|
+
"required": [
|
|
3773
|
+
"enabled",
|
|
3774
|
+
"gateway",
|
|
3775
|
+
"instruction"
|
|
3776
|
+
],
|
|
3777
|
+
"additionalProperties": false
|
|
3778
|
+
}
|
|
3779
|
+
},
|
|
3780
|
+
"replyListener": {
|
|
3781
|
+
"type": "object",
|
|
3782
|
+
"properties": {
|
|
3783
|
+
"discordBotToken": {
|
|
3784
|
+
"type": "string"
|
|
3785
|
+
},
|
|
3786
|
+
"discordChannelId": {
|
|
3787
|
+
"type": "string"
|
|
3788
|
+
},
|
|
3789
|
+
"discordMention": {
|
|
3790
|
+
"type": "string"
|
|
3791
|
+
},
|
|
3792
|
+
"authorizedDiscordUserIds": {
|
|
3793
|
+
"default": [],
|
|
3794
|
+
"type": "array",
|
|
3795
|
+
"items": {
|
|
3796
|
+
"type": "string"
|
|
3797
|
+
}
|
|
3798
|
+
},
|
|
3799
|
+
"telegramBotToken": {
|
|
3800
|
+
"type": "string"
|
|
3801
|
+
},
|
|
3802
|
+
"telegramChatId": {
|
|
3803
|
+
"type": "string"
|
|
3804
|
+
},
|
|
3805
|
+
"pollIntervalMs": {
|
|
3806
|
+
"default": 3000,
|
|
3807
|
+
"type": "number"
|
|
3808
|
+
},
|
|
3809
|
+
"rateLimitPerMinute": {
|
|
3810
|
+
"default": 10,
|
|
3811
|
+
"type": "number"
|
|
3812
|
+
},
|
|
3813
|
+
"maxMessageLength": {
|
|
3814
|
+
"default": 500,
|
|
3815
|
+
"type": "number"
|
|
3816
|
+
},
|
|
3817
|
+
"includePrefix": {
|
|
3818
|
+
"default": true,
|
|
3819
|
+
"type": "boolean"
|
|
3820
|
+
}
|
|
3821
|
+
},
|
|
3822
|
+
"required": [
|
|
3823
|
+
"authorizedDiscordUserIds",
|
|
3824
|
+
"pollIntervalMs",
|
|
3825
|
+
"rateLimitPerMinute",
|
|
3826
|
+
"maxMessageLength",
|
|
3827
|
+
"includePrefix"
|
|
3828
|
+
],
|
|
3829
|
+
"additionalProperties": false
|
|
3830
|
+
}
|
|
3831
|
+
},
|
|
3832
|
+
"required": [
|
|
3833
|
+
"enabled",
|
|
3834
|
+
"gateways",
|
|
3835
|
+
"hooks"
|
|
3836
|
+
],
|
|
3837
|
+
"additionalProperties": false
|
|
3838
|
+
},
|
|
3698
3839
|
"babysitting": {
|
|
3699
3840
|
"type": "object",
|
|
3700
3841
|
"properties": {
|
|
@@ -3,11 +3,11 @@ import type { BackgroundTask, LaunchInput } from "./types";
|
|
|
3
3
|
export declare const TASK_TTL_MS: number;
|
|
4
4
|
export declare const TERMINAL_TASK_TTL_MS: number;
|
|
5
5
|
export declare const MIN_STABILITY_TIME_MS: number;
|
|
6
|
-
export declare const DEFAULT_STALE_TIMEOUT_MS =
|
|
7
|
-
export declare const DEFAULT_MESSAGE_STALENESS_TIMEOUT_MS =
|
|
6
|
+
export declare const DEFAULT_STALE_TIMEOUT_MS = 2700000;
|
|
7
|
+
export declare const DEFAULT_MESSAGE_STALENESS_TIMEOUT_MS = 3600000;
|
|
8
8
|
export declare const DEFAULT_MAX_TOOL_CALLS = 4000;
|
|
9
9
|
export declare const DEFAULT_CIRCUIT_BREAKER_CONSECUTIVE_THRESHOLD = 20;
|
|
10
|
-
export declare const DEFAULT_CIRCUIT_BREAKER_ENABLED =
|
|
10
|
+
export declare const DEFAULT_CIRCUIT_BREAKER_ENABLED = true;
|
|
11
11
|
export declare const MIN_RUNTIME_BEFORE_STALE_MS = 30000;
|
|
12
12
|
export declare const MIN_IDLE_TIME_MS = 5000;
|
|
13
13
|
export declare const POLLING_INTERVAL_MS = 3000;
|
|
@@ -3,12 +3,21 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles reading/writing boulder.json for active plan tracking.
|
|
5
5
|
*/
|
|
6
|
-
import type { BoulderState, PlanProgress } from "./types";
|
|
6
|
+
import type { BoulderState, PlanProgress, TaskSessionState } from "./types";
|
|
7
7
|
export declare function getBoulderFilePath(directory: string): string;
|
|
8
8
|
export declare function readBoulderState(directory: string): BoulderState | null;
|
|
9
9
|
export declare function writeBoulderState(directory: string, state: BoulderState): boolean;
|
|
10
10
|
export declare function appendSessionId(directory: string, sessionId: string): BoulderState | null;
|
|
11
11
|
export declare function clearBoulderState(directory: string): boolean;
|
|
12
|
+
export declare function getTaskSessionState(directory: string, taskKey: string): TaskSessionState | null;
|
|
13
|
+
export declare function upsertTaskSessionState(directory: string, input: {
|
|
14
|
+
taskKey: string;
|
|
15
|
+
taskLabel: string;
|
|
16
|
+
taskTitle: string;
|
|
17
|
+
sessionId: string;
|
|
18
|
+
agent?: string;
|
|
19
|
+
category?: string;
|
|
20
|
+
}): BoulderState | null;
|
|
12
21
|
/**
|
|
13
22
|
* Find Prometheus plan files for this project.
|
|
14
23
|
* Prometheus stores plans at: {project}/.sisyphus/plans/{name}.md
|
|
@@ -17,6 +17,8 @@ export interface BoulderState {
|
|
|
17
17
|
agent?: string;
|
|
18
18
|
/** Absolute path to the git worktree root where work happens */
|
|
19
19
|
worktree_path?: string;
|
|
20
|
+
/** Preferred reusable subagent sessions keyed by current top-level plan task */
|
|
21
|
+
task_sessions?: Record<string, TaskSessionState>;
|
|
20
22
|
}
|
|
21
23
|
export interface PlanProgress {
|
|
22
24
|
/** Total number of checkboxes */
|
|
@@ -26,3 +28,29 @@ export interface PlanProgress {
|
|
|
26
28
|
/** Whether all tasks are done */
|
|
27
29
|
isComplete: boolean;
|
|
28
30
|
}
|
|
31
|
+
export interface TaskSessionState {
|
|
32
|
+
/** Stable identifier for the current top-level plan task (e.g. todo:1 / final-wave:F1) */
|
|
33
|
+
task_key: string;
|
|
34
|
+
/** Original task label from the plan file */
|
|
35
|
+
task_label: string;
|
|
36
|
+
/** Full task title from the plan file */
|
|
37
|
+
task_title: string;
|
|
38
|
+
/** Preferred reusable subagent session */
|
|
39
|
+
session_id: string;
|
|
40
|
+
/** Agent associated with the task session, when known */
|
|
41
|
+
agent?: string;
|
|
42
|
+
/** Category associated with the task session, when known */
|
|
43
|
+
category?: string;
|
|
44
|
+
/** Last update timestamp */
|
|
45
|
+
updated_at: string;
|
|
46
|
+
}
|
|
47
|
+
export interface TopLevelTaskRef {
|
|
48
|
+
/** Stable identifier for the current top-level plan task */
|
|
49
|
+
key: string;
|
|
50
|
+
/** Task section in the Prometheus plan */
|
|
51
|
+
section: "todo" | "final-wave";
|
|
52
|
+
/** Original label token (e.g. 1 / F1) */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Full task title extracted from the checkbox line */
|
|
55
|
+
title: string;
|
|
56
|
+
}
|
|
@@ -9,6 +9,8 @@ export declare function injectBoulderContinuation(input: {
|
|
|
9
9
|
total: number;
|
|
10
10
|
agent?: string;
|
|
11
11
|
worktreePath?: string;
|
|
12
|
+
preferredTaskSessionId?: string;
|
|
13
|
+
preferredTaskTitle?: string;
|
|
12
14
|
backgroundManager?: BackgroundManager;
|
|
13
15
|
sessionState: SessionState;
|
|
14
16
|
}): Promise<void>;
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
+
export declare function extractSessionIdFromOutput(output: string): string | undefined;
|
|
3
|
+
export declare function validateSubagentSessionId(input: {
|
|
4
|
+
client: PluginInput["client"];
|
|
5
|
+
sessionID?: string;
|
|
6
|
+
lineageSessionIDs: string[];
|
|
7
|
+
}): Promise<string | undefined>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
-
import type { SessionState } from "./types";
|
|
2
|
+
import type { PendingTaskRef, SessionState } from "./types";
|
|
3
3
|
import type { ToolExecuteAfterInput, ToolExecuteAfterOutput } from "./types";
|
|
4
4
|
export declare function createToolExecuteAfterHandler(input: {
|
|
5
5
|
ctx: PluginInput;
|
|
6
6
|
pendingFilePaths: Map<string, string>;
|
|
7
|
+
pendingTaskRefs: Map<string, PendingTaskRef>;
|
|
7
8
|
autoCommit: boolean;
|
|
8
9
|
getState: (sessionID: string) => SessionState;
|
|
9
10
|
}): (toolInput: ToolExecuteAfterInput, toolOutput: ToolExecuteAfterOutput) => Promise<void>;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { PluginInput } from "@opencode-ai/plugin";
|
|
2
|
+
import type { PendingTaskRef } from "./types";
|
|
2
3
|
export declare function createToolExecuteBeforeHandler(input: {
|
|
3
4
|
ctx: PluginInput;
|
|
4
5
|
pendingFilePaths: Map<string, string>;
|
|
6
|
+
pendingTaskRefs: Map<string, PendingTaskRef>;
|
|
5
7
|
}): (toolInput: {
|
|
6
8
|
tool: string;
|
|
7
9
|
sessionID?: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AgentOverrides } from "../../config";
|
|
2
2
|
import type { BackgroundManager } from "../../features/background-agent";
|
|
3
|
+
import type { TopLevelTaskRef } from "../../features/boulder-state";
|
|
3
4
|
export type ModelInfo = {
|
|
4
5
|
providerID: string;
|
|
5
6
|
modelID: string;
|
|
@@ -8,7 +9,6 @@ export interface AtlasHookOptions {
|
|
|
8
9
|
directory: string;
|
|
9
10
|
backgroundManager?: BackgroundManager;
|
|
10
11
|
isContinuationStopped?: (sessionID: string) => boolean;
|
|
11
|
-
shouldSkipContinuation?: (sessionID: string) => boolean;
|
|
12
12
|
agentOverrides?: AgentOverrides;
|
|
13
13
|
/** Enable auto-commit after each atomic task completion (default: true) */
|
|
14
14
|
autoCommit?: boolean;
|
|
@@ -23,6 +23,18 @@ export interface ToolExecuteAfterOutput {
|
|
|
23
23
|
output: string;
|
|
24
24
|
metadata: Record<string, unknown>;
|
|
25
25
|
}
|
|
26
|
+
export type TrackedTopLevelTaskRef = Pick<TopLevelTaskRef, "key" | "label" | "title">;
|
|
27
|
+
export type PendingTaskRef = {
|
|
28
|
+
kind: "track";
|
|
29
|
+
task: TrackedTopLevelTaskRef;
|
|
30
|
+
} | {
|
|
31
|
+
kind: "skip";
|
|
32
|
+
reason: "explicit_resume";
|
|
33
|
+
} | {
|
|
34
|
+
kind: "skip";
|
|
35
|
+
reason: "ambiguous_task_key";
|
|
36
|
+
task: TrackedTopLevelTaskRef;
|
|
37
|
+
};
|
|
26
38
|
export interface SessionState {
|
|
27
39
|
lastEventWasAbortError?: boolean;
|
|
28
40
|
lastContinuationInjectedAt?: number;
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -27,7 +27,6 @@ export { createCategorySkillReminderHook } from "./category-skill-reminder";
|
|
|
27
27
|
export { createRalphLoopHook, type RalphLoopHook } from "./ralph-loop";
|
|
28
28
|
export { createNoSisyphusGptHook } from "./no-sisyphus-gpt";
|
|
29
29
|
export { createNoHephaestusNonGptHook } from "./no-hephaestus-non-gpt";
|
|
30
|
-
export { createGptPermissionContinuationHook, type GptPermissionContinuationHook } from "./gpt-permission-continuation";
|
|
31
30
|
export { createAutoSlashCommandHook } from "./auto-slash-command";
|
|
32
31
|
export { createEditErrorRecoveryHook } from "./edit-error-recovery";
|
|
33
32
|
export { createPrometheusMdOnlyHook } from "./prometheus-md-only";
|
|
@@ -49,3 +48,4 @@ export { createHashlineReadEnhancerHook } from "./hashline-read-enhancer";
|
|
|
49
48
|
export { createJsonErrorRecoveryHook, JSON_ERROR_TOOL_EXCLUDE_LIST, JSON_ERROR_PATTERNS, JSON_ERROR_REMINDER } from "./json-error-recovery";
|
|
50
49
|
export { createReadImageResizerHook } from "./read-image-resizer";
|
|
51
50
|
export { createTodoDescriptionOverrideHook } from "./todo-description-override";
|
|
51
|
+
export { createWebFetchRedirectGuardHook } from "./webfetch-redirect-guard";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const CODE_BLOCK_PATTERN: RegExp;
|
|
2
2
|
export declare const INLINE_CODE_PATTERN: RegExp;
|
|
3
|
-
export { isPlannerAgent, getUltraworkMessage } from "./ultrawork";
|
|
3
|
+
export { isPlannerAgent, isNonOmoAgent, getUltraworkMessage } from "./ultrawork";
|
|
4
4
|
export { SEARCH_PATTERN, SEARCH_MESSAGE } from "./search";
|
|
5
5
|
export { ANALYZE_PATTERN, ANALYZE_MESSAGE } from "./analyze";
|
|
6
6
|
export type KeywordDetector = {
|