@ai-setting/roy-agent-core 1.7.53 → 1.7.56

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 (124) hide show
  1. package/dist/config/index.js +7 -7
  2. package/dist/env/agent/agent-component.d.ts +30 -0
  3. package/dist/env/agent/index.js +13 -12
  4. package/dist/env/commands/index.js +7 -7
  5. package/dist/env/context/index.js +3 -3
  6. package/dist/env/debug/index.js +7 -7
  7. package/dist/env/environment.d.ts +7 -0
  8. package/dist/env/error-reply.d.ts +184 -0
  9. package/dist/env/event-source/event-source-handlers.d.ts +9 -23
  10. package/dist/env/event-source/index.js +17 -17
  11. package/dist/env/hook/index.js +5 -5
  12. package/dist/env/index.js +41 -40
  13. package/dist/env/llm/adapter-ai-sdk.d.ts +6 -0
  14. package/dist/env/llm/adapter-pi-ai.d.ts +152 -2
  15. package/dist/env/llm/adapter.d.ts +21 -1
  16. package/dist/env/llm/index.js +10 -10
  17. package/dist/env/llm/invoke.d.ts +74 -2
  18. package/dist/env/llm/llm.d.ts +38 -0
  19. package/dist/env/llm/outbound-defense.d.ts +140 -0
  20. package/dist/env/llm/reasoning-defense.d.ts +104 -0
  21. package/dist/env/llm/types.d.ts +26 -0
  22. package/dist/env/log-trace/decorator.d.ts +46 -3
  23. package/dist/env/log-trace/index.d.ts +1 -0
  24. package/dist/env/log-trace/index.js +33 -7
  25. package/dist/env/log-trace/trace-filters.d.ts +127 -0
  26. package/dist/env/mcp/index.js +7 -7
  27. package/dist/env/memory/index.js +7 -7
  28. package/dist/env/plugin/index.js +7 -7
  29. package/dist/env/prompt/index.js +8 -8
  30. package/dist/env/prompt/prompts-index.d.ts +1 -1
  31. package/dist/env/session/index.js +11 -10
  32. package/dist/env/session/session-component.d.ts +4 -0
  33. package/dist/env/session/storage/index.js +5 -3
  34. package/dist/env/skill/index.js +7 -7
  35. package/dist/env/task/backend/index.js +0 -2
  36. package/dist/env/task/backend/types.d.ts +0 -11
  37. package/dist/env/task/delegate/index.js +8 -8
  38. package/dist/env/task/index.js +13 -13
  39. package/dist/env/task/plugins/card-chat-routing.d.ts +42 -89
  40. package/dist/env/task/plugins/index.js +10 -10
  41. package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +0 -51
  42. package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +14 -31
  43. package/dist/env/task/plugins/per-task-group-chat-plugin.d.ts +4 -4
  44. package/dist/env/task/storage/index.js +2 -2
  45. package/dist/env/task/tools/index.js +3 -3
  46. package/dist/env/tool/built-in/index.js +3 -3
  47. package/dist/env/tool/index.js +9 -9
  48. package/dist/env/workflow/engine/engine.d.ts +65 -0
  49. package/dist/env/workflow/engine/index.js +12 -12
  50. package/dist/env/workflow/hooks/index.js +7 -7
  51. package/dist/env/workflow/index.js +23 -22
  52. package/dist/env/workflow/nodes/index.js +2 -2
  53. package/dist/env/workflow/nodes/tool-node.d.ts +6 -0
  54. package/dist/env/workflow/plugins/index.js +8 -8
  55. package/dist/env/workflow/service/index.js +2 -2
  56. package/dist/env/workflow/storage/index.js +3 -3
  57. package/dist/env/workflow/tools/index.js +15 -14
  58. package/dist/env/workflow/tools/workflow-validate-tool.d.ts +11 -2
  59. package/dist/env/workflow/types/run.d.ts +19 -0
  60. package/dist/env/workflow/utils/agent-session-metadata.d.ts +13 -0
  61. package/dist/env/workflow/utils/index.js +5 -5
  62. package/dist/env/workflow/utils/redact-command-secrets.d.ts +70 -0
  63. package/dist/env/workflow/utils/shell-dialect-lint.d.ts +75 -0
  64. package/dist/env/workflow/utils/validate-workflow-definition.d.ts +22 -0
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.js +82 -56
  67. package/dist/shared/@ai-setting/{roy-agent-core-k25gv86p.js → roy-agent-core-0b3fdnn3.js} +1 -1
  68. package/dist/shared/@ai-setting/{roy-agent-core-vvxb9522.js → roy-agent-core-0bmk44ye.js} +71 -10
  69. package/dist/shared/@ai-setting/{roy-agent-core-k8b440n3.js → roy-agent-core-16t0zfbk.js} +1 -1
  70. package/dist/shared/@ai-setting/{roy-agent-core-4z3rq5gw.js → roy-agent-core-1pnfkspm.js} +2 -2
  71. package/dist/shared/@ai-setting/{roy-agent-core-na73mym1.js → roy-agent-core-202v00x4.js} +213 -2
  72. package/dist/shared/@ai-setting/{roy-agent-core-ph5qbqcx.js → roy-agent-core-2044fbsd.js} +471 -134
  73. package/dist/shared/@ai-setting/{roy-agent-core-fs36xgcs.js → roy-agent-core-3dkzqqsd.js} +1 -1
  74. package/dist/shared/@ai-setting/{roy-agent-core-qm9jda8p.js → roy-agent-core-3kz6934b.js} +1 -1
  75. package/dist/shared/@ai-setting/{roy-agent-core-tjg71zqp.js → roy-agent-core-3mc6vmvj.js} +1 -1
  76. package/dist/shared/@ai-setting/{roy-agent-core-tdbv7ff4.js → roy-agent-core-40xzbjtm.js} +2 -2
  77. package/dist/shared/@ai-setting/{roy-agent-core-athdr2m0.js → roy-agent-core-4zy2v3br.js} +10 -2
  78. package/dist/shared/@ai-setting/{roy-agent-core-t37wbysj.js → roy-agent-core-5gw6w424.js} +4 -4
  79. package/dist/shared/@ai-setting/{roy-agent-core-978b6wfx.js → roy-agent-core-5psjwd08.js} +1 -1
  80. package/dist/shared/@ai-setting/{roy-agent-core-7evvpfwc.js → roy-agent-core-5rxs0ra3.js} +1 -1
  81. package/dist/shared/@ai-setting/{roy-agent-core-gdsqp6j8.js → roy-agent-core-6masakz4.js} +45 -0
  82. package/dist/shared/@ai-setting/{roy-agent-core-stnddvx9.js → roy-agent-core-6qgq7h1g.js} +4 -4
  83. package/dist/shared/@ai-setting/{roy-agent-core-6167phd4.js → roy-agent-core-833t16n1.js} +3 -3
  84. package/dist/shared/@ai-setting/{roy-agent-core-2k4xffaa.js → roy-agent-core-8cgtwytv.js} +3 -3
  85. package/dist/shared/@ai-setting/{roy-agent-core-rx16h2m1.js → roy-agent-core-97eyghsp.js} +2 -2
  86. package/dist/shared/@ai-setting/{roy-agent-core-fvs48d38.js → roy-agent-core-98aa9r0x.js} +12 -7
  87. package/dist/shared/@ai-setting/{roy-agent-core-3tv1q6f2.js → roy-agent-core-9nv586rw.js} +57 -19
  88. package/dist/shared/@ai-setting/roy-agent-core-b599jgyd.js +578 -0
  89. package/dist/shared/@ai-setting/{roy-agent-core-yd21n6c7.js → roy-agent-core-bwzy00t2.js} +12 -5
  90. package/dist/shared/@ai-setting/{roy-agent-core-dwx9hjwx.js → roy-agent-core-c6at31ra.js} +1 -1
  91. package/dist/shared/@ai-setting/{roy-agent-core-1cv9j4dg.js → roy-agent-core-d14h726p.js} +3 -3
  92. package/dist/shared/@ai-setting/{roy-agent-core-4sx6sdb2.js → roy-agent-core-d4jpn06f.js} +22 -9
  93. package/dist/shared/@ai-setting/{roy-agent-core-39xejr39.js → roy-agent-core-e0wbq0qq.js} +7 -7
  94. package/dist/shared/@ai-setting/{roy-agent-core-vrsxhw9e.js → roy-agent-core-e677am8e.js} +1 -1
  95. package/dist/shared/@ai-setting/{roy-agent-core-hch2geta.js → roy-agent-core-ezsyyjxw.js} +21 -190
  96. package/dist/shared/@ai-setting/{roy-agent-core-ne2t1pay.js → roy-agent-core-f8sp1txg.js} +2 -2
  97. package/dist/shared/@ai-setting/{roy-agent-core-ak4dc3kg.js → roy-agent-core-gn8f4rhs.js} +1 -1
  98. package/dist/shared/@ai-setting/{roy-agent-core-qcspfszy.js → roy-agent-core-gngjkw3b.js} +1 -1
  99. package/dist/shared/@ai-setting/{roy-agent-core-9jzysq50.js → roy-agent-core-heft3j4c.js} +2 -2
  100. package/dist/shared/@ai-setting/{roy-agent-core-5apmk4qw.js → roy-agent-core-jszgaevt.js} +1 -1
  101. package/dist/shared/@ai-setting/{roy-agent-core-nde5gzta.js → roy-agent-core-m8n0dffe.js} +1 -1
  102. package/dist/shared/@ai-setting/{roy-agent-core-x8n1r7h4.js → roy-agent-core-n3b7ztms.js} +189 -8
  103. package/dist/shared/@ai-setting/{roy-agent-core-4vpk40ss.js → roy-agent-core-nhk0dsxr.js} +13 -13
  104. package/dist/shared/@ai-setting/{roy-agent-core-j8e92gj8.js → roy-agent-core-nntphgww.js} +1 -60
  105. package/dist/shared/@ai-setting/{roy-agent-core-8s9jd2qy.js → roy-agent-core-nra8vfrs.js} +1 -1
  106. package/dist/shared/@ai-setting/{roy-agent-core-pk1b3kvf.js → roy-agent-core-ns3pbyz4.js} +1 -1
  107. package/dist/shared/@ai-setting/{roy-agent-core-7g03zkkb.js → roy-agent-core-pemxr5n4.js} +1 -1
  108. package/dist/shared/@ai-setting/{roy-agent-core-skzjs973.js → roy-agent-core-pjxa78mp.js} +5 -5
  109. package/dist/shared/@ai-setting/{roy-agent-core-p8ak03s0.js → roy-agent-core-q7zksbw0.js} +117 -315
  110. package/dist/shared/@ai-setting/{roy-agent-core-zd3ddm4k.js → roy-agent-core-qjjf4tjb.js} +1 -1
  111. package/dist/shared/@ai-setting/{roy-agent-core-qamktze3.js → roy-agent-core-qyqnmz8c.js} +1 -1
  112. package/dist/shared/@ai-setting/{roy-agent-core-9csa89jx.js → roy-agent-core-r9qe0ghe.js} +2 -2
  113. package/dist/shared/@ai-setting/{roy-agent-core-h93v6p6y.js → roy-agent-core-tc7gw38m.js} +2 -2
  114. package/dist/shared/@ai-setting/{roy-agent-core-35s1w7tc.js → roy-agent-core-v2188rnk.js} +157 -85
  115. package/dist/shared/@ai-setting/{roy-agent-core-p2r27era.js → roy-agent-core-vmg30n5x.js} +8 -8
  116. package/dist/shared/@ai-setting/{roy-agent-core-rnwr39b0.js → roy-agent-core-w7hnjhvx.js} +5 -3
  117. package/dist/shared/@ai-setting/{roy-agent-core-dv714bqh.js → roy-agent-core-wafk25ff.js} +1 -1
  118. package/dist/shared/@ai-setting/{roy-agent-core-brwzs8wf.js → roy-agent-core-xcq04fq0.js} +5 -5
  119. package/dist/shared/@ai-setting/{roy-agent-core-2gay3sjt.js → roy-agent-core-yg247mk4.js} +1 -1
  120. package/dist/shared/@ai-setting/{roy-agent-core-zy3hqfwg.js → roy-agent-core-yv9x4wmg.js} +631 -35
  121. package/dist/shared/@ai-setting/{roy-agent-core-yhsssn86.js → roy-agent-core-zmeka63k.js} +1 -1
  122. package/dist/test-utils/child-process-mock.d.ts +73 -0
  123. package/package.json +2 -2
  124. package/dist/shared/@ai-setting/roy-agent-core-dsevjbck.js +0 -245
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TracedAs,
3
3
  init_decorator
