@faapi/faapi 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -322,6 +322,31 @@ interface AgentConfig {
322
322
  * 默认值由 Phase 3.x 的 @faapi/agent 插件定义(如 3)。
323
323
  */
324
324
  maxAgentDepth?: number;
325
+ /**
326
+ * 启用 tracing 的全局默认值(默认 true)
327
+ *
328
+ * 开启时 `agent.run()` / `agent.stream()` 返回的 `result.trace` /
329
+ * `chunk.traceEvent` 填充结构化调用明细(按轮次组织的 LLM 调用、tool 调用、
330
+ * sub-agent 嵌套调用事件,含 timing 与 token 用量)。
331
+ *
332
+ * 三层覆盖优先级:`AgentRunOptions.enableTracing` > agent 自身配置 >
333
+ * 此全局配置 > 默认 `true`。
334
+ *
335
+ * 业务方在生产主路径(高 QPS 端点)显式设 `false` 关闭以零开销运行:
336
+ *
337
+ * ```ts
338
+ * import type { FaapiConfig } from '@faapi/faapi';
339
+ * export default {
340
+ * agent: {
341
+ * enableTracing: false,
342
+ * llms: { openai: { provider: 'openai', apiKey: '...', models: { 'gpt-4o': {} } } },
343
+ * },
344
+ * } satisfies FaapiConfig;
345
+ * ```
346
+ *
347
+ * 详见 `@faapi/agent` 的 [trace](../../agent/src/trace.md) 文档。
348
+ */
349
+ enableTracing?: boolean;
325
350
  }
326
351
  /**
327
352
  * faapi 配置文件类型
@@ -967,9 +992,9 @@ interface ToolPathMeta {
967
992
  * 返回 [AgentCore](../ast/extractAgentMetadata.md) 字段(name / description /
968
993
  * systemPrompt / tools / agents / model / maxTurns),**不含** `filePath` / `hasRun`。
969
994
  *
970
- * skill fallback:先查 [skillRegistry](./skillRegistry.ts) `getSkill`,
971
- * 命中返回 skill 元数据(运行时业务方动态注册的 DB-driven skill);
972
- * 未命中查文件 registry。
995
+ * 仅查文件 registry(编译期 `faapi-agents.js` 产物来源)。**不 fallback 到
996
+ * [skillRegistry](./skillRegistry.ts)**——skill agent 职责正交不耦合,
997
+ * skill 由业务方 plugin 内部使用,不参与 agent 查询链路。
973
998
  *
974
999
  * 用于 LLM-facing 场景(`agents` 参数注入、`asTool` 描述、
975
1000
  * `resolveAgentTools` / `resolveSubAgents` 解析)。
@@ -986,11 +1011,10 @@ declare function getAgent(name: string): AgentCore | undefined;
986
1011
  * 额外含 `filePath` / `hasRun`,供 `@faapi/agent` 子包 `loadAgentModule`
987
1012
  * 加载 handler.js 执行自定义 `run` 函数。
988
1013
  *
989
- * **不 fallback 到 skillRegistry**——DB skill 无源文件,不走 `loadAgentModule`。
990
1014
  * 调用方需先判断 `entry?.hasRun` 再决定是否加载 handler.js。
991
1015
  *
992
1016
  * @param name agent 名
993
- * @returns `AgentMetadata` 或 `undefined`(未注册 / DB skill 无文件)
1017
+ * @returns `AgentMetadata` 或 `undefined`(未注册)
994
1018
  */
995
1019
  declare function getAgentEntry(name: string): AgentMetadata | undefined;
