@lemoncat7/dsh-partner 1.4.1 → 1.5.0

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.
Files changed (191) hide show
  1. package/README.md +39 -0
  2. package/docs/architecture.md +99 -0
  3. package/lib/agent-runtime.d.ts +31 -8
  4. package/lib/agent-runtime.d.ts.map +1 -1
  5. package/lib/agent-runtime.js +236 -52
  6. package/lib/agent-runtime.js.map +1 -1
  7. package/lib/api/features/workspace-api.d.ts +18 -0
  8. package/lib/api/features/workspace-api.d.ts.map +1 -0
  9. package/lib/api/features/workspace-api.js +188 -0
  10. package/lib/api/features/workspace-api.js.map +1 -0
  11. package/lib/api/http.d.ts +12 -0
  12. package/lib/api/http.d.ts.map +1 -0
  13. package/lib/api/http.js +53 -0
  14. package/lib/api/http.js.map +1 -0
  15. package/lib/api.d.ts +10 -0
  16. package/lib/api.d.ts.map +1 -1
  17. package/lib/api.js +48 -63
  18. package/lib/api.js.map +1 -1
  19. package/lib/autonomy.d.ts.map +1 -1
  20. package/lib/autonomy.js +2 -1
  21. package/lib/autonomy.js.map +1 -1
  22. package/lib/channels/manager.d.ts +4 -1
  23. package/lib/channels/manager.d.ts.map +1 -1
  24. package/lib/channels/manager.js +20 -3
  25. package/lib/channels/manager.js.map +1 -1
  26. package/lib/client-api.d.ts +157 -1
  27. package/lib/client-api.d.ts.map +1 -1
  28. package/lib/client-api.js.map +1 -1
  29. package/lib/client-controller.d.ts +15 -0
  30. package/lib/client-controller.d.ts.map +1 -0
  31. package/lib/client-controller.js +69 -0
  32. package/lib/client-controller.js.map +1 -0
  33. package/lib/client.d.ts.map +1 -1
  34. package/lib/client.js +2702 -885
  35. package/lib/client.js.map +4 -4
  36. package/lib/collaboration/composition.d.ts +27 -0
  37. package/lib/collaboration/composition.d.ts.map +1 -0
  38. package/lib/collaboration/composition.js +345 -0
  39. package/lib/collaboration/composition.js.map +1 -0
  40. package/lib/collaboration/domain.d.ts +38 -0
  41. package/lib/collaboration/domain.d.ts.map +1 -0
  42. package/lib/collaboration/domain.js +3 -0
  43. package/lib/collaboration/domain.js.map +1 -0
  44. package/lib/collaboration/retry-policy.d.ts +4 -0
  45. package/lib/collaboration/retry-policy.d.ts.map +1 -0
  46. package/lib/collaboration/retry-policy.js +18 -0
  47. package/lib/collaboration/retry-policy.js.map +1 -0
  48. package/lib/collaboration/service.d.ts +76 -0
  49. package/lib/collaboration/service.d.ts.map +1 -0
  50. package/lib/collaboration/service.js +370 -0
  51. package/lib/collaboration/service.js.map +1 -0
  52. package/lib/companions/service.d.ts +13 -0
  53. package/lib/companions/service.d.ts.map +1 -0
  54. package/lib/companions/service.js +51 -0
  55. package/lib/companions/service.js.map +1 -0
  56. package/lib/concern-domain.d.ts +8 -1
  57. package/lib/concern-domain.d.ts.map +1 -1
  58. package/lib/concern-domain.js +25 -1
  59. package/lib/concern-domain.js.map +1 -1
  60. package/lib/concern-store.d.ts.map +1 -1
  61. package/lib/concern-store.js +2 -1
  62. package/lib/concern-store.js.map +1 -1
  63. package/lib/concern-tool.d.ts +6 -0
  64. package/lib/concern-tool.d.ts.map +1 -1
  65. package/lib/concern-tool.js +35 -9
  66. package/lib/concern-tool.js.map +1 -1
  67. package/lib/core/collections.d.ts +2 -0
  68. package/lib/core/collections.d.ts.map +1 -0
  69. package/lib/core/collections.js +6 -0
  70. package/lib/core/collections.js.map +1 -0
  71. package/lib/core/semaphore.d.ts +10 -0
  72. package/lib/core/semaphore.d.ts.map +1 -0
  73. package/lib/core/semaphore.js +32 -0
  74. package/lib/core/semaphore.js.map +1 -0
  75. package/lib/core/validation.d.ts +7 -0
  76. package/lib/core/validation.d.ts.map +1 -0
  77. package/lib/core/validation.js +40 -0
  78. package/lib/core/validation.js.map +1 -0
  79. package/lib/domain.d.ts +28 -2
  80. package/lib/domain.d.ts.map +1 -1
  81. package/lib/domain.js +3 -3
  82. package/lib/domain.js.map +1 -1
  83. package/lib/execution/agent-support.d.ts +12 -0
  84. package/lib/execution/agent-support.d.ts.map +1 -0
  85. package/lib/execution/agent-support.js +48 -0
  86. package/lib/execution/agent-support.js.map +1 -0
  87. package/lib/execution/domain.d.ts +17 -0
  88. package/lib/execution/domain.d.ts.map +1 -0
  89. package/lib/execution/domain.js +2 -0
  90. package/lib/execution/domain.js.map +1 -0
  91. package/lib/execution/service.d.ts +52 -0
  92. package/lib/execution/service.d.ts.map +1 -0
  93. package/lib/execution/service.js +175 -0
  94. package/lib/execution/service.js.map +1 -0
  95. package/lib/heartbeat-command.d.ts +15 -0
  96. package/lib/heartbeat-command.d.ts.map +1 -0
  97. package/lib/heartbeat-command.js +211 -0
  98. package/lib/heartbeat-command.js.map +1 -0
  99. package/lib/index.d.ts.map +1 -1
  100. package/lib/index.js +42 -3
  101. package/lib/index.js.map +1 -1
  102. package/lib/memory-reflection.js +2 -2
  103. package/lib/memory-reflection.js.map +1 -1
  104. package/lib/scheduler/domain.d.ts +25 -0
  105. package/lib/scheduler/domain.d.ts.map +1 -0
  106. package/lib/scheduler/domain.js +2 -0
  107. package/lib/scheduler/domain.js.map +1 -0
  108. package/lib/scheduler/service.d.ts +26 -0
  109. package/lib/scheduler/service.d.ts.map +1 -0
  110. package/lib/scheduler/service.js +177 -0
  111. package/lib/scheduler/service.js.map +1 -0
  112. package/lib/skills/builtin.d.ts +7 -0
  113. package/lib/skills/builtin.d.ts.map +1 -0
  114. package/lib/skills/builtin.js +16 -0
  115. package/lib/skills/builtin.js.map +1 -0
  116. package/lib/skills/domain.d.ts +52 -0
  117. package/lib/skills/domain.d.ts.map +1 -0
  118. package/lib/skills/domain.js +2 -0
  119. package/lib/skills/domain.js.map +1 -0
  120. package/lib/skills/loader.d.ts +18 -0
  121. package/lib/skills/loader.d.ts.map +1 -0
  122. package/lib/skills/loader.js +134 -0
  123. package/lib/skills/loader.js.map +1 -0
  124. package/lib/skills/markets/adapters.d.ts +8 -0
  125. package/lib/skills/markets/adapters.d.ts.map +1 -0
  126. package/lib/skills/markets/adapters.js +72 -0
  127. package/lib/skills/markets/adapters.js.map +1 -0
  128. package/lib/skills/markets/builtin.d.ts +10 -0
  129. package/lib/skills/markets/builtin.d.ts.map +1 -0
  130. package/lib/skills/markets/builtin.js +19 -0
  131. package/lib/skills/markets/builtin.js.map +1 -0
  132. package/lib/skills/network.d.ts +14 -0
  133. package/lib/skills/network.d.ts.map +1 -0
  134. package/lib/skills/network.js +174 -0
  135. package/lib/skills/network.js.map +1 -0
  136. package/lib/skills/repository.d.ts +17 -0
  137. package/lib/skills/repository.d.ts.map +1 -0
  138. package/lib/skills/repository.js +76 -0
  139. package/lib/skills/repository.js.map +1 -0
  140. package/lib/skills/service.d.ts +48 -0
  141. package/lib/skills/service.d.ts.map +1 -0
  142. package/lib/skills/service.js +248 -0
  143. package/lib/skills/service.js.map +1 -0
  144. package/lib/skills/zip.d.ts +3 -0
  145. package/lib/skills/zip.d.ts.map +1 -0
  146. package/lib/skills/zip.js +59 -0
  147. package/lib/skills/zip.js.map +1 -0
  148. package/lib/store.d.ts.map +1 -1
  149. package/lib/store.js +69 -3
  150. package/lib/store.js.map +1 -1
  151. package/lib/tasks/domain.d.ts +39 -0
  152. package/lib/tasks/domain.d.ts.map +1 -0
  153. package/lib/tasks/domain.js +3 -0
  154. package/lib/tasks/domain.js.map +1 -0
  155. package/lib/tasks/result.d.ts +14 -0
  156. package/lib/tasks/result.d.ts.map +1 -0
  157. package/lib/tasks/result.js +109 -0
  158. package/lib/tasks/result.js.map +1 -0
  159. package/lib/tasks/service.d.ts +39 -0
  160. package/lib/tasks/service.d.ts.map +1 -0
  161. package/lib/tasks/service.js +334 -0
  162. package/lib/tasks/service.js.map +1 -0
  163. package/lib/ui/companion-access-panel.d.ts +4 -0
  164. package/lib/ui/companion-access-panel.d.ts.map +1 -0
  165. package/lib/ui/companion-access-panel.js +46 -0
  166. package/lib/ui/companion-access-panel.js.map +1 -0
  167. package/lib/ui/companion-create.d.ts +11 -0
  168. package/lib/ui/companion-create.d.ts.map +1 -0
  169. package/lib/ui/companion-create.js +30 -0
  170. package/lib/ui/companion-create.js.map +1 -0
  171. package/lib/ui/partner-components.d.ts +36 -0
  172. package/lib/ui/partner-components.d.ts.map +1 -0
  173. package/lib/ui/partner-components.js +32 -0
  174. package/lib/ui/partner-components.js.map +1 -0
  175. package/lib/ui/schedule-panel.d.ts +5 -0
  176. package/lib/ui/schedule-panel.d.ts.map +1 -0
  177. package/lib/ui/schedule-panel.js +86 -0
  178. package/lib/ui/schedule-panel.js.map +1 -0
  179. package/lib/ui/skills-panel.d.ts +5 -0
  180. package/lib/ui/skills-panel.d.ts.map +1 -0
  181. package/lib/ui/skills-panel.js +236 -0
  182. package/lib/ui/skills-panel.js.map +1 -0
  183. package/lib/ui/task-board-panel.d.ts +2 -0
  184. package/lib/ui/task-board-panel.d.ts.map +1 -0
  185. package/lib/ui/task-board-panel.js +231 -0
  186. package/lib/ui/task-board-panel.js.map +1 -0
  187. package/lib/ui/workspace-components.d.ts +40 -0
  188. package/lib/ui/workspace-components.d.ts.map +1 -0
  189. package/lib/ui/workspace-components.js +61 -0
  190. package/lib/ui/workspace-components.js.map +1 -0
  191. package/package.json +2 -1
