@deepseek-ai/dsh-agent-presets 0.1.3-alpha.2 → 0.1.5-alpha.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/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/preset/agent-presets/README.md
5
- README.md: 9797a998e0a29ae33ed00d55590556b5fc3ef1a9
6
- README.zh.md: 86d392ce8b20ea1ed9468a8c4ee2332824a4d851
5
+ README.md: bb9f59d11adc40ee7b428beb3d929829d88ff282
6
+ README.zh.md: 13d30f9b7544f5d42523c1a8560cabf64165cabf
package/README.md CHANGED
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
9
9
 
10
10
  ## Summary
11
11
 
12
- `dsh-agent-presets` composes each agent session from one preset: a directory holding a single `agent.cordis.yml` that names the plugins the session runs with. A session that names a preset gets that preset's tools, prompt sections, and skills, while every other session keeps its own, so one process can run several differently composed agents at once. The package maintains the preset roster: it lists every preset the configured roots supply — shipped ones and your own under `<dshHome>/.agent-presets` — shows a reason when a preset cannot start a session, and lets you create new presets by copying existing ones. The default preset is a setting you can override per deployment or per user, and a session can switch to a different preset only while it has produced nothing. A preset is as privileged as the plugins it names, so a preset you author carries the same trust as shell access.
12
+ Use `dsh-agent-presets` to give each session the tools, prompt sections, and skills named by one preset's `agent.cordis.yml`. One process can run sessions with different presets while keeping their state separate. The preset list combines shipped definitions with configured and user roots, reports why a preset cannot start, and can create a local preset by copying an existing one. Deployments and users can choose defaults; only an empty session may switch presets. Treat every authored preset as trusted configuration because it grants the capabilities of the plugins it selects.
13
13
 
14
14
  ## Table of Contents
15
15
 
package/README.zh.md CHANGED
@@ -9,7 +9,7 @@ kind: "package-reference"
9
9
 
10
10
  ## 概述
11
11
 
12
- `dsh-agent-presets` 让每个 agent(智能体)会话都从同一个 preset 组装:preset 是一个目录,内含一份 `agent.cordis.yml`,列出该会话运行的插件。命名某个 preset 的会话会获得该 preset 的工具、提示词段落与 skill(技能),而其他会话各自保持自己的,因此一个进程可以同时运行多个组装方式不同的 agent。本包维护 preset 名单:它列出已配置根目录提供的每个 preset——随附的与你自己放在 `<dshHome>/.agent-presets` 下的——在 preset 无法启动会话时给出原因,并允许你通过复制既有 preset 来创建新 preset。默认 preset 是一项可按部署或按用户覆盖的设置,会话只有在尚未产出任何内容时才能切换 preset。preset 的权限恰好等于它所引用插件的权限,因此你创作的 preset 与 shell 访问权限同级。
12
+ 使用 `dsh-agent-presets` 为每个会话提供某个 preset 的 `agent.cordis.yml` 所指定的工具、提示词段落与 skill(技能)。一个进程可以运行使用不同 preset 的会话,同时保持它们的状态相互隔离。preset 名单合并随附定义、已配置根目录与用户根目录,会报告 preset 无法启动的原因,也能通过复制现有 preset 创建本地 preset。部署与用户都可选择默认值;只有空会话可以切换 preset。请将每个自行编写的 preset 视为受信任配置,因为它会授予其所选插件的能力。
13
13
 
14
14
  ## 目录
15
15
 
@@ -474,7 +474,7 @@ export const TYPERT = {
474
474
  },
475
475
  {
476
476
  "name": "EpochHeader",
477
- "declaration": "export interface EpochHeader {\n config: LlmCallConfig;\n adapterDefaults?: LlmCallConfigAdapterDefaults;\n system?: string;\n tools?: ToolSchema[];\n}"
477
+ "declaration": "export interface EpochHeader {\n config: LlmCallConfig;\n adapterDefaults?: LlmCallConfigAdapterDefaults;\n tools?: ToolSchema[];\n}"
478
478
  },
