@zhin.js/agent 1.1.9 → 1.1.11

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 (114) hide show
  1. package/lib/activity-feedback/adapter-integration.d.ts.map +1 -1
  2. package/lib/activity-feedback/adapter-integration.js +6 -8
  3. package/lib/activity-feedback/adapter-integration.js.map +1 -1
  4. package/lib/builtin/generate-image-tool.d.ts +1 -1
  5. package/lib/builtin/generate-image-tool.d.ts.map +1 -1
  6. package/lib/builtin/generate-image-tool.js +3 -3
  7. package/lib/builtin/generate-image-tool.js.map +1 -1
  8. package/lib/builtins/builtin-tool-service.d.ts +28 -0
  9. package/lib/builtins/builtin-tool-service.d.ts.map +1 -0
  10. package/lib/builtins/builtin-tool-service.js +63 -0
  11. package/lib/builtins/builtin-tool-service.js.map +1 -0
  12. package/lib/config/zhin-agent-config.d.ts +4 -0
  13. package/lib/config/zhin-agent-config.d.ts.map +1 -1
  14. package/lib/config/zhin-agent-defaults.d.ts.map +1 -1
  15. package/lib/config/zhin-agent-defaults.js +2 -0
  16. package/lib/config/zhin-agent-defaults.js.map +1 -1
  17. package/lib/core/agent-core-run.js +1 -1
  18. package/lib/core/agent-core-run.js.map +1 -1
  19. package/lib/core/turn-event-mapper.d.ts +3 -1
  20. package/lib/core/turn-event-mapper.d.ts.map +1 -1
  21. package/lib/core/turn-event-mapper.js +12 -2
  22. package/lib/core/turn-event-mapper.js.map +1 -1
  23. package/lib/event/turn-event.d.ts +6 -1
  24. package/lib/event/turn-event.d.ts.map +1 -1
  25. package/lib/event/turn-event.js.map +1 -1
  26. package/lib/index.d.ts +11 -1
  27. package/lib/index.d.ts.map +1 -1
  28. package/lib/index.js +7 -0
  29. package/lib/index.js.map +1 -1
  30. package/lib/orchestrator/types.d.ts +9 -0
  31. package/lib/orchestrator/types.d.ts.map +1 -1
  32. package/lib/plugin-runtime/deferred-capability-plan.d.ts.map +1 -1
  33. package/lib/plugin-runtime/deferred-capability-plan.js +6 -0
  34. package/lib/plugin-runtime/deferred-capability-plan.js.map +1 -1
  35. package/lib/plugin-runtime/full-agent-turn-engine.d.ts.map +1 -1
  36. package/lib/plugin-runtime/full-agent-turn-engine.js +144 -21
  37. package/lib/plugin-runtime/full-agent-turn-engine.js.map +1 -1
  38. package/lib/prompt/define-agent-prompt-section.d.ts +29 -0
  39. package/lib/prompt/define-agent-prompt-section.d.ts.map +1 -0
  40. package/lib/prompt/define-agent-prompt-section.js +22 -0
  41. package/lib/prompt/define-agent-prompt-section.js.map +1 -0
  42. package/lib/prompt/discover-prompt-sections.d.ts +21 -0
  43. package/lib/prompt/discover-prompt-sections.d.ts.map +1 -0
  44. package/lib/prompt/discover-prompt-sections.js +49 -0
  45. package/lib/prompt/discover-prompt-sections.js.map +1 -0
  46. package/lib/prompt/index.d.ts +5 -0
  47. package/lib/prompt/index.d.ts.map +1 -1
  48. package/lib/prompt/index.js +3 -0
  49. package/lib/prompt/index.js.map +1 -1
  50. package/lib/prompt/prompt-assembly-registry.d.ts +6 -0
  51. package/lib/prompt/prompt-assembly-registry.d.ts.map +1 -1
  52. package/lib/prompt/prompt-assembly-registry.js +13 -0
  53. package/lib/prompt/prompt-assembly-registry.js.map +1 -1
  54. package/lib/prompt/prompt-section-loader.d.ts +27 -0
  55. package/lib/prompt/prompt-section-loader.d.ts.map +1 -0
  56. package/lib/prompt/prompt-section-loader.js +75 -0
  57. package/lib/prompt/prompt-section-loader.js.map +1 -0
  58. package/lib/seam/index.d.ts +8 -0
  59. package/lib/seam/index.d.ts.map +1 -0
  60. package/lib/seam/index.js +4 -0
  61. package/lib/seam/index.js.map +1 -0
  62. package/lib/seam/seam-integration.d.ts +46 -0
  63. package/lib/seam/seam-integration.d.ts.map +1 -0
  64. package/lib/seam/seam-integration.js +70 -0
  65. package/lib/seam/seam-integration.js.map +1 -0
  66. package/lib/seam/seam-provider.d.ts +63 -0
  67. package/lib/seam/seam-provider.d.ts.map +1 -0
  68. package/lib/seam/seam-provider.js +66 -0
  69. package/lib/seam/seam-provider.js.map +1 -0
  70. package/lib/seam/skill-service.d.ts +49 -0
  71. package/lib/seam/skill-service.d.ts.map +1 -0
  72. package/lib/seam/skill-service.js +8 -0
  73. package/lib/seam/skill-service.js.map +1 -0
  74. package/lib/seam/tokens.d.ts +8 -0
  75. package/lib/seam/tokens.d.ts.map +1 -0
  76. package/lib/seam/tokens.js +5 -0
  77. package/lib/seam/tokens.js.map +1 -0
  78. package/lib/seam/tool-service.d.ts +58 -0
  79. package/lib/seam/tool-service.d.ts.map +1 -0
  80. package/lib/seam/tool-service.js +8 -0
  81. package/lib/seam/tool-service.js.map +1 -0
  82. package/lib/skill/skill-registry-as-service.d.ts +29 -0
  83. package/lib/skill/skill-registry-as-service.d.ts.map +1 -0
  84. package/lib/skill/skill-registry-as-service.js +53 -0
  85. package/lib/skill/skill-registry-as-service.js.map +1 -0
  86. package/lib/turn/cancel-intent.d.ts +2 -0
  87. package/lib/turn/cancel-intent.d.ts.map +1 -0
  88. package/lib/turn/cancel-intent.js +5 -0
  89. package/lib/turn/cancel-intent.js.map +1 -0
  90. package/lib/turn/index.d.ts +2 -0
  91. package/lib/turn/index.d.ts.map +1 -1
  92. package/lib/turn/index.js +2 -0
  93. package/lib/turn/index.js.map +1 -1
  94. package/lib/turn/prompt-controller.d.ts +2 -0
  95. package/lib/turn/prompt-controller.d.ts.map +1 -1
  96. package/lib/turn/prompt-controller.js +9 -0
  97. package/lib/turn/prompt-controller.js.map +1 -1
  98. package/lib/turn/trigger-cancelled-error.d.ts +10 -0
  99. package/lib/turn/trigger-cancelled-error.d.ts.map +1 -0
  100. package/lib/turn/trigger-cancelled-error.js +19 -0
  101. package/lib/turn/trigger-cancelled-error.js.map +1 -0
  102. package/lib/turn/turn-terminal.d.ts.map +1 -1
  103. package/lib/turn/turn-terminal.js +4 -0
  104. package/lib/turn/turn-terminal.js.map +1 -1
  105. package/lib/typing-indicator/index.d.ts.map +1 -1
  106. package/lib/typing-indicator/index.js +3 -6
  107. package/lib/typing-indicator/index.js.map +1 -1
  108. package/lib/typing-indicator/integration.d.ts.map +1 -1
  109. package/lib/typing-indicator/integration.js +6 -9
  110. package/lib/typing-indicator/integration.js.map +1 -1
  111. package/lib/zhin-agent/index.d.ts.map +1 -1
  112. package/lib/zhin-agent/index.js +8 -0
  113. package/lib/zhin-agent/index.js.map +1 -1
  114. package/package.json +7 -7