@@ -0,0 +1,27 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { ToolRuntime } from '@deepseek-ai/dsh-tools';
3
+ import type { Companion } from '../domain.js';
4
+ import type { EphemeralExecutionService } from '../execution/service.js';
5
+ import type { PartnerStore } from '../store.js';
6
+ import type { SkillService } from '../skills/service.js';
7
+ import type { TaskBoardService } from '../tasks/service.js';
8
+ import type { PartnerSchedulerService } from '../scheduler/service.js';
9
+ import type { PartnerCollaborationService } from './service.js';
10
+ import type { CompanionService } from '../companions/service.js';
11
+ type AgentCompositionContext = Context & {
12
+ tools: ToolRuntime;
13
+ };
14
+ /** Composes partner-only tools into one agent scope. No global tool is registered. */
15
+ export declare class PartnerAgentComposition {
16
+ private readonly store;
17
+ private readonly skills;
18
+ private readonly tasks;
19
+ private readonly collaboration;
20
+ private readonly scheduler;
21
+ private readonly executor;
22
+ private readonly companions;
23
+ constructor(store: PartnerStore, skills: SkillService, tasks: TaskBoardService, collaboration: PartnerCollaborationService, scheduler: PartnerSchedulerService, executor: EphemeralExecutionService, companions: CompanionService);
24
+ compose(ctx: AgentCompositionContext, companion: Companion): Promise<() => void>;
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/collaboration/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAkC,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,KAAK,uBAAuB,GAAG,OAAO,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAA;AAI/D,sFAAsF;AACtF,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBANV,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,gBAAgB,EACvB,aAAa,EAAE,2BAA2B,EAC1C,SAAS,EAAE,uBAAuB,EAClC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,gBAAgB;IAGzC,OAAO,CAAC,GAAG,EAAE,uBAAuB,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;CA6CvF"}
@@ -0,0 +1,345 @@
1
+ import { record, requiredText } from '../core/validation.js';
2
+ import { renderEnabledSkills } from '../skills/service.js';
3
+ const MAX_INLINE_SKILLS = 8;
4
+ const MAX_INLINE_SKILL_CHARS = 32_000;
5
+ /** Composes partner-only tools into one agent scope. No global tool is registered. */
6
+ export class PartnerAgentComposition {
7
+ store;
8
+ skills;
9
+ tasks;
10
+ collaboration;
11
+ scheduler;
12
+ executor;
13
+ companions;
14
+ constructor(store, skills, tasks, collaboration, scheduler, executor, companions) {
15
+ this.store = store;
16
+ this.skills = skills;
17
+ this.tasks = tasks;
18
+ this.collaboration = collaboration;
19
+ this.scheduler = scheduler;
20
+ this.executor = executor;
21
+ this.companions = companions;
22
+ }
23
+ async compose(ctx, companion) {
24
+ const skillsEnabled = companion.capabilities.includes('skills');
25
+ const enabledSkills = skillsEnabled ? this.skills.bindings(companion.id) : [];
26
+ const inlineSkills = await loadInlineSkills(this.skills, enabledSkills);
27
+ const injectedSkillIds = new Set(inlineSkills.map(skill => skill.id));
28
+ const disposers = [];
29
+ try {
30
+ if (skillsEnabled)
31
+ disposers.push(ctx.tools.register(skillTool(companion, this.skills, this.executor)));
32
+ if (companion.capabilities.includes('companions'))
33
+ disposers.push(ctx.tools.register(companionTool(this.companions)));
34
+ if (companion.capabilities.includes('access'))
35
+ disposers.push(ctx.tools.register(accessGrantTool(companion, this.collaboration)));
36
+ disposers.push(ctx.tools.register(taskTool(companion, this.tasks, this.collaboration)));
37
+ disposers.push(ctx.tools.register(collaborationTool(companion, this.store, this.collaboration)));
38
+ if (companion.capabilities.includes('schedules'))
39
+ disposers.push(ctx.tools.register(scheduleTool(companion, this.scheduler)));
40
+ const directory = this.collaboration.directoryFor(companion.id);
41
+ disposers.push(ctx.systemPrompt.section({
42
+ name: 'partner-collaboration', order: -7,
43
+ text: [
44
+ renderEnabledSkills(companion, enabledSkills, injectedSkillIds),
45
+ companion.capabilities.includes('companions') ? '你拥有“创建伙伴”能力。只有用户明确要求创建新伙伴,或用户的当前需求明确要求建立一个长期独立身份时,才可调用 partner_companions;创建时必须填写清晰的身份、职责与行为准则。新伙伴不会自动获得任何能力、记忆、心跳或协作权限,需要用户随后在管理台单独授权。' : '',
46
+ companion.capabilities.includes('access') ? '你拥有“伙伴授权”能力。只有用户明确要求时,才可配置某个伙伴访问另一个伙伴的单向关系;如果用户要求你创建伙伴并同时说明它应访问谁,创建成功后应继续完成授权,不必等待用户再次提醒。不得推断、扩大或双向化用户没有要求的权限。' : '',
47
+ companion.capabilities.includes('schedules') ? '你拥有“定时任务”能力。只有用户明确要求未来某个时间或按周期执行时,才创建 partner_schedule;普通待办、当前轮次工作和一次性立即执行不能擅自改成定时任务。' : '',
48
+ '你可以使用伙伴看板维护工作。只有下面明确列出的授权伙伴可被你查看公开能力、分配或委派;用户本人在管理台直接指派伙伴不受此伙伴间授权限制。用户以“@伙伴名”要求协作时,先在授权目录解析稳定 id,再创建或选定看板任务并真实委派,不得只口头声称对方会处理。',
49
+ '是否拆成看板任务由工作形态决定:只有工作跨多步、需要并行、需要等待外部条件、存在明确前置依赖、需要其他伙伴专长,或必须跨会话持续跟踪时才建任务。一次回答内可直接完成的简单事项不要制造看板负担。拆解后每个子任务必须有可验收产出;存在先后关系时写入 dependencyTaskIds,前置任务完成前不得启动后续任务。执行者提交结果后进入 review;指定验收伙伴时由其给出核验意见,最终通过或打回后再推进后续任务。完成全部拆解与委派后,立即向用户返回任务、负责人、依赖和验收安排的看板摘要;不要轮询状态或等待被委派任务执行结束,终态进度会反向通知你。',
50
+ directory.length > 0 ? `已授权伙伴:${directory.map(item => `@${item.name}(${item.role};能力:${item.capabilities.join('、') || '未声明'};Skill:${item.enabledSkills.map(skill => skill.name).join('、') || '无'};${item.availability})`).join(';')}` : '当前没有授权你访问的其他伙伴;你仍可读写共享看板和维护自己的任务。',
51
+ '伙伴间只共享公开身份、公开能力、任务信封与结果摘要,不共享私有会话、凭据、长期记忆或渠道内容。',
52
+ ].filter(Boolean).join('\n\n'),
53
+ }));
54
+ if (inlineSkills.length > 0)
55
+ disposers.push(ctx.systemPrompt.section({
56
+ name: 'partner-inline-skills', order: -6,
57
+ text: [
58
+ '以下是已启用且经校验的可信 inline Skill 指令。当当前需求符合 Skill 的用途时直接遵循,无需再调用 partner_skill load;不匹配时不要强行套用。',
59
+ ...inlineSkills.map(skill => `<partner-inline-skill id="${skill.id}" name="${skill.displayName}">\n${skill.body}\n</partner-inline-skill>`),
60
+ ].join('\n\n'),
61
+ }));
62
+ }
63
+ catch (error) {
64
+ disposeAll(disposers);
65
+ throw error;
66
+ }
67
+ let disposed = false;
68
+ return () => {
69
+ if (disposed)
70
+ return;
71
+ disposed = true;
72
+ disposeAll(disposers);
73
+ };
74
+ }
75
+ }
76
+ function accessGrantTool(companion, collaboration) {
77
+ return textTool({
78
+ name: 'partner_access_grants',
79
+ description: 'List or administer directed access relationships between companions. A grant means the grantee may access the target companion public identity, capabilities, task envelopes, and result summaries. Change relationships only on an explicit user request; never infer extra or reciprocal grants.',
80
+ parameters: actionParameters(['list', 'grant', 'revoke'], {
81
+ grantee: { type: 'string', description: 'Companion id or @name that should gain or lose access. Required for grant and revoke.' },
82
+ target: { type: 'string', description: 'Companion id or @name the grantee should be allowed or forbidden to access. Required for grant and revoke.' },
83
+ }),
84
+ presentCall: args => ({ card: 'generic', title: `伙伴授权 · ${typeof args.action === 'string' ? args.action : '操作'}` }),
85
+ async execute(raw) {
86
+ const input = record(raw, 'arguments');
87
+ const action = requiredText(input.action, 'action', 20);
88
+ if (action === 'list') {
89
+ const directory = collaboration.directory();
90
+ const byId = new Map(directory.map(item => [item.id, item]));
91
+ return JSON.stringify({
92
+ companions: directory.map(item => ({ id: item.id, name: item.name, role: item.role })),
93
+ grants: collaboration.accessGrants().map(grant => ({
94
+ granteeId: grant.fromCompanionId, grantee: byId.get(grant.fromCompanionId)?.name ?? grant.fromCompanionId,
95
+ targetId: grant.toCompanionId, target: byId.get(grant.toCompanionId)?.name ?? grant.toCompanionId,
96
+ })),
97
+ });
98
+ }
99
+ const grantee = collaboration.resolveCompanion(requiredText(input.grantee, 'grantee', 160));
100
+ const target = collaboration.resolveCompanion(requiredText(input.target, 'target', 160));
101
+ if (grantee.id === target.id)
102
+ throw new Error('伙伴不能获得访问自己的授权');
103
+ const targets = new Set(collaboration.accessTargetIds(grantee.id));
104
+ if (action === 'grant')
105
+ targets.add(target.id);
106
+ else if (action === 'revoke')
107
+ targets.delete(target.id);
108
+ else
109
+ throw new Error('Partner access action is invalid');
110
+ await collaboration.updateAccessTargets(grantee.id, [...targets]);
111
+ return JSON.stringify({ managedBy: companion.name, granteeId: grantee.id, grantee: grantee.name, targetId: target.id, target: target.name, authorized: action === 'grant' });
112
+ },
113
+ });
114
+ }
115
+ function disposeAll(disposers) {
116
+ for (let index = disposers.length - 1; index >= 0; index -= 1)
117
+ disposers[index]?.();
118
+ }
119
+ async function loadInlineSkills(service, enabled) {
120
+ const loaded = [];
121
+ let characters = 0;
122
+ for (const metadata of enabled) {
123
+ if (!metadata.trusted || metadata.executionContext !== 'inline' || loaded.length >= MAX_INLINE_SKILLS)
124
+ continue;
125
+ const skill = await service.load(metadata.id).catch(() => undefined);
126
+ if (!skill || characters + skill.body.length > MAX_INLINE_SKILL_CHARS)
127
+ continue;
128
+ loaded.push(skill);
129
+ characters += skill.body.length;
130
+ }
131
+ return loaded;
132
+ }
133
+ function companionTool(companions) {
134
+ return textTool({
135
+ name: 'partner_companions',
136
+ description: 'Create a new long-lived companion identity only when the user explicitly requests one. The new companion starts with no capabilities, memory, heartbeat, channel, or collaboration grants.',
137
+ parameters: actionParameters(['create'], {
138
+ name: { type: 'string', description: 'Companion display name.' },
139
+ role: { type: 'string', description: 'The companion\'s durable role.' },
140
+ description: { type: 'string', description: 'A concise identity and responsibility summary.' },
141
+ instructions: { type: 'string', description: 'Durable behavior, boundaries, work style, and delivery expectations.' },
142
+ }, ['name', 'role', 'description', 'instructions']),
143
+ presentCall: () => ({ card: 'generic', title: '创建伙伴' }),
144
+ async execute(raw) {
145
+ const input = record(raw, 'arguments');
146
+ if (requiredText(input.action, 'action', 20) !== 'create')
147
+ throw new Error('Companion action is invalid');
148
+ const companion = await companions.create({
149
+ name: requiredText(input.name, 'name', 60),
150
+ role: requiredText(input.role, 'role', 120),
151
+ description: requiredText(input.description, 'description', 500),
152
+ instructions: requiredText(input.instructions, 'instructions', 12_000),
153
+ });
154
+ return JSON.stringify({
155
+ id: companion.id,
156
+ name: companion.name,
157
+ role: companion.role,
158
+ description: companion.description,
159
+ instructions: companion.instructions,
160
+ capabilities: companion.capabilities,
161
+ memoryEnabled: companion.automation.memory.enabled,
162
+ heartbeatEnabled: companion.automation.heartbeat.enabled,
163
+ });
164
+ },
165
+ });
166
+ }
167
+ function skillTool(companion, skills, executor) {
168
+ return textTool({
169
+ name: 'partner_skill',
170
+ description: 'List, load, or execute Skills enabled for this companion. Use load only for trusted inline Skills; execute fork Skills in a temporary session. A Skill never grants tools outside current DSH permissions.',
171
+ parameters: actionParameters(['list', 'load', 'run'], {
172
+ skillId: { type: 'string', description: 'Installed Skill id.' },
173
+ input: { type: 'string', description: 'Concrete task or arguments for the Skill.' },
174
+ }),
175
+ timeoutMs: 15 * 60_000,
176
+ presentCall: args => ({ card: 'generic', title: `伙伴 Skill · ${typeof args.action === 'string' ? args.action : '操作'}` }),
177
+ async execute(raw, exec) {
178
+ const input = record(raw, 'arguments');
179
+ const action = requiredText(input.action, 'action', 20);
180
+ const enabled = skills.bindings(companion.id);
181
+ if (action === 'list')
182
+ return JSON.stringify(enabled.map(skill => ({ id: skill.id, name: skill.displayName, description: skill.description, version: skill.version, context: skill.executionContext })));
183
+ const skillId = requiredText(input.skillId, 'skillId', 120);
184
+ if (!enabled.some(item => item.id === skillId))
185
+ throw new Error('Skill is not enabled for this companion');
186
+ const skill = await skills.load(skillId);
187
+ if (action === 'load') {
188
+ if (skill.executionContext !== 'inline' || !skill.trusted)
189
+ throw new Error('This Skill must run in an isolated temporary session');
190
+ return JSON.stringify({ id: skill.id, instructions: skill.body, allowedTools: skill.allowedTools });
191
+ }
192
+ if (action !== 'run')
193
+ throw new Error('Skill action is invalid');
194
+ const result = await executor.execute({
195
+ kind: 'skill', sourceId: skill.id, companion, parentSessionId: requireAgent(exec).session.id,
196
+ prompt: requiredText(input.input, 'input', 12_000), allowedTools: skill.allowedTools, destroyAfterRun: true,
197
+ systemInstruction: `严格按照以下 Skill 执行。Skill 的 allowed-tools 只能收缩权限;工具不可用时明确说明,不得模拟结果。\n\n${skill.body}`,
198
+ });
199
+ return JSON.stringify({ runId: result.run.id, result: result.output });
200
+ },
201
+ });
202
+ }
203
+ function taskTool(companion, tasks, collaboration) {
204
+ const resolveAssignee = (value) => {
205
+ const target = collaboration.resolveCompanion(value);
206
+ if (target.id !== companion.id && !collaboration.canAccess(companion.id, target.id))
207
+ throw new Error(`当前伙伴未获授权访问 @${target.name}`);
208
+ return target.id;
209
+ };
210
+ return textTool({
211
+ name: 'partner_task_board',
212
+ description: 'Read and maintain the shared partner task board. Use it for multi-step, dependent, delegated, or cross-session work; do not create tasks for trivial one-turn answers. Dependencies block execution until done, and completed work must pass review.',
213
+ parameters: actionParameters(['list', 'create', 'update', 'comment', 'accept', 'reject'], {
214
+ taskId: { type: 'string' }, title: { type: 'string' }, description: { type: 'string' },
215
+ status: { type: 'string', enum: ['backlog', 'ready', 'doing', 'review', 'done', 'blocked'] },
216
+ priority: { type: 'string', enum: ['low', 'normal', 'high', 'urgent'] },
217
+ assignee: { type: 'string', description: 'Companion id or @name.' }, reviewer: { type: 'string', description: 'Optional reviewer companion id or @name.' },
218
+ dependencyTaskIds: { type: 'array', items: { type: 'string' }, maxItems: 20, description: 'Tasks that must be done before this task can start.' },
219
+ expectedRevision: { type: 'integer' }, message: { type: 'string' },
220
+ }),
221
+ async execute(raw, exec) {
222
+ const input = record(raw, 'arguments');
223
+ const action = requiredText(input.action, 'action', 20);
224
+ if (action === 'list')
225
+ return JSON.stringify(tasks.snapshot());
226
+ if (action === 'create') {
227
+ const assignee = typeof input.assignee === 'string' && input.assignee.trim() ? resolveAssignee(input.assignee) : undefined;
228
+ const reviewer = typeof input.reviewer === 'string' && input.reviewer.trim() ? resolveAssignee(input.reviewer) : undefined;
229
+ return JSON.stringify(await tasks.create({
230
+ ...input,
231
+ creatorSessionId: requireAgent(exec).session.id,
232
+ ...(assignee ? { assigneeCompanionId: assignee } : {}),
233
+ ...(reviewer ? { reviewerCompanionId: reviewer } : {}),
234
+ }, { kind: 'companion', companionId: companion.id }));
235
+ }
236
+ const taskId = requiredText(input.taskId, 'taskId', 160);
237
+ if (action === 'comment') {
238
+ await tasks.comment(taskId, requiredText(input.message, 'message', 2000), { kind: 'companion', companionId: companion.id });
239
+ return JSON.stringify({ ok: true });
240
+ }
241
+ if (action === 'accept' || action === 'reject') {
242
+ const task = tasks.require(taskId);
243
+ if (task.reviewerCompanionId && task.reviewerCompanionId !== companion.id)
244
+ throw new Error('当前伙伴不是这个任务指定的验收伙伴');
245
+ return JSON.stringify(action === 'accept'
246
+ ? await tasks.accept(taskId, { kind: 'companion', companionId: companion.id })
247
+ : await tasks.reject(taskId, requiredText(input.message, 'message', 1200), { kind: 'companion', companionId: companion.id }));
248
+ }
249
+ if (action === 'update') {
250
+ const assignee = typeof input.assignee === 'string' && input.assignee.trim() ? resolveAssignee(input.assignee) : undefined;
251
+ const reviewer = typeof input.reviewer === 'string' && input.reviewer.trim() ? resolveAssignee(input.reviewer) : undefined;
252
+ return JSON.stringify(await tasks.update(taskId, {
253
+ ...input,
254
+ ...('assignee' in input ? { assigneeCompanionId: assignee ?? '' } : {}),
255
+ ...('reviewer' in input ? { reviewerCompanionId: reviewer ?? '' } : {}),
256
+ }, { kind: 'companion', companionId: companion.id }));
257
+ }
258
+ throw new Error('Task board action is invalid');
259
+ },
260
+ });
261
+ }
262
+ function collaborationTool(companion, store, collaboration) {
263
+ return textTool({
264
+ name: 'partner_collaborate',
265
+ description: 'Inspect the safe companion directory or asynchronously delegate an existing board task to @another companion. Delegate returns as soon as assignment is queued; progress and results flow through the board and notify the creator companion. It never exposes private transcripts or credentials.',
266
+ parameters: actionParameters(['directory', 'delegate', 'status'], {
267
+ taskId: { type: 'string' }, companion: { type: 'string', description: 'Target companion id or @name.' }, request: { type: 'string' }, delegationId: { type: 'string' },
268
+ }),
269
+ timeoutMs: 15 * 60_000,
270
+ async execute(raw, exec) {
271
+ const input = record(raw, 'arguments');
272
+ const action = requiredText(input.action, 'action', 20);
273
+ if (action === 'directory')
274
+ return JSON.stringify(collaboration.directoryFor(companion.id));
275
+ if (action === 'status') {
276
+ const id = requiredText(input.delegationId, 'delegationId', 160);
277
+ const value = store.snapshot().delegations.find(item => item.id === id && (item.fromCompanionId === companion.id || item.toCompanionId === companion.id));
278
+ if (!value)
279
+ throw new Error('Delegation does not exist');
280
+ return JSON.stringify(value);
281
+ }
282
+ if (action !== 'delegate')
283
+ throw new Error('Collaboration action is invalid');
284
+ const result = await collaboration.delegate({
285
+ taskId: requiredText(input.taskId, 'taskId', 160), initiatedBy: 'companion', fromCompanionId: companion.id,
286
+ to: requiredText(input.companion, 'companion', 160), request: requiredText(input.request, 'request', 8000),
287
+ parentSessionId: requireAgent(exec).session.id,
288
+ });
289
+ return JSON.stringify(result);
290
+ },
291
+ });
292
+ }
293
+ function scheduleTool(companion, scheduler) {
294
+ return textTool({
295
+ name: 'partner_schedule',
296
+ description: 'Create and manage this companion\'s scheduled temporary-session work. Schedules support interval or daily time, skip/queue overlap, and optional session retention.',
297
+ parameters: actionParameters(['list', 'create', 'update', 'delete', 'run'], {
298
+ scheduleId: { type: 'string' }, title: { type: 'string' }, prompt: { type: 'string' },
299
+ schedule: { type: 'object', description: '{kind:"interval",minutes} or {kind:"daily",hour,minute}' },
300
+ enabled: { type: 'boolean' }, destroySessionAfterRun: { type: 'boolean' }, overlapPolicy: { type: 'string', enum: ['skip', 'queue'] }, timeoutMinutes: { type: 'integer' },
301
+ }),
302
+ timeoutMs: 15 * 60_000,
303
+ async execute(raw) {
304
+ const input = record(raw, 'arguments');
305
+ const action = requiredText(input.action, 'action', 20);
306
+ if (action === 'list')
307
+ return JSON.stringify(scheduler.list().filter(item => item.companionId === companion.id));
308
+ if (action === 'create')
309
+ return JSON.stringify(await scheduler.create(input, companion.id));
310
+ const id = requiredText(input.scheduleId, 'scheduleId', 160);
311
+ const owned = scheduler.list().find(item => item.id === id && item.companionId === companion.id);
312
+ if (!owned)
313
+ throw new Error('Schedule does not exist for this companion');
314
+ if (action === 'update')
315
+ return JSON.stringify(await scheduler.update(id, input));
316
+ if (action === 'delete') {
317
+ await scheduler.remove(id);
318
+ return JSON.stringify({ ok: true });
319
+ }
320
+ if (action === 'run') {
321
+ await scheduler.trigger(id);
322
+ return JSON.stringify({ ok: true });
323
+ }
324
+ throw new Error('Schedule action is invalid');
325
+ },
326
+ });
327
+ }
328
+ function textTool(definition) {
329
+ return {
330
+ ...definition,
331
+ output: { schema: { type: 'string' }, render: (_args, value) => [{ type: 'text', text: String(value) }] },
332
+ };
333
+ }
334
+ function actionParameters(actions, properties, required = []) {
335
+ return {
336
+ type: 'object', additionalProperties: false,
337
+ properties: { action: { type: 'string', enum: actions }, ...properties }, required: ['action', ...required],
338
+ };
339
+ }
340
+ function requireAgent(exec) {
341
+ if (!exec.agent)
342
+ throw new Error('Partner tool requires an active companion agent');
343
+ return exec.agent;
344
+ }
345
+ //# sourceMappingURL=composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/collaboration/composition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export type DelegationStatus = 'queued' | 'running' | 'completed' | 'failed' | 'canceled';
2
+ export type DelegationKind = 'task' | 'review';
3
+ export interface PartnerDelegation {
4
+ id: string;
5
+ /** Missing on legacy records and therefore treated as a task delegation. */
6
+ kind?: DelegationKind;
7
+ taskId: string;
8
+ initiatedBy: 'user' | 'companion';
9
+ fromCompanionId?: string;
10
+ toCompanionId: string;
11
+ request: string;
12
+ status: DelegationStatus;
13
+ attempts?: number;
14
+ nextAttemptAt?: number;
15
+ lastAttemptAt?: number;
16
+ parentSessionId?: string;
17
+ createdAt: number;
18
+ startedAt?: number;
19
+ completedAt?: number;
20
+ resultSummary?: string;
21
+ executionRunId?: string;
22
+ error?: string;
23
+ }
24
+ export declare function delegationKind(value: PartnerDelegation): DelegationKind;
25
+ export declare function delegationPending(value: PartnerDelegation): boolean;
26
+ export interface PartnerDirectoryEntry {
27
+ id: string;
28
+ name: string;
29
+ role: string;
30
+ description: string;
31
+ capabilities: string[];
32
+ enabledSkills: Array<{
33
+ id: string;
34
+ name: string;
35
+ }>;
36
+ availability: 'available' | 'busy' | 'offline';
37
+ }
38
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/collaboration/domain.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAA;AACzF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE9C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,4EAA4E;IAC5E,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,WAAW,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,gBAAgB,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAAgC;AACxG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAmE;AACvI,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,YAAY,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAA;CAC/C"}
@@ -0,0 +1,3 @@
1
+ export function delegationKind(value) { return value.kind ?? 'task'; }
2
+ export function delegationPending(value) { return value.status === 'queued' || value.status === 'running'; }
3
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/collaboration/domain.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,cAAc,CAAC,KAAwB,IAAoB,OAAO,KAAK,CAAC,IAAI,IAAI,MAAM,CAAA,CAAC,CAAC;AACxG,MAAM,UAAU,iBAAiB,CAAC,KAAwB,IAAa,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAA,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function delegationRetryDelay(attempts: number): number;
2
+ export declare function canRetryDelegation(error: unknown, attempts: number): boolean;
3
+ export declare function retryDelayLabel(delayMs: number): string;
4
+ //# sourceMappingURL=retry-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../src/collaboration/retry-policy.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI5E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGvD"}
@@ -0,0 +1,18 @@
1
+ const MAX_DELEGATION_ATTEMPTS = 12;
2
+ const RETRY_DELAYS_MS = [5_000, 15_000, 45_000, 2 * 60_000, 5 * 60_000, 15 * 60_000, 30 * 60_000];
3
+ const TRANSIENT_FAILURE = /(?:fetch failed|network|econnreset|econnrefused|enetunreach|ehostunreach|etimedout|eai_again|socket|connection (?:closed|lost|reset|refused)|temporar(?:y|ily) unavailable|service unavailable|gateway timeout|rate limit|too many requests|\b429\b|\b502\b|\b503\b|\b504\b|timed? ?out|超时|网络|连接(?:中断|失败|关闭|重置)|服务暂时不可用|伙伴会话没有产生任务结果)/i;
4
+ export function delegationRetryDelay(attempts) {
5
+ return RETRY_DELAYS_MS[Math.min(Math.max(1, attempts), RETRY_DELAYS_MS.length) - 1];
6
+ }
7
+ export function canRetryDelegation(error, attempts) {
8
+ if (attempts >= MAX_DELEGATION_ATTEMPTS)
9
+ return false;
10
+ const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
11
+ return TRANSIENT_FAILURE.test(message);
12
+ }
13
+ export function retryDelayLabel(delayMs) {
14
+ if (delayMs < 60_000)
15
+ return `${Math.ceil(delayMs / 1000)} 秒`;
16
+ return `${Math.ceil(delayMs / 60_000)} 分钟`;
17
+ }
18
+ //# sourceMappingURL=retry-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-policy.js","sourceRoot":"","sources":["../../src/collaboration/retry-policy.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAClC,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,CAAU,CAAA;AAE1G,MAAM,iBAAiB,GAAG,wUAAwU,CAAA;AAElW,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAE,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,QAAgB;IACjE,IAAI,QAAQ,IAAI,uBAAuB;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1F,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,OAAO,GAAG,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;IAC7D,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,76 @@
1
+ import type { Companion, CompanionAccessGrant } from '../domain.js';
2
+ import type { EphemeralExecutionService } from '../execution/service.js';
3
+ import type { PartnerStore } from '../store.js';
4
+ import type { SkillService } from '../skills/service.js';
5
+ import type { TaskBoardService } from '../tasks/service.js';
6
+ import { type PartnerDelegation, type PartnerDirectoryEntry } from './domain.js';
7
+ interface PartnerSessionExecutor {
8
+ execute(input: {
9
+ sourceId: string;
10
+ companion: Companion;
11
+ prompt: string;
12
+ parentSessionId?: string;
13
+ }): Promise<{
14
+ run: {
15
+ id: string;
16
+ };
17
+ output: string;
18
+ }>;
19
+ }
20
+ /** Owns durable partner work orchestration. Pending records are safe to reclaim after a process restart. */
21
+ export declare class PartnerCollaborationService {
22
+ private readonly store;
23
+ private readonly skills;
24
+ private readonly tasks;
25
+ private readonly executor;
26
+ private sessionExecutor?;
27
+ private readonly active;
28
+ private timer;
29
+ private started;
30
+ private closing;
31
+ private accessChangeNotifier?;
32
+ constructor(store: PartnerStore, skills: SkillService, tasks: TaskBoardService, executor: EphemeralExecutionService);
33
+ setSessionExecutor(executor: PartnerSessionExecutor): void;
34
+ setAccessChangeNotifier(notifier: (companionId: string) => Promise<void>): void;
35
+ start(): Promise<void>;
36
+ beginShutdown(): void;
37
+ close(): Promise<void>;
38
+ directory(): PartnerDirectoryEntry[];
39
+ directoryFor(companionId: string): PartnerDirectoryEntry[];
40
+ accessTargetIds(companionId: string): string[];
41
+ accessGrants(): CompanionAccessGrant[];
42
+ canAccess(fromCompanionId: string, toCompanionId: string): boolean;
43
+ replaceAccessTargets(fromCompanionId: string, targetIds: string[]): Promise<string[]>;
44
+ /** Persist one directed access roster and recompose the grantee atomically. */
45
+ updateAccessTargets(fromCompanionId: string, targetIds: string[]): Promise<string[]>;
46
+ resolveCompanion(reference: string): Companion;
47
+ delegate(input: {
48
+ taskId: string;
49
+ initiatedBy: 'user' | 'companion';
50
+ fromCompanionId?: string;
51
+ to: string;
52
+ request: string;
53
+ parentSessionId?: string;
54
+ }): Promise<PartnerDelegation>;
55
+ reviewTask(input: {
56
+ taskId: string;
57
+ to: string;
58
+ }): Promise<{
59
+ accepted: true;
60
+ }>;
61
+ private reconcileInterruptedWork;
62
+ private tick;
63
+ private claim;
64
+ private launch;
65
+ private executeClaimed;
66
+ private retry;
67
+ private complete;
68
+ private cancel;
69
+ private fail;
70
+ private requireCompanion;
71
+ private optionalCompanion;
72
+ private saveNew;
73
+ private mutate;
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/collaboration/service.ts"],"names":[],"mappings":"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"}