personal-bot 0.2.5 → 0.2.8

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 (69) hide show
  1. package/README.md +48 -14
  2. package/README.zh-CN.md +47 -13
  3. package/docs/README.md +4 -2
  4. package/docs/agent-collaboration.md +4 -4
  5. package/docs/capability-design.md +12 -6
  6. package/docs/dsh-implementation-plan.md +10 -8
  7. package/docs/dsh-support-proposal.md +6 -22
  8. package/docs/dsh.en.md +333 -0
  9. package/docs/dsh.md +346 -48
  10. package/docs/file-storage.md +1 -1
  11. package/docs/history.md +2 -0
  12. package/docs/installation-design.md +7 -4
  13. package/docs/model-context.md +60 -0
  14. package/docs/model-instruction-guidelines.md +51 -0
  15. package/docs/release.md +10 -6
  16. package/docs/subagent-upgrade-proposal.md +4 -4
  17. package/docs/technical-design.md +21 -15
  18. package/docs/validation.md +74 -7
  19. package/lib/dsh.js +4 -0
  20. package/lib/extension/dsh/agent-events.js +1 -1
  21. package/lib/extension/dsh/agent-runtime.js +8 -5
  22. package/lib/integrations/dsh/resources.d.ts +1 -1
  23. package/lib/integrations/dsh/resources.js +14 -14
  24. package/lib/integrations/dsh/session.js +1 -0
  25. package/lib/integrations/installation/pi-bridge.js +9 -9
  26. package/lib/integrations/team-context.js +7 -3
  27. package/lib/services/agents/agent-notices.js +2 -2
  28. package/lib/services/agents/team-service.js +1 -1
  29. package/lib/tools/agents/contract.d.ts +1 -1
  30. package/lib/tools/agents/contract.js +7 -7
  31. package/lib/tools/agents/dsh-contract.js +4 -4
  32. package/lib/tools/history/contract.d.ts +1 -1
  33. package/lib/tools/history/contract.js +2 -2
  34. package/lib/tools/teams/contract.d.ts +2 -2
  35. package/lib/tools/teams/contract.js +11 -11
  36. package/npm-shrinkwrap.json +96 -71
  37. package/package.json +35 -31
  38. package/python/README.md +1 -1
  39. package/resources/agents/coordinator.md +5 -33
  40. package/resources/agents/general-purpose.md +3 -15
  41. package/resources/prompts/history-summary.md +1 -1
  42. package/resources/prompts/team-member.md +7 -0
  43. package/resources/prompts/workspace.md +13 -24
  44. package/resources/references/compute-finance.md +22 -0
  45. package/resources/references/compute.md +11 -88
  46. package/resources/references/task-conductor.md +20 -15
  47. package/resources/skills/project-maintenance/SKILL.md +9 -11
  48. package/resources/skills/provider-connections/SKILL.md +7 -7
  49. package/scripts/README.md +1 -1
  50. package/src/dsh.ts +4 -0
  51. package/src/extension/agent-events.ts +17 -4
  52. package/src/extension/command.ts +1 -1
  53. package/src/extension/dsh/agent-events.ts +1 -1
  54. package/src/extension/dsh/agent-runtime.ts +7 -6
  55. package/src/extension/events.ts +14 -9
  56. package/src/extension/subagent-entry.ts +24 -16
  57. package/src/integrations/dsh/resources.ts +17 -14
  58. package/src/integrations/dsh/session.ts +2 -0
  59. package/src/integrations/installation/pi-bridge.ts +9 -7
  60. package/src/integrations/pi/agent-context.ts +1 -1
  61. package/src/integrations/team-context.ts +7 -3
  62. package/src/services/agents/agent-notices.ts +2 -2
  63. package/src/services/agents/team-service.ts +1 -1
  64. package/src/tools/agents/contract.ts +7 -7
  65. package/src/tools/agents/dsh-contract.ts +4 -4
  66. package/src/tools/history/contract.ts +2 -2
  67. package/src/tools/register.ts +1 -7
  68. package/src/tools/teams/contract.ts +11 -11
  69. package/resources/prompts/tool-guidelines.md +0 -3
