@skj1724/oh-my-opencode 4.0.1 → 4.0.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.
@@ -8,14 +8,22 @@
8
8
  * - canDelegateTasks: 是否可以委派任务
9
9
  * - allowedCategories: 允许委派的分类列表
10
10
  */
11
+ export type ToolMode = "blacklist" | "whitelist";
11
12
  export interface AgentPermission {
12
13
  canReadFiles: boolean;
13
14
  canWriteFiles: boolean;
14
15
  canExecuteCommands: boolean;
15
16
  canDelegateTasks: boolean;
16
17
  allowedCategories: string[];
18
+ /** 工具限制模式:blacklist(从 5 维推导黑名单,其余默认允许)或 whitelist(全禁,只开放列出的工具) */
19
+ toolMode?: ToolMode;
20
+ /** 工具级覆盖,不受 5 维推导影响。在 blacklist 模式下追加到黑名单,在 whitelist 模式下追加到白名单 */
21
+ toolOverrides?: Record<string, boolean>;
22
+ /** SDK permission 覆盖,值格式为 "allow" | "deny" */
23
+ sdkPermissionOverrides?: Record<string, "allow" | "deny">;
17
24
  }
18
25
  export declare const DEFAULT_AGENT_PERMISSIONS: Record<string, AgentPermission>;
26
+ export declare const ALL_DEFINED_AGENTS: readonly string[];
19
27
  /**
20
28
  * 获取指定 agent 的权限配置。
21
29
  * 优先级:用户覆盖 > 默认配置 > 新 agent 默认值。
@@ -26,6 +34,11 @@ export declare function canWriteFiles(agentName: string): boolean;
26
34
  export declare function canExecuteCommands(agentName: string): boolean;
27
35
  export declare function canDelegateTasks(agentName: string): boolean;
28
36
  export declare function getAllowedCategories(agentName: string): string[];
37
+ /**
38
+ * 根据 agent 的 5 维权限推导工具限制。
39
+ * 结果会被 memoize 以避免重复计算。
40
+ */
41
+ export declare function deriveToolRestrictions(agentName: string): Record<string, boolean>;
29
42
  /**
30
43
  * 检查父 agent 是否可以委派给目标 agent。
31
44
  *
@@ -35,3 +48,8 @@ export declare function getAllowedCategories(agentName: string): string[];
35
48
  * 3. 如果父 agent 是只读(canWriteFiles: false),目标 agent 也必须是只读(canWriteFiles: false)
36
49
  */
37
50
  export declare function canDelegateTo(parentAgent: string, targetAgent: string, category?: string): boolean;
51
+ /**
52
+ * 根据 agent 的 5 维权限推导 SDK permission 配置。
53
+ * 结果会被 memoize 以避免重复计算。
54
+ */
55
+ export declare function deriveSdkPermission(agentName: string): Record<string, "allow" | "deny">;
@@ -1,7 +1,5 @@
1
1
  /**
2
2
  * Agent tool restrictions for session.prompt calls.
3
- * OpenCode SDK's session.prompt `tools` parameter expects boolean values.
4
- * true = tool allowed, false = tool denied.
3
+ * Delegates to deriveToolRestrictions() from the unified permissions system.
5
4
  */
6
5
  export declare function getAgentToolRestrictions(agentName: string): Record<string, boolean>;
7
- export declare function hasAgentToolRestrictions(agentName: string): boolean;
@@ -24,6 +24,7 @@ export * from "./agent-variant";
24
24
  export * from "./session-cursor";
25
25
  export * from "./shell-env";
26
26
  export * from "./system-directive";
27
+ export * from "./agent-permissions";
27
28
  export * from "./agent-tool-restrictions";
28
29
  export * from "./model-requirements";
29
30
  export * from "./model-resolver";
@@ -1,4 +1,13 @@
1
1
  export declare const AGENT_NAME_MAP: Record<string, string>;
2
+ /**
3
+ * 内置 agent 名称集合(用于配置迁移判定)。
4
+ * 与 ALL_DEFINED_AGENTS(src/shared/agent-permissions.ts)的关系:
5
+ * - 重叠:主执行官、技术参谋、知识典藏、深度探索、媒体解析、预审顾问、计划审查、战略参谋、任务编排
6
+ * - ALL_DEFINED_AGENTS 多出:"BTW 顾问"、"执行助理"(不在 BUILTIN_AGENT_NAMES 中)
7
+ * - BUILTIN_AGENT_NAMES 多出:"build"(不是 agent,是 OpenCode-Builder 的配置键)
8
+ *
9
+ * 添加新 agent 时,需要同时更新 DEFAULT_AGENT_PERMISSIONS 和此集合。
10
+ */
2
11
  export declare const BUILTIN_AGENT_NAMES: Set<string>;
