@deepseek-ai/dsh-agent-presets 0.1.2-rc.1 → 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: 5ddc40cc28a28429522ed324e114134cb59210ff
6
- README.zh.md: bdb187e7f7aeb9c529bc073de85ec1bb2d3b463a
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
 
@@ -149,7 +149,6 @@ Read these pages when the package-level contract is not enough; they move from t
149
149
  - [Session package map](../../session/README.md) — the durable session record a preset switch appends to.
150
150
  - [Generated configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-agent-presets) — every accepted config field and its source declaration.
151
151
  - [Per-session agent presets note](../../../.agents/notes/implemented/architecture/2026-08-03-per-session-agent-presets.md) — design rationale and alternatives.
152
- - [Per-preset standing mounts note](../../../.agents/notes/implemented/architecture/2026-08-08-per-preset-standing-mounts.md) — why the mount is standing and shared.
153
152
 
154
153
  -----
155
154
 
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
 
@@ -149,7 +149,6 @@ agent-presets:
149
149
  - [会话包映射](../../session/README.zh.md)——preset 切换所追加的持久会话记录。
150
150
  - [生成的配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-agent-presets)——每个受支持配置字段及其源声明。
151
151
  - [按会话组装 agent preset 的 Agent Note](../../../.agents/notes/implemented/architecture/2026-08-03-per-session-agent-presets.zh.md)——设计理由与备选方案。
152
- - [按 preset 常驻挂载的 Agent Note](../../../.agents/notes/implemented/architecture/2026-08-08-per-preset-standing-mounts.zh.md)——挂载为何是常驻且共享的。
153
152
 
154
153
  -----
155
154
 
@@ -408,6 +408,10 @@ export const TYPERT = {
408
408
  "name": "AssistantProvenance",
409
409
  "declaration": "export interface AssistantProvenance {\n provider: string;\n model: string;\n replayState?: unknown;\n}"
410
410
  },