@@ -317,7 +317,7 @@ export class TeamService {
317
317
  slots--;
318
318
  changed = true;
319
319
  inputs.push({ ...q, teamId: team.teamId, runId: run.runId,
320
- message: ["# 团队发言任务", "", "执行本次团队发言安排。最终答复将公开给全体成员;这不扩大原任务授权。", "",
320
+ message: ["# 团队发言任务", "", "执行本次团队发言安排。最终答复将公开给全体成员。", "",
321
321
  "- `teamId`: `" + team.teamId + "`", "- `runId`: `" + run.runId + "`", "- 轮次:" + q.round,
322
322
  "", "## 本批次要求", "", run.instruction].join("\n") });
323
323
  }
@@ -1,5 +1,5 @@
1
1
  import { Type } from "typebox";
2
- export declare const agentDescription = "\u72EC\u7ACB\u4E13\u5BB6\u4F1A\u8BDD\uFF0C\u4E0D\u7EE7\u627F\u7236\u804A\u5929\u5386\u53F2\u3002start \u5B8C\u6210\u542F\u52A8\u540E\u8FD4\u56DE\uFF0C\u4E0D\u7B49\u5F85\u5DE5\u4F5C\u5B8C\u6210\uFF1B\u672A\u63D0\u4F9B message/prompts/files \u65F6\u53EA\u542F\u52A8\u5F85\u547D\u4F1A\u8BDD\uFF0C\u4E0D\u8C03\u7528\u6A21\u578B\u3002\u5B8C\u6210\u81EA\u52A8\u901A\u77E5\uFF0C\u65E0\u9700\u8F6E\u8BE2\u3002\u56E2\u961F\u5360\u7528\u671F\u95F4\u4E0D\u80FD\u79C1\u4EBA send\u3002send \u7EE7\u7EED\u5BF9\u8BDD\uFF0Crename \u6539\u540D\uFF0Cstatus/list \u67E5\u770B\u72B6\u6001\uFF0Cstatus \u8FD4\u56DE\u6700\u8FD1\u5468\u671F\u4E14\u4E0D\u8BFB\u53D6\u62A5\u544A\u6B63\u6587\u3002read \u975E\u963B\u585E\u8BFB\u53D6\u62A5\u544A\uFF1B\u8BFB\u53D6\u5DF2\u7ED3\u675F\u5468\u671F\u4F1A\u9886\u53D6\u8BE5\u5468\u671F\u7684\u5B8C\u6210\u901A\u77E5\uFF08\u5305\u62EC\u90E8\u5206\u8BFB\u53D6\uFF09\uFF0C\u540E\u7EED\u4E0D\u518D\u91CD\u590D\u901A\u77E5\u3002nextOffset \u975E\u7A7A\u65F6\u4EE5\u8FD4\u56DE\u7684 cycle.cycleId \u56FA\u5B9A\u5468\u671F\u7EED\u8BFB\u3002state \u662F\u6267\u884C\u72B6\u6001\uFF0Ccycle.state \u662F\u5DE5\u4F5C\u7ED3\u679C\uFF0Cqueued \u4EC5\u8868\u793A\u5165\u961F\u3002stop \u505C\u6B62\u5E76\u4FDD\u7559\u5386\u53F2\uFF0Cresume \u643A\u65B0 message \u6062\u590D\uFF0C\u4E0D\u91CD\u653E\u65E7\u5DE5\u4F5C\u3002\u72EC\u7ACB\u590D\u6838\u987B start \u65B0\u4E0A\u4E0B\u6587\u3002\u5B50\u4F1A\u8BDD\u4F7F\u7528\u539F\u751F CLI/MCP\uFF0C\u6309\u59D4\u6D3E\u8303\u56F4\u5DE5\u4F5C\uFF0C\u4E0D\u9012\u5F52\u59D4\u6D3E\u3002\u6BCF\u4E2A\u7236\u4F1A\u8BDD\u6700\u591A 50 \u4E2A\u5B58\u6D3B\u5B50\u4F1A\u8BDD\uFF0C\u7A7A\u95F2\u4E5F\u8BA1\u5165\u3002";
2
+ export declare const agentDescription = "\u59D4\u6D3E\u4E13\u5BB6\u5E76\u7EE7\u7EED\u5BF9\u8BDD\u3002start \u542F\u52A8\u540E\u5373\u8FD4\u56DE\uFF0C\u5B8C\u6210\u81EA\u52A8\u901A\u77E5\uFF0C\u65E0\u9700\u8F6E\u8BE2\uFF1B\u7701\u7565\u521D\u59CB\u8F93\u5165\u65F6\u5F85\u547D\u3002send \u7EE7\u7EED\u5BF9\u8BDD\uFF0C\u56E2\u961F\u5360\u7528\u671F\u95F4\u4E0D\u53EF\u79C1\u4EBA send\u3002status \u67E5\u770B\u72B6\u6001\uFF0Cread \u8BFB\u53D6\u62A5\u544A\uFF1B\u8BFB\u53D6\u5DF2\u7ED3\u675F\u5468\u671F\u5373\u9886\u53D6\u5176\u901A\u77E5\uFF0C\u5305\u62EC\u90E8\u5206\u8BFB\u53D6\u3002\u7EED\u8BFB\u56FA\u5B9A cycle.cycleId \u5E76\u4F7F\u7528 nextOffset\u3002state \u8868\u793A\u6267\u884C\u72B6\u6001\uFF0Ccycle.state \u8868\u793A\u5DE5\u4F5C\u7ED3\u679C\uFF0Cqueued \u53EA\u8868\u793A\u5165\u961F\u3002stop \u4FDD\u7559\u5386\u53F2\uFF0Cresume \u643A\u65B0 message \u7EE7\u7EED\u3002\u6BCF\u4E2A\u7236\u4F1A\u8BDD\u6700\u591A 50 \u4E2A\u5B58\u6D3B\u4E13\u5BB6\uFF0C\u7A7A\u95F2\u4E5F\u8BA1\u5165\u3002";
3
3
  export declare const agentStartOptions: {
4
4
  name: Type.TOptional<Type.TString>;
5
5
  message: Type.TOptional<Type.TString>;
@@ -1,17 +1,17 @@
1
1
  import { Type } from "typebox";
2
- export const agentDescription = "独立专家会话,不继承父聊天历史。start 完成启动后返回,不等待工作完成;未提供 message/prompts/files 时只启动待命会话,不调用模型。完成自动通知,无需轮询。团队占用期间不能私人 send。send 继续对话,rename 改名,status/list 查看状态,status 返回最近周期且不读取报告正文。read 非阻塞读取报告;读取已结束周期会领取该周期的完成通知(包括部分读取),后续不再重复通知。nextOffset 非空时以返回的 cycle.cycleId 固定周期续读。state 是执行状态,cycle.state 是工作结果,queued 仅表示入队。stop 停止并保留历史,resume 携新 message 恢复,不重放旧工作。独立复核须 start 新上下文。子会话使用原生 CLI/MCP,按委派范围工作,不递归委派。每个父会话最多 50 个存活子会话,空闲也计入。";
2
+ export const agentDescription = "委派专家并继续对话。start 启动后即返回,完成自动通知,无需轮询;省略初始输入时待命。send 继续对话,团队占用期间不可私人 send。status 查看状态,read 读取报告;读取已结束周期即领取其通知,包括部分读取。续读固定 cycle.cycleId 并使用 nextOffset。state 表示执行状态,cycle.state 表示工作结果,queued 只表示入队。stop 保留历史,resume 携新 message 继续。每个父会话最多 50 个存活专家,空闲也计入。";
3
3
  const id = Type.String({ minLength: 1, maxLength: 128 });
4
- const message = Type.String({ minLength: 1, maxLength: 24000, description: "本次目标、交付要求、资料依据与约束。" });
4
+ const message = Type.String({ minLength: 1, maxLength: 24000, description: "本次目标、相关资料、约束和交付要求。" });
5
5
  const name = Type.String({ minLength: 1, maxLength: 64, pattern: "^[^\\r\\n\\x00-\\x1f]+$" });
6
6
  export const agentStartOptions = {
7
7
  name: Type.Optional(name), message: Type.Optional(message),
8
8
  files: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { maxItems: 32, description: "随初始消息读取的文件;相对路径基于原工作区根目录。" })),
9
- prompts: Type.Optional(Type.Array(message, { maxItems: 32, description: "与 message 按顺序合并为同一初始消息,不是多个执行轮次。" })),
9
+ prompts: Type.Optional(Type.Array(message, { maxItems: 32, description: "与 message 按顺序合并为同一初始消息。" })),
10
10
  provider: Type.Optional(Type.String({ ...id, description: "Pi 模型提供方,默认继承主会话。" })),
11
- model: Type.Optional(Type.String({ ...id, description: "子进程可用的 Pi 模型 ID,默认继承主会话。" })),
11
+ model: Type.Optional(Type.String({ ...id, description: "Pi 模型 ID,默认继承主会话。" })),
12
12
  thinking: Type.Optional(Type.Union([Type.Literal("off"), Type.Literal("minimal"), Type.Literal("low"), Type.Literal("medium"), Type.Literal("high"), Type.Literal("xhigh"), Type.Literal("max")], { description: "默认继承主会话思考级别。" })),
13
13
  cwd: Type.Optional(Type.String({ minLength: 1, description: "执行目录,相对原工作区根目录;省略时使用工作区根目录。" })),
14
- tools: Type.Optional(Type.Array(id, { minItems: 1, description: "按 Pi 原生规则选择工具,省略时沿用原生默认工具;MCP 工具遵循原生暴露设置。不提供递归委派;这不是宿主隔离。" })),
14
+ tools: Type.Optional(Type.Array(id, { minItems: 1, description: "按 Pi 规则选择工具,省略时使用默认工具;MCP 工具按当前配置提供。" })),
15
15
  noExtensions: Type.Optional(Type.Boolean({ description: "默认 true,不发现其他扩展。" })),
16
16
  noSkills: Type.Optional(Type.Boolean({ description: "关闭技能发现,默认 false。" })),
17
17
  noPromptTemplates: Type.Optional(Type.Boolean({ description: "关闭提示模板发现,默认 false。" })),
@@ -39,7 +39,7 @@ export const agentActionSchema = Type.Union([
39
39
  Type.Object({ action: Type.Literal("read"), agentId: id, ...page }, { additionalProperties: false }),
40
40
  ]);
41
41
  const cycle = Type.Object({ cycleId: Type.String(), startedAt: Type.Number(), finishedAt: Type.Optional(Type.Number()),
42
- state: Type.Union([Type.Literal("running"), Type.Literal("completed"), Type.Literal("failed"), Type.Literal("cancelled"), Type.Literal("interrupted")], { description: "本周期的工作结果;completed 仍须核验实际交付。" }),
42
+ state: Type.Union([Type.Literal("running"), Type.Literal("completed"), Type.Literal("failed"), Type.Literal("cancelled"), Type.Literal("interrupted")], { description: "本周期的工作结果,正文用 read 读取。" }),
43
43
  requestIds: Type.Array(Type.String()),
44
44
  source: Type.Union([Type.Literal("parent"), Type.Literal("interactive"), Type.Literal("mixed")]), error: Type.Optional(Type.String()),
45
45
  }, { additionalProperties: false });
@@ -49,7 +49,7 @@ export const agentViewSchema = Type.Object({ agentId: Type.String(), name: Type.
49
49
  activity: Type.String(), cycle: Type.Optional(cycle), error: Type.Optional(Type.String()),
50
50
  requestId: Type.Optional(Type.String()), messageStatus: Type.Optional(Type.Literal("queued", { description: "消息已入队,不代表模型已阅读或完成。" })),
51
51
  cycles: Type.Optional(Type.Array(Type.Object({ cycleId: Type.String(), state: Type.String() }), { description: "仅 read 返回:可读取的周期索引。" })),
52
- report: Type.Optional(Type.String({ description: "仅 read 返回:选定周期的报告正文片段。已结束周期的读取结果持久化后领取该周期通知,即使本页未读完。" })),
52
+ report: Type.Optional(Type.String({ description: "仅 read 返回:选定周期的报告正文片段。" })),
53
53
  totalLength: Type.Optional(Type.Integer({ description: "仅 read 返回:完整报告的 UTF-16 字符数。" })),
54
54
  nextOffset: Type.Optional(Type.Union([Type.Integer(), Type.Null()], { description: "仅 read 返回:null 表示本报告已读完;否则以相同 agentId、cycle.cycleId 和此 offset 继续。" })),
55
55
  }, { additionalProperties: false });
@@ -4,10 +4,10 @@ const options = Type.Omit(Type.Object(agentStartOptions), ["provider", "model",
4
4
  const native = {
5
5
  provider: Type.Optional(Type.String({ minLength: 1, maxLength: 128, description: "dsh 原生 provider route,默认继承父会话。" })),
6
6
  model: Type.Optional(Type.String({ minLength: 1, maxLength: 128, description: "该 dsh provider 的模型 ID,默认继承父会话。" })),
7
- thinking: Type.Optional(Type.String({ minLength: 1, maxLength: 128, description: "该 dsh 模型的原生 reasoning effort ID,默认继承父会话;不转换 Pi 思考等级。" })),
8
- files: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { maxItems: 32, description: "作为原生附件保存的文件;相对原工作区根目录。图片遵循宿主准入规则,其他文件保留原始字节供模型读取。" })),
9
- tools: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1, description: "原生能力工具名;不填写 run_code 传输名,不支持递归委派。省略时使用原生工具和 pbot_team_message。" })),
10
- noSkills: Type.Optional(Type.Boolean({ description: "关闭该专家的模型技能目录和原生 skill 工具;不改变其他会话的技能配置。" })),
7
+ thinking: Type.Optional(Type.String({ minLength: 1, maxLength: 128, description: "该 dsh 模型的 reasoning effort ID,默认继承父会话。" })),
8
+ files: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { maxItems: 32, description: "附给专家的文件;相对原工作区根目录。图片大小与格式遵循 dsh 限制。" })),
9
+ tools: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1, description: "能力工具名,不填写 run_code;省略时使用原生工具和 pbot_team_message。" })),
10
+ noSkills: Type.Optional(Type.Boolean({ description: "关闭该专家的技能目录和 skill 工具。" })),
11
11
  };
