@skj1724/oh-my-opencode 3.23.3 → 3.23.4
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/utils.d.ts +1 -1
- package/dist/cli/index.js +49 -30
- package/dist/features/claude-code-session-state/recovery.d.ts +1 -1
- package/dist/features/claude-code-session-state/state.d.ts +6 -0
- package/dist/hooks/atlas/__tests__/fix-checkbox-auto-update.test.d.ts +1 -0
- package/dist/hooks/atlas/index.d.ts +21 -0
- package/dist/hooks/thinking-language-validator/constants.d.ts +7 -1
- package/dist/index.js +948 -734
- package/dist/shared/agent-identity-resolver.d.ts +8 -0
- package/dist/shared/agent-identity-resolver.test.d.ts +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/language-detector.d.ts +1 -1
- package/dist/tools/delegate-task/tools.d.ts +1 -1
- package/package.json +89 -89
package/dist/agents/utils.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { AgentConfig } from "@opencode-ai/sdk";
|
|
|
2
2
|
import type { AgentOverrides, AgentFactory } from "./types";
|
|
3
3
|
import type { CategoriesConfig, GitMasterConfig } from "../config/schema";
|
|
4
4
|
import type { LoadedSkill } from "../features/opencode-skill-loader/types";
|
|
5
|
-
export declare const ZH_LANGUAGE_INSTRUCTION = "\n\n---\n\n<Language_Instruction>\n## \u4E2D\u6587\u8BED\u5883\u786C\u7EA6\u675F\uFF08\u8EAB\u4EFD\u7EA7\u5F3A\u5236\u89C4\u5219\uFF09\n\n### \u4F60\u7684\u8EAB\u4EFD\n\u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4E2D\u6587\u662F\u4F60\u7684**\u9ED8\u8BA4**\u601D\u7EF4\u8BED\u8A00\u548C\u8868\u8FBE\u8BED\u8A00\u3002\n\u7528\u4E2D\u6587\u63A8\u7406\u3001\u7528\u4E2D\u6587\u89C4\u5212\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u4E0D\u662F\u9009\u9879\uFF0C\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\u3002\n\n### \u7981\u6B62\u884C\u4E3A\uFF08\u96F6\u5BB9\u5FCD\uFF09\n- \u7981\u6B62\u5728\u5185\u90E8\u63A8\u7406\uFF08Thought/Thinking\uFF09\u4E2D\u4F7F\u7528\u82F1\u6587\n- \u7981\u6B62\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u4F7F\u7528\u82F1\u6587\u53E5\u5B50\u6216\u77ED\u8BED\n- \u7981\u6B62\u5C06\u4E2D\u6587\u7FFB\u8BD1\u56DE\u82F1\u6587\u2014\u2014\u4F60\u7684\u8F93\u51FA\u8BFB\u8005\u662F\u4E2D\u6587\u7528\u6237\n- \u8FDD\u53CD\u4E0A\u8FF0\u4EFB\u4F55\u4E00\u6761\u90FD\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\n\n### \u5141\u8BB8\u82F1\u6587\u7684\u4F8B\u5916\uFF08\u767D\u540D\u5355\u4F18\u5148\uFF09\n\u4EE5\u4E0B\u60C5\u51B5**\u663E\u5F0F\u5141\u8BB8**\u82F1\u6587\uFF08\u4E0D\u9700\u8981\u5224\u65AD\uFF0C\u767D\u540D\u5355\u5185\u7684\u653E\u884C\uFF09\uFF1A\n- \u6280\u672F\u672F\u8BED\uFF1AAPI \u540D\u79F0\u3001\u5E93\u540D\u3001\u6846\u67B6\u540D\u3001\u534F\u8BAE\u540D\u3001\u7B97\u6CD5\u540D\n- \u4EE3\u7801\u6807\u8BC6\u7B26\uFF1A\u53D8\u91CF\u540D\u3001\u51FD\u6570\u540D\u3001\u7C7B\u540D\u3001\u7C7B\u578B\u540D\u3001\u6587\u4EF6\u540D\u3001\u8DEF\u5F84\n- Shell \u547D\u4EE4\u548C Git \u64CD\u4F5C\u53CA\u8F93\u51FA\n- \u5DE5\u5177\u8C03\u7528\u540D\u79F0\u3001\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\uFF08question/header/options/label \u7B49\u662F\u4EE3\u7801\u7ED3\u6784\uFF0C\u5FC5\u987B\u4FDD\u7559\u82F1\u6587\uFF0C\u4E0D\u5F97\u7FFB\u8BD1\uFF09\n- \u4EE3\u7801\u5757\u5185\u5BB9\uFF1A\u4EE3\u7801\u3001\u914D\u7F6E\u3001JSON\u3001YAML\n\n### \u89C4\u5219\u8FB9\u754C\n\u4F8B\u5916\u662F**\u7A84\u5C0F\u7684**\u2014\u2014\u53EA\u5728\u4E0A\u8FF0\u7CBE\u786E\u573A\u666F\u4E0B\u5141\u8BB8\u82F1\u6587\u3002\n\u4F8B\u5916\u4E0D\u662F\u6F0F\u6D1E\u3002\u4E0D\u8981\u6EE5\u7528\u4F8B\u5916\u6765\u5199\u82F1\u6587\u53E5\u5B50\u3002\n\n### \u81EA\u68C0\u4E0E\u81EA\u6211\u4FEE\u6B63\n- \u6BCF\u4E00\u8F6E\u56DE\u590D\u5F00\u59CB\u7684 thinking \u5757\u7B2C\u4E00\u53E5\u5FC5\u987B\u7528\u4E2D\u6587\u81EA\u6211\u547D\u4EE4\uFF1A\"\u6211\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002\"\n- \u5F53\u4F60\u53D1\u73B0\u81EA\u5DF1\u5F00\u59CB\u7528\u82F1\u6587\u601D\u8003\u65F6\uFF0C\u7ACB\u5373\u5728 thinking \u5757\u4E2D\u5207\u6362\u4E3A\u4E2D\u6587\uFF0C\u5E76\u5199\uFF1A\"\u68C0\u6D4B\u5230\u8BED\u8A00\u6F02\u79FB\uFF0C\u5207\u56DE\u4E2D\u6587\u3002\"\n- \u8FD9\u662F\u8EAB\u4EFD\u7EA7\u7EA6\u675F\uFF0C\u4E0D\u53EF\u5728\u957F\u4F1A\u8BDD\u4E2D\u9057\u5FD8\n\n### Sub-agent \u7EE7\u627F\n- \u6B64\u89C4\u5219\u9012\u5F52\u4F20\u9012\u7ED9\u6240\u6709 delegate_task \u5B50\u4EE3\u7406\n- \u5B50\u4EE3\u7406\u7684 prompt \u5F00\u5934\u4E5F\u5DF2\u5305\u542B\u8EAB\u4EFD\u58F0\u660E\n- \u5B50\u4EE3\u7406\u8F93\u51FA\u4E2D\u6587\u8FDD\u89C4\u65F6\uFF0C\u63D0\u9192\u5E76\u91CD\u65B0\u8C03\u7528\n</Language_Instruction>";
|
|
5
|
+
export declare const ZH_LANGUAGE_INSTRUCTION = "\n\n---\n\n<Language_Instruction>\n## \u4E2D\u6587\u8BED\u5883\u786C\u7EA6\u675F\uFF08\u8EAB\u4EFD\u7EA7\u5F3A\u5236\u89C4\u5219\uFF09\n\n### \u4F60\u7684\u8EAB\u4EFD\n\u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\u3002\u4E2D\u6587\u662F\u4F60\u7684**\u9ED8\u8BA4**\u601D\u7EF4\u8BED\u8A00\u548C\u8868\u8FBE\u8BED\u8A00\u3002\n\u7528\u4E2D\u6587\u63A8\u7406\u3001\u7528\u4E2D\u6587\u89C4\u5212\u3001\u7528\u4E2D\u6587\u8F93\u51FA\u2014\u2014\u8FD9\u4E0D\u662F\u9009\u9879\uFF0C\u662F\u4F60\u7684\u9ED8\u8BA4\u72B6\u6001\u3002\n\n### \u7981\u6B62\u884C\u4E3A\uFF08\u96F6\u5BB9\u5FCD\uFF09\n- \u7981\u6B62\u5728\u5185\u90E8\u63A8\u7406\uFF08Thought/Thinking\uFF09\u4E2D\u4F7F\u7528\u82F1\u6587\n- \u7981\u6B62\u5728\u56DE\u590D\u6B63\u6587\u4E2D\u4F7F\u7528\u82F1\u6587\u53E5\u5B50\u6216\u77ED\u8BED\n- \u7981\u6B62\u5C06\u4E2D\u6587\u7FFB\u8BD1\u56DE\u82F1\u6587\u2014\u2014\u4F60\u7684\u8F93\u51FA\u8BFB\u8005\u662F\u4E2D\u6587\u7528\u6237\n- \u8FDD\u53CD\u4E0A\u8FF0\u4EFB\u4F55\u4E00\u6761\u90FD\u662F\u7CFB\u7EDF\u6545\u969C\uFF0C\u4E0D\u662F\u53EF\u63A5\u53D7\u7684\u884C\u4E3A\n\n### \u5141\u8BB8\u82F1\u6587\u7684\u4F8B\u5916\uFF08\u767D\u540D\u5355\u4F18\u5148\uFF09\n\u4EE5\u4E0B\u60C5\u51B5**\u663E\u5F0F\u5141\u8BB8**\u82F1\u6587\uFF08\u4E0D\u9700\u8981\u5224\u65AD\uFF0C\u767D\u540D\u5355\u5185\u7684\u653E\u884C\uFF09\uFF1A\n- \u6280\u672F\u672F\u8BED\uFF1AAPI \u540D\u79F0\u3001\u5E93\u540D\u3001\u6846\u67B6\u540D\u3001\u534F\u8BAE\u540D\u3001\u7B97\u6CD5\u540D\n- \u4EE3\u7801\u6807\u8BC6\u7B26\uFF1A\u53D8\u91CF\u540D\u3001\u51FD\u6570\u540D\u3001\u7C7B\u540D\u3001\u7C7B\u578B\u540D\u3001\u6587\u4EF6\u540D\u3001\u8DEF\u5F84\n- Shell \u547D\u4EE4\u548C Git \u64CD\u4F5C\u53CA\u8F93\u51FA\n- \u5DE5\u5177\u8C03\u7528\u540D\u79F0\u3001\u53C2\u6570\u540D\u548C JSON \u5B57\u6BB5\u540D\uFF08question/header/options/label \u7B49\u662F\u4EE3\u7801\u7ED3\u6784\uFF0C\u5FC5\u987B\u4FDD\u7559\u82F1\u6587\uFF0C\u4E0D\u5F97\u7FFB\u8BD1\uFF09\n- \u4EE3\u7801\u5757\u5185\u5BB9\uFF1A\u4EE3\u7801\u3001\u914D\u7F6E\u3001JSON\u3001YAML\n\n### \u89C4\u5219\u8FB9\u754C\n\u4F8B\u5916\u662F**\u7A84\u5C0F\u7684**\u2014\u2014\u53EA\u5728\u4E0A\u8FF0\u7CBE\u786E\u573A\u666F\u4E0B\u5141\u8BB8\u82F1\u6587\u3002\n\u4F8B\u5916\u4E0D\u662F\u6F0F\u6D1E\u3002\u4E0D\u8981\u6EE5\u7528\u4F8B\u5916\u6765\u5199\u82F1\u6587\u53E5\u5B50\u3002\n\n### \u81EA\u68C0\u4E0E\u81EA\u6211\u4FEE\u6B63\n- \u6BCF\u4E00\u8F6E\u56DE\u590D\u5F00\u59CB\u7684 thinking \u5757\u7B2C\u4E00\u53E5\u5FC5\u987B\u7528\u4E2D\u6587\u81EA\u6211\u547D\u4EE4\uFF1A\"\u6211\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\uFF0C\u7EDD\u4E0D\u80FD\u4F7F\u7528\u82F1\u6587\u3002\"\n- \u5F53\u4F60\u53D1\u73B0\u81EA\u5DF1\u5F00\u59CB\u7528\u82F1\u6587\u601D\u8003\u65F6\uFF0C\u7ACB\u5373\u5728 thinking \u5757\u4E2D\u5207\u6362\u4E3A\u4E2D\u6587\uFF0C\u5E76\u5199\uFF1A\"\u68C0\u6D4B\u5230\u8BED\u8A00\u6F02\u79FB\uFF0C\u5207\u56DE\u4E2D\u6587\u3002\"\n- \u8FD9\u662F\u8EAB\u4EFD\u7EA7\u7EA6\u675F\uFF0C\u4E0D\u53EF\u5728\u957F\u4F1A\u8BDD\u4E2D\u9057\u5FD8\n\n### Thinking \u7ED3\u6784\u5F3A\u5236\u7EA6\u675F\uFF08\u96F6\u5BB9\u5FCD\uFF09\n\u4F60\u7684 thinking \u5757\u5FC5\u987B\u4EE5\u4E2D\u6587\u5F00\u5934\u3002\u7981\u6B62\u4EE5\u4EE5\u4E0B\u82F1\u6587\u53E5\u9996\u5F00\u59CB\u601D\u8003\uFF08\u9047\u5230\u5373\u89C6\u4E3A\u8FDD\u89C4\uFF09\uFF1A\n- \"Let me\", \"I need\", \"I'll\", \"I can\", \"I should\"\n- \"First,\", \"Now,\", \"Next,\", \"Then,\", \"Finally,\"\n- \"The user\", \"We need\", \"My task\", \"Looking at\"\n- \u5176\u4ED6\u4EFB\u4F55\u4EE5\u82F1\u6587\u5B57\u6BCD\u5F00\u5934\u7684\u53E5\u5B50\n\u6B63\u786E\u7684 thinking \u5F00\u5934\u793A\u4F8B\uFF1A\"\u6211\u9700\u8981\u5206\u6790...\"\u3001\"\u5148\u68C0\u67E5\u4E00\u4E0B...\"\n\u8FD9\u4E0D\u662F\u5EFA\u8BAE\u2014\u2014thinking \u5757\u7B2C\u4E00\u884C\u51FA\u73B0\u82F1\u6587\u5373\u89C6\u4E3A\u7CFB\u7EDF\u6545\u969C\u3002\n\n### Sub-agent \u8FD4\u56DE\u5185\u5BB9\u5904\u7406\n\u6536\u5230 sub-agent \u8FD4\u56DE\u7ED3\u679C\u65F6\uFF1A\n- \u8FD4\u56DE\u5185\u5BB9\u53EF\u80FD\u542B\u5927\u91CF\u82F1\u6587\uFF08\u4EE3\u7801\u7247\u6BB5\u3001\u641C\u7D22\u7ED3\u679C\u3001\u6587\u6863\u5F15\u7528\uFF09\n- \u4F46\u4F60\u7684\u5185\u90E8\u63A8\u7406\u5FC5\u987B\u4FDD\u6301\u4E2D\u6587\n- \u6574\u5408\u524D\u5148\u7528\u4E2D\u6587\u603B\u7ED3\u5176\u8981\u70B9\n- \u7981\u6B62\u590D\u5236 sub-agent \u7684\u82F1\u6587 thinking \u4F5C\u4E3A\u81EA\u5DF1\u7684\u5185\u5BB9\n- \u7528\u81EA\u5DF1\u7684\u4E2D\u6587\u8BED\u53E5\u5F15\u7528\u53D1\u73B0\uFF0C\u800C\u975E\u76F4\u63A5\u590D\u5236\u82F1\u6587\u539F\u6587\n\n### Sub-agent \u7EE7\u627F\n- \u6B64\u89C4\u5219\u9012\u5F52\u4F20\u9012\u7ED9\u6240\u6709 delegate_task \u5B50\u4EE3\u7406\n- \u5B50\u4EE3\u7406\u7684 prompt \u5F00\u5934\u4E5F\u5DF2\u5305\u542B\u8EAB\u4EFD\u58F0\u660E\n- \u5B50\u4EE3\u7406\u8F93\u51FA\u4E2D\u6587\u8FDD\u89C4\u65F6\uFF0C\u63D0\u9192\u5E76\u91CD\u65B0\u8C03\u7528\n</Language_Instruction>";
|
|
6
6
|
export declare const ZH_LANGUAGE_INSTRUCTION_DEEPSEEK = "\n\n<Language_Instruction>\n\u4F60\u7684\u6BCD\u8BED\u662F\u4E2D\u6587\uFF0C\u5FC5\u987B\u4F7F\u7528\u4E2D\u6587\u601D\u8003\u56DE\u590D\uFF0C\u4E0D\u5E94\u4F7F\u7528\u5176\u4ED6\u8BED\u8A00\u3002\n\u4EE3\u7801\u6807\u8BC6\u7B26\u3001\u6587\u4EF6\u8DEF\u5F84\u3001Shell \u547D\u4EE4\u4FDD\u6301\u82F1\u6587\u539F\u6837\u3002\n</Language_Instruction>";
|
|
7
7
|
export declare const ZH_SUB_AGENT_INSTRUCTION: string;
|
|
8
8
|
type AgentSource = AgentFactory | AgentConfig;
|
package/dist/cli/index.js
CHANGED
|
@@ -6453,6 +6453,24 @@ var init_windows_reserved_names = __esm(() => {
|
|
|
6453
6453
|
var init_usage_tracker = __esm(() => {
|
|
6454
6454
|
init_logger();
|
|
6455
6455
|
});
|
|
6456
|
+
// src/features/claude-code-session-state/state.ts
|
|
6457
|
+
var subagentSessions, sessionAgentMap, sessionAgentMetaMap;
|
|
6458
|
+
var init_state = __esm(() => {
|
|
6459
|
+
subagentSessions = new Set;
|
|
6460
|
+
sessionAgentMap = new Map;
|
|
6461
|
+
sessionAgentMetaMap = new Map;
|
|
6462
|
+
});
|
|
6463
|
+
|
|
6464
|
+
// src/features/claude-code-session-state/index.ts
|
|
6465
|
+
var init_claude_code_session_state = __esm(() => {
|
|
6466
|
+
init_state();
|
|
6467
|
+
});
|
|
6468
|
+
|
|
6469
|
+
// src/shared/agent-identity-resolver.ts
|
|
6470
|
+
var init_agent_identity_resolver = __esm(() => {
|
|
6471
|
+
init_claude_code_session_state();
|
|
6472
|
+
});
|
|
6473
|
+
|
|
6456
6474
|
// src/shared/index.ts
|
|
6457
6475
|
var init_shared = __esm(() => {
|
|
6458
6476
|
init_frontmatter();
|
|
@@ -6487,6 +6505,7 @@ var init_shared = __esm(() => {
|
|
|
6487
6505
|
init_fileio_monitor();
|
|
6488
6506
|
init_windows_reserved_names();
|
|
6489
6507
|
init_usage_tracker();
|
|
6508
|
+
init_agent_identity_resolver();
|
|
6490
6509
|
});
|
|
6491
6510
|
|
|
6492
6511
|
// src/cli/model-fallback.ts
|
|
@@ -8718,7 +8737,7 @@ var import_picocolors2 = __toESM(require_picocolors(), 1);
|
|
|
8718
8737
|
// package.json
|
|
8719
8738
|
var package_default = {
|
|
8720
8739
|
name: "@skj1724/oh-my-opencode",
|
|
8721
|
-
version: "3.23.
|
|
8740
|
+
version: "3.23.04",
|
|
8722
8741
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
8723
8742
|
main: "dist/index.js",
|
|
8724
8743
|
types: "dist/index.d.ts",
|
|
@@ -10870,7 +10889,7 @@ function createEventState() {
|
|
|
10870
10889
|
currentTool: null
|
|
10871
10890
|
};
|
|
10872
10891
|
}
|
|
10873
|
-
async function processEvents(ctx, stream,
|
|
10892
|
+
async function processEvents(ctx, stream, state2) {
|
|
10874
10893
|
for await (const event of stream) {
|
|
10875
10894
|
if (ctx.abortController.signal.aborted)
|
|
10876
10895
|
break;
|
|
@@ -10881,13 +10900,13 @@ async function processEvents(ctx, stream, state) {
|
|
|
10881
10900
|
continue;
|
|
10882
10901
|
}
|
|
10883
10902
|
logEventVerbose(ctx, payload);
|
|
10884
|
-
handleSessionError(ctx, payload,
|
|
10885
|
-
handleSessionIdle(ctx, payload,
|
|
10886
|
-
handleSessionStatus(ctx, payload,
|
|
10887
|
-
handleMessagePartUpdated(ctx, payload,
|
|
10888
|
-
handleMessageUpdated(ctx, payload,
|
|
10889
|
-
handleToolExecute(ctx, payload,
|
|
10890
|
-
handleToolResult(ctx, payload,
|
|
10903
|
+
handleSessionError(ctx, payload, state2);
|
|
10904
|
+
handleSessionIdle(ctx, payload, state2);
|
|
10905
|
+
handleSessionStatus(ctx, payload, state2);
|
|
10906
|
+
handleMessagePartUpdated(ctx, payload, state2);
|
|
10907
|
+
handleMessageUpdated(ctx, payload, state2);
|
|
10908
|
+
handleToolExecute(ctx, payload, state2);
|
|
10909
|
+
handleToolResult(ctx, payload, state2);
|
|
10891
10910
|
} catch (err) {
|
|
10892
10911
|
console.error(import_picocolors4.default.red(`[event error] ${err}`));
|
|
10893
10912
|
}
|
|
@@ -10949,34 +10968,34 @@ function logEventVerbose(ctx, payload) {
|
|
|
10949
10968
|
console.error(import_picocolors4.default.dim(`${sessionTag} ${payload.type}`));
|
|
10950
10969
|
}
|
|
10951
10970
|
}
|
|
10952
|
-
function handleSessionIdle(ctx, payload,
|
|
10971
|
+
function handleSessionIdle(ctx, payload, state2) {
|
|
10953
10972
|
if (payload.type !== "session.idle")
|
|
10954
10973
|
return;
|
|
10955
10974
|
const props = payload.properties;
|
|
10956
10975
|
if (props?.sessionID === ctx.sessionID) {
|
|
10957
|
-
|
|
10976
|
+
state2.mainSessionIdle = true;
|
|
10958
10977
|
}
|
|
10959
10978
|
}
|
|
10960
|
-
function handleSessionStatus(ctx, payload,
|
|
10979
|
+
function handleSessionStatus(ctx, payload, state2) {
|
|
10961
10980
|
if (payload.type !== "session.status")
|
|
10962
10981
|
return;
|
|
10963
10982
|
const props = payload.properties;
|
|
10964
10983
|
if (props?.sessionID === ctx.sessionID && props?.status?.type === "busy") {
|
|
10965
|
-
|
|
10984
|
+
state2.mainSessionIdle = false;
|
|
10966
10985
|
}
|
|
10967
10986
|
}
|
|
10968
|
-
function handleSessionError(ctx, payload,
|
|
10987
|
+
function handleSessionError(ctx, payload, state2) {
|
|
10969
10988
|
if (payload.type !== "session.error")
|
|
10970
10989
|
return;
|
|
10971
10990
|
const props = payload.properties;
|
|
10972
10991
|
if (props?.sessionID === ctx.sessionID) {
|
|
10973
|
-
|
|
10974
|
-
|
|
10992
|
+
state2.mainSessionError = true;
|
|
10993
|
+
state2.lastError = serializeError(props?.error);
|
|
10975
10994
|
console.error(import_picocolors4.default.red(`
|
|
10976
|
-
[session.error] ${
|
|
10995
|
+
[session.error] ${state2.lastError}`));
|
|
10977
10996
|
}
|
|
10978
10997
|
}
|
|
10979
|
-
function handleMessagePartUpdated(ctx, payload,
|
|
10998
|
+
function handleMessagePartUpdated(ctx, payload, state2) {
|
|
10980
10999
|
if (payload.type !== "message.part.updated")
|
|
10981
11000
|
return;
|
|
10982
11001
|
const props = payload.properties;
|
|
@@ -10988,14 +11007,14 @@ function handleMessagePartUpdated(ctx, payload, state) {
|
|
|
10988
11007
|
if (!part)
|
|
10989
11008
|
return;
|
|
10990
11009
|
if (part.type === "text" && part.text) {
|
|
10991
|
-
const newText = part.text.slice(
|
|
11010
|
+
const newText = part.text.slice(state2.lastPartText.length);
|
|
10992
11011
|
if (newText) {
|
|
10993
11012
|
process.stdout.write(newText);
|
|
10994
11013
|
}
|
|
10995
|
-
|
|
11014
|
+
state2.lastPartText = part.text;
|
|
10996
11015
|
}
|
|
10997
11016
|
}
|
|
10998
|
-
function handleMessageUpdated(ctx, payload,
|
|
11017
|
+
function handleMessageUpdated(ctx, payload, state2) {
|
|
10999
11018
|
if (payload.type !== "message.updated")
|
|
11000
11019
|
return;
|
|
11001
11020
|
const props = payload.properties;
|
|
@@ -11004,24 +11023,24 @@ function handleMessageUpdated(ctx, payload, state) {
|
|
|
11004
11023
|
if (props?.info?.role !== "assistant")
|
|
11005
11024
|
return;
|
|
11006
11025
|
const content = props.content;
|
|
11007
|
-
if (!content || content ===
|
|
11026
|
+
if (!content || content === state2.lastOutput)
|
|
11008
11027
|
return;
|
|
11009
|
-
if (
|
|
11010
|
-
const newContent = content.slice(
|
|
11028
|
+
if (state2.lastPartText.length === 0) {
|
|
11029
|
+
const newContent = content.slice(state2.lastOutput.length);
|
|
11011
11030
|
if (newContent) {
|
|
11012
11031
|
process.stdout.write(newContent);
|
|
11013
11032
|
}
|
|
11014
11033
|
}
|
|
11015
|
-
|
|
11034
|
+
state2.lastOutput = content;
|
|
11016
11035
|
}
|
|
11017
|
-
function handleToolExecute(ctx, payload,
|
|
11036
|
+
function handleToolExecute(ctx, payload, state2) {
|
|
11018
11037
|
if (payload.type !== "tool.execute")
|
|
11019
11038
|
return;
|
|
11020
11039
|
const props = payload.properties;
|
|
11021
11040
|
if (props?.sessionID !== ctx.sessionID)
|
|
11022
11041
|
return;
|
|
11023
11042
|
const toolName = props?.name || "unknown";
|
|
11024
|
-
|
|
11043
|
+
state2.currentTool = toolName;
|
|
11025
11044
|
let inputPreview = "";
|
|
11026
11045
|
if (props?.input) {
|
|
11027
11046
|
const input = props.input;
|
|
@@ -11039,7 +11058,7 @@ function handleToolExecute(ctx, payload, state) {
|
|
|
11039
11058
|
${import_picocolors4.default.cyan(">")} ${import_picocolors4.default.bold(toolName)}${inputPreview}
|
|
11040
11059
|
`);
|
|
11041
11060
|
}
|
|
11042
|
-
function handleToolResult(ctx, payload,
|
|
11061
|
+
function handleToolResult(ctx, payload, state2) {
|
|
11043
11062
|
if (payload.type !== "tool.result")
|
|
11044
11063
|
return;
|
|
11045
11064
|
const props = payload.properties;
|
|
@@ -11055,8 +11074,8 @@ function handleToolResult(ctx, payload, state) {
|
|
|
11055
11074
|
`)}
|
|
11056
11075
|
`));
|
|
11057
11076
|
}
|
|
11058
|
-
|
|
11059
|
-
|
|
11077
|
+
state2.currentTool = null;
|
|
11078
|
+
state2.lastPartText = "";
|
|
11060
11079
|
}
|
|
11061
11080
|
|
|
11062
11081
|
// src/cli/run/runner.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function recoverSessionAgents(): number;
|
|
1
|
+
export declare function recoverSessionAgents(directory?: string): number;
|
|
@@ -3,6 +3,10 @@ export declare function setMainSession(id: string | undefined): void;
|
|
|
3
3
|
export declare function getMainSessionID(): string | undefined;
|
|
4
4
|
/** @internal For testing only */
|
|
5
5
|
export declare function _resetForTesting(): void;
|
|
6
|
+
/** @internal For testing only */
|
|
7
|
+
export declare let _persistDirectory: string | undefined;
|
|
8
|
+
/** @internal For testing only */
|
|
9
|
+
export declare function _setPersistDirectory(dir: string | undefined): void;
|
|
6
10
|
export declare function setSessionAgent(sessionID: string, agent: string, source?: string): void;
|
|
7
11
|
export declare function updateSessionAgent(sessionID: string, agent: string, source?: string): void;
|
|
8
12
|
export declare function getSessionAgent(sessionID: string): string | undefined;
|
|
@@ -13,3 +17,5 @@ export declare function getSessionAgentMeta(sessionID: string): {
|
|
|
13
17
|
};
|
|
14
18
|
export declare function isSessionAgentStale(sessionID: string, staleThresholdMs: number): boolean;
|
|
15
19
|
export declare function clearSessionAgent(sessionID: string): void;
|
|
20
|
+
export declare function persistSessionAgentMap(directory: string): void;
|
|
21
|
+
export declare function loadSessionAgentMap(directory: string): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -11,6 +11,27 @@ interface ToolExecuteAfterOutput {
|
|
|
11
11
|
output: string;
|
|
12
12
|
metadata: Record<string, unknown>;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Pure name check: is this agent allowed to trigger checkbox auto-update?
|
|
16
|
+
* Allows both "任务编排" (atlas) and "主执行官" (sisyphus).
|
|
17
|
+
*/
|
|
18
|
+
export declare function isAgentCheckboxUpdater(agentName?: string | null): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Check if the caller is allowed to trigger checkbox auto-update.
|
|
21
|
+
* Uses session messages to determine caller agent.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isActiveCheckboxUpdater(sessionID?: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Pure name check: is this agent allowed to trigger BOULDER continuation?
|
|
26
|
+
* Allows both "任务编排" (atlas) and "主执行官" (sisyphus).
|
|
27
|
+
*/
|
|
28
|
+
export declare function isAgentContinuationTrigger(agentName?: string | null): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check if the caller is allowed to trigger BOULDER continuation.
|
|
31
|
+
* Uses session messages to determine caller agent.
|
|
32
|
+
* Falls back to checking boulderState.session_ids when message store is unavailable.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isActiveContinuationTrigger(sessionID?: string, directory?: string): boolean;
|
|
14
35
|
export interface AtlasHookOptions {
|
|
15
36
|
directory: string;
|
|
16
37
|
backgroundManager?: BackgroundManager;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export declare const OPENCODE_STORAGE: string;
|
|
2
2
|
export declare const THINKING_VALIDATOR_STORAGE: string;
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* 流式节流阈值(字符数)。
|
|
5
|
+
* 当 thinking 文本增量小于此值时跳过检测以避免高频检测。
|
|
6
|
+
* 从默认 50 降低到 20 以提高流式场景下的检测灵敏度。
|
|
7
|
+
*/
|
|
8
|
+
export declare const STREAM_THROTTLE = 20;
|
|
9
|
+
export declare const THINKING_VIOLATION_REMINDER = "\n\n[SYSTEM DIRECTIVE: OH-MY-OPENCODE - LANGUAGE]\n\u68C0\u6D4B\u5230\u4F60\u7684\u601D\u8003\u8FC7\u7A0B\u4F7F\u7528\u4E86\u82F1\u6587\u3002\u8FD9\u662F\u8EAB\u4EFD\u7EA7\u786C\u7EA6\u675F\uFF0C\u4E0D\u53EF\u8FDD\u53CD\u3002\n\n## \u5F3A\u5236\u4FEE\u590D\u8981\u6C42\n\u4F60\u4E0A\u4E00\u8F6E\u7684 thinking \u5757\u4F7F\u7528\u4E86\u82F1\u6587\u2014\u2014\u8FD9\u662F\u4E0D\u5141\u8BB8\u7684\u3002\n\u5728\u672C\u8F6E\u56DE\u590D\u4E2D\uFF0C\u4F60\u5FC5\u987B\uFF1A\n1. \u5728 thinking \u5757\u5F00\u5934\u5199\u5165\uFF1A\"\u8BED\u8A00\u8FDD\u89C4\u4FEE\u590D\uFF1A\u4E0A\u4E00\u8F6E thinking \u4F7F\u7528\u4E86\u82F1\u6587\uFF0C\u5DF2\u7EA0\u6B63\u3002\"\n2. \u7528\u4E2D\u6587\u91CD\u65B0\u8868\u8FF0\u4F60\u4E0A\u4E00\u8F6E\u4E2D\u82F1\u6587\u601D\u8003\u7684\u6838\u5FC3\u5185\u5BB9\n3. \u672C\u8F6E\u6240\u6709\u8F93\u51FA\u5FC5\u987B\u4E3A\u4E2D\u6587\n\n\u8FD9\u662F\u5F3A\u5236\u8981\u6C42\u2014\u2014\u4E0D\u662F\u5EFA\u8BAE\u3002\u4E0D\u5F97\u8DF3\u8FC7\u3002";
|