4
- } from "./roy-agent-core-dsevjbck.js";
4
+ } from "./roy-agent-core-b599jgyd.js";
5
5
  import {
6
6
  __legacyDecorateClassTS,
7
7
  __require
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @fileoverview Shared `child_process` mock factory for `mock.module(...)`.
3
+ *
4
+ * ## 为什么需要它(Task #4420)
5
+ *
6
+ * Bun 当前对 `mock.module("child_process", factory)` 采用 **ESM exports 语义**:
7
+ * factory 返回的对象被当作模块的**完整导出面**,而不是「在真实模块上打补丁」。
8
+ * 因此只要少提供一个命名导出,任何**静态** `import { x } from "child_process"`
9
+ * 该导出的模块都会在**模块加载期**直接抛:
10
+ *
11
+ * ```
12
+ * SyntaxError: Export named 'exec' not found in module 'node:child_process'.
13
+ * ```
14
+ *
15
+ * 更糟的是:
16
+ * 1. 报错指向**被 import 的模块**(如 `event-source-handlers.ts`),
17
+ * 而不是写了不完整 mock 的**测试文件** —— 极难定位。
18
+ * 2. mock.module 在同一 `bun test` 进程内**跨文件泄漏**(bun 不像 jest
19
+ * 每文件独立 registry),所以还会顺带炸掉后面无关的文件。
20
+ *
21
+ * ## 历史事故(同一个坑踩了 3 次)
22
+ *
23
+ * - Task #2372:`event-source-handlers-builtin.test.ts` 只 mock `spawn`,
24
+ * 炸掉后面所有静态 import `spawnSync` 的模块(见
25
+ * `util/process/process-tree-killer.ts` 里的 lazy-import 规避注释)。
26
+ * - Task #4331:源码 `event-source-handlers.ts` 新增 `exec as execSync`,
27
+ * 但该测试的 mock 没跟上 → 整个文件 48/64 条测试挂红(Task #4420 修的就是这个)。
28
+ *
29
+ * ## 解决方式
30
+ *
31
+ * **导出面从真实模块自省派生**,永不手写清单:
32
+ * - `require("node:child_process")` 枚举出真实存在的导出名
33
+ * - 对每个导出,默认**透传真实实现**,只把测试显式 `overrides` 的键替换掉
34
+ * - 额外补一个 `default`(ESM namespace 有 `default`,`require()` 没有 ——
35
+ * 这也是历史 mock 需要手写 `default: {...}` 的原因,现在自动生成)
36
+ *
37
+ * 这样即使未来 Node/Bun 新增导出,或源码新增 `import { execFile }`,
38
+ * mock 也不会因为「缺导出」再次炸掉整个测试文件。
39
+ *
40
+ * ## 用法
41
+ *
42
+ * ```ts
43
+ * import { createChildProcessMockModule } from "../../../test-utils/child-process-mock";
44
+ *
45
+ * beforeEach(() => {
46
+ * mock.module("child_process", () =>
47
+ * createChildProcessMockModule({ spawn: spawnMock }),
48
+ * );
49
+ * });
50
+ * ```
51
+ *
52
+ * 注意:`mock.module` 的 specifier 用 `"child_process"` 还是
53
+ * `"node:child_process"` 都能命中(Bun 会把两者归一),helper 内部统一
54
+ * 从 `node:child_process` 自省。
55
+ */
56
+ /**
57
+ * 当前 Node/Bun 上 `node:child_process` 的完整命名导出清单(运行时自省)。
58
+ *
59
+ * 在 Bun 上为:`ChildProcess`, `exec`, `execFile`, `execFileSync`,
60
+ * `execSync`, `fork`, `spawn`, `spawnSync`。
61
+ */
62
+ export declare const CHILD_PROCESS_EXPORT_NAMES: readonly string[];
63
+ type ChildProcessModule = Record<string, any>;
64
+ /**
65
+ * 构造一个**导出面完整**的 `child_process` mock 模块对象。
66
+ *
67
+ * @param overrides 需要替换为测试替身(spy/stub)的导出。其余导出保持真实实现,
68
+ * 既保证导出面完整,又避免把未测行为也一起假掉。
69
+ * @returns 可直接被 `mock.module("child_process", () => ...)` 返回的模块对象,
70
+ * 含 `default` 自引用(`default` 上的键与命名导出保持一致)。
71
+ */
72
+ export declare function createChildProcessMockModule(overrides?: ChildProcessModule): ChildProcessModule;
73
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-setting/roy-agent-core",
3
- "version": "1.7.53",
3
+ "version": "1.7.56",
4
4
  "type": "module",
5
5
  "description": "Core SDK for roy-agent - Environment, Components, Tools, Sessions, Tasks",
6
6
  "main": "./dist/index.js",
@@ -35,7 +35,7 @@
35
35
  "clean": "rm -rf dist",
36
36
  "typecheck": "npx tsc --noEmit --skipLibCheck --project tsconfig.json",
37
37
  "test:llm": "bun test test/llm/",
38
- "test:llm:fast": "bun test --parallel 4 test/llm/"
38
+ "test:llm:fast": "bun test --parallel=4 test/llm/"
39
39
  },
40
40
  "dependencies": {
41
41
  "@ai-sdk/anthropic": "^3.0.0",
@@ -1,245 +0,0 @@
1
- import {
2
- createLogger,
3
- getMaxOutput,
4
- getTracerProvider,
5
- init_logger,
6
- init_tracer_provider,
7
- simplifyFilePath
8
- } from "./roy-agent-core-8seq65bp.js";
9
- import {
10
- __esm
11
- } from "./roy-agent-core-fs0mn2jk.js";
12
-
13
- // src/env/log-trace/decorator.ts
14
- function Traced(options) {
15
- const buildOptions = () => ({
16
- recordParams: options?.recordParams ?? true,
17
- recordResult: options?.recordResult ?? false,
18
- recordError: options?.recordError ?? true,
19
- log: options?.log ?? false,
20
- maxLogSize: options?.maxLogSize,
21
- paramFilter: options?.paramFilter,
22
- resultFilter: options?.resultFilter,
23
- flattenParamFilter: options?.flattenParamFilter,
24
- errorIf: options?.errorIf
25
- });
26
- return function(target, propertyKey, descriptor) {
27
- if (descriptor !== undefined && descriptor !== null && typeof descriptor === "object" && "value" in descriptor) {
28
- const originalFn = descriptor.value;
29
- const spanName = options?.name || String(propertyKey);
30
- descriptor.value = wrapFunction(originalFn, spanName, buildOptions());
31
- return descriptor;
32
- }
33
- const value = target;
34
- const context = propertyKey || {};
35
- if (typeof value === "function") {
36
- const spanName = options?.name || (context?.name ? String(context.name) : "anonymous");
37
- return wrapFunction(value, spanName, buildOptions());
38
- }
39
- return value;
40
- };
41
- }
42
- function TracedAs(name, options) {
43
- return Traced({ name, ...options });
44
- }
45
- function TracedLightweight(options) {
46
- return Traced({ recordParams: false, recordResult: false, log: options?.log ?? false, maxLogSize: options?.maxLogSize });
47
- }
48
- function wrapFunction(fn, name, options) {
49
- const shouldLog = options?.log ?? false;
50
- const getMaxLogSize = () => {
51
- if (options?.maxLogSize !== undefined) {
52
- return options.maxLogSize;
53
- }
54
- const configMaxOutput = getMaxOutput();
55
- return configMaxOutput !== undefined ? configMaxOutput : 500;
56
- };
57
- const truncate = (obj) => {
58
- if (obj === undefined)
59
- return;
60
- if (obj === null)
61
- return null;
62
- const maxLogSize = getMaxLogSize();
63
- let str;
64
- try {
65
- str = typeof obj === "string" ? obj : JSON.stringify(obj, null, 0).replace(/\n/g, "");
66
- } catch (e) {
67
- str = `[Object with circular reference: ${e instanceof Error ? e.message : String(e)}]`;
68
- }
69
- if (maxLogSize > 0 && str.length > maxLogSize) {
70
- return str.slice(0, maxLogSize) + " [TRUNCATED]";
71
- }
72
- try {
73
- return JSON.parse(str);
74
- } catch {
75
- return str;
76
- }
77
- };
78
- const truncateString = (obj) => {
79
- if (obj === undefined)
80
- return "undefined";
81
- if (obj === null)
82
- return "null";
83
- const maxLogSize = getMaxLogSize();
84
- let str;
85
- try {
86
- str = typeof obj === "string" ? obj : JSON.stringify(obj, null, 0).replace(/\n/g, "");
87
- } catch (e) {
88
- str = `[Object with circular reference: ${e instanceof Error ? e.message : String(e)}]`;
89
- }
90
- return maxLogSize > 0 && str.length > maxLogSize ? str.slice(0, maxLogSize) + " [TRUNCATED]" : str;
91
- };
92
- const toDbValue = (obj) => {
93
- if (obj === undefined)
94
- return;
95
- if (obj === null)
96
- return null;
97
- if (typeof obj === "string")
98
- return obj;
99
- try {
100
- return JSON.parse(JSON.stringify(obj));
101
- } catch (e) {
102
- return `[Object with circular reference: ${e instanceof Error ? e.message : String(e)}]`;
103
- }
104
- };
105
- const TRACE_LOG_PREFIX = "[TRACE]";
106
- const getCallerLocation = () => {
107
- const originalLimit = Error.stackTraceLimit;
108
- Error.stackTraceLimit = 15;
109
- const err = new Error;
110
- Error.captureStackTrace(err, getCallerLocation);
111
- const stack = err.stack?.split(`
112
- `) || [];
113
- Error.stackTraceLimit = originalLimit;
114
- for (let i = 1;i < stack.length; i++) {
115
- const line = stack[i];
116
- if (line.includes("decorator.ts") || line.includes("decorator.js") || line.includes("logFn") || line.includes("getCallerLocation"))
117
- continue;
118
- const match = line.match(/at\s+.+\s+\((.+):(\d+):\d+\)/) || line.match(/at\s+(.+):(\d+):\d+/);
119
- if (match) {
120
- const filePath = match[1];
121
- if (!filePath || filePath === "native")
122
- continue;
123
- const relativePath = simplifyFilePath(filePath);
124
- return `${relativePath}:${match[2]}`;
125
- }
126
- }
127
- return "";
128
- };
129
- const logFn = (event, argsOrData, callerLocation) => {
130
- if (!shouldLog)
131
- return;
132
- const logger = createLogger("traced:" + name);
133
- const tag = event === "enter" ? ">>>" : event === "quit" ? "<<<" : "!!!";
134
- const prefix = `${TRACE_LOG_PREFIX} ${tag} ${name}`;
135
- const originalFnLocation = callerLocation || getCallerLocation();
136
- const logMessage = (msg, data) => {
137
- if (data !== undefined) {
138
- logger.info(`${prefix} ${msg}: ${truncateString(data)}`, { callerLocation: originalFnLocation });
139
- } else {
140
- logger.info(`${prefix} ${msg}`, { callerLocation: originalFnLocation });
141
- }
142
- };
143
- if (event === "enter") {
144
- logMessage("enter", argsOrData);
145
- } else if (event === "quit") {
146
- logMessage("quit", options?.recordResult ? argsOrData : undefined);
147
- } else {
148
- logMessage("error", argsOrData);
149
- }
150
- };
151
- return function(...args) {
152
- const tracer = getTracerProvider().getTracer("roy-tracer");
153
- const attributes = {};
154
- if (options?.recordParams !== false) {
155
- if (options?.paramFilter) {
156
- const filtered = options.paramFilter(args);
157
- attributes["params"] = toDbValue(filtered);
158
- if (options?.flattenParamFilter && filtered && typeof filtered === "object" && !Array.isArray(filtered)) {
159
- for (const [key, value] of Object.entries(filtered)) {
160
- if (!(key in attributes)) {
161
- attributes[key] = toDbValue(value);
162
- }
163
- }
164
- }
165
- } else {
166
- attributes["params"] = toDbValue(args);
167
- }
168
- }
169
- const callerLocation = getCallerLocation();
170
- let span;
171
- try {
172
- span = tracer.startSpan(name, { attributes });
173
- } catch {}
174
- logFn("enter", args, callerLocation);
175
- try {
176
- const result = fn.call(this, ...args);
177
- if (result && typeof result === "object" && typeof result.then === "function") {
178
- return result.then((resolved) => {
179
- if (span) {
180
- if (options?.resultFilter) {
181
- const filtered = options.resultFilter(resolved);
182
- if (filtered && typeof filtered === "object") {
183
- for (const [key, value] of Object.entries(filtered)) {
184
- span.setAttribute(key, toDbValue(value));
185
- }
186
- }
187
- }
188
- span.setAttribute("result", JSON.stringify(toDbValue(resolved)));
189
- const resultError = options?.errorIf ? options.errorIf(resolved) : undefined;
190
- if (resultError) {
191
- const err = resultError instanceof Error ? resultError : new Error(String(resultError));
192
- span.setAttribute("error", err.message);
193
- span.end(undefined, err);
194
- } else {
195
- span.end(resolved);
196
- }
197
- }
198
- logFn("quit", options?.recordResult ? resolved : undefined, callerLocation);
199
- return resolved;
200
- }, (rejected) => {
201
- if (span) {
202
- span.setAttribute("error", String(rejected));
203
- span.end(undefined, rejected instanceof Error ? rejected : new Error(String(rejected)));
204
- }
205
- logFn("error", rejected.message, callerLocation);
206
- throw rejected;
207
- });
208
- }
209
- if (span) {
210
- if (options?.resultFilter) {
211
- const filtered = options.resultFilter(result);
212
- if (filtered && typeof filtered === "object") {
213
- for (const [key, value] of Object.entries(filtered)) {
214
- span.setAttribute(key, toDbValue(value));
215
- }
216
- }
217
- }
218
- span.setAttribute("result", JSON.stringify(toDbValue(result)));
219
- const syncResultError = options?.errorIf ? options.errorIf(result) : undefined;
220
- if (syncResultError) {
221
- const err = syncResultError instanceof Error ? syncResultError : new Error(String(syncResultError));
222
- span.setAttribute("error", err.message);
223
- span.end(undefined, err);
224
- } else {
225
- span.end(result);
226
- }
227
- }
228
- logFn("quit", options?.recordResult ? result : undefined, callerLocation);
229
- return result;
230
- } catch (error) {
231
- if (span) {
232
- span.setAttribute("error", String(error));
233
- span.end(undefined, error instanceof Error ? error : new Error(String(error)));
234
- }
235
- logFn("error", error.message, callerLocation);
236
- throw error;
237
- }
238
- };
239
- }
240
- var init_decorator = __esm(() => {
241
- init_tracer_provider();
242
- init_logger();
243
- });
244
-
245
- export { Traced, TracedAs, TracedLightweight, wrapFunction, init_decorator };