411
+ {
412
+ "name": "AssistantStreamRecord",
413
+ "declaration": "export type AssistantStreamRecord = { readonly type: 'text-chunks'; readonly time0: number; readonly index: number; readonly dt: readonly number[]; readonly texts: readonly string[]; } | { readonly type: 'reasoning-chunks'; readonly time0: number; readonly index: number; readonly dt: readonly number[]; readonly texts: readonly string[]; } | { readonly type: 'tool-call-chunks'; readonly time0: number; readonly index: number; readonly dt: readonly number[]; readonly id: ToolCallId; readonly name?: string; readonly args: readonly string[]; } | { readonly type: 'chunk'; readonly time: number; readonly chunk: StreamChunk; };"
414
+ },
411
415
  {
412
416
  "name": "AttachmentId",
413
417
  "declaration": "export type AttachmentId = Branded<'AttachmentId'>;"
@@ -450,7 +454,7 @@ export const TYPERT = {
450
454
  },
451
455
  {
452
456
  "name": "ContentBlockMap",
453
- "declaration": "export interface ContentBlockMap {\n text: TextBlock;\n reasoning: ReasoningBlock;\n image: ImageBlock;\n 'tool-call': ToolCallBlock;\n 'tool-result': ToolResultBlock;\n}"
457
+ "declaration": "export interface ContentBlockMap {\n text: TextBlock;\n reasoning: ReasoningBlock;\n image: ImageBlock;\n file: FileBlock;\n 'tool-call': ToolCallBlock;\n 'tool-result': ToolResultBlock;\n}"
454
458
  },
455
459
  {
456
460
  "name": "ContentBlockType",
@@ -470,7 +474,15 @@ export const TYPERT = {
470
474
  },
471
475
  {
472
476
  "name": "EpochHeader",
473
- "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
+ },
479
+ {
480
+ "name": "FileAttachmentRef",
481
+ "declaration": "export interface FileAttachmentRef {\n attachmentId: AttachmentId;\n name: string;\n bytes: number;\n}"
482
+ },
483
+ {
484
+ "name": "FileBlock",
485
+ "declaration": "export interface FileBlock {\n type: 'file';\n attachment: FileAttachmentRef;\n}"
474
486
  },
475
487
  {
476
488
  "name": "FinishReason",
@@ -534,7 +546,7 @@ export const TYPERT = {
534
546
  },
535
547
  {
536
548
  "name": "Inbox",
537
- "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}"
538
550
  },
539
551
  {
540
552
  "name": "InboxTarget",
@@ -560,6 +572,26 @@ export const TYPERT = {
560
572
  "name": "Message",
561
573
  "declaration": "export interface Message {\n readonly id: MessageId;\n readonly role: 'system' | 'user' | 'assistant';\n readonly content: ContentBlock[];\n readonly source: MessageSource;\n}"
562
574
  },
575
+ {
576
+ "name": "MessageFeedbackDelete",
577
+ "declaration": "export interface MessageFeedbackDelete {\n readonly sessionId: SessionId;\n readonly messageId: MessageId;\n}"
578
+ },
579
+ {
580
+ "name": "MessageFeedbackItem",
581
+ "declaration": "export interface MessageFeedbackItem {\n readonly messageId: MessageId;\n readonly rating: MessageFeedbackRating;\n readonly note?: string;\n readonly version: MessageFeedbackVersion;\n readonly createdAt: number;\n readonly updatedAt: number;\n}"
582
+ },
583
+ {
584
+ "name": "MessageFeedbackPut",
585
+ "declaration": "export interface MessageFeedbackPut {\n readonly sessionId: SessionId;\n readonly item: MessageFeedbackItem;\n}"
586
+ },
587
+ {
588
+ "name": "MessageFeedbackRating",
589
+ "declaration": "export type MessageFeedbackRating = 'positive' | 'negative';"
590
+ },
591
+ {
592
+ "name": "MessageFeedbackVersion",
593
+ "declaration": "export type MessageFeedbackVersion = Branded<'MessageFeedbackVersion'>;"
594
+ },
563
595
  {
564
596
  "name": "MessageId",
565
597
  "declaration": "export type MessageId = Branded<'MessageId'>;"
@@ -622,7 +654,7 @@ export const TYPERT = {
622
654
  },
623
655
  {
624
656
  "name": "RequestContext",
625
- "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}"
626
658
  },
627
659
  {
628
660
  "name": "RequestHeaderReason",
@@ -638,15 +670,15 @@ export const TYPERT = {
638
670
  },
639
671
  {
640
672
  "name": "Session",
641
- "declaration": "export class Session {\n get surface(): SessionSurface;\n readonly header: SessionHeader;\n readonly inheritedEventCount: SessionLogOffset;\n get id(): SessionId;\n readonly firstLiveSeq: SessionLogOffset;\n eventAt(seq: SessionSeq): SessionEvent | undefined;\n snapshotEvents(fromSeq: SessionLogOffset = SessionLogOffset(0), toSeqExclusive: SessionLogOffset = this.seq): readonly SessionEvent[];\n ownEvents(): readonly SessionEvent[];\n isOwnSeq(seq: SessionSeq): boolean;\n get seq(): SessionLogOffset;\n append<T extends SessionEventType>(type: T, data: SessionEventMap[T], ...opts: T extends SurfaceEventType ? [opts: SurfaceIntent] : []): SessionEvent<T>;\n requestHeader(): EpochHeader | undefined;\n requestContext(): RequestContext | undefined;\n deriveMessages(): Message[];\n deriveEventMessage(event: SessionEvent): Message | null;\n}"
673
+ "declaration": "export class Session {\n get surface(): SessionSurface;\n readonly header: SessionHeader;\n readonly inheritedEventCount: SessionLogOffset;\n get id(): SessionId;\n readonly firstLiveSeq: SessionLogOffset;\n eventAt(seq: SessionSeq): SessionEvent | undefined;\n snapshotEvents(fromSeq: SessionLogOffset = SessionLogOffset(0), toSeqExclusive: SessionLogOffset = this.seq): readonly SessionEvent[];\n ownEvents(): readonly SessionEvent[];\n isOwnSeq(seq: SessionSeq): boolean;\n get seq(): SessionLogOffset;\n append<T extends SessionEventType>(type: T, data: SessionEventMap[T], ...opts: T extends SurfaceEventType ? [opts: SurfaceIntent<T>] : []): SessionEvent<T>;\n requestHeader(): EpochHeader | undefined;\n requestContext(): RequestContext | undefined;\n deriveMessages(): Message[];\n deriveEventMessage(event: SessionEvent): Message | null;\n}"
642
674
  },
643
675
  {
644
676
  "name": "SessionEvent",
645
- "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];"
646
678
  },
647
679
  {
648
680
  "name": "SessionEventMap",
649
- "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/chunk': { turn: number; step: number; chunk: StreamChunk; };\n 'assistant/message': { turn: number; step: number; message: AssistantMessage; usage?: TokenUsage; interrupted?: true; };\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': Record<string, never>;\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 'session/title': SessionTitleEventData;\n 'todo/write': { todos: TodoItem[]; };\n 'model/selection': ModelSelection;\n 'subagent/descriptor': SubagentDescriptorData;\n 'sandbox/mode': { mode: SandboxMode; source?: 'delegation'; };\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 'team/member': { version: 1; teamId: TeamId; member: TeamMemberSnapshot; };\n 'team/task': { version: 1; teamId: TeamId; task: TeamTaskSnapshot; };\n 'team/message/queued': { version: 1; teamId: TeamId; message: TeamMessageSnapshot; };\n 'team/message/delivered': { version: 1; teamId: TeamId; messageId: TeamMessageId; targetId: SessionId; };\n 'goal/change': GoalChangeMeta;\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}"
650
682
  },
651
683
  {
652
684
  "name": "SessionEventType",
@@ -654,7 +686,7 @@ export const TYPERT = {
654
686
  },
655
687
  {
656
688
  "name": "SessionHeader",
657
- "declaration": "export interface SessionHeader {\n readonly version: number;\n readonly id: SessionId;\n readonly createdAt: number;\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly isSeeded: boolean;\n readonly origin?: 'subagent';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n}"
689
+ "declaration": "export interface SessionHeader {\n readonly version: typeof SESSION_FORMAT_VERSION;\n readonly id: SessionId;\n readonly createdAt: number;\n readonly cwd?: string;\n readonly parentSession?: SessionId;\n readonly isSeeded: boolean;\n readonly origin?: 'subagent';\n readonly delegationDepth?: number;\n readonly agentPreset?: string;\n}"
658
690
  },
659
691
  {
660
692
  "name": "SessionId",
@@ -666,7 +698,7 @@ export const TYPERT = {
666
698
  },
667
699
  {
668
700
  "name": "SessionReferenceSource",
669
- "declaration": "export interface SessionReferenceSource {\n kind: 'session-reference';\n form: 'recall';\n version: 1;\n references: { sessionId: string; label: string; capturedThroughSeq: OptionalSessionSeq; compacted: boolean; originalMessages: number; retainedMessages: number; omittedMessages: number; omittedBytes: number; truncated: boolean; inputIndex: number; }[];\n}"
701
+ "declaration": "export interface SessionReferenceSource {\n kind: 'session-reference';\n form: 'recall';\n version: 1;\n references: { sessionId: string; label: string; capturedFormatVersion?: number; capturedThroughSeq: OptionalSessionSeq; compacted: boolean; originalMessages: number; retainedMessages: number; omittedMessages: number; omittedBytes: number; truncated: boolean; inputIndex: number; }[];\n}"
670
702
  },
671
703
  {
672
704
  "name": "SessionRequestId",
@@ -718,15 +750,23 @@ export const TYPERT = {
718
750
  },
719
751
  {
720
752
  "name": "SurfaceEventType",
721
- "declaration": "export type SurfaceEventType = 'user/message' | 'assistant/message' | 'tool/result';"
753
+ "declaration": "export type SurfaceEventType = 'system/message' | 'user/message' | 'assistant/message' | 'tool/result';"
722
754
  },
723
755
  {
724
756
  "name": "SurfaceIntent",
725
- "declaration": "export interface SurfaceIntent {\n surfaceOp: SurfaceOp;\n sourceEventSeqs?: SessionSeq[];\n}"
757
+ "declaration": "export type SurfaceIntent<T extends SurfaceEventType = SurfaceEventType> = { surfaceOp: SurfaceOp; } & (T extends 'assistant/message' ? { sourceEventSeqs?: never; } : { sourceEventSeqs?: SessionSeq[]; });"
726
758
  },
727
759
  {
728
760
  "name": "SurfaceOp",
729
- "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';"
730
770
  },
731
771
  {
732
772
  "name": "TeamId",
@@ -746,7 +786,7 @@ export const TYPERT = {
746
786
  },
747
787
  {
748
788
  "name": "TeamMessageSnapshot",
749
- "declaration": "export interface TeamMessageSnapshot {\n readonly id: TeamMessageId;\n readonly senderId: SessionId;\n readonly senderName: string;\n readonly targetId: SessionId;\n readonly delivery: 'quiet' | 'wakeup';\n readonly content: ContentBlock[];\n}"
789
+ "declaration": "export interface TeamMessageSnapshot {\n readonly id: TeamMessageId;\n readonly senderId: SessionId;\n readonly senderName: string;\n readonly targetId: SessionId;\n readonly content: ContentBlock[];\n}"
750
790
  },
751
791
  {
752
792
  "name": "TeamMessageSource",
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.2-rc.1",
4
+ "version": "0.1.5-alpha.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -56,18 +56,18 @@
56
56
  "peerDependencies": {
57
57
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
58
58
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
59
- "@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
60
- "@deepseek-ai/dsh-atomic-write": "^0.1.2-rc.1",
61
- "@deepseek-ai/dsh-invariants": "^0.1.2-rc.1",
62
- "@deepseek-ai/dsh-home-paths": "^0.1.2-rc.1",
63
- "@deepseek-ai/dsh-scope": "^0.1.2-rc.1",
64
- "@deepseek-ai/dsh-session": "^0.1.2-rc.1",
65
- "@deepseek-ai/dsh-session-projection": "^0.1.2-rc.1",
66
- "@deepseek-ai/dsh-settings": "^0.1.2-rc.1",
67
- "@deepseek-ai/dsh-tools": "^0.1.2-rc.1",
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",
68
69
  "@deepseek-ai/cordis": "^4.0.2",
69
- "@deepseek-ai/dsh-system-prompt": "^0.1.2-rc.1",
70
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1"
70
+ "@deepseek-ai/dsh-system-prompt": "^0.1.5-alpha.1"
71
71
  },
72
72
  "dependencies": {
73
73
  "js-yaml": "^4.1.0",
@@ -76,22 +76,22 @@
76
76
  },
77
77
  "devDependencies": {
78
78
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
79
- "@deepseek-ai/dsh-agent": "^0.1.2-rc.1",
80
79
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
81
- "@deepseek-ai/dsh-agent-loop": "^0.1.2-rc.1",
80
+ "@deepseek-ai/dsh-agent": "^0.1.5-alpha.1",
81
+ "@deepseek-ai/dsh-agent-loop": "^0.1.5-alpha.1",
82
82
  "@deepseek-ai/cordis-plugin-group": "^1.0.2",
83
- "@deepseek-ai/dsh-atomic-write": "^0.1.2-rc.1",
84
- "@deepseek-ai/dsh-invariants": "^0.1.2-rc.1",
85
- "@deepseek-ai/dsh-llm": "^0.1.2-rc.1",
86
- "@deepseek-ai/dsh-home-paths": "^0.1.2-rc.1",
87
- "@deepseek-ai/dsh-scope": "^0.1.2-rc.1",
88
- "@deepseek-ai/dsh-session": "^0.1.2-rc.1",
89
- "@deepseek-ai/dsh-session-projection": "^0.1.2-rc.1",
90
- "@deepseek-ai/dsh-settings-file": "^0.1.2-rc.1",
91
- "@deepseek-ai/dsh-system-prompt": "^0.1.2-rc.1",
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.2-rc.1",
94
- "@deepseek-ai/dsh-settings": "^0.1.2-rc.1",
95
- "@deepseek-ai/dsh-typert-protocol": "^0.1.2-rc.1"
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
  }
@@ -17,8 +17,9 @@
17
17
  - id: persona
18
18
  name: '@deepseek-ai/dsh-persona'
19
19
  config:
20
- text: |-
21
- You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness. Your working directory is {{cwd}}.
20
+ suffix: Your working directory is {{cwd}}.
21
+ prefix: |-
22
+ You are a coding agent powered by the {{model}} model, running on the DeepSeek Harness.
22
23
 
23
24
  You can read and modify the harness you run on. Its composition is Cordis: every capability is a plugin row in a `cordis.yml`, and an agent preset is one such file mounted for a single session.
24
25
 
@@ -9,7 +9,7 @@
9
9
  - id: persona
10
10
  name: '@deepseek-ai/dsh-persona'
11
11
  config:
12
- text: You are a helpful software engineer assistant.
12
+ prefix: You are a helpful software engineer assistant.
13
13
  complete: true
14
14
  includeRuntimeContext: false
15
15
 
@@ -31,8 +31,9 @@
31
31
  - id: persona
32
32
  name: '@deepseek-ai/dsh-persona'
33
33
  config:
34
- text: >-
35
- You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
34
+ suffix: Your working directory is {{cwd}}.
35
+ prefix: >-
36
+ You are a coding agent powered by the {{model}} model.
36
37
 
37
38
  - id: agent-instructions
38
39
  name: '@deepseek-ai/dsh-agent-instructions'
@@ -24,8 +24,9 @@
24
24
  - id: persona
25
25
  name: '@deepseek-ai/dsh-persona'
26
26
  config:
27
- text: >-
28
- You are a coding agent powered by the {{model}} model. Your working directory is {{cwd}}.
27
+ suffix: Your working directory is {{cwd}}.
28
+ prefix: >-
29
+ You are a coding agent powered by the {{model}} model.
29
30
 
30
31
  - id: agent-instructions
31
32
  name: '@deepseek-ai/dsh-agent-instructions'