@downcity/plugins 1.0.59 → 1.0.61

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 (101) hide show
  1. package/bin/BuiltinPlugins.d.ts +39 -2
  2. package/bin/BuiltinPlugins.d.ts.map +1 -1
  3. package/bin/BuiltinPlugins.js +24 -3
  4. package/bin/BuiltinPlugins.js.map +1 -1
  5. package/bin/contact/ContactPlugin.d.ts +6 -1
  6. package/bin/contact/ContactPlugin.d.ts.map +1 -1
  7. package/bin/contact/ContactPlugin.js +9 -8
  8. package/bin/contact/ContactPlugin.js.map +1 -1
  9. package/bin/contact/types/ContactPluginOptions.d.ts +29 -0
  10. package/bin/contact/types/ContactPluginOptions.d.ts.map +1 -0
  11. package/bin/contact/types/ContactPluginOptions.js +9 -0
  12. package/bin/contact/types/ContactPluginOptions.js.map +1 -0
  13. package/bin/index.d.ts +9 -1
  14. package/bin/index.d.ts.map +1 -1
  15. package/bin/index.js +4 -0
  16. package/bin/index.js.map +1 -1
  17. package/bin/memory/Action.d.ts +15 -10
  18. package/bin/memory/Action.d.ts.map +1 -1
  19. package/bin/memory/Action.js +233 -16
  20. package/bin/memory/Action.js.map +1 -1
  21. package/bin/memory/MemoryPlugin.d.ts +10 -4
  22. package/bin/memory/MemoryPlugin.d.ts.map +1 -1
  23. package/bin/memory/MemoryPlugin.js +79 -37
  24. package/bin/memory/MemoryPlugin.js.map +1 -1
  25. package/bin/memory/runtime/Search.d.ts +1 -1
  26. package/bin/memory/runtime/Search.d.ts.map +1 -1
  27. package/bin/memory/runtime/Search.js +11 -7
  28. package/bin/memory/runtime/Search.js.map +1 -1
  29. package/bin/memory/runtime/Store.d.ts +8 -23
  30. package/bin/memory/runtime/Store.d.ts.map +1 -1
  31. package/bin/memory/runtime/Store.js +28 -43
  32. package/bin/memory/runtime/Store.js.map +1 -1
  33. package/bin/memory/runtime/SystemProvider.d.ts +4 -8
  34. package/bin/memory/runtime/SystemProvider.d.ts.map +1 -1
  35. package/bin/memory/runtime/SystemProvider.js +55 -62
  36. package/bin/memory/runtime/SystemProvider.js.map +1 -1
  37. package/bin/memory/runtime/Writer.d.ts +48 -10
  38. package/bin/memory/runtime/Writer.d.ts.map +1 -1
  39. package/bin/memory/runtime/Writer.js +197 -60
  40. package/bin/memory/runtime/Writer.js.map +1 -1
  41. package/bin/memory/types/Memory.d.ts +222 -33
  42. package/bin/memory/types/Memory.d.ts.map +1 -1
  43. package/bin/memory/types/Memory.js +4 -3
  44. package/bin/memory/types/Memory.js.map +1 -1
  45. package/bin/shell/ShellPlugin.d.ts +2 -1
  46. package/bin/shell/ShellPlugin.d.ts.map +1 -1
  47. package/bin/shell/ShellPlugin.js +3 -3
  48. package/bin/shell/ShellPlugin.js.map +1 -1
  49. package/bin/shell/ShellRuntimeTypes.d.ts +7 -2
  50. package/bin/shell/ShellRuntimeTypes.d.ts.map +1 -1
  51. package/bin/shell/runtime/ShellActionRuntime.d.ts.map +1 -1
  52. package/bin/shell/runtime/ShellActionRuntime.js +6 -6
  53. package/bin/shell/runtime/ShellActionRuntime.js.map +1 -1
  54. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts +14 -5
  55. package/bin/shell/runtime/ShellActionRuntimeSupport.d.ts.map +1 -1
  56. package/bin/shell/runtime/ShellActionRuntimeSupport.js +58 -22
  57. package/bin/shell/runtime/ShellActionRuntimeSupport.js.map +1 -1
  58. package/bin/shell/runtime/ShellProcessEvents.js +3 -3
  59. package/bin/shell/runtime/ShellProcessEvents.js.map +1 -1
  60. package/bin/shell/types/ShellPluginOptions.d.ts +95 -0
  61. package/bin/shell/types/ShellPluginOptions.d.ts.map +1 -0
  62. package/bin/shell/types/ShellPluginOptions.js +10 -0
  63. package/bin/shell/types/ShellPluginOptions.js.map +1 -0
  64. package/bin/task/Scheduler.d.ts +8 -0
  65. package/bin/task/Scheduler.d.ts.map +1 -1
  66. package/bin/task/Scheduler.js +7 -9
  67. package/bin/task/Scheduler.js.map +1 -1
  68. package/bin/task/TaskPlugin.d.ts +18 -1
  69. package/bin/task/TaskPlugin.d.ts.map +1 -1
  70. package/bin/task/TaskPlugin.js +23 -1
  71. package/bin/task/TaskPlugin.js.map +1 -1
  72. package/bin/task/types/TaskPluginOptions.d.ts +22 -0
  73. package/bin/task/types/TaskPluginOptions.d.ts.map +1 -0
  74. package/bin/task/types/TaskPluginOptions.js +9 -0
  75. package/bin/task/types/TaskPluginOptions.js.map +1 -0
  76. package/package.json +2 -2
  77. package/src/BuiltinPlugins.ts +67 -3
  78. package/src/contact/ContactPlugin.ts +17 -9
  79. package/src/contact/types/ContactPluginOptions.ts +30 -0
  80. package/src/index.ts +41 -1
  81. package/src/memory/Action.ts +292 -25
  82. package/src/memory/MemoryPlugin.ts +82 -40
  83. package/src/memory/runtime/Search.ts +16 -9
  84. package/src/memory/runtime/Store.ts +52 -49
  85. package/src/memory/runtime/SystemProvider.ts +55 -69
  86. package/src/memory/runtime/Writer.ts +262 -81
  87. package/src/memory/types/Memory.ts +296 -35
  88. package/src/shell/ShellPlugin.ts +4 -3
  89. package/src/shell/ShellRuntimeTypes.ts +7 -2
  90. package/src/shell/runtime/ShellActionRuntime.ts +18 -9
  91. package/src/shell/runtime/ShellActionRuntimeSupport.ts +106 -21
  92. package/src/shell/runtime/ShellProcessEvents.ts +3 -3
  93. package/src/shell/types/ShellPluginOptions.ts +112 -0
  94. package/src/task/Scheduler.ts +15 -9
  95. package/src/task/TaskPlugin.ts +27 -1
  96. package/src/task/types/TaskPluginOptions.ts +22 -0
  97. package/bin/memory/runtime/Flush.d.ts +0 -15
  98. package/bin/memory/runtime/Flush.d.ts.map +0 -1
  99. package/bin/memory/runtime/Flush.js +0 -63
  100. package/bin/memory/runtime/Flush.js.map +0 -1
  101. package/src/memory/runtime/Flush.ts +0 -83