479
479
  {
480
480
  "name": "FileAttachmentRef",
@@ -546,7 +546,7 @@ export const TYPERT = {
546
546
  },
547
547
  {
548
548
  "name": "Inbox",
549
- "declaration": "export class Inbox {\n get nextTurn(): readonly UserMessage[];\n get nextStep(): readonly UserMessage[];\n get hasPending(): boolean;\n clear(): void;\n claim(target: InboxTarget, turn: number): UserMessage[];\n append(target: InboxTarget, message: UserMessage): void;\n prepend(target: InboxTarget, message: UserMessage): void;\n replace(messageId: MessageId, newMessage: UserMessage): boolean;\n remove(messageId: MessageId): boolean;\n splice(target: InboxTarget, start: number, deleteCount: number, inserted: UserMessage[]): UserMessage[];\n}"
549
+ "declaration": "export interface Inbox {\n readonly nextTurn: readonly UserMessage[];\n readonly nextStep: readonly UserMessage[];\n clear(): void;\n append(target: InboxTarget, message: UserMessage): void;\n prepend(target: InboxTarget, message: UserMessage): void;\n replace(messageId: MessageId, newMessage: UserMessage): boolean;\n remove(messageId: MessageId): boolean;\n splice(target: InboxTarget, start: number, deleteCount: number, inserted: UserMessage[]): UserMessage[];\n}"
550
550
  },
551
551
  {
552
552
  "name": "InboxTarget",
@@ -654,7 +654,7 @@ export const TYPERT = {
654
654
  },
655
655
  {
656
656
  "name": "RequestContext",
657
- "declaration": "export interface RequestContext {\n provider: string;\n model: string;\n contextWindow?: number;\n}"
657
+ "declaration": "export interface RequestContext {\n provider: string;\n model: string;\n contextWindow?: number;\n systemPromptUpdate?: SystemPromptUpdate;\n}"
658
658
  },
659
659
  {
660
660
  "name": "RequestHeaderReason",
@@ -674,11 +674,11 @@ export const TYPERT = {
674
674
  },
675
675
  {
676
676
  "name": "SessionEvent",
677
- "declaration": "export type SessionEvent<T extends SessionEventType = SessionEventType> = { [K in SessionEventType]: { type: K; seq: SessionSeq; time: number; data: SessionEventMap[K]; ignorable?: true; } & (K extends SurfaceEventType ? { sourceEventSeqs?: SessionSeq[]; surfaceOp?: SurfaceOp; } : object) }[T];"
677
+ "declaration": "export type SessionEvent<T extends SessionEventType = SessionEventType> = { [K in SessionEventType]: { type: K; seq: SessionSeq; time: number; data: SessionEventMap[K]; ignorable?: true; } & (K extends SurfaceEventType ? SurfaceIntent<K> : { surfaceOp?: never; sourceEventSeqs?: never; }) }[T];"
678
678
  },
679
679
  {
680
680
  "name": "SessionEventMap",
681
- "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; stream: AssistantStreamRecord[]; usage?: TokenUsage; interrupted?: true; };\n 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[]; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': { inherited?: true; };\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/code-dispatch-start': PtcDispatchStartEventData;\n 'tool/code-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'team/member': { version: 2; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 2; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'feedback/message-put': MessageFeedbackPut;\n 'feedback/message-delete': MessageFeedbackDelete;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n}"
681
+ "declaration": "export interface SessionEventMap {\n 'turn/start': { turn: number; };\n 'turn/end': { turn: number; reason: TurnEndReason; };\n 'step/start': { turn: number; step: number; };\n 'step/end': { turn: number; step: number; };\n 'user/message': UserMessage;\n 'system/message': { turn: number; step: number; message: SystemMessage; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; stream: AssistantStreamRecord[]; usage?: TokenUsage; interrupted?: true; };\n 'assistant/attempt': { turn: number; step: number; stream: AssistantStreamRecord[]; };\n 'tool/call': { turn: number; step: number; callId: ToolCallId; name: string; arguments: string; };\n 'tool/result': { turn: number; step: number; message: ToolResultMessage; error?: { name: string; code: string; }; meta?: JsonValue; };\n 'request/header': { header: EpochHeader; reason: RequestHeaderReason; startsSeries?: true; };\n 'request/context': RequestContext;\n 'session/end-seed': { inherited?: true; };\n 'agent/inbox/spliced': { target: InboxTarget; start: number; removedCount?: number; inserted: UserMessage[]; outcome?: 'canceled'; };\n 'approval/asked': { id: ApprovalRequestId; toolName: string; callId?: ToolCallId; reason?: string; };\n 'approval/decided': { id: ApprovalRequestId; outcome: ApprovalOutcome; };\n 'approval/policy': { policy: ApprovalPolicy; source?: 'delegation'; };\n 'tool/ptc-dispatch-start': PtcDispatchStartEventData;\n 'tool/ptc-dispatch': PtcDispatchEventData;\n 'agent-preset/selected': { agentPreset: string; };\n 'command/run': { commandId: CommandId; name: string; args?: string; source: CommandSource; };\n 'command/done': { commandId: CommandId; kind: 'success' | 'error'; text?: string; sourceEventSeq?: import('@deepseek-ai/dsh-session/types').SessionSeq; };\n 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\n 'team/member': { version: 2; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 2; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 2; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 2; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\n 'feedback/message-put': MessageFeedbackPut;\n 'feedback/message-delete': MessageFeedbackDelete;\n 'compaction/start': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; };\n 'compaction/summary': { compactionId: CompactionId; sourceCommandId?: CommandId; summary: ContentBlock[]; shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; provider: string; model: string; maxTokens?: number; usage?: TokenUsage; } & ({ rawOutput: ContentBlock[]; llmStreamCall: true; } | { rawOutput?: ContentBlock[]; llmStreamCall?: never; });\n 'compaction/end': { compactionId: CompactionId; sourceCommandId?: CommandId; turn: number | null; error?: string; };\n 'compaction/prune': { shadowedRange: { start: SessionSeq; end: SessionSeq; }; shadowedSeqs: SessionSeq[]; shadowedTokenCount: number; };\n}"
682
682
  },
683
683
  {
684
684
  "name": "SessionEventType",
@@ -750,7 +750,7 @@ export const TYPERT = {
750
750
  },
751
751
  {
752
752
  "name": "SurfaceEventType",
753
- "declaration": "export type SurfaceEventType = 'user/message' | 'assistant/message' | 'tool/result';"
753
+ "declaration": "export type SurfaceEventType = 'system/message' | 'user/message' | 'assistant/message' | 'tool/result';"
754
754
  },
755
755
  {
756
756
  "name": "SurfaceIntent",
@@ -758,7 +758,15 @@ export const TYPERT = {
758
758
  },
759
759
  {
760
760
  "name": "SurfaceOp",
761
- "declaration": "export type SurfaceOp = 'append' | { op: 'replace'; start: SessionSeq; end: SessionSeq; };"
761
+ "declaration": "export type SurfaceOp = 'append' | { op: 'replace'; startSeq: SessionSeq; endSeq: SessionSeq; };"
762
+ },
763
+ {
764
+ "name": "SystemMessage",
765
+ "declaration": "export interface SystemMessage extends Message {\n readonly role: 'system';\n readonly source: MessageSourceMap['plugin'];\n}"
766
+ },
767
+ {
768
+ "name": "SystemPromptUpdate",
769
+ "declaration": "export type SystemPromptUpdate = 'in-history';"
762
770
  },
763
771
  {
764
772
  "name": "TeamId",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-agent-presets",
3
3
  "description": "Per-session agent composition from preset cordis.yml files for the DeepSeek Harness",
4
- "version": "0.1.3-alpha.2",
4
+ "version": "0.1.5-alpha.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -55,19 +55,19 @@
55
55
  "license": "MIT",
56
56
  "peerDependencies": {
57
57
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
58
- "@deepseek-ai/dsh-agent": "^0.1.3-alpha.2",
59
- "@deepseek-ai/dsh-atomic-write": "^0.1.3-alpha.2",
60
- "@deepseek-ai/dsh-invariants": "^0.1.3-alpha.2",
61
58
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
62
- "@deepseek-ai/dsh-scope": "^0.1.3-alpha.2",
63
- "@deepseek-ai/dsh-settings": "^0.1.3-alpha.2",
64
- "@deepseek-ai/dsh-session-projection": "^0.1.3-alpha.2",
65
- "@deepseek-ai/dsh-system-prompt": "^0.1.3-alpha.2",
66
- "@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2",
67
- "@deepseek-ai/dsh-session": "^0.1.3-alpha.2",
68
- "@deepseek-ai/dsh-tools": "^0.1.3-alpha.2",
69
- "@deepseek-ai/dsh-typert-protocol": "^0.1.3-alpha.2",
70
- "@deepseek-ai/cordis": "^4.0.2"
59
+ "@deepseek-ai/dsh-agent": "^0.1.5-alpha.1",
60
+ "@deepseek-ai/dsh-atomic-write": "^0.1.5-alpha.1",
61
+ "@deepseek-ai/dsh-invariants": "^0.1.5-alpha.1",
62
+ "@deepseek-ai/dsh-home-paths": "^0.1.5-alpha.1",
63
+ "@deepseek-ai/dsh-scope": "^0.1.5-alpha.1",
64
+ "@deepseek-ai/dsh-session": "^0.1.5-alpha.1",
65
+ "@deepseek-ai/dsh-session-projection": "^0.1.5-alpha.1",
66
+ "@deepseek-ai/dsh-settings": "^0.1.5-alpha.1",
67
+ "@deepseek-ai/dsh-tools": "^0.1.5-alpha.1",
68
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.5-alpha.1",
69
+ "@deepseek-ai/cordis": "^4.0.2",
70
+ "@deepseek-ai/dsh-system-prompt": "^0.1.5-alpha.1"
71
71
  },
72
72
  "dependencies": {
73
73
  "js-yaml": "^4.1.0",
@@ -75,23 +75,23 @@
75
75
  "@deepseek-ai/schemastery": "^3.18.2"
76
76
  },
77
77
  "devDependencies": {
78
- "@deepseek-ai/cordis-plugin-group": "^1.0.2",
79
- "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
80
- "@deepseek-ai/dsh-agent": "^0.1.3-alpha.2",
81
- "@deepseek-ai/dsh-agent-loop": "^0.1.3-alpha.2",
82
78
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
83
- "@deepseek-ai/dsh-atomic-write": "^0.1.3-alpha.2",
84
- "@deepseek-ai/dsh-llm": "^0.1.3-alpha.2",
85
- "@deepseek-ai/dsh-invariants": "^0.1.3-alpha.2",
86
- "@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2",
87
- "@deepseek-ai/dsh-scope": "^0.1.3-alpha.2",
88
- "@deepseek-ai/dsh-session": "^0.1.3-alpha.2",
89
- "@deepseek-ai/dsh-session-projection": "^0.1.3-alpha.2",
90
- "@deepseek-ai/dsh-settings-file": "^0.1.3-alpha.2",
91
- "@deepseek-ai/dsh-typert-protocol": "^0.1.3-alpha.2",
79
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
80
+ "@deepseek-ai/dsh-agent": "^0.1.5-alpha.1",
81
+ "@deepseek-ai/dsh-agent-loop": "^0.1.5-alpha.1",
82
+ "@deepseek-ai/cordis-plugin-group": "^1.0.2",
83
+ "@deepseek-ai/dsh-atomic-write": "^0.1.5-alpha.1",
84
+ "@deepseek-ai/dsh-invariants": "^0.1.5-alpha.1",
85
+ "@deepseek-ai/dsh-scope": "^0.1.5-alpha.1",
86
+ "@deepseek-ai/dsh-session": "^0.1.5-alpha.1",
87
+ "@deepseek-ai/dsh-session-projection": "^0.1.5-alpha.1",
88
+ "@deepseek-ai/dsh-settings": "^0.1.5-alpha.1",
89
+ "@deepseek-ai/dsh-system-prompt": "^0.1.5-alpha.1",
90
+ "@deepseek-ai/dsh-settings-file": "^0.1.5-alpha.1",
91
+ "@deepseek-ai/dsh-tools": "^0.1.5-alpha.1",
92
92
  "@deepseek-ai/cordis": "^4.0.2",
93
- "@deepseek-ai/dsh-tools": "^0.1.3-alpha.2",
94
- "@deepseek-ai/dsh-system-prompt": "^0.1.3-alpha.2",
95
- "@deepseek-ai/dsh-settings": "^0.1.3-alpha.2"
93
+ "@deepseek-ai/dsh-llm": "^0.1.5-alpha.1",
94
+ "@deepseek-ai/dsh-home-paths": "^0.1.5-alpha.1",
95
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.5-alpha.1"
96
96
  }
97
97
  }