996
1020
  /**
@@ -1029,9 +1053,7 @@ interface AgentToolDescriptor {
1029
1053
  *
1030
1054
  * agent 必须显式声明用哪些 tool,显式优于隐式。
1031
1055
  *
1032
- * skill fallback:通过 [getAgent](#getAgent) 自动发现 DB-driven skill,
1033
- * skill 的 `tools` 字段同样会被解析。DB skill 引用的 tool 必须在 toolRegistry
1034
- * 注册(文件型 tool 或未来 DB-driven tool)。
1056
+ * 通过 [getAgent](#getAgent) 查询文件型 agent,不 fallback 到 skillRegistry。
1035
1057
  *
1036
1058
  * `tools` 中未在 toolRegistry 找到的 tool 名静默跳过(tool 可选可用,不强制存在)。
1037
1059
  *
@@ -1046,10 +1068,10 @@ declare function resolveAgentTools(name: string): ToolMetadata[];
1046
1068
  * 解析 agent 可调用的子 agent 集合
1047
1069
  *
1048
1070
  * 读 `agent.agents` 字段([extractAgentMetadata](../ast/extractAgentMetadata.md)
1049
- * 提取的 `config.agents` 字面量列表),按名查找已注册 agent。
1071
+ * 提取的 `config.agents` 字面量列表),按名查找已注册文件型 agent。
1050
1072
  *
1051
- * skill fallback:通过 [getAgent](#getAgent) 自动发现 DB-driven skill。
1052
- * 父 agent 可以在 `agents` 列表里引用 DB skill 名,递归调用走相同链路。
1073
+ * fallback skillRegistry——skill 不参与 sub-agent 递归,
1074
+ * 父 agent `agents` 列表只能引用文件型 agent 名。
1053
1075
  *
1054
1076
  * 返回 `AgentCore[]`(LLM-facing 字段,供 `@faapi/agent` 子包包装为
1055
1077
  * `AgentToolDescriptor` 发给 LLM)。加载 sub-agent handler.js 执行 `run` 函数
package/dist/index.js CHANGED
@@ -1350,53 +1350,27 @@ function getTool(name) {
1350
1350
  return registry.get(name);
1351
1351
  }
1352
1352
 
1353
- // src/injection/skillRegistry.ts
1354
- var registry2 = /* @__PURE__ */ new Map();
1355
- function hydrateSkillRegistry(skills) {
1356
- const next = /* @__PURE__ */ new Map();
1357
- for (const skill of skills) {
1358
- next.set(skill.name, skill);
1359
- }
1360
- registry2 = next;
1361
- }
1362
- function clearSkillRegistry() {
1363
- registry2 = /* @__PURE__ */ new Map();
1364
- }
1365
- function upsertSkill(core) {
1366
- registry2.set(core.name, core);
1367
- }
1368
- function removeSkill(name) {
1369
- registry2.delete(name);
1370
- }
1371
- function getSkill(name) {
1372
- return registry2.get(name);
1373
- }
1374
- function listSkills() {
1375
- return Array.from(registry2.values());
1376
- }
1377
-
1378
1353
  // src/injection/agentRegistry.ts
1379
- var registry3 = /* @__PURE__ */ new Map();
1354
+ var registry2 = /* @__PURE__ */ new Map();
1380
1355
  function hydrateAgentRegistry(agents) {
1381
1356
  const next = /* @__PURE__ */ new Map();
1382
1357
  for (const agent of agents) {
1383
1358
  next.set(agent.name, agent);
1384
1359
  }
1385
- registry3 = next;
1360
+ registry2 = next;
1386
1361
  }
1387
1362
  function clearAgentRegistry() {
1388
- registry3 = /* @__PURE__ */ new Map();
1363
+ registry2 = /* @__PURE__ */ new Map();
1389
1364
  }
1390
1365
  function getAgent(name) {
1391
- return getSkill(name) ?? registry3.get(name);
1366
+ return registry2.get(name);
1392
1367
  }
1393
1368
  function getAgentEntry(name) {
1394
- return registry3.get(name);
1369
+ return registry2.get(name);
1395
1370
  }
1396
1371
  function listAgents() {
1397
1372
  const merged = /* @__PURE__ */ new Map();
1398
- for (const agent of registry3.values()) merged.set(agent.name, agent);
1399
- for (const skill of listSkills()) merged.set(skill.name, skill);
1373
+ for (const agent of registry2.values()) merged.set(agent.name, agent);
1400
1374
  return Array.from(merged.values());
1401
1375
  }
1402
1376
  function resolveAgentTools(name) {
@@ -1422,6 +1396,31 @@ function resolveSubAgents(name) {
1422
1396
  return result;
1423
1397
  }
1424
1398
 
1399
+ // src/injection/skillRegistry.ts
1400
+ var registry3 = /* @__PURE__ */ new Map();
1401
+ function hydrateSkillRegistry(skills) {
1402
+ const next = /* @__PURE__ */ new Map();
1403
+ for (const skill of skills) {
1404
+ next.set(skill.name, skill);
1405
+ }
1406
+ registry3 = next;
1407
+ }
1408
+ function clearSkillRegistry() {
1409
+ registry3 = /* @__PURE__ */ new Map();
1410
+ }
1411
+ function upsertSkill(core) {
1412
+ registry3.set(core.name, core);
1413
+ }
1414
+ function removeSkill(name) {
1415
+ registry3.delete(name);
1416
+ }
1417
+ function getSkill(name) {
1418
+ return registry3.get(name);
1419
+ }
1420
+ function listSkills() {
1421
+ return Array.from(registry3.values());
1422
+ }
1423
+
1425
1424
  // src/loader/loadAgentModule.ts
1426
1425
  import fs6 from "fs";
1427
1426