@@ -0,0 +1,49 @@
1
+ import * as path from 'node:path';
2
+ import { getLogger } from '@zhin.js/logger';
3
+ import { PromptSectionLoader } from './prompt-section-loader.js';
4
+ const logger = getLogger('PromptSectionDiscovery');
5
+ const CONVENTION_SUBDIR = 'agent/prompt-sections';
6
+ /**
7
+ * 从一批插件根目录中发现并注册提示词节点。
8
+ *
9
+ * @returns 成功注册的节点总数
10
+ */
11
+ export async function discoverAndRegisterPromptSections(pluginRootDirs, registry, options) {
12
+ const loader = new PromptSectionLoader();
13
+ const subdir = options?.subdir ?? CONVENTION_SUBDIR;
14
+ let count = 0;
15
+ for (const root of pluginRootDirs) {
16
+ const dirPath = path.join(root, subdir);
17
+ const sections = await loader.loadFromDir(dirPath, { strict: options?.strict });
18
+ await loader.registerToRegistry(sections, registry);
19
+ count += sections.length;
20
+ }
21
+ return count;
22
+ }
23
+ /**
24
+ * 在 Agent 初始化时调用,自动从 ctx 中获取所有插件根目录,
25
+ * 扫描 `agent/prompt-sections/` 目录并注册到 registry。
26
+ *
27
+ * ctx 需要提供 `getPluginRoots()` 或 `plugins`(含 `root` 属性)。
28
+ */
29
+ export async function bootstrapPromptSections(ctx, registry, options) {
30
+ let roots;
31
+ if (typeof ctx.getPluginRoots === 'function') {
32
+ roots = ctx.getPluginRoots();
33
+ }
34
+ else if (Array.isArray(ctx.plugins)) {
35
+ roots = ctx.plugins
36
+ .map(p => p.root)
37
+ .filter((r) => typeof r === 'string');
38
+ }
39
+ else {
40
+ roots = [];
41
+ }
42
+ if (roots.length === 0) {
43
+ logger.debug('[bootstrapPromptSections] no plugin roots found — skipping discovery');
44
+ return;
45
+ }
46
+ const count = await discoverAndRegisterPromptSections(roots, registry, options);
47
+ logger.debug(`[bootstrapPromptSections] discovered ${count} prompt section(s) from ${roots.length} plugin(s)`);
48
+ }
49
+ //# sourceMappingURL=discover-prompt-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover-prompt-sections.js","sourceRoot":"","sources":["../../src/prompt/discover-prompt-sections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAmC,MAAM,4BAA4B,CAAC;AAGlG,MAAM,MAAM,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAEnD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,cAAwB,EACxB,QAAgC,EAChC,OAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,iBAAiB,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAGC,EACD,QAAgC,EAChC,OAAoC;IAEpC,IAAI,KAAe,CAAC;IAEpB,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QAC7C,KAAK,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,KAAK,GAAG,GAAG,CAAC,OAAO;aAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,iCAAiC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChF,MAAM,CAAC,KAAK,CAAC,wCAAwC,KAAK,2BAA2B,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;AACjH,CAAC"}
@@ -10,6 +10,11 @@ export type { PromptAssemblyEntry, PromptAssemblySection, PromptSectionRegistry,
10
10
  export { promptAssemblyToken } from './tokens.js';
11
11
  export type { PromptAssemblyToken, PromptAssemblyResource } from './tokens.js';
12
12
  export type { AgentPromptProfile } from './turn-prompt-profile.js';
13
+ export { defineAgentPromptSection, } from './define-agent-prompt-section.js';
14
+ export type { AgentPromptSectionConfig } from './define-agent-prompt-section.js';
15
+ export { PromptSectionLoader, } from './prompt-section-loader.js';
16
+ export type { PromptSectionLoaderOptions } from './prompt-section-loader.js';
17
+ export { discoverAndRegisterPromptSections, bootstrapPromptSections, } from './discover-prompt-sections.js';
13
18
  export { buildDisciplinedPrompt, describeAgentPathPromptSections, buildAgentPathSystemPrompt, buildChatPathSystemPrompt, buildMultimodalVisionSystemPrompt, buildAgentUserMessage, } from './assembly.js';
14
19
  export * from './prompt-builder.js';
15
20
  export * from './templates.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,iCAAiC,EACjC,mCAAmC,EACnC,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EACL,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC1B,yBAAyB,EACzB,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,iCAAiC,EACjC,mCAAmC,EACnC,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EACL,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC/E,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EACL,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAEjF,OAAO,EACL,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC1B,yBAAyB,EACzB,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
@@ -5,6 +5,9 @@ export { resolveWorkspacePrompt, clearWorkspacePromptCache, } from './workspace-
5
5
  export { FIXED_DISCIPLINE_RULES, buildUserMessageWithHistory, describePromptSectionsForDebug, buildRichSystemPrompt, buildLiteSystemPromptWithPlatform, createDefaultPromptAssemblyRegistry, enforcePromptBudget, } from './system-prompt.js';
6
6
  export { PromptAssemblyRegistry, } from './prompt-assembly-registry.js';
7
7
  export { promptAssemblyToken } from './tokens.js';
8
+ export { defineAgentPromptSection, } from './define-agent-prompt-section.js';
9
+ export { PromptSectionLoader, } from './prompt-section-loader.js';
10
+ export { discoverAndRegisterPromptSections, bootstrapPromptSections, } from './discover-prompt-sections.js';
8
11
  export { buildDisciplinedPrompt, describeAgentPathPromptSections, buildAgentPathSystemPrompt, buildChatPathSystemPrompt, buildMultimodalVisionSystemPrompt, buildAgentUserMessage, } from './assembly.js';
9
12
  export * from './prompt-builder.js';
10
13
  export * from './templates.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,iCAAiC,EACjC,mCAAmC,EACnC,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC1B,yBAAyB,EACzB,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,iCAAiC,EACjC,mCAAmC,EACnC,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,OAAO,EACL,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC1B,yBAAyB,EACzB,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC"}
@@ -14,7 +14,13 @@ export interface PromptSectionRegistry {
14
14
  }
15
15
  export declare class PromptAssemblyRegistry implements PromptSectionRegistry {
16
16
  private readonly sections;
17
+ private onRegisterCallbacks;
17
18
  register(id: string, section: PromptAssemblySection): void;
19
+ /**
20
+ * 注册回调函数,在新节点注册时调用(用于 debug/logging)。
21
+ * 返回取消注册的函数。
22
+ */
23
+ onRegister(callback: (id: string, section: PromptAssemblySection) => void): () => void;
18
24
  merge(other: PromptAssemblyRegistry): this;
19
25
  snapshot(): Array<[string, PromptAssemblySection]>;
20
26
  entries(ctx?: RichSystemPromptContext): PromptAssemblyEntry[];
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-assembly-registry.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-assembly-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,CAAC,CAAC,GAAG,EAAE,uBAAuB,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;IAC3E,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,EAAE,uBAAuB,GAAG,aAAa,EAAE,CAAC;IACrD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAAC;CAChE;AAED,qBAAa,sBAAuB,YAAW,qBAAqB;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IAErE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAI1D,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAO1C,QAAQ,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAIlD,OAAO,CAAC,GAAG,CAAC,EAAE,uBAAuB,GAAG,mBAAmB,EAAE;IAU7D,IAAI,CAAC,GAAG,CAAC,EAAE,uBAAuB,GAAG,aAAa,EAAE;IAIpD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,uBAAuB,GAAG,MAAM;IAU9D,OAAO,CAAC,cAAc;CAQvB"}
1
+ {"version":3,"file":"prompt-assembly-registry.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-assembly-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN,CAAC,CAAC,GAAG,EAAE,uBAAuB,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAElE,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;IAC3E,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,EAAE,uBAAuB,GAAG,aAAa,EAAE,CAAC;IACrD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,uBAAuB,GAAG,MAAM,CAAC;CAChE;AAED,qBAAa,sBAAuB,YAAW,qBAAqB;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IACrE,OAAO,CAAC,mBAAmB,CAAmE;IAE9F,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAK1D;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI;IAOtF,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAO1C,QAAQ,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAIlD,OAAO,CAAC,GAAG,CAAC,EAAE,uBAAuB,GAAG,mBAAmB,EAAE;IAU7D,IAAI,CAAC,GAAG,CAAC,EAAE,uBAAuB,GAAG,aAAa,EAAE;IAIpD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,uBAAuB,GAAG,MAAM;IAU9D,OAAO,CAAC,cAAc;CAQvB"}
@@ -1,8 +1,21 @@
1
1
  import { enforcePromptBudget } from './prompt-budget.js';
2
2
  export class PromptAssemblyRegistry {
3
3
  sections = new Map();
4
+ onRegisterCallbacks = [];
4
5
  register(id, section) {
5
6
  this.sections.set(id, section);
7
+ for (const cb of this.onRegisterCallbacks)
8
+ cb(id, section);
9
+ }
10
+ /**
11
+ * 注册回调函数,在新节点注册时调用(用于 debug/logging)。
12
+ * 返回取消注册的函数。
13
+ */
14
+ onRegister(callback) {
15
+ this.onRegisterCallbacks.push(callback);
16
+ return () => {
17
+ this.onRegisterCallbacks = this.onRegisterCallbacks.filter(cb => cb !== callback);
18
+ };
6
19
  }
7
20
  merge(other) {
8
21
  for (const [id, section] of other.snapshot()) {
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-assembly-registry.js","sourceRoot":"","sources":["../../src/prompt/prompt-assembly-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAsBzD,MAAM,OAAO,sBAAsB;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAErE,QAAQ,CAAC,EAAU,EAAE,OAA8B;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAA6B;QACjC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAA6B;QACnC,OAAO,IAAI,CAAC,QAAQ,EAAE;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;aAC7D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;YAChC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CAAC,GAA6B;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,QAAgB,EAAE,GAA6B;QACnD,OAAO,mBAAmB,CACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC,EACH,QAAQ,CACT,CAAC;IACJ,CAAC;IAEO,cAAc,CACpB,OAA6B,EAC7B,GAA6B;QAE7B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"prompt-assembly-registry.js","sourceRoot":"","sources":["../../src/prompt/prompt-assembly-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAsBzD,MAAM,OAAO,sBAAsB;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC7D,mBAAmB,GAAgE,EAAE,CAAC;IAE9F,QAAQ,CAAC,EAAU,EAAE,OAA8B;QACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,mBAAmB;YAAE,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,QAA8D;QACvE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACpF,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAA6B;QACjC,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAA6B;QACnC,OAAO,IAAI,CAAC,QAAQ,EAAE;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;aAC7D,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;YAChC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CAAC,GAA6B;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,QAAgB,EAAE,GAA6B;QACnD,OAAO,mBAAmB,CACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC,EACH,QAAQ,CACT,CAAC;IACJ,CAAC;IAEO,cAAc,CACpB,OAA6B,EAC7B,GAA6B;QAE7B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { AgentPromptSectionConfig } from './define-agent-prompt-section.js';
2
+ import type { PromptAssemblyRegistry } from './prompt-assembly-registry.js';
3
+ export interface PromptSectionLoaderOptions {
4
+ /**
5
+ * 相对于插件根目录的 glob 模式
6
+ * @default 'agent/prompt-sections'
7
+ */
8
+ subdir?: string;
9
+ /**
10
+ * 是否在发现失败时抛出错误
11
+ * @default false
12
+ */
13
+ strict?: boolean;
14
+ }
15
+ export declare class PromptSectionLoader {
16
+ /**
17
+ * 从指定目录路径加载所有提示词节点文件。
18
+ *
19
+ * @param dirPath 绝对路径,对应 `agent/prompt-sections/` 目录
20
+ */
21
+ loadFromDir(dirPath: string, options?: Pick<PromptSectionLoaderOptions, 'strict'>): Promise<AgentPromptSectionConfig[]>;
22
+ /**
23
+ * 将提示词节点列表批量注册到 registry。
24
+ */
25
+ registerToRegistry(sections: AgentPromptSectionConfig[], registry: PromptAssemblyRegistry): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=prompt-section-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-section-loader.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-section-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAI5E,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAYD,qBAAa,mBAAmB;IAC9B;;;;OAIG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC,GACnD,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAyCtC;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,wBAAwB,EAAE,EACpC,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC;CAajB"}
@@ -0,0 +1,75 @@
1
+ import * as path from 'node:path';
2
+ import { getLogger } from '@zhin.js/logger';
3
+ const logger = getLogger('PromptSectionLoader');
4
+ function isValidPromptSection(obj) {
5
+ if (!obj || typeof obj !== 'object')
6
+ return false;
7
+ const s = obj;
8
+ return (typeof s['id'] === 'string' &&
9
+ typeof s['title'] === 'string' &&
10
+ typeof s['content'] === 'string');
11
+ }
12
+ export class PromptSectionLoader {
13
+ /**
14
+ * 从指定目录路径加载所有提示词节点文件。
15
+ *
16
+ * @param dirPath 绝对路径,对应 `agent/prompt-sections/` 目录
17
+ */
18
+ async loadFromDir(dirPath, options) {
19
+ const { default: fs } = await import('node:fs');
20
+ const sections = [];
21
+ let files;
22
+ try {
23
+ // Node recursive readdir may be typed as Dirent[] depending on overloads; normalize to relative paths.
24
+ const entries = fs.readdirSync(dirPath, { recursive: true });
25
+ files = entries
26
+ .map((entry) => {
27
+ if (typeof entry === 'string')
28
+ return entry;
29
+ const parent = entry.parentPath ?? entry.path;
30
+ return parent ? path.relative(dirPath, path.join(parent, entry.name)) : entry.name;
31
+ })
32
+ .filter((f) => f.endsWith('.ts') || f.endsWith('.js'));
33
+ }
34
+ catch {
35
+ // 目录不存在时静默忽略
36
+ return sections;
37
+ }
38
+ for (const rel of files) {
39
+ const filePath = path.join(dirPath, rel);
40
+ try {
41
+ const mod = await import(filePath);
42
+ const section = mod.default;
43
+ if (isValidPromptSection(section)) {
44
+ sections.push(section);
45
+ }
46
+ else {
47
+ logger.warn(`[PromptSectionLoader] ${filePath} default export is not a valid AgentPromptSectionConfig — skipped`);
48
+ }
49
+ }
50
+ catch (err) {
51
+ if (options?.strict)
52
+ throw err;
53
+ logger.warn(`[PromptSectionLoader] failed to load ${filePath}: ${err.message}`);
54
+ }
55
+ }
56
+ return sections;
57
+ }
58
+ /**
59
+ * 将提示词节点列表批量注册到 registry。
60
+ */
61
+ async registerToRegistry(sections, registry) {
62
+ for (const section of sections) {
63
+ registry.register(section.id, {
64
+ layer: section.layer ?? 'context',
65
+ title: section.title,
66
+ content: section.content,
67
+ priority: section.priority ?? 50,
68
+ truncatable: section.truncatable ?? true,
69
+ maxChars: section.maxChars,
70
+ metadata: section.metadata,
71
+ });
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=prompt-section-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-section-loader.js","sourceRoot":"","sources":["../../src/prompt/prompt-section-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { SeamProviderRegistry } from './seam-provider.js';
2
+ export type { SeamProvider, SeamScope } from './seam-provider.js';
3
+ export type { ToolService, ToolServiceProvider, ToolSchema, ToolExecutionResult, } from './tool-service.js';
4
+ export type { SkillService, SkillServiceProvider, SkillMetadata, SkillInvocationRequest, SkillInvocationResult, } from './skill-service.js';
5
+ export { SeamIntegration } from './seam-integration.js';
6
+ export { seamIntegrationToken } from './tokens.js';
7
+ export type { SeamIntegrationToken } from './tokens.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/seam/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAElE,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { SeamProviderRegistry } from './seam-provider.js';
2
+ export { SeamIntegration } from './seam-integration.js';
3
+ export { seamIntegrationToken } from './tokens.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/seam/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAkB1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 统一的能力接缝集成器
3
+ *
4
+ * 管理 Tool / Skill 两类能力的 Provider Registry,并提供便利方法。
5
+ * 在 ZhinAgent 的作用域中提供,供 Consumer(AgentDispatcher、PromptAssemblyRegistry)使用。
6
+ */
7
+ import { SeamProviderRegistry, type SeamScope } from './seam-provider.js';
8
+ import type { ToolService, ToolSchema, ToolExecutionResult } from './tool-service.js';
9
+ import type { SkillService, SkillMetadata, SkillInvocationResult } from './skill-service.js';
10
+ export declare class SeamIntegration {
11
+ readonly toolRegistry: SeamProviderRegistry<ToolService>;
12
+ readonly skillRegistry: SeamProviderRegistry<SkillService>;
13
+ /**
14
+ * 在指定作用域下注册一个 Tool Service
15
+ */
16
+ registerToolService(scope: SeamScope | 'global', service: ToolService): void;
17
+ /**
18
+ * 获取指定作用域下的所有 Tool Schema
19
+ *
20
+ * 自动遍历所有注册的 Tool Services,收集 schemas。
21
+ */
22
+ getToolSchemas(scope: SeamScope | 'global'): ToolSchema[];
23
+ /**
24
+ * 执行一个工具
25
+ *
26
+ * 自动查找提供该工具的 Service,然后执行。
27
+ */
28
+ executeTool(scope: SeamScope | 'global', toolName: string, args: unknown): Promise<ToolExecutionResult>;
29
+ /**
30
+ * 在指定作用域下注册一个 Skill Service
31
+ */
32
+ registerSkillService(scope: SeamScope | 'global', service: SkillService): void;
33
+ /**
34
+ * 获取指定作用域下的所有 Skill 元数据
35
+ *
36
+ * 自动遍历所有注册的 Skill Services,收集 catalogs。
37
+ */
38
+ getSkillCatalog(scope: SeamScope | 'global'): Promise<SkillMetadata[]>;
39
+ /**
40
+ * 调用一个 Skill
41
+ *
42
+ * 自动查找提供该 Skill 的 Service,然后调用。
43
+ */
44
+ invokeSkill(scope: SeamScope | 'global', skillId: string, input: unknown): Promise<SkillInvocationResult>;
45
+ }
46
+ //# sourceMappingURL=seam-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seam-integration.d.ts","sourceRoot":"","sources":["../../src/seam/seam-integration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,eAAe;IAC1B,QAAQ,CAAC,YAAY,oCAA2C;IAChE,QAAQ,CAAC,aAAa,qCAA4C;IAIlE;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAI5E;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,EAAE;IAMzD;;;;OAIG;IACG,WAAW,CACf,KAAK,EAAE,SAAS,GAAG,QAAQ,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,mBAAmB,CAAC;IAiB/B;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAI9E;;;;OAIG;IACG,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAO5E;;;;OAIG;IACG,WAAW,CACf,KAAK,EAAE,SAAS,GAAG,QAAQ,EAC3B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,qBAAqB,CAAC;CAYlC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * 统一的能力接缝集成器
3
+ *
4
+ * 管理 Tool / Skill 两类能力的 Provider Registry,并提供便利方法。
5
+ * 在 ZhinAgent 的作用域中提供,供 Consumer(AgentDispatcher、PromptAssemblyRegistry)使用。
6
+ */
7
+ import { SeamProviderRegistry } from './seam-provider.js';
8
+ export class SeamIntegration {
9
+ toolRegistry = new SeamProviderRegistry();
10
+ skillRegistry = new SeamProviderRegistry();
11
+ // ── Tool ────────────────────────────────────────────────────────────
12
+ /**
13
+ * 在指定作用域下注册一个 Tool Service
14
+ */
15
+ registerToolService(scope, service) {
16
+ this.toolRegistry.register(scope, service);
17
+ }
18
+ /**
19
+ * 获取指定作用域下的所有 Tool Schema
20
+ *
21
+ * 自动遍历所有注册的 Tool Services,收集 schemas。
22
+ */
23
+ getToolSchemas(scope) {
24
+ return this.toolRegistry
25
+ .getFor(scope)
26
+ .flatMap((service) => service.schema(scope));
27
+ }
28
+ /**
29
+ * 执行一个工具
30
+ *
31
+ * 自动查找提供该工具的 Service,然后执行。
32
+ */
33
+ async executeTool(scope, toolName, args) {
34
+ const provider = this.toolRegistry.find(scope, (service) => service.isAvailable?.(scope, toolName) !== false &&
35
+ service.schema(scope).some((s) => s.function.name === toolName));
36
+ if (!provider) {
37
+ return { success: false, error: `Tool not found: ${toolName}` };
38
+ }
39
+ return provider.execute(scope, toolName, args);
40
+ }
41
+ // ── Skill ────────────────────────────────────────────────────────────
42
+ /**
43
+ * 在指定作用域下注册一个 Skill Service
44
+ */
45
+ registerSkillService(scope, service) {
46
+ this.skillRegistry.register(scope, service);
47
+ }
48
+ /**
49
+ * 获取指定作用域下的所有 Skill 元数据
50
+ *
51
+ * 自动遍历所有注册的 Skill Services,收集 catalogs。
52
+ */
53
+ async getSkillCatalog(scope) {
54
+ const results = await Promise.all(this.skillRegistry.getFor(scope).map((service) => service.catalog(scope)));
55
+ return results.flat();
56
+ }
57
+ /**
58
+ * 调用一个 Skill
59
+ *
60
+ * 自动查找提供该 Skill 的 Service,然后调用。
61
+ */
62
+ async invokeSkill(scope, skillId, input) {
63
+ const provider = this.skillRegistry.find(scope, (service) => service.isAvailable?.(scope, skillId) !== false);
64
+ if (!provider) {
65
+ return { success: false, error: `Skill not found: ${skillId}` };
66
+ }
67
+ return provider.invoke(scope, { skillId, input });
68
+ }
69
+ }
70
+ //# sourceMappingURL=seam-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seam-integration.js","sourceRoot":"","sources":["../../src/seam/seam-integration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAkB,MAAM,oBAAoB,CAAC;AAQ1E,MAAM,OAAO,eAAe;IACjB,YAAY,GAAG,IAAI,oBAAoB,EAAe,CAAC;IACvD,aAAa,GAAG,IAAI,oBAAoB,EAAgB,CAAC;IAElE,uEAAuE;IAEvE;;OAEG;IACH,mBAAmB,CAAC,KAA2B,EAAE,OAAoB;QACnE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,KAA2B;QACxC,OAAO,IAAI,CAAC,YAAY;aACrB,MAAM,CAAC,KAAK,CAAC;aACb,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CACf,KAA2B,EAC3B,QAAgB,EAChB,IAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CACrC,KAAK,EACL,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,KAAK;YAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAClE,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,QAAQ,EAAE,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,wEAAwE;IAExE;;OAEG;IACH,oBAAoB,CAAC,KAA2B,EAAE,OAAqB;QACrE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,KAA2B;QAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC1E,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CACf,KAA2B,EAC3B,OAAe,EACf,KAAc;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACtC,KAAK,EACL,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,CAC7D,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,OAAO,EAAE,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * 能力接缝基类与注册表
3
+ *
4
+ * 所有 Service Provider(LLM / Tool / Skill)必须遵循此约束。
5
+ */
6
+ /**
7
+ * 能力接缝提供者基接口
8
+ *
9
+ * 定义所有 Service Provider 必须遵循的约束:
10
+ * 1. 声明身份(id + description)
11
+ * 2. 实现一个主操作接口(如 schema、invoke)
12
+ * 3. 支持作用域隔离(scoped per agent/session)
13
+ */
14
+ export interface SeamProvider {
15
+ /**
16
+ * 唯一标识符(建议格式:namespace:name)
17
+ * 例:llm:deepseek, tool:filesystem, skill:github
18
+ */
19
+ readonly id: string;
20
+ /**
21
+ * 人类可读的描述
22
+ */
23
+ readonly description: string;
24
+ /**
25
+ * 可选:该能力的平台/运行时标记
26
+ */
27
+ readonly tags?: string[];
28
+ /**
29
+ * 可选:该能力的版本
30
+ */
31
+ readonly version?: string;
32
+ }
33
+ export type SeamScope = string | symbol;
34
+ /**
35
+ * 能力接缝提供者注册表
36
+ *
37
+ * 支持作用域隔离、查询和消费方模式。
38
+ * 'global' 作用域的提供者对所有查询可见。
39
+ */
40
+ export declare class SeamProviderRegistry<T extends SeamProvider> {
41
+ private readonly providers;
42
+ /**
43
+ * 在指定作用域下注册一个 Service Provider
44
+ */
45
+ register(scope: SeamScope | 'global', provider: T): void;
46
+ /**
47
+ * 获取指定作用域下的所有提供者(包含 global 中的提供者)
48
+ */
49
+ getFor(scope: SeamScope | 'global'): T[];
50
+ /**
51
+ * 查询满足条件的首个提供者
52
+ */
53
+ find(scope: SeamScope | 'global', predicate: (p: T) => boolean): T | null;
54
+ /**
55
+ * 获取指定 ID 的提供者
56
+ */
57
+ getById(scope: SeamScope | 'global', id: string): T | null;
58
+ /**
59
+ * 移除已注册的提供者(返回是否实际移除)
60
+ */
61
+ remove(scope: SeamScope | 'global', id: string): boolean;
62
+ }
63
+ //# sourceMappingURL=seam-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seam-provider.d.ts","sourceRoot":"","sources":["../../src/seam/seam-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAMxC;;;;;GAKG;AACH,qBAAa,oBAAoB,CAAC,CAAC,SAAS,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IAEpD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAQxD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,CAAC,EAAE;IAQxC;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,CAAC,GAAG,IAAI;IAKzE;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI1D;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;CASzD"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 能力接缝基类与注册表
3
+ *
4
+ * 所有 Service Provider(LLM / Tool / Skill)必须遵循此约束。
5
+ */
6
+ function toKey(scope) {
7
+ return typeof scope === 'symbol' ? scope.toString() : scope;
8
+ }
9
+ /**
10
+ * 能力接缝提供者注册表
11
+ *
12
+ * 支持作用域隔离、查询和消费方模式。
13
+ * 'global' 作用域的提供者对所有查询可见。
14
+ */
15
+ export class SeamProviderRegistry {
16
+ providers = new Map();
17
+ /**
18
+ * 在指定作用域下注册一个 Service Provider
19
+ */
20
+ register(scope, provider) {
21
+ const key = toKey(scope);
22
+ if (!this.providers.has(key)) {
23
+ this.providers.set(key, []);
24
+ }
25
+ this.providers.get(key).push(provider);
26
+ }
27
+ /**
28
+ * 获取指定作用域下的所有提供者(包含 global 中的提供者)
29
+ */
30
+ getFor(scope) {
31
+ const key = toKey(scope);
32
+ const scoped = this.providers.get(key) ?? [];
33
+ if (key === 'global')
34
+ return scoped;
35
+ const global = this.providers.get('global') ?? [];
36
+ return [...global, ...scoped];
37
+ }
38
+ /**
39
+ * 查询满足条件的首个提供者
40
+ */
41
+ find(scope, predicate) {
42
+ const providers = this.getFor(scope);
43
+ return providers.find(predicate) ?? null;
44
+ }
45
+ /**
46
+ * 获取指定 ID 的提供者
47
+ */
48
+ getById(scope, id) {
49
+ return this.find(scope, (p) => p.id === id);
50
+ }
51
+ /**
52
+ * 移除已注册的提供者(返回是否实际移除)
53
+ */
54
+ remove(scope, id) {
55
+ const key = toKey(scope);
56
+ const list = this.providers.get(key);
57
+ if (!list)
58
+ return false;
59
+ const idx = list.findIndex((p) => p.id === id);
60
+ if (idx === -1)
61
+ return false;
62
+ list.splice(idx, 1);
63
+ return true;
64
+ }
65
+ }
66
+ //# sourceMappingURL=seam-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seam-provider.js","sourceRoot":"","sources":["../../src/seam/seam-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmCH,SAAS,KAAK,CAAC,KAAgB;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IACd,SAAS,GAAG,IAAI,GAAG,EAAe,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,KAA2B,EAAE,QAAW;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAA2B;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,GAAG,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,KAA2B,EAAE,SAA4B;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAA2B,EAAE,EAAU;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAA2B,EAAE,EAAU;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Skill Service Definition
3
+ *
4
+ * Skills 是更高层的能力,通常由多个 Tool 组合而成。
5
+ * 例:GitHub Skill = git tool + GitHub API tool + code analysis tool
6
+ */
7
+ import type { SeamProvider, SeamScope } from './seam-provider.js';
8
+ import type { SkillMetadata } from '../orchestrator/types.js';
9
+ export type { SkillMetadata };
10
+ /**
11
+ * Skill 调用请求
12
+ */
13
+ export interface SkillInvocationRequest {
14
+ skillId: string;
15
+ input: unknown;
16
+ context?: Record<string, unknown>;
17
+ }
18
+ /**
19
+ * Skill 调用结果
20
+ */
21
+ export interface SkillInvocationResult {
22
+ success: boolean;
23
+ output?: unknown;
24
+ error?: string;
25
+ metadata?: Record<string, unknown>;
26
+ }
27
+ /**
28
+ * Skill Service Definition
29
+ */
30
+ export interface SkillService extends SeamProvider {
31
+ /**
32
+ * 获取该 Service 提供的所有 Skill 元数据
33
+ */
34
+ catalog(scope: SeamScope | 'global'): Promise<SkillMetadata[]>;
35
+ /**
36
+ * 获取指定 Skill 的完整文档
37
+ */
38
+ describe(scope: SeamScope | 'global', skillId: string): Promise<string>;
39
+ /**
40
+ * 调用一个 Skill
41
+ */
42
+ invoke(scope: SeamScope | 'global', request: SkillInvocationRequest): Promise<SkillInvocationResult>;
43
+ /**
44
+ * 可选:Skill 是否在该作用域可用
45
+ */
46
+ isAvailable?(scope: SeamScope | 'global', skillId: string): boolean;
47
+ }
48
+ export type SkillServiceProvider = SkillService;
49
+ //# sourceMappingURL=skill-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-service.d.ts","sourceRoot":"","sources":["../../src/seam/skill-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExE;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,SAAS,GAAG,QAAQ,EAC3B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACrE;AAED,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Skill Service Definition
3
+ *
4
+ * Skills 是更高层的能力,通常由多个 Tool 组合而成。
5
+ * 例:GitHub Skill = git tool + GitHub API tool + code analysis tool
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=skill-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-service.js","sourceRoot":"","sources":["../../src/seam/skill-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 能力接缝 DI Token
3
+ */
4
+ import type { SeamIntegration } from './seam-integration.js';
5
+ export declare const seamIntegrationToken: unique symbol;
6
+ export type SeamIntegrationToken = typeof seamIntegrationToken;
7
+ export type { SeamIntegration };
8
+ //# sourceMappingURL=tokens.d.ts.map