12
12
  const omitted = ["noExtensions", "noPromptTemplates", "noContextFiles", "provider", "model", "thinking", "files", "tools", "noSkills"];
13
13
  export const dshAgentParametersSchema = Type.Object({ ...Type.Omit(agentParametersSchema, omitted).properties, ...native }, { additionalProperties: false });
@@ -64,7 +64,7 @@ export declare const historyResultSchema: Type.TObject<{
64
64
  }>>;
65
65
  warnings: Type.TArray<Type.TString>;
66
66
  }>;
67
- export declare const historyDescription = "\u67E5\u8BE2\u5F53\u524D\u5DE5\u4F5C\u533A\u7684 Pi \u4E0E dsh \u5386\u53F2\u5F52\u6863\uFF0C\u53EF\u7528 host \u7B5B\u9009\u6765\u6E90\u3002search \u5BF9\u95EE\u7B54\u539F\u6587\u548C\u5404\u5C42\u6458\u8981\u505A\u4E0D\u533A\u5206\u5927\u5C0F\u5199\u7684\u8FDE\u7EED\u6587\u672C\u5339\u914D\uFF1B\u7701\u7565 query \u5217\u51FA\u4F1A\u8BDD\u3002\u5FD8\u8BB0\u539F\u8BCD\u65F6\u6362\u51E0\u7EC4\u8BCD\u67E5\u8BE2\u3002read \u8BFB\u53D6\u547D\u4E2D\u8282\u70B9\u5E76\u8FD4\u56DE\u7236\u5B50\u8282\u70B9\uFF1B\u6CBF parents/children \u7684 id \u5C55\u5F00\uFF0CnextOffset \u7EED\u8BFB\u6B63\u6587\uFF0CnextChildrenOffset \u7EED\u8BFB\u5B50\u8282\u70B9\u3002\u6458\u8981\u662F\u68C0\u7D22\u7EBF\u7D22\uFF0C\u91CD\u8981\u7ED3\u8BBA\u56DE\u5230 exchange \u539F\u6587\u6838\u5BF9\u3002\u5171\u4EAB\u524D\u7F00\u53EF\u80FD\u6709\u591A\u4E2A\u7236\u8282\u70B9\u3002\u67E5\u8BE2\u4E0D\u8C03\u7528\u6A21\u578B\uFF0C\u4E0D\u6062\u590D\u6216\u91CD\u653E\u65E7\u4EFB\u52A1\uFF1B\u53EA\u66F4\u65B0\u5F53\u524D\u5BBF\u4E3B\u7684\u539F\u751F\u5386\u53F2\u7D22\u5F15\u3002\u95EE\u7B54\u5F52\u6863\u4E0D\u4EE3\u66FF\u4E13\u5BB6\u7684\u5B8C\u6574\u5DE5\u5177\u65E5\u5FD7\u3002";
67
+ export declare const historyDescription = "\u67E5\u8BE2\u5F53\u524D\u5DE5\u4F5C\u533A\u7684 Pi/dsh \u95EE\u7B54\u5F52\u6863\uFF0Chost \u53EF\u7B5B\u9009\u6765\u6E90\u3002search \u6309\u4E0D\u533A\u5206\u5927\u5C0F\u5199\u7684\u8FDE\u7EED\u6587\u672C\u5339\u914D\u539F\u6587\u548C\u6458\u8981\uFF1B\u65E0\u5339\u914D\u65F6\u6362\u8BCD\uFF0C\u7701\u7565 query \u5217\u4F1A\u8BDD\u3002read \u6309 parents/children \u7684 id \u5C55\u5F00\uFF0CnextOffset \u7EED\u8BFB\u6B63\u6587\uFF0CnextChildrenOffset \u7EED\u8BFB\u5B50\u8282\u70B9\u3002\u9700\u8981\u5BF9\u8BDD\u7EC6\u8282\u65F6\u8BFB\u53D6 exchange \u539F\u6587\uFF1B\u9700\u8981\u5DE5\u5177\u65E5\u5FD7\u65F6\u67E5\u6240\u5C5E\u5BBF\u4E3B\u7684\u539F\u59CB\u4F1A\u8BDD\u3002";
68
68
  export declare const historyParameters: Type.TObject<{
69
69
  action: Type.TUnion<[Type.TLiteral<"search">, Type.TLiteral<"read">]>;
70
70
  host: Type.TOptional<Type.TUnion<[Type.TLiteral<"pi">, Type.TLiteral<"dsh">]>>;
@@ -9,10 +9,10 @@ export const historyResultSchema = Type.Object({
9
9
  total: Type.Optional(Type.Integer()), nextOffset: Type.Optional(nullableOffset),
10
10
  node: Type.Optional(Type.Object({ ...node.properties, text: Type.String(), totalLength: Type.Integer(), nextOffset: nullableOffset,
11
11
  parents: Type.Array(node), children: Type.Array(node), nextChildrenOffset: nullableOffset,
12
- source: Type.Object({ host, sessionId: Type.String({ description: "原始宿主会话 ID;来源不保存文件路径。" }), entryIds: Type.Array(Type.String()) }), warnings: Type.Array(Type.String()) })),
12
+ source: Type.Object({ host, sessionId: Type.String({ description: "原始宿主会话 ID。" }), entryIds: Type.Array(Type.String()) }), warnings: Type.Array(Type.String()) })),
13
13
  warnings: Type.Array(Type.String()),