3
12
  export declare const HOOK_NAME_MAP: Record<string, string | null>;
4
13
  /**
@@ -4,9 +4,9 @@ export declare const PART_STORAGE: string;
4
4
  export declare const SESSION_STORAGE: string;
5
5
  export declare const TODO_DIR: string;
6
6
  export declare const TRANSCRIPT_DIR: string;
7
- export declare const SESSION_LIST_DESCRIPTION = "\u5217\u51FA\u6240\u6709 OpenCode session\uFF0C\u652F\u6301\u53EF\u9009\u8FC7\u6EE4\u3002\n\n\u8FD4\u56DE\u53EF\u7528\u7684 session ID \u5217\u8868\uFF0C\u5305\u542B\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u548C\u4F7F\u7528\u8FC7\u7684 agents \u7B49\u5143\u6570\u636E\u3002\n\n\u53C2\u6570\uFF1A\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE session \u6570\u91CF\n- from_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u540E\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n- to_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u524D\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\n| Session ID | Messages | First | Last | Agents |\n|------------|----------|-------|------|--------|\n| ses_abc123 | 45 | 2025-12-20 | 2025-12-24 | build, \u6280\u672F\u53C2\u8C0B |\n| ses_def456 | 12 | 2025-12-19 | 2025-12-19 | build |";
7
+ export declare const SESSION_LIST_DESCRIPTION = "\u5217\u51FA\u6240\u6709 OpenCode session\uFF0C\u652F\u6301\u53EF\u9009\u8FC7\u6EE4\u3002\n\n\u8FD4\u56DE\u53EF\u7528\u7684 session ID \u5217\u8868\uFF0C\u5305\u542B\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u548C\u4F7F\u7528\u8FC7\u7684 agents \u7B49\u5143\u6570\u636E\u3002\n\n\u53C2\u6570\uFF1A\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE session \u6570\u91CF\n- from_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u540E\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n- to_date\uFF08\u53EF\u9009\uFF09\uFF1A\u8FC7\u6EE4\u6B64\u65E5\u671F\u4E4B\u524D\u7684 session\uFF08ISO 8601 \u683C\u5F0F\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\n| Session ID | \u6807\u9898 | Messages | First | Last | Agents |\n|------------|------|----------|-------|------|--------|\n| ses_abc123 | \u9879\u76EE\u91CD\u6784 | 45 | 2025-12-20 | 2025-12-24 | build, \u6280\u672F\u53C2\u8C0B |\n| ses_def456 | | 12 | 2025-12-19 | 2025-12-19 | build |";
8
8
  export declare const SESSION_READ_DESCRIPTION = "\u8BFB\u53D6 OpenCode session \u4E2D\u7684\u6D88\u606F\u548C\u5386\u53F2\u8BB0\u5F55\u3002\n\n\u8FD4\u56DE\u683C\u5F0F\u5316\u7684 session \u6D88\u606F\u89C6\u56FE\uFF0C\u5305\u542B\u89D2\u8272\u3001\u65F6\u95F4\u6233\u548C\u5185\u5BB9\u3002\u53EF\u9009\u62E9\u5305\u542B todo \u548C transcript \u6570\u636E\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u8BFB\u53D6\u7684 Session ID\n- include_todos\uFF08\u53EF\u9009\uFF09\uFF1A\u5305\u542B todo \u5217\u8868\uFF08\u5982\u679C\u6709\u7684\u8BDD\uFF09\uFF08\u9ED8\u8BA4\u503C: false\uFF09\n- include_transcript\uFF08\u53EF\u9009\uFF09\uFF1A\u5305\u542B transcript \u65E5\u5FD7\uFF08\u5982\u679C\u6709\u7684\u8BDD\uFF09\uFF08\u9ED8\u8BA4\u503C: false\uFF09\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE\u6D88\u606F\u6570\u91CF\uFF08\u9ED8\u8BA4\u503C: \u5168\u90E8\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\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...";
9
9
  export declare const SESSION_SEARCH_DESCRIPTION = "\u5728 OpenCode session \u6D88\u606F\u4E2D\u641C\u7D22\u5185\u5BB9\u3002\n\n\u5BF9 session \u6D88\u606F\u6267\u884C\u5168\u6587\u641C\u7D22\uFF0C\u8FD4\u56DE\u5339\u914D\u7684\u6458\u8981\u53CA\u4E0A\u4E0B\u6587\u3002\n\n\u53C2\u6570\uFF1A\n- query\uFF08\u5FC5\u586B\uFF09\uFF1A\u641C\u7D22\u67E5\u8BE2\u5B57\u7B26\u4E32\n- session_id\uFF08\u53EF\u9009\uFF09\uFF1A\u4EC5\u5728\u6307\u5B9A session \u4E2D\u641C\u7D22\uFF08\u9ED8\u8BA4\u503C: \u5168\u90E8 session\uFF09\n- case_sensitive\uFF08\u53EF\u9009\uFF09\uFF1A\u533A\u5206\u5927\u5C0F\u5199\u641C\u7D22\uFF08\u9ED8\u8BA4\u503C: false\uFF09\n- limit\uFF08\u53EF\u9009\uFF09\uFF1A\u6700\u5927\u8FD4\u56DE\u7ED3\u679C\u6570\u91CF\uFF08\u9ED8\u8BA4\u503C: 20\uFF09\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\n\u5728 2 \u4E2A session \u4E2D\u627E\u5230 3 \u6761\u5339\u914D\uFF1A\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...";
10
- export declare const SESSION_INFO_DESCRIPTION = "\u83B7\u53D6 OpenCode session \u7684\u5143\u6570\u636E\u548C\u7EDF\u8BA1\u4FE1\u606F\u3002\n\n\u8FD4\u56DE session \u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u3001\u4F7F\u7528\u8FC7\u7684 agents \u548C\u53EF\u7528\u7684\u6570\u636E\u6E90\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u67E5\u770B\u7684 Session ID\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\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, \u6280\u672F\u53C2\u8C0B, librarian\nHas Todos: Yes (12 items, 8 completed)\nHas Transcript: Yes (234 entries)";
10
+ export declare const SESSION_INFO_DESCRIPTION = "\u83B7\u53D6 OpenCode session \u7684\u5143\u6570\u636E\u548C\u7EDF\u8BA1\u4FE1\u606F\u3002\n\n\u8FD4\u56DE session \u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u91CF\u3001\u65E5\u671F\u8303\u56F4\u3001\u4F7F\u7528\u8FC7\u7684 agents \u548C\u53EF\u7528\u7684\u6570\u636E\u6E90\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u67E5\u770B\u7684 Session ID\n\n\u8F93\u51FA\u793A\u4F8B\uFF1A\nSession ID: ses_abc123\nTitle: \u9879\u76EE\u91CD\u6784\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, \u6280\u672F\u53C2\u8C0B, librarian\nHas Todos: Yes (12 items, 8 completed)\nHas Transcript: Yes (234 entries)";
11
11
  export declare const SESSION_DELETE_DESCRIPTION = "\u5220\u9664 OpenCode session \u53CA\u5176\u6240\u6709\u5173\u8054\u6570\u636E\u3002\n\n\u5220\u9664 session \u7684\u6D88\u606F\u3001parts\u3001todos \u548C transcript\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002\n\n\u53C2\u6570\uFF1A\n- session_id\uFF08\u5FC5\u586B\uFF09\uFF1A\u8981\u5220\u9664\u7684 Session ID\n- confirm\uFF08\u5FC5\u586B\uFF09\uFF1A\u5FC5\u987B\u4E3A true \u624D\u80FD\u786E\u8BA4\u5220\u9664\n\n\u793A\u4F8B\uFF1A\nsession_delete(session_id=\"ses_abc123\", confirm=true)\nSuccessfully deleted session ses_abc123";
12
12
  export declare const TOOL_NAME_PREFIX = "session_";
@@ -29,6 +29,7 @@ export interface SessionInfo {
29
29
  has_transcript: boolean;
30
30
  todos?: TodoItem[];
31
31
  transcript_entries?: number;
32
+ title?: string;
32
33
  }
33
34
  export interface TodoItem {
34
35
  id: string;
@@ -1,5 +1,5 @@
1
- import type { SessionInfo, SessionMessage, SearchResult } from "./types";
2
- export declare function formatSessionList(sessionIDs: string[]): Promise<string>;
1
+ import type { SessionInfo, SessionMessage, SessionMetadata, SearchResult } from "./types";
2
+ export declare function formatSessionList(sessions: SessionMetadata[]): Promise<string>;
3
3
  export declare function formatSessionMessages(messages: SessionMessage[], includeTodos?: boolean, todos?: Array<{
4
4
  id: string;
5
5
  content: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skj1724/oh-my-opencode",
3
- "version": "4.0.01",
3
+ "version": "4.0.04",
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",