@@ -12,6 +12,7 @@ import { registerTaskCronJobs } from "../task/Scheduler.js";
12
12
  import { createTaskPluginActions, } from "../task/runtime/TaskPluginActions.js";
13
13
  import { reloadTaskSchedulerAfterMutation, } from "../task/runtime/TaskActionExecution.js";
14
14
  import { TASK_PLUGIN_PROMPT } from "../task/runtime/TaskPluginSystem.js";
15
+ import { resolveRuntimeTimezone } from "@downcity/agent/internal/utils/Time.js";
15
16
  const TASK_LOG_PREFIX = "[TASK]";
16
17
  function formatTaskLogMessage(message) {
17
18
  return `${TASK_LOG_PREFIX} ${message}`;
@@ -32,6 +33,10 @@ export class TaskPlugin extends BasePlugin {
32
33
  * task plugin 的 action 定义表。
33
34
  */
34
35
  actions;
36
+ /**
37
+ * 当前实例持有的显式配置。
38
+ */
39
+ options;
35
40
  /**
36
41
  * 当前实例持有的 cron engine。
37
42
  *
@@ -40,8 +45,17 @@ export class TaskPlugin extends BasePlugin {
40
45
  * - 不再复用 module-global 单例。
41
46
  */
42
47
  cronEngine = null;
43
- constructor() {
48
+ /**
49
+ * 当前实例持有的运行中 task 锁。
50
+ *
51
+ * 关键点(中文)
52
+ * - scheduler reload 会替换 cron engine。
53
+ * - 锁必须挂在 plugin 实例上,避免 reload 后同一 task 被新旧调度器并发触发。
54
+ */
55
+ runningTaskIds = new Set();
56
+ constructor(options) {
44
57
  super();
58
+ this.options = options || {};
45
59
  this.actions = createTaskPluginActions({
46
60
  reloadSchedulerAfterMutation: async (params) => this.reloadSchedulerAfterMutation(params),
47
61
  });
@@ -84,6 +98,8 @@ export class TaskPlugin extends BasePlugin {
84
98
  const registerResult = await registerTaskCronJobs({
85
99
  context,
86
100
  engine,
101
+ timezone: this.resolveTimezone(),
102
+ runningTaskIds: this.runningTaskIds,
87
103
  });
88
104
  await engine.start();
89
105
  this.cronEngine = engine;
@@ -122,5 +138,11 @@ export class TaskPlugin extends BasePlugin {
122
138
  reloadScheduler: async (context) => this.restartCronRuntime(context),
123
139
  });
124
140
  }
141
+ /**
142
+ * 解析当前 task cron 使用的时区。
143
+ */
144
+ resolveTimezone() {
145
+ return String(this.options.timezone || "").trim() || resolveRuntimeTimezone();
146
+ }
125
147
  }
126
148
  //# sourceMappingURL=TaskPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskPlugin.js","sourceRoot":"","sources":["../../src/task/TaskPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TaskPlugin.js","sourceRoot":"","sources":["../../src/task/TaskPlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAQhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gCAAgC,GACjC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,GAAG,eAAe,IAAI,OAAO,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC;;OAEG;IACM,IAAI,GAAG,MAAM,CAAC;IAEvB;;OAEG;IACM,MAAM,GAAG,GAAW,EAAE,CAAC,kBAAkB,CAAC;IAEnD;;OAEG;IACM,OAAO,CAAgB;IAEhC;;OAEG;IACa,OAAO,CAAoB;IAE3C;;;;;;OAMG;IACI,UAAU,GAAiC,IAAI,CAAC;IAEvD;;;;;;OAMG;IACc,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpD,YAAY,OAA2B;QACrC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,OAAO,GAAG,uBAAuB,CAAC;YACrC,4BAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAC7C,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC;SAC5C,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACpB,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,oBAAoB,CAClB,oCAAoC,MAAM,CAAC,UAAU,UAAU,MAAM,CAAC,aAAa,GAAG,CACvF,CACF,CAAC;YACJ,CAAC;YACD,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC7C,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;gBACtC,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACrD,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,yBAAyB,OAAO,EAAE;qBAC5C,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACtD,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,oBAAoB,CAClB,qCAAqC,MAAM,CAAC,UAAU,UAAU,MAAM,CAAC,aAAa,GAAG,CACxF,CACF,CAAC;gBACF,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,yBAAyB;iBACnC,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAAqB;QAErB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC;YAChD,OAAO;YACP,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE;YAChC,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAAqB;QAErB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,CACL,OAAO,IAAI;YACT,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,CAAC;SACjB,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,4BAA4B,CAAC,MAI1C;QACC,OAAO,MAAM,gCAAgC,CAAC;YAC5C,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;SACrE,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,sBAAsB,EAAE,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * TaskPluginOptions:TaskPlugin 构造参数。
3
+ *
4
+ * 关键点(中文)
5
+ * - TaskPlugin 本身就是定时任务 runtime,不提供 enabled 开关。
6
+ * - 只暴露用户能直接理解的时区配置,内部调度实现细节不进入 constructor。
7
+ */
8
+ /**
9
+ * TaskPlugin 构造参数。
10
+ */
11
+ export interface TaskPluginOptions {
12
+ /**
13
+ * cron task 使用的 IANA 时区。
14
+ *
15
+ * 说明(中文)
16
+ * - 例如 `Asia/Shanghai`、`America/Los_Angeles`。
17
+ * - 省略时使用当前运行机器的本机时区。
18
+ * - `time:<ISO8601-with-timezone>` 一次性任务以 ISO 字符串自身的 offset 为准,这里的时区主要影响 cron 表达式。
19
+ */
20
+ timezone?: string;
21
+ }
22
+ //# sourceMappingURL=TaskPluginOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskPluginOptions.d.ts","sourceRoot":"","sources":["../../../src/task/types/TaskPluginOptions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TaskPluginOptions:TaskPlugin 构造参数。
3
+ *
4
+ * 关键点(中文)
5
+ * - TaskPlugin 本身就是定时任务 runtime,不提供 enabled 开关。
6
+ * - 只暴露用户能直接理解的时区配置,内部调度实现细节不进入 constructor。
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=TaskPluginOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskPluginOptions.js","sourceRoot":"","sources":["../../../src/task/types/TaskPluginOptions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/plugins",
3
- "version": "1.0.59",
3
+ "version": "1.0.61",
4
4
  "type": "module",
5
5
  "description": "Downcity 内建 plugin 集合包",
6
6
  "main": "./bin/index.js",
@@ -22,7 +22,7 @@
22
22
  "node-cron": "^4.2.1",
23
23
  "ws": "^8.21.0",
24
24
  "zod": "^4.4.3",
25
- "@downcity/agent": "^1.1.105"
25
+ "@downcity/agent": "^1.1.107"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/better-sqlite3": "^7.6.13",
@@ -16,6 +16,15 @@ import { ContactPlugin } from "@/contact/ContactPlugin.js";
16
16
  import { TaskPlugin } from "@/task/TaskPlugin.js";
17
17
  import { MemoryPlugin } from "@/memory/MemoryPlugin.js";
18
18
  import { ShellPlugin } from "@/shell/ShellPlugin.js";
19
+ import { ImagePlugin } from "@/image/ImagePlugin.js";
20
+ import { AsrPlugin } from "@/asr/Plugin.js";
21
+ import { TtsPlugin } from "@/tts/Plugin.js";
22
+ import type { ImagePluginOptions } from "@/image/types/ImagePlugin.js";
23
+ import type { AsrPluginOptions } from "@/asr/types/AsrPlugin.js";
24
+ import type { TtsPluginOptions } from "@/tts/types/TtsPlugin.js";
25
+ import type { TaskPluginOptions } from "@/task/types/TaskPluginOptions.js";
26
+ import type { MemoryPluginOptions } from "@/memory/types/Memory.js";
27
+ import type { ShellPluginOptions } from "@/shell/types/ShellPluginOptions.js";
19
28
 
20
29
  /**
21
30
  * 内建 plugin class 构造器。
@@ -23,7 +32,9 @@ import { ShellPlugin } from "@/shell/ShellPlugin.js";
23
32
  export type BuiltinPluginClass<T extends BasePlugin = BasePlugin> = new () => T;
24
33
 
25
34
  /**
26
- * 全部内建 plugin classes。
35
+ * 可直接无参创建的内建 plugin classes。
36
+ *
37
+ * 关键点(中文):image / asr / tts 需要宿主注入 City AI 能力,不能放入无参 class 列表。
27
38
  */
28
39
  export const BUILTIN_PLUGIN_CLASSES: BuiltinPluginClass[] = [
29
40
  SkillPlugin,
@@ -36,9 +47,62 @@ export const BUILTIN_PLUGIN_CLASSES: BuiltinPluginClass[] = [
36
47
  ShellPlugin,
37
48
  ];
38
49
 
50
+ /**
51
+ * 内建 plugin 工厂参数。
52
+ */
53
+ export interface BuiltinPluginOptions {
54
+ /**
55
+ * 图片生成 plugin 的 City AI 能力注入。
56
+ */
57
+ image?: ImagePluginOptions;
58
+
59
+ /**
60
+ * 语音转写 plugin 的 City AI 能力注入。
61
+ */
62
+ asr?: AsrPluginOptions;
63
+
64
+ /**
65
+ * 文本转语音 plugin 的 City AI 能力注入。
66
+ */
67
+ tts?: TtsPluginOptions;
68
+
69
+ /**
70
+ * task plugin 的定时任务运行参数。
71
+ */
72
+ task?: TaskPluginOptions;
73
+
74
+ /**
75
+ * memory plugin 的 LLM Wiki 能力注入。
76
+ */
77
+ memory?: MemoryPluginOptions;
78
+
79
+ /**
80
+ * shell plugin 的可选 runtime 参数。
81
+ */
82
+ shell?: ShellPluginOptions;
83
+ }
84
+
39
85
  /**
40
86
  * 创建完整内建 plugin 实例集合。
41
87
  */
42
- export function createBuiltinPlugins(): BasePlugin[] {
43
- return BUILTIN_PLUGIN_CLASSES.map((PluginClass) => new PluginClass());
88
+ export function createBuiltinPlugins(options: BuiltinPluginOptions = {}): BasePlugin[] {
89
+ const plugins = BUILTIN_PLUGIN_CLASSES.map((PluginClass) =>
90
+ PluginClass === TaskPlugin
91
+ ? new TaskPlugin(options.task)
92
+ : PluginClass === MemoryPlugin
93
+ ? new MemoryPlugin(options.memory)
94
+ : PluginClass === ShellPlugin
95
+ ? new ShellPlugin(options.shell)
96
+ : new PluginClass(),
97
+ );
98
+ if (options.image?.image_create && options.image?.image_result) {
99
+ plugins.push(new ImagePlugin(options.image));
100
+ }
101
+ if (options.asr?.asr) {
102
+ plugins.push(new AsrPlugin(options.asr));
103
+ }
104
+ if (options.tts?.tts) {
105
+ plugins.push(new TtsPlugin(options.tts));
106
+ }
107
+ return plugins;
44
108
  }
@@ -30,6 +30,7 @@ import type { ContactPingResponse } from "@/contact/types/ContactCheck.js";
30
30
  import type { ContactChatResponse } from "@/contact/types/ContactChat.js";
31
31
  import type { AgentContact } from "@/contact/types/Contact.js";
32
32
  import type { SaveContactInboxShareInput } from "@/contact/types/ContactShare.js";
33
+ import type { ContactPluginOptions } from "@/contact/types/ContactPluginOptions.js";
33
34
  import {
34
35
  appendContactMessage,
35
36
  createStableContactId,
@@ -145,8 +146,14 @@ export class ContactPlugin extends BasePlugin {
145
146
  */
146
147
  readonly actions: PluginActions;
147
148
 
148
- constructor() {
149
+ /**
150
+ * 当前实例持有的显式配置。
151
+ */
152
+ public readonly options: ContactPluginOptions;
153
+
154
+ constructor(options?: ContactPluginOptions) {
149
155
  super();
156
+ this.options = options || {};
150
157
  this.actions = createContactActions({
151
158
  link: async (context, payload) =>
152
159
  (await this.link(context, payload)) as unknown as JsonValue,
@@ -164,11 +171,6 @@ export class ContactPlugin extends BasePlugin {
164
171
  remoteShare: async (context, payload) =>
165
172
  (await this.remoteShare(context, payload)) as unknown as JsonValue,
166
173
  });
167
-
168
- this.lifecycle = {
169
- start: () => undefined,
170
- stop: () => undefined,
171
- };
172
174
  }
173
175
 
174
176
  /**
@@ -180,10 +182,16 @@ export class ContactPlugin extends BasePlugin {
180
182
 
181
183
  private async link(context: AgentContext, payload: ContactLinkCommandPayload) {
182
184
  const now = Date.now();
183
- const ttlSeconds = Math.max(60, Number(payload.ttlSeconds || 600));
185
+ const ttlSeconds = Math.max(
186
+ 60,
187
+ Number(payload.ttlSeconds || this.options.ttlSeconds || 600),
188
+ );
184
189
  const linkId = createContactId("link");
185
190
  const secret = createContactToken();
186
- const endpoint = await resolveSelfEndpoint(context, payload.endpoint);
191
+ const endpoint = await resolveSelfEndpoint(
192
+ context,
193
+ payload.endpoint || this.options.endpoint,
194
+ );
187
195
  const agentName = getAgentName(context);
188
196
 
189
197
  await saveContactLinkRecord(context.rootPath, {
@@ -228,7 +236,7 @@ export class ContactPlugin extends BasePlugin {
228
236
  targetReachability === "loopback" ||
229
237
  targetReachability === "private";
230
238
  const requesterEndpointCandidate = shouldResolveRequesterEndpoint
231
- ? await resolveSelfEndpoint(context, payload.endpoint)
239
+ ? await resolveSelfEndpoint(context, payload.endpoint || this.options.endpoint)
232
240
  : undefined;
233
241
  const callbackDecision = buildContactApproveCallbackDecision({
234
242
  targetEndpoint: parsed.endpoint,
@@ -0,0 +1,30 @@
1
+ /**
2
+ * ContactPluginOptions:ContactPlugin 构造参数。
3
+ *
4
+ * 关键点(中文)
5
+ * - 这里只保留 agent 运行时真正需要的显式配置。
6
+ * - contact token、link secret 等协议密钥都由运行时自动生成,不从 constructor 传入。
7
+ */
8
+
9
+ /**
10
+ * ContactPlugin 构造参数。
11
+ */
12
+ export interface ContactPluginOptions {
13
+ /**
14
+ * 当前 agent 对外可访问的 HTTP endpoint。
15
+ *
16
+ * 说明(中文)
17
+ * - 传入后会优先写入 `contact link` 生成的一次性联系码。
18
+ * - 适合反向代理、tunnel、公网域名等自动探测不可靠的环境。
19
+ */
20
+ endpoint?: string;
21
+
22
+ /**
23
+ * 默认 link 有效秒数。
24
+ *
25
+ * 说明(中文)
26
+ * - `contact link` action 没有显式传 `ttlSeconds` 时使用该值。
27
+ * - 最终运行时仍会强制不少于 60 秒,避免生成过短的人工转交 code。
28
+ */
29
+ ttlSeconds?: number;
30
+ }
package/src/index.ts CHANGED
@@ -11,8 +11,12 @@ export {
11
11
  BUILTIN_PLUGIN_CLASSES,
12
12
  createBuiltinPlugins,
13
13
  } from "./BuiltinPlugins.js";
14
- export type { BuiltinPluginClass } from "./BuiltinPlugins.js";
14
+ export type {
15
+ BuiltinPluginClass,
16
+ BuiltinPluginOptions,
17
+ } from "./BuiltinPlugins.js";
15
18
  export { ChatPlugin } from "./chat/ChatPlugin.js";
19
+ export { ContactPlugin } from "./contact/ContactPlugin.js";
16
20
  export {
17
21
  FeishuChannel,
18
22
  QqChannel,
@@ -25,6 +29,9 @@ export { WebPlugin } from "./web/Plugin.js";
25
29
  export { AsrPlugin } from "./asr/Plugin.js";
26
30
  export { TtsPlugin } from "./tts/Plugin.js";
27
31
  export { WorkboardPlugin } from "./workboard/Plugin.js";
32
+ export { TaskPlugin } from "./task/TaskPlugin.js";
33
+ export { MemoryPlugin } from "./memory/MemoryPlugin.js";
34
+ export { ShellPlugin } from "./shell/ShellPlugin.js";
28
35
  export {
29
36
  listChatAuthorizationRoles,
30
37
  readChatAuthorizationConfigSync,
@@ -54,6 +61,39 @@ export type {
54
61
  ChatChannelRuntimePatch,
55
62
  ChatPluginOptions,
56
63
  } from "./chat/types/ChatPluginOptions.js";
64
+ export type { ContactPluginOptions } from "./contact/types/ContactPluginOptions.js";
65
+ export type { TaskPluginOptions } from "./task/types/TaskPluginOptions.js";
66
+ export type {
67
+ ResolvedShellPluginOptions,
68
+ ShellPluginOptions,
69
+ } from "./shell/types/ShellPluginOptions.js";
70
+ export type {
71
+ MemoryActionPayload,
72
+ MemoryDefaults,
73
+ MemoryDigestHandler,
74
+ MemoryDigestHandlerInput,
75
+ MemoryDigestHandlerOutput,
76
+ MemoryDigestPayload,
77
+ MemoryDigestResponse,
78
+ MemoryPluginOptions,
79
+ MemoryReadPayload,
80
+ MemoryReadResponse,
81
+ MemoryRememberPayload,
82
+ MemoryRememberResponse,
83
+ MemoryReviseHandler,
84
+ MemoryReviseHandlerInput,
85
+ MemoryReviseHandlerOutput,
86
+ MemoryRevisePayload,
87
+ MemoryReviseResponse,
88
+ MemorySearchMode,
89
+ MemorySearchPayload,
90
+ MemorySearchResponse,
91
+ MemorySearchResultItem,
92
+ MemorySourceStat,
93
+ MemorySourceType,
94
+ MemoryStatusResponse,
95
+ MemoryWikiPageDraft,
96
+ } from "./memory/types/Memory.js";
57
97
  export type {
58
98
  AsrPluginInput,
59
99
  AsrPluginOptions,