14
14
  });
15
- export const historyDescription = "查询当前工作区的 Pi 与 dsh 历史归档,可用 host 筛选来源。search 对问答原文和各层摘要做不区分大小写的连续文本匹配;省略 query 列出会话。忘记原词时换几组词查询。read 读取命中节点并返回父子节点;沿 parents/children 的 id 展开,nextOffset 续读正文,nextChildrenOffset 续读子节点。摘要是检索线索,重要结论回到 exchange 原文核对。共享前缀可能有多个父节点。查询不调用模型,不恢复或重放旧任务;只更新当前宿主的原生历史索引。问答归档不代替专家的完整工具日志。";
15
+ export const historyDescription = "查询当前工作区的 Pi/dsh 问答归档,host 可筛选来源。search 按不区分大小写的连续文本匹配原文和摘要;无匹配时换词,省略 query 列会话。read 按 parents/children 的 id 展开,nextOffset 续读正文,nextChildrenOffset 续读子节点。需要对话细节时读取 exchange 原文;需要工具日志时查所属宿主的原始会话。";
16
16
  export const historyParameters = Type.Object({ action: Type.Union([Type.Literal("search"), Type.Literal("read")]),
17
17
  host: Type.Optional(host), query: Type.Optional(Type.String()), sessionId: Type.Optional(Type.String()),
18
18
  from: Type.Optional(Type.String({ description: "search:ISO 日期或时间,下界。" })),
@@ -1,6 +1,6 @@
1
1
  import { Type } from "typebox";
2
- export declare const teamDescription = "\u4E3B\u4F1A\u8BDD\u7BA1\u7406\u56FA\u5B9A\u6210\u5458\u56E2\u961F\u3002create \u4E0D\u542F\u52A8\u6A21\u578B\uFF1Brun \u5F00\u5C55\u6709\u9650 roundRobin \u8F6E\u6D41\u8BA8\u8BBA\u6216 parallel \u5E76\u884C\u8F6E\u6B21\uFF0C\u9ED8\u8BA4 2 \u8F6E\u3001\u6574\u6279 15 \u5206\u949F\uFF0C\u6210\u5458\u76F4\u63A5\u53D6\u5F97\u516C\u5171\u539F\u6587\u3002\u56E2\u961F\u8FD0\u884C\u65F6\u5360\u7528\u6210\u5458\uFF1Bpause \u505C\u6B62\u65B0\u5B89\u6392\u548C\u9886\u53D6\uFF0C\u5141\u8BB8\u5728\u9014\u5DE5\u4F5C\u6536\u5C3E\uFF0C\u4E4B\u540E\u53EF\u79C1\u4EBA send\uFF1B\u9700\u8981\u4E2D\u6B62\u6210\u5458\u7528 pbot_agent stop\u3002\u5230\u671F\u65F6\u5B50\u5165\u53E3\u5C3D\u529B\u4E2D\u6B62\u672A\u88AB\u4EBA\u5DE5\u63A5\u7BA1\u7684\u56E2\u961F\u5DE5\u4F5C\u3002close \u4FDD\u7559\u6210\u5458\u4F1A\u8BDD\u548C\u5386\u53F2\uFF1B\u6362\u6210\u5458\u987B\u5173\u95ED\u65E7\u56E2\u961F\u518D\u521B\u5EFA\u3002\u7EE7\u7EED\u987B\u660E\u786E run \u65B0\u6279\u6B21\uFF0C\u4E0D\u91CD\u653E\u65E7\u8BF7\u6C42\u3002\u5B8C\u6210\u4ECD\u9700\u4E1A\u52A1\u9A8C\u6536\u3002";
3
- export declare const teamMessageDescription = "\u76F4\u63A5\u8BFB\u53D6/\u53D1\u5E03\u56E2\u961F\u516C\u5171\u539F\u6587\u3002post \u4E0D\u5524\u9192\u6A21\u578B\u3001\u4E0D\u589E\u52A0\u8F6E\u6B21\uFF0C\u6240\u6709\u6210\u5458\u53EF\u89C1\uFF0C\u4E0D\u63D0\u4F9B\u79C1\u4FE1\u6216\u9012\u5F52\u59D4\u6D3E\u3002\u6210\u5458\u53EA\u80FD\u5728\u81EA\u5DF1\u7684\u56E2\u961F\u5DE5\u4F5C\u4E2D post\u3002read \u7528 afterSeq \u5206\u9875\uFF1B\u957F\u6D88\u606F\u7528 seq/offset/limit \u7EE7\u7EED\uFF0CnextOffset \u975E\u7A7A\u8868\u793A\u8BE5\u6761\u6B63\u6587\u4E0D\u5B8C\u6574\u3002\u4FDD\u5B58\u6210\u529F\u4E0D\u662F\u6A21\u578B\u5DF2\u8BFB\u6216\u4E1A\u52A1\u5B8C\u6210\u3002";
2
+ export declare const teamDescription = "\u7EC4\u7EC7\u56FA\u5B9A\u6210\u5458\u534F\u4F5C\u3002create \u5EFA\u7ACB\u56E2\u961F\uFF0Crun \u5F00\u59CB\u4E00\u6279\u8BA8\u8BBA\u3002\u8FD0\u884C\u65F6\u5360\u7528\u6210\u5458\uFF1Bpause \u505C\u6B62\u65B0\u5B89\u6392\uFF0C\u5141\u8BB8\u5728\u9014\u5DE5\u4F5C\u6536\u5C3E\uFF0C\u4E4B\u540E\u53EF\u79C1\u4EBA send\uFF1B\u4E2D\u6B62\u6210\u5458\u7528 pbot_agent stop\u3002close \u4FDD\u7559\u6210\u5458\u548C\u5386\u53F2\uFF1B\u6362\u6210\u5458\u987B\u5173\u95ED\u65E7\u56E2\u961F\u518D\u521B\u5EFA\u3002\u7EE7\u7EED\u8BA8\u8BBA\u7528 run \u63D0\u4EA4\u65B0\u8981\u6C42\u3002\u6210\u5458\u6700\u7EC8\u7B54\u590D\u5411\u56E2\u961F\u516C\u5F00\u3002";
3
+ export declare const teamMessageDescription = "\u8BFB\u5199\u56E2\u961F\u516C\u5171\u539F\u6587\u3002post \u5411\u5168\u4F53\u6210\u5458\u53D1\u5E03\u4FE1\u606F\uFF0C\u9700\u8981\u5B89\u6392\u56DE\u7B54\u65F6\u7531\u4E3B\u4F1A\u8BDD\u8C03\u7528 pbot_team run\uFF1B\u6210\u5458\u53EA\u80FD\u5728\u81EA\u5DF1\u7684\u56E2\u961F\u5DE5\u4F5C\u4E2D post\u3002read \u7528 afterSeq \u7FFB\u9875\uFF0C\u957F\u6B63\u6587\u6309 seq/offset \u7EED\u8BFB\uFF0C\u5148\u8865\u5B8C nextOffset \u975E\u7A7A\u7684\u6D88\u606F\u3002";
4
4
  export declare const teamParametersSchema: Type.TObject<{
5
5
  afterSeq: Type.TOptional<Type.TInteger>;
6
6
  seq: Type.TOptional<Type.TInteger>;
@@ -1,18 +1,18 @@
1
1
  import { Type } from "typebox";
2
- export const teamDescription = "主会话管理固定成员团队。create 不启动模型;run 开展有限 roundRobin 轮流讨论或 parallel 并行轮次,默认 2 轮、整批 15 分钟,成员直接取得公共原文。团队运行时占用成员;pause 停止新安排和领取,允许在途工作收尾,之后可私人 send;需要中止成员用 pbot_agent stop。到期时子入口尽力中止未被人工接管的团队工作。close 保留成员会话和历史;换成员须关闭旧团队再创建。继续须明确 run 新批次,不重放旧请求。完成仍需业务验收。";
3
- export const teamMessageDescription = "直接读取/发布团队公共原文。post 不唤醒模型、不增加轮次,所有成员可见,不提供私信或递归委派。成员只能在自己的团队工作中 post。read 用 afterSeq 分页;长消息用 seq/offset/limit 继续,nextOffset 非空表示该条正文不完整。保存成功不是模型已读或业务完成。";
2
+ export const teamDescription = "组织固定成员协作。create 建立团队,run 开始一批讨论。运行时占用成员;pause 停止新安排,允许在途工作收尾,之后可私人 send;中止成员用 pbot_agent stop。close 保留成员和历史;换成员须关闭旧团队再创建。继续讨论用 run 提交新要求。成员最终答复向团队公开。";
3
+ export const teamMessageDescription = "读写团队公共原文。post 向全体成员发布信息,需要安排回答时由主会话调用 pbot_team run;成员只能在自己的团队工作中 post。read 用 afterSeq 翻页,长正文按 seq/offset 续读,先补完 nextOffset 非空的消息。";
4
4
  const id = Type.String({ minLength: 1, maxLength: 128 });
5
5
  const text = Type.String({ minLength: 1, maxLength: 24000 });
6
6
  const name = Type.String({ minLength: 1, maxLength: 64, pattern: "^[^\\r\\n\\x00-\\x1f]+$" });
7
7
  const mode = Type.Union([Type.Literal("roundRobin"), Type.Literal("parallel")], { description: "run 必填:roundRobin 按成员顺序轮流发言;parallel 在并发上限内发言,全员本轮完成后才进入下一轮。" });
8
8
  const members = Type.Array(Type.Object({ agentId: id, role: Type.String({ minLength: 1, maxLength: 4000 }) }, { additionalProperties: false }), {
9
- minItems: 1, maxItems: 50, description: "仅 create,必填:固定成员及职责。成员须属于当前父会话分支、版本兼容且未加入其他未关闭团队。create 不启动模型,也不等待成员就绪。",
9
+ minItems: 1, maxItems: 50, description: "仅 create,必填:当前分支中的固定成员及职责;成员须版本兼容且未加入其他未关闭团队。",
10
10
  });
11
11
  const run = {
12
- instruction: Type.String({ ...text, description: "仅 run,必填:本次新批次的明确任务与交付要求;不恢复或重放旧批次。" }), mode,
12
+ instruction: Type.String({ ...text, description: "仅 run,必填:本批次的任务、约束与交付要求。" }), mode,
13
13
  rounds: Type.Optional(Type.Integer({ minimum: 1, maximum: 10, description: "仅 run:每位成员的轮数,默认 2。" })),
14
- maxConcurrent: Type.Optional(Type.Integer({ minimum: 1, maximum: 50, description: "仅 run:roundRobin 默认且只允许 1;parallel 默认 min(2, 成员数)。不得超过成员数;已排队但未完成的请求也占用并发名额。" })),
15
- timeoutSeconds: Type.Optional(Type.Integer({ minimum: 1, maximum: 86400, description: "仅 run:整批期限,默认 900 秒,包含所有轮次和等待。到期停止新安排和领取,子入口尽力中止未被人工接管的在途工作;pause 则允许在途工作收尾。" })),
14
+ maxConcurrent: Type.Optional(Type.Integer({ minimum: 1, maximum: 50, description: "仅 run:roundRobin 默认且只允许 1;parallel 默认 min(2, 成员数)。不得超过成员数;待处理和执行中的发言都计入上限。" })),
15
+ timeoutSeconds: Type.Optional(Type.Integer({ minimum: 1, maximum: 86400, description: "仅 run:整批期限,默认 900 秒,包含所有轮次和等待。到期停止安排并尝试中止尚未人工接管的工作,之后仍须核对实际状态;pause 则允许在途工作收尾。" })),
16
16
  };
17
17
  const page = {
18
18
  afterSeq: Type.Optional(Type.Integer({ minimum: 0, description: "仅 read:读取序号大于此值的消息,默认 0,不得超过 lastSeq。返回 nextAfterSeq 用于继续消息列表;单条续读使用 seq/offset,省略 afterSeq。先补完被截断的正文,再继续列表。" })),
@@ -23,7 +23,7 @@ const page = {
23
23
  const object = (fields) => Type.Object(fields, { additionalProperties: false });
24
24
  export const teamParametersSchema = object({
25
25
  action: Type.Union(["create", "list", "status", "read", "run", "pause", "close"].map(v => Type.Literal(v)), {
26
- description: "create 只接受并必填 name/brief/members;list 只接受 action;status/pause/close 只接受并必填 teamId;read 必填 teamId,可选 afterSeq/seq/offset/limit;run 必填 teamId/instruction/mode,可选 rounds/maxConcurrent/timeoutSeconds。禁止携带其他 action 的字段。run 要求所有成员存活、idle、当前代次团队接入就绪、无待处理私人输入,且团队未关闭、无运行批次或在途工作。pause 仅停止新安排和未领取请求;close 要求先暂停并等待在途工作结束,不停止成员会话。",
26
+ description: "create 必填 name/brief/members;list 只接受 action;status/pause/close 必填 teamId;read 必填 teamId,可选 afterSeq/seq/offset/limit;run 必填 teamId/instruction/mode,可选 rounds/maxConcurrent/timeoutSeconds。只传对应 action 的字段。run 前须确认所有成员存活、idle、可参与团队且无待处理私人输入,团队未关闭,也无运行批次或在途工作。close 前先暂停并等待在途工作结束。",
27
27
  }),
28
28
  teamId: Type.Optional(id), name: Type.Optional(name), brief: Type.Optional(text), members: Type.Optional(members),
29
29
  instruction: Type.Optional(run.instruction), mode: Type.Optional(mode), rounds: run.rounds, maxConcurrent: run.maxConcurrent, timeoutSeconds: run.timeoutSeconds, ...page,
@@ -38,7 +38,7 @@ export const teamActionSchema = Type.Union([
38
38
  export const teamMessageParametersSchema = object({
39
39
  action: Type.Union([Type.Literal("read"), Type.Literal("post")], {
40
40
  description: "read 必填 teamId,只可选 afterSeq/seq/offset/limit,禁止 text/replyTo;post 必填 teamId/text,只可选 replyTo,禁止所有分页字段。",
41
- }), teamId: id, text: Type.Optional(Type.String({ ...text, description: "仅 post,必填:向全体成员公开的原文,不扩大任务授权。" })),
41
+ }), teamId: id, text: Type.Optional(Type.String({ ...text, description: "仅 post,必填:向全体成员公开的原文。" })),
42
42
  replyTo: Type.Optional(Type.Integer({ minimum: 1, description: "仅 post:回复已有消息的 seq。" })), ...page,
43
43
  });
44
44
  export const teamMessageActionSchema = Type.Union([
@@ -55,10 +55,10 @@ export const teamPageSchema = object({ teamId: id, messages: Type.Array(message)
55
55
  nextAfterSeq: Type.Union([Type.Integer(), Type.Null()], { description: "后续消息列表的 afterSeq;null 只表示列表已到末尾,仍须检查每条消息的 nextOffset。指定 seq 时始终为 null。" }) });
56
56
  const ownedView = object({ teamId: id, name: Type.String(), brief: Type.String(), closed: Type.Boolean(), owned: Type.Literal(true),
57
57
  members: Type.Array(object({ agentId: id, role: Type.String(), name: Type.String(), state: Type.String() })),
58
- lastSeq: Type.Integer(), activeCount: Type.Integer({ description: "所有批次中已领取、执行实例仍存活且尚无完成记录的请求数;paused 仍可能大于 0。" }),
58
+ lastSeq: Type.Integer(), activeCount: Type.Integer({ description: "各批次仍在途的请求数;paused 时也可能大于 0。" }),
59
59
  unresolved: Type.Array(object({ requestId: id, agentId: id, runId: id, round: Type.Integer(), active: Type.Boolean(),
60
- state: Type.String({ description: "queued=运行批次中尚未领取;accepted=已领取且仍在途;uncertain=已领取但执行实例/代次不再匹配、无完成记录;cancelled=批次已停止且未领取,或周期取消;unpublished=已完成但尚未公开有效原文;mixed/interactive=含人工或私人工作,不自动公开;failed/interrupted=失败或中断。不能将 unresolved 当作成功或自动重试许可。" }), cycleId: Type.Optional(id) }), {
61
- description: "所有批次中尚未确认完成且公开的请求,包含排队、在途、失败、结果不明和不宜公开的工作;不是仅列出运行中的请求。先核对原请求和业务结果,避免重复执行。",
60
+ state: Type.String({ description: "queued=待处理;accepted=在途;uncertain=结果未确认;cancelled=未执行或已取消;unpublished=已完成但结果尚未公开;mixed/interactive=含人工或私人工作,不自动公开;failed/interrupted=失败或中断。" }), cycleId: Type.Optional(id) }), {
61
+ description: "各批次尚未确认完成且公开的请求。先核对原请求和实际结果,再决定后续操作,避免重复执行。",
62
62
  }),
63
63
  run: Type.Optional(object({ runId: id, instruction: Type.String(), mode, state: Type.Union([Type.Literal("running"), Type.Literal("paused"), Type.Literal("finished")]),
64
64
  rounds: Type.Integer(), maxConcurrent: Type.Integer(), deadlineAt: Type.Number(), scheduled: Type.Integer(), published: Type.Integer(), reason: Type.Optional(Type.String()) })) });
@@ -1,17 +1,16 @@
1
1
  {
2
2
  "name": "personal-bot",
3
- "version": "0.2.5",
3
+ "version": "0.2.8",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "personal-bot",
9
- "version": "0.2.5",
9
+ "version": "0.2.8",
10
10
  "dependencies": {
11
11
  "ajv": "8.17.1",
12
12
  "ajv-formats": "3.0.1",
13
- "semver": "7.8.5",
14
- "typebox": "1.3.27"
13
+ "semver": "7.8.5"
15
14
  },
16
15
  "bin": {
17
16
  "pbot": "bin/pbot.mjs"
@@ -20,6 +19,7 @@
20
19
  "@deepseek-ai/cordis": "4.1.0",
21
20
  "@deepseek-ai/dsh": "0.2.2-rc.1",
22
21
  "@deepseek-ai/dsh-agent": "0.2.2-rc.1",
22
+ "@deepseek-ai/dsh-agent-preset-registry": "0.2.2-rc.1",
23
23
  "@deepseek-ai/dsh-api-remotes": "0.2.2-rc.1",
24
24
  "@deepseek-ai/dsh-attachment": "0.2.2-rc.1",
25
25
  "@deepseek-ai/dsh-client-file-upload": "0.2.2-rc.1",
@@ -41,46 +41,49 @@
41
41
  "@deepseek-ai/dsh-typert-registry": "0.2.2-rc.1",
42
42
  "@deepseek-ai/dsh-user-approval": "0.2.2-rc.1",
43
43
  "@deepseek-ai/dsh-working-directory": "0.2.2-rc.1",
44
- "@earendil-works/pi-ai": "1.4.0",
45
- "@earendil-works/pi-coding-agent": "1.4.0",
46
- "@earendil-works/pi-tui": "1.4.0",
44
+ "@earendil-works/pi-ai": "1.5.0",
45
+ "@earendil-works/pi-coding-agent": "1.5.0",
46
+ "@earendil-works/pi-tui": "1.5.0",
47
47
  "@types/node": "24.10.1",
48
48
  "@types/semver": "7.7.1",
49
49
  "dependency-cruiser": "18.5.0",
50
50
  "esbuild": "0.25.12",
51
+ "typebox": "1.3.27",
51
52
  "typescript": "5.9.3"
52
53
  },
53
54
  "engines": {
54
- "dsh": "0.2.2-rc.1",
55
+ "dsh": ">=0.2.2-rc.1",
55
56
  "node": ">=22.19.0"
56
57
  },
57
58
  "peerDependencies": {
58
59
  "@deepseek-ai/cordis": "~4.1.0",
59
- "@deepseek-ai/dsh-agent": "0.2.2-rc.1",
60
- "@deepseek-ai/dsh-api-remotes": "0.2.2-rc.1",
61
- "@deepseek-ai/dsh-attachment": "0.2.2-rc.1",
62
- "@deepseek-ai/dsh-client-file-upload": "0.2.2-rc.1",
63
- "@deepseek-ai/dsh-client-ui-commands": "0.2.2-rc.1",
64
- "@deepseek-ai/dsh-commands": "0.2.2-rc.1",
65
- "@deepseek-ai/dsh-fs": "0.2.2-rc.1",
66
- "@deepseek-ai/dsh-fs-patch": "0.2.2-rc.1",
67
- "@deepseek-ai/dsh-home-paths": "0.2.2-rc.1",
68
- "@deepseek-ai/dsh-llm": "0.2.2-rc.1",
69
- "@deepseek-ai/dsh-session": "0.2.2-rc.1",
70
- "@deepseek-ai/dsh-session-persistence": "0.2.2-rc.1",
71
- "@deepseek-ai/dsh-session-query": "0.2.2-rc.1",
72
- "@deepseek-ai/dsh-skill": "0.2.2-rc.1",
73
- "@deepseek-ai/dsh-skill-filesystem": "0.2.2-rc.1",
74
- "@deepseek-ai/dsh-system-prompt": "0.2.2-rc.1",
75
- "@deepseek-ai/dsh-tool-executor-ptc": "0.2.2-rc.1",
76
- "@deepseek-ai/dsh-tools": "0.2.2-rc.1",
77
- "@deepseek-ai/dsh-typert-protocol": "0.2.2-rc.1",
78
- "@deepseek-ai/dsh-typert-registry": "0.2.2-rc.1",
79
- "@deepseek-ai/dsh-user-approval": "0.2.2-rc.1",
80
- "@deepseek-ai/dsh-working-directory": "0.2.2-rc.1",
60
+ "@deepseek-ai/dsh-agent": "*",
61
+ "@deepseek-ai/dsh-agent-preset-registry": "*",
62
+ "@deepseek-ai/dsh-api-remotes": "*",
63
+ "@deepseek-ai/dsh-attachment": "*",
64
+ "@deepseek-ai/dsh-client-file-upload": "*",
65
+ "@deepseek-ai/dsh-client-ui-commands": "*",
66
+ "@deepseek-ai/dsh-commands": "*",
67
+ "@deepseek-ai/dsh-fs": "*",
68
+ "@deepseek-ai/dsh-fs-patch": "*",
69
+ "@deepseek-ai/dsh-home-paths": "*",
70
+ "@deepseek-ai/dsh-llm": "*",
71
+ "@deepseek-ai/dsh-session": "*",
72
+ "@deepseek-ai/dsh-session-persistence": "*",
73
+ "@deepseek-ai/dsh-session-query": "*",
74
+ "@deepseek-ai/dsh-skill": "*",
75
+ "@deepseek-ai/dsh-skill-filesystem": "*",
76
+ "@deepseek-ai/dsh-system-prompt": "*",
77
+ "@deepseek-ai/dsh-tool-executor-ptc": "*",
78
+ "@deepseek-ai/dsh-tools": "*",
79
+ "@deepseek-ai/dsh-typert-protocol": "*",
80
+ "@deepseek-ai/dsh-typert-registry": "*",
81
+ "@deepseek-ai/dsh-user-approval": "*",
82
+ "@deepseek-ai/dsh-working-directory": "*",
81
83
  "@earendil-works/pi-ai": "*",
82
84
  "@earendil-works/pi-coding-agent": "*",
83
- "@earendil-works/pi-tui": "*"
85
+ "@earendil-works/pi-tui": "*",
86
+ "typebox": "*"
84
87
  },
85
88
  "peerDependenciesMeta": {
86
89
  "@deepseek-ai/cordis": {
@@ -89,6 +92,9 @@
89
92
  "@deepseek-ai/dsh-agent": {
90
93
  "optional": true
91
94
  },
95
+ "@deepseek-ai/dsh-agent-preset-registry": {
96
+ "optional": true
97
+ },
92
98
  "@deepseek-ai/dsh-api-remotes": {
93
99
  "optional": true
94
100
  },
@@ -7141,36 +7147,36 @@
7141
7147
  }
7142
7148
  },
7143
7149
  "node_modules/@earendil-works/pi-agent-core": {
7144
- "version": "1.4.0",
7145
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-agent-core/-/pi-agent-core-1.4.0.tgz",
7146
- "integrity": "sha512-PoKY84SKUwnt7S5QBZaGUqfNO1kjP3KHpHUA9QpFTj4cOjaVWMYIcBPJ6FDRCdE8Zen9OSECQUd0uUfVgtSmgA==",
7150
+ "version": "1.5.0",
7151
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-agent-core/-/pi-agent-core-1.5.0.tgz",
7152
+ "integrity": "sha512-FOj+jXj48DbzMycR/ghNa2KcsqWmvOln24e0FnQOVgnd8vn5H79g335WdHaZUVdRo+zCeogb40/qPPlCWFuvmA==",
7147
7153
  "dev": true,
7148
7154
  "license": "MIT",
7149
7155
  "dependencies": {
7150
- "@earendil-works/pi-ai": "1.4.0",
7151
- "typebox": "1.3.27"
7156
+ "@earendil-works/pi-ai": "1.5.0",
7157
+ "@earendil-works/pi-schema": "1.5.0"
7152
7158
  },
7153
7159
  "engines": {
7154
7160
  "node": ">=22.19.0"
7155
7161
  }
7156
7162
  },
7157
7163
  "node_modules/@earendil-works/pi-ai": {
7158
- "version": "1.4.0",
7159
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-ai/-/pi-ai-1.4.0.tgz",
7160
- "integrity": "sha512-hQM/C4+1w8rHYACzDDf+0vQMnEnpzIop1tptIERVgR3ZeT/hHSzBNG8PaWPgxWQjqSeKCyBZSyp8uTT6eKK1pQ==",
7164
+ "version": "1.5.0",
7165
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-ai/-/pi-ai-1.5.0.tgz",
7166
+ "integrity": "sha512-VeWxNqTHSqRCf8AcY/6kvNwh+neRL6MPxZPePVztIQy6qqK9MR/YoCSN/ZgDnIyCD3pqEXgRyQbzk4KV4uvjbg==",
7161
7167
  "dev": true,
7162
7168
  "license": "MIT",
7163
7169
  "dependencies": {
7164
7170
  "@anthropic-ai/sdk": "0.129.0",
7165
7171
  "@aws-sdk/client-bedrock-runtime": "3.1127.0",
7166
- "@earendil-works/pi-telemetry": "1.4.0",
7172
+ "@earendil-works/pi-schema": "1.5.0",
7173
+ "@earendil-works/pi-telemetry": "1.5.0",
7167
7174
  "@google/genai": "2.21.0",
7168
7175
  "@smithy/node-http-handler": "4.12.1",
7169
7176
  "http-proxy-agent": "9.1.0",
7170
7177
  "https-proxy-agent": "9.1.0",
7171
7178
  "openai": "7.19.0",
7172
- "partial-json": "0.1.7",
7173
- "typebox": "1.3.27"
7179
+ "partial-json": "0.1.7"
7174
7180
  },
7175
7181
  "bin": {
7176
7182
  "pi-ai": "dist/cli.js"
@@ -7180,9 +7186,9 @@
7180
7186
  }
7181
7187
  },
7182
7188
  "node_modules/@earendil-works/pi-codemode": {
7183
- "version": "1.4.0",
7184
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-codemode/-/pi-codemode-1.4.0.tgz",
7185
- "integrity": "sha512-23CNAXpS9DuLzPMyYuvrXVVio46x4YhffCgCqaWmF7F5H8PooqjrQvX4ucF6M0BhUd+x2tV6r1J0dv8cCME4Cg==",
7189
+ "version": "1.5.0",
7190
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-codemode/-/pi-codemode-1.5.0.tgz",
7191
+ "integrity": "sha512-PLBJZ17AEWGzOlAAcFuOkw3PxkOti0JlFuZQyeF2GRTqbpuYo4k9t8YqUV2uOQVzrUnKdxahwaFUqc1eNS1WAg==",
7186
7192
  "dev": true,
7187
7193
  "license": "MIT",
7188
7194
  "dependencies": {
@@ -7193,17 +7199,17 @@
7193
7199
  }
7194
7200
  },
7195
7201
  "node_modules/@earendil-works/pi-coding-agent": {
7196
- "version": "1.4.0",
7197
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-coding-agent/-/pi-coding-agent-1.4.0.tgz",
7198
- "integrity": "sha512-Z41LpZ3yYHSC/UUps6Mr39UMFPwH8elhJBG9DY1P7kuzsE5qSK/6eMj2EHzO5evJRQWLbKSqUMw+4nCNtIyiQg==",
7202
+ "version": "1.5.0",
7203
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-coding-agent/-/pi-coding-agent-1.5.0.tgz",
7204
+ "integrity": "sha512-xNDZ5kqowO6Z03FS2gwAkPEGk1ssxVcYKQ6qZId84mFEvwACvvyc2l0vAMOS+c5zvxLRMLBE9r4y44IGYkMJaQ==",
7199
7205
  "dev": true,
7200
7206
  "license": "MIT",
7201
7207
  "dependencies": {
7202
- "@earendil-works/pi-agent-core": "1.4.0",
7203
- "@earendil-works/pi-ai": "1.4.0",
7204
- "@earendil-works/pi-codemode": "1.4.0",
7205
- "@earendil-works/pi-mcp": "1.4.0",
7206
- "@earendil-works/pi-tui": "1.4.0",
7208
+ "@earendil-works/pi-agent-core": "1.5.0",
7209
+ "@earendil-works/pi-ai": "1.5.0",
7210
+ "@earendil-works/pi-codemode": "1.5.0",
7211
+ "@earendil-works/pi-mcp": "1.5.0",
7212
+ "@earendil-works/pi-tui": "1.5.0",
7207
7213
  "@silvia-odwyer/photon-node": "0.3.4",
7208
7214
  "brace-expansion": "5.0.12",
7209
7215
  "chalk": "6.0.0",
@@ -7214,12 +7220,12 @@
7214
7220
  "hosted-git-info": "9.0.3",
7215
7221
  "ignore": "7.0.8",
7216
7222
  "jiti": "2.7.0",
7217
- "minimatch": "10.2.6",
7223
+ "minimatch": "11.0.3",
7218
7224
  "proper-lockfile": "4.1.2",
7219
7225
  "quickjs-wasi": "3.6.2",
7220
7226
  "semver": "7.8.5",
7221
7227
  "typebox": "1.3.27",
7222
- "undici": "8.10.2",
7228
+ "undici": "8.12.3",
7223
7229
  "yaml": "2.9.0"
7224
7230
  },
7225
7231
  "bin": {
@@ -7230,9 +7236,9 @@
7230
7236
  }
7231
7237
  },
7232
7238
  "node_modules/@earendil-works/pi-mcp": {
7233
- "version": "1.4.0",
7234
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-mcp/-/pi-mcp-1.4.0.tgz",
7235
- "integrity": "sha512-92aZmmGsUpHHknYuKXZHRINQfahntw5hU9If0I0ZM49GojOaFHpkl5/GF3/aatqpt7v7GjZbBfpfSygGKW+pnw==",
7239
+ "version": "1.5.0",
7240
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-mcp/-/pi-mcp-1.5.0.tgz",
7241
+ "integrity": "sha512-DURw3IwHCTMHV8CzUJWVp9css27NowsCWfXt4xg2r09IZ+P1O/Uq58hp0hb9WJO0dbkaKGXKBIkV4LVXcu2nlg==",
7236
7242
  "dev": true,
7237
7243
  "license": "MIT",
7238
7244
  "dependencies": {
@@ -7242,10 +7248,20 @@
7242
7248
  "node": ">=22.19.0"
7243
7249
  }
7244
7250
  },
7251
+ "node_modules/@earendil-works/pi-schema": {
7252
+ "version": "1.5.0",
7253
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-schema/-/pi-schema-1.5.0.tgz",
7254
+ "integrity": "sha512-RW0MbT2tR65OY6xMsgB/yVBb7m/RTNwA+9hurSN1vVXfHZRVmVnXbruBPrx/PzbrQnW5yLVlMRWxErGDQtF1Hg==",
7255
+ "dev": true,
7256
+ "license": "MIT",
7257
+ "engines": {
7258
+ "node": ">=22.19.0"
7259
+ }
7260
+ },
7245
7261
  "node_modules/@earendil-works/pi-telemetry": {
7246
- "version": "1.4.0",
7247
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-telemetry/-/pi-telemetry-1.4.0.tgz",
7248
- "integrity": "sha512-MLIfowwUYIY65jSjMX82paZOrX/NTvLk6D08h+3Jq42a99RzUOewzuCR0zOlPul3D6UBfddat76VT6LvsHEs1w==",
7262
+ "version": "1.5.0",
7263
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-telemetry/-/pi-telemetry-1.5.0.tgz",
7264
+ "integrity": "sha512-VW3tcVdnNfl/Vk8wHPTzZdKkxcsCOM12ppiO4DXnd9wMxUCmOfLt/wvUnWeKWbTVlVSRg0uqKtnnhE2UCsG2Bw==",
7249
7265
  "dev": true,
7250
7266
  "license": "MIT",
7251
7267
  "engines": {
@@ -7253,9 +7269,9 @@
7253
7269
  }
7254
7270
  },
7255
7271
  "node_modules/@earendil-works/pi-tui": {
7256
- "version": "1.4.0",
7257
- "resolved": "https://registry.npmmirror.com/@earendil-works/pi-tui/-/pi-tui-1.4.0.tgz",
7258
- "integrity": "sha512-4obPOjgOD7g4mGSlngIvxyujC1UPdmyI9zdVthbr8GufacFEX+Ce0+scPgHg++k2xj5+QjESM2d5TxvIuzCVmg==",
7272
+ "version": "1.5.0",
7273
+ "resolved": "https://registry.npmmirror.com/@earendil-works/pi-tui/-/pi-tui-1.5.0.tgz",
7274
+ "integrity": "sha512-56KqrDVeLF18k+syppVbT35Ai1opbM44ot+sL7O3K40CaWwXCiwOpqEFugDBAILtAhseZh6uYIuYxPPOJHLFAA==",
7259
7275
  "dev": true,
7260
7276
  "license": "MIT",
7261
7277
  "dependencies": {
@@ -8330,6 +8346,13 @@
8330
8346
  "url": "https://opencollective.com/libvips"
8331
8347
  }
8332
8348
  },
8349
+ "node_modules/@isaacs/nonrecursive-glob-match": {
8350
+ "version": "1.1.0",
8351
+ "resolved": "https://registry.npmmirror.com/@isaacs/nonrecursive-glob-match/-/nonrecursive-glob-match-1.1.0.tgz",
8352
+ "integrity": "sha512-GPm/Dbvk5RLmhRnxXIa7nTpK0xtl4E0wj0MslsuNiJ1FIROU+2+9lgUC/dgF7Ey4QCWhfEsgxilMRMCdHPfDfw==",
8353
+ "dev": true,
8354
+ "license": "BlueOak-1.0.0"
8355
+ },
8333
8356
  "node_modules/@joplin/turndown-plugin-gfm": {
8334
8357
  "version": "1.0.68",
8335
8358
  "resolved": "https://registry.npmjs.org/@joplin/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.68.tgz",
@@ -10975,13 +10998,14 @@
10975
10998
  }
10976
10999
  },
10977
11000
  "node_modules/minimatch": {
10978
- "version": "10.2.6",
10979
- "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-10.2.6.tgz",
10980
- "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
11001
+ "version": "11.0.3",
11002
+ "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-11.0.3.tgz",
11003
+ "integrity": "sha512-iny/40PEGkNJQ5/Pv6z3nm6FbRAby32GeZRjCUJk2WnNDbgPSTcdI+DDvLqsgBdD4cD5sMtMheqPPnehCCa8Nw==",
10981
11004
  "dev": true,
10982
11005
  "license": "BlueOak-1.0.0",
10983
11006
  "dependencies": {
10984
- "brace-expansion": "^5.0.8"
11007
+ "@isaacs/nonrecursive-glob-match": "^1.0.3",
11008
+ "brace-expansion": "^5.0.12"
10985
11009
  },
10986
11010
  "engines": {
10987
11011
  "node": "18 || 20 || >=22"
@@ -12353,6 +12377,7 @@
12353
12377
  "version": "1.3.27",
12354
12378
  "resolved": "https://registry.npmmirror.com/typebox/-/typebox-1.3.27.tgz",
12355
12379
  "integrity": "sha512-zu+jc1pcy4UiNThxikUr36f0Rybk9PEeCg/NE6adeWr/SKsdNO4EzZHYRDlv2YCVAfj3Odq3dESSo/jNyoBXzA==",
12380
+ "dev": true,
12356
12381
  "license": "MIT"
12357
12382
  },
12358
12383
  "node_modules/typescript": {
@@ -12370,9 +12395,9 @@
12370
12395
  }
12371
12396
  },
12372
12397
  "node_modules/undici": {
12373
- "version": "8.10.2",
12374
- "resolved": "https://registry.npmmirror.com/undici/-/undici-8.10.2.tgz",
12375
- "integrity": "sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==",
12398
+ "version": "8.12.3",
12399
+ "resolved": "https://registry.npmmirror.com/undici/-/undici-8.12.3.tgz",
12400
+ "integrity": "sha512-+fdndUTwBP86cVjihTp21hZHo7d6oj1c/47XPA3lL8mM0XHs+C4EkcjmgRsFnFk2f/UONGDy9ItBItmXsLOQHw==",
12376
12401
  "dev": true,
12377
12402
  "license": "MIT",
12378
12403
  "engines": {