@evelinka-ai/core 0.1.3

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 (130) hide show
  1. package/README.md +16 -0
  2. package/dist/agent-lib/llm-semaphore.d.ts +47 -0
  3. package/dist/agent-lib/llm-semaphore.d.ts.map +1 -0
  4. package/dist/agent-lib/llm-semaphore.js +255 -0
  5. package/dist/agent-lib/llm-semaphore.js.map +1 -0
  6. package/dist/agent-lib/managed-tool.d.ts +29 -0
  7. package/dist/agent-lib/managed-tool.d.ts.map +1 -0
  8. package/dist/agent-lib/managed-tool.js +28 -0
  9. package/dist/agent-lib/managed-tool.js.map +1 -0
  10. package/dist/channels/catalog.d.ts +3 -0
  11. package/dist/channels/catalog.d.ts.map +1 -0
  12. package/dist/channels/catalog.js +20 -0
  13. package/dist/channels/catalog.js.map +1 -0
  14. package/dist/channels/model-catalog.d.ts +3 -0
  15. package/dist/channels/model-catalog.d.ts.map +1 -0
  16. package/dist/channels/model-catalog.js +6 -0
  17. package/dist/channels/model-catalog.js.map +1 -0
  18. package/dist/channels/usage.d.ts +3 -0
  19. package/dist/channels/usage.d.ts.map +1 -0
  20. package/dist/channels/usage.js +35 -0
  21. package/dist/channels/usage.js.map +1 -0
  22. package/dist/lib/atomic-file.d.ts +2 -0
  23. package/dist/lib/atomic-file.d.ts.map +1 -0
  24. package/dist/lib/atomic-file.js +16 -0
  25. package/dist/lib/atomic-file.js.map +1 -0
  26. package/dist/lib/budgets/record-call-usage.d.ts +31 -0
  27. package/dist/lib/budgets/record-call-usage.d.ts.map +1 -0
  28. package/dist/lib/budgets/record-call-usage.js +44 -0
  29. package/dist/lib/budgets/record-call-usage.js.map +1 -0
  30. package/dist/lib/budgets/token-budget.d.ts +61 -0
  31. package/dist/lib/budgets/token-budget.d.ts.map +1 -0
  32. package/dist/lib/budgets/token-budget.js +250 -0
  33. package/dist/lib/budgets/token-budget.js.map +1 -0
  34. package/dist/lib/budgets/token-usage-pg.d.ts +96 -0
  35. package/dist/lib/budgets/token-usage-pg.d.ts.map +1 -0
  36. package/dist/lib/budgets/token-usage-pg.js +305 -0
  37. package/dist/lib/budgets/token-usage-pg.js.map +1 -0
  38. package/dist/lib/budgets/usage.d.ts +103 -0
  39. package/dist/lib/budgets/usage.d.ts.map +1 -0
  40. package/dist/lib/budgets/usage.js +151 -0
  41. package/dist/lib/budgets/usage.js.map +1 -0
  42. package/dist/lib/control-plane/call-context.d.ts +7 -0
  43. package/dist/lib/control-plane/call-context.d.ts.map +1 -0
  44. package/dist/lib/control-plane/call-context.js +9 -0
  45. package/dist/lib/control-plane/call-context.js.map +1 -0
  46. package/dist/lib/control-plane/catalog.d.ts +33 -0
  47. package/dist/lib/control-plane/catalog.d.ts.map +1 -0
  48. package/dist/lib/control-plane/catalog.js +163 -0
  49. package/dist/lib/control-plane/catalog.js.map +1 -0
  50. package/dist/lib/control-plane/flow-settings.d.ts +32 -0
  51. package/dist/lib/control-plane/flow-settings.d.ts.map +1 -0
  52. package/dist/lib/control-plane/flow-settings.js +139 -0
  53. package/dist/lib/control-plane/flow-settings.js.map +1 -0
  54. package/dist/lib/control-plane/tools-config.d.ts +30 -0
  55. package/dist/lib/control-plane/tools-config.d.ts.map +1 -0
  56. package/dist/lib/control-plane/tools-config.js +104 -0
  57. package/dist/lib/control-plane/tools-config.js.map +1 -0
  58. package/dist/lib/delivery/push-store.d.ts +20 -0
  59. package/dist/lib/delivery/push-store.d.ts.map +1 -0
  60. package/dist/lib/delivery/push-store.js +74 -0
  61. package/dist/lib/delivery/push-store.js.map +1 -0
  62. package/dist/lib/delivery/push.d.ts +15 -0
  63. package/dist/lib/delivery/push.d.ts.map +1 -0
  64. package/dist/lib/delivery/push.js +97 -0
  65. package/dist/lib/delivery/push.js.map +1 -0
  66. package/dist/lib/delivery/schedule-lock.d.ts +16 -0
  67. package/dist/lib/delivery/schedule-lock.d.ts.map +1 -0
  68. package/dist/lib/delivery/schedule-lock.js +86 -0
  69. package/dist/lib/delivery/schedule-lock.js.map +1 -0
  70. package/dist/lib/memory/memory-dream.d.ts +181 -0
  71. package/dist/lib/memory/memory-dream.d.ts.map +1 -0
  72. package/dist/lib/memory/memory-dream.js +405 -0
  73. package/dist/lib/memory/memory-dream.js.map +1 -0
  74. package/dist/lib/memory/memory-vault-git.d.ts +14 -0
  75. package/dist/lib/memory/memory-vault-git.d.ts.map +1 -0
  76. package/dist/lib/memory/memory-vault-git.js +345 -0
  77. package/dist/lib/memory/memory-vault-git.js.map +1 -0
  78. package/dist/lib/memory/memory-vault.d.ts +83 -0
  79. package/dist/lib/memory/memory-vault.d.ts.map +1 -0
  80. package/dist/lib/memory/memory-vault.js +466 -0
  81. package/dist/lib/memory/memory-vault.js.map +1 -0
  82. package/dist/lib/memory/static-instructions.d.ts +2 -0
  83. package/dist/lib/memory/static-instructions.d.ts.map +1 -0
  84. package/dist/lib/memory/static-instructions.js +48 -0
  85. package/dist/lib/memory/static-instructions.js.map +1 -0
  86. package/dist/lib/memory/vault-explorer.d.ts +37 -0
  87. package/dist/lib/memory/vault-explorer.d.ts.map +1 -0
  88. package/dist/lib/memory/vault-explorer.js +212 -0
  89. package/dist/lib/memory/vault-explorer.js.map +1 -0
  90. package/dist/lib/models/llm-concurrency.d.ts +29 -0
  91. package/dist/lib/models/llm-concurrency.d.ts.map +1 -0
  92. package/dist/lib/models/llm-concurrency.js +103 -0
  93. package/dist/lib/models/llm-concurrency.js.map +1 -0
  94. package/dist/lib/models/model-catalog.d.ts +32 -0
  95. package/dist/lib/models/model-catalog.d.ts.map +1 -0
  96. package/dist/lib/models/model-catalog.js +115 -0
  97. package/dist/lib/models/model-catalog.js.map +1 -0
  98. package/dist/lib/models/model-config.d.ts +27 -0
  99. package/dist/lib/models/model-config.d.ts.map +1 -0
  100. package/dist/lib/models/model-config.js +155 -0
  101. package/dist/lib/models/model-config.js.map +1 -0
  102. package/dist/lib/observability/console-link.d.ts +3 -0
  103. package/dist/lib/observability/console-link.d.ts.map +1 -0
  104. package/dist/lib/observability/console-link.js +15 -0
  105. package/dist/lib/observability/console-link.js.map +1 -0
  106. package/dist/lib/observability/event-bus.d.ts +11 -0
  107. package/dist/lib/observability/event-bus.d.ts.map +1 -0
  108. package/dist/lib/observability/event-bus.js +24 -0
  109. package/dist/lib/observability/event-bus.js.map +1 -0
  110. package/dist/lib/observability/logger.d.ts +5 -0
  111. package/dist/lib/observability/logger.d.ts.map +1 -0
  112. package/dist/lib/observability/logger.js +47 -0
  113. package/dist/lib/observability/logger.js.map +1 -0
  114. package/dist/lib/observability/payload-store.d.ts +8 -0
  115. package/dist/lib/observability/payload-store.d.ts.map +1 -0
  116. package/dist/lib/observability/payload-store.js +101 -0
  117. package/dist/lib/observability/payload-store.js.map +1 -0
  118. package/dist/lib/observability/recorder-hook.d.ts +22 -0
  119. package/dist/lib/observability/recorder-hook.d.ts.map +1 -0
  120. package/dist/lib/observability/recorder-hook.js +241 -0
  121. package/dist/lib/observability/recorder-hook.js.map +1 -0
  122. package/dist/lib/observability/recorder.d.ts +339 -0
  123. package/dist/lib/observability/recorder.d.ts.map +1 -0
  124. package/dist/lib/observability/recorder.js +1182 -0
  125. package/dist/lib/observability/recorder.js.map +1 -0
  126. package/dist/tenant.d.ts +59 -0
  127. package/dist/tenant.d.ts.map +1 -0
  128. package/dist/tenant.js +18 -0
  129. package/dist/tenant.js.map +1 -0
  130. package/package.json +119 -0
@@ -0,0 +1,155 @@
1
+ import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { tenant } from "../../tenant.js";
4
+ import { logger } from "../observability/logger.js";
5
+ import { canonicalModelId, isCatalogModel } from "./model-catalog.js";
6
+ const log = logger.child({ module: "model-config" });
7
+ const defaultOptions = () => tenant().modelOptions;
8
+ export function modelOptions(env = process.env) {
9
+ const raw = env.EVE_MODEL_OPTIONS;
10
+ if (raw) {
11
+ try {
12
+ const parsed = JSON.parse(raw);
13
+ if (Array.isArray(parsed) && parsed.every((o) => o?.provider && o?.model && o?.label))
14
+ return parsed;
15
+ log.warn("EVE_MODEL_OPTIONS malformed — using defaults");
16
+ }
17
+ catch {
18
+ log.warn("EVE_MODEL_OPTIONS is not valid JSON — using defaults");
19
+ }
20
+ }
21
+ return defaultOptions();
22
+ }
23
+ export function isKnownOption(provider, model, env = process.env) {
24
+ return modelOptions(env).some((o) => o.provider === provider && o.model === model);
25
+ }
26
+ function configPath() {
27
+ return process.env.EVE_MODEL_CONFIG_PATH ?? join(process.cwd(), ".workflow-data", "model.json");
28
+ }
29
+ export function envDefault(env = process.env) {
30
+ const provider = (env.EVE_PROVIDER ?? "openai").toLowerCase() === "anthropic" ? "anthropic" : "openai";
31
+ const fallback = tenant().defaultOpenaiModel ??
32
+ tenant().modelOptions.find((option) => option.provider === "openai")?.model;
33
+ if (provider === "openai" && !fallback) {
34
+ throw new Error("eve-core: tenant has no defaultOpenaiModel or openai model option");
35
+ }
36
+ const sel = {
37
+ provider,
38
+ model: env.EVE_MODEL
39
+ ? canonicalModelId(env.EVE_MODEL)
40
+ : provider === "anthropic"
41
+ ? "claude-sonnet-4-6"
42
+ : fallback,
43
+ };
44
+ if (typeof env.EVE_MODEL_EFFORT === "string" && env.EVE_MODEL_EFFORT) {
45
+ sel.effort = env.EVE_MODEL_EFFORT;
46
+ }
47
+ return sel;
48
+ }
49
+ function readRawStore(file) {
50
+ try {
51
+ const raw = JSON.parse(readFileSync(file, "utf8"));
52
+ return raw && typeof raw === "object" ? raw : {};
53
+ }
54
+ catch (err) {
55
+ const code = err.code;
56
+ if (code !== "ENOENT" && !(err instanceof SyntaxError)) {
57
+ log.error({ err }, "failed to read model store");
58
+ }
59
+ return {};
60
+ }
61
+ }
62
+ function validSelection(raw, env) {
63
+ if (!raw)
64
+ return null;
65
+ const provider = raw.provider === "anthropic" ? "anthropic" : raw.provider === "openai" ? "openai" : null;
66
+ const model = typeof raw.model === "string" ? canonicalModelId(raw.model) : "";
67
+ if (!provider || !model || !isCatalogModel(model, env))
68
+ return null;
69
+ const sel = { provider, model };
70
+ if (typeof raw.effort === "string" && raw.effort)
71
+ sel.effort = raw.effort;
72
+ return sel;
73
+ }
74
+ export function resolveSelection(key, file = configPath(), env = process.env, override) {
75
+ const ov = override ? validSelection(override, env) : null;
76
+ if (ov)
77
+ return ov;
78
+ const store = readRawStore(file);
79
+ const keyed = key ? validSelection(store.byKey?.[key], env) : null;
80
+ if (keyed)
81
+ return keyed;
82
+ const alias = key ? tenant().modelKeyAliases?.[key] : undefined;
83
+ const aliased = alias ? validSelection(store.byKey?.[alias], env) : null;
84
+ if (aliased)
85
+ return aliased;
86
+ const def = validSelection(store, env);
87
+ if (def)
88
+ return def;
89
+ return envDefault(env);
90
+ }
91
+ export function readModelConfig(file = configPath(), env = process.env) {
92
+ const s = resolveSelection(undefined, file, env);
93
+ return { provider: s.provider, model: s.model };
94
+ }
95
+ export function readModelStore(file = configPath(), env = process.env) {
96
+ const store = readRawStore(file);
97
+ const def = validSelection(store, env) ?? envDefault(env);
98
+ const byKey = {};
99
+ for (const [k, v] of Object.entries(store.byKey ?? {})) {
100
+ const sel = validSelection(v, env);
101
+ if (sel)
102
+ byKey[k] = sel;
103
+ }
104
+ return { default: def, byKey };
105
+ }
106
+ function writeStore(store, file) {
107
+ mkdirSync(dirname(file), { recursive: true });
108
+ const tmp = `${file}.${process.pid}.tmp`;
109
+ writeFileSync(tmp, `${JSON.stringify(store, null, 2)}\n`);
110
+ renameSync(tmp, file);
111
+ }
112
+ const SESSION_KEY_PREFIX = "session:";
113
+ const SESSION_KEY_CAP = 40;
114
+ export function sessionKeyFor(sessionId) {
115
+ return `${SESSION_KEY_PREFIX}${sessionId}`;
116
+ }
117
+ export function sessionSelection(sessionId, file = configPath(), env = process.env) {
118
+ return validSelection(readRawStore(file).byKey?.[sessionKeyFor(sessionId)], env);
119
+ }
120
+ export function writeSelection(key, sel, file = configPath()) {
121
+ const store = readRawStore(file);
122
+ const entry = { provider: sel.provider, model: sel.model };
123
+ if (sel.effort)
124
+ entry.effort = sel.effort;
125
+ if (key === undefined) {
126
+ store.provider = entry.provider;
127
+ store.model = entry.model;
128
+ if (entry.effort)
129
+ store.effort = entry.effort;
130
+ else
131
+ store.effort = undefined;
132
+ }
133
+ else {
134
+ store.byKey = store.byKey ?? {};
135
+ store.byKey[key] = entry;
136
+ if (key.startsWith(SESSION_KEY_PREFIX)) {
137
+ const sessionKeys = Object.keys(store.byKey).filter((k) => k.startsWith(SESSION_KEY_PREFIX));
138
+ for (const stale of sessionKeys.slice(0, Math.max(0, sessionKeys.length - SESSION_KEY_CAP))) {
139
+ delete store.byKey[stale];
140
+ }
141
+ }
142
+ }
143
+ writeStore(store, file);
144
+ }
145
+ export function writeModelConfig(cfg, file = configPath()) {
146
+ writeSelection(undefined, cfg, file);
147
+ }
148
+ export function clearSelection(key, file = configPath()) {
149
+ const store = readRawStore(file);
150
+ if (store.byKey && key in store.byKey) {
151
+ delete store.byKey[key];
152
+ writeStore(store, file);
153
+ }
154
+ }
155
+ //# sourceMappingURL=model-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-config.js","sourceRoot":"","sources":["../../../src/lib/models/model-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function consolePrefix(): string;
2
+ export declare function consolePath(path: string): string;
3
+ //# sourceMappingURL=console-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-link.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/console-link.ts"],"names":[],"mappings":"AASA,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAGD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,15 @@
1
+ export function consolePrefix() {
2
+ const raw = process.env.EVE_PUBLIC_BASE_URL;
3
+ if (!raw)
4
+ return "";
5
+ try {
6
+ return new URL(raw).pathname.replace(/\/+$/, "");
7
+ }
8
+ catch {
9
+ return "";
10
+ }
11
+ }
12
+ export function consolePath(path) {
13
+ return `${consolePrefix()}${path.startsWith("/") ? path : `/${path}`}`;
14
+ }
15
+ //# sourceMappingURL=console-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-link.js","sourceRoot":"","sources":["../../../src/lib/observability/console-link.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QAEH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;AACzE,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface SessionDelta {
2
+ sessionId: string;
3
+ kind: string;
4
+ at: string;
5
+ }
6
+ type Listener = (delta: SessionDelta) => void;
7
+ export declare function subscribeSessions(fn: Listener): () => void;
8
+ export declare function publishSessionDelta(delta: SessionDelta): void;
9
+ export declare function listenerCount(): number;
10
+ export {};
11
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/event-bus.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAS9C,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAK1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAa7D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -0,0 +1,24 @@
1
+ import { logger } from "./logger.js";
2
+ const log = logger.child({ module: "event-bus" });
3
+ const listeners = new Set();
4
+ export function subscribeSessions(fn) {
5
+ listeners.add(fn);
6
+ return () => {
7
+ listeners.delete(fn);
8
+ };
9
+ }
10
+ export function publishSessionDelta(delta) {
11
+ for (const fn of [...listeners]) {
12
+ try {
13
+ fn(delta);
14
+ }
15
+ catch (err) {
16
+ listeners.delete(fn);
17
+ log.debug({ err }, "dropped a failing SSE listener");
18
+ }
19
+ }
20
+ }
21
+ export function listenerCount() {
22
+ return listeners.size;
23
+ }
24
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../../src/lib/observability/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AAoBlD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;AAEtC,MAAM,UAAU,iBAAiB,CAAC,EAAY;IAC5C,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IAKrD,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,EAAE,CAAC,KAAK,CAAC,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,gCAAgC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,SAAS,CAAC,IAAI,CAAC;AACxB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type Logger } from "pino";
2
+ export declare const LOG_REDACT_PATHS: string[];
3
+ export declare function createLogger(): Logger;
4
+ export declare const logger: Logger;
5
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/logger.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAwBzC,eAAO,MAAM,gBAAgB,UAE5B,CAAC;AAOF,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AA6BD,eAAO,MAAM,MAAM,EAAE,MAAiC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import pino from "pino";
2
+ import { tenant } from "../../tenant.js";
3
+ const LOG_REDACT_FIELDS = [
4
+ "userId",
5
+ "email",
6
+ "prompt",
7
+ "message",
8
+ "body",
9
+ "authorization",
10
+ "token",
11
+ "secret",
12
+ "password",
13
+ "apiKey",
14
+ "accessToken",
15
+ "refreshToken",
16
+ "cookie",
17
+ ];
18
+ export const LOG_REDACT_PATHS = LOG_REDACT_FIELDS.flatMap((field) => Array.from({ length: 5 }, (_, depth) => `${"*.".repeat(depth)}${field}`));
19
+ export function createLogger() {
20
+ return pino({
21
+ level: process.env.LOG_LEVEL ?? "info",
22
+ base: { service: tenant().name },
23
+ redact: { paths: LOG_REDACT_PATHS, censor: "[redacted]" },
24
+ });
25
+ }
26
+ function lazyLogger(make) {
27
+ let inst = null;
28
+ const ensure = () => {
29
+ inst ??= make();
30
+ return inst;
31
+ };
32
+ return new Proxy({}, {
33
+ get(_t, prop) {
34
+ if (prop === "child" && inst === null) {
35
+ return (...args) => lazyLogger(() => ensure().child(...args));
36
+ }
37
+ const v = ensure()[prop];
38
+ return typeof v === "function" ? v.bind(inst) : v;
39
+ },
40
+ set(_t, prop, value) {
41
+ ensure()[prop] = value;
42
+ return true;
43
+ },
44
+ });
45
+ }
46
+ export const logger = lazyLogger(createLogger);
47
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/lib/observability/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAqB,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAKzC,MAAM,iBAAiB,GAAG;IACxB,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,MAAM;IACN,eAAe;IACf,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,aAAa;IACb,cAAc;IACd,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAClE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,CACzE,CAAC;AAOF,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC;QACV,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE;QAChC,MAAM,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE;KAC1D,CAAC,CAAC;AACL,CAAC;AAOD,SAAS,UAAU,CAAC,IAAkB;IACpC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,GAAW,EAAE;QAC1B,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,IAAI,KAAK,CAAC,EAAY,EAAE;QAC7B,GAAG,CAAC,EAAE,EAAE,IAAI;YACV,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAC5B,UAAU,CAAC,GAAG,EAAE,CAAE,MAAM,EAAE,CAAC,KAAgD,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,CAAC,GAAI,MAAM,EAA8C,CAAC,IAAI,CAAC,CAAC;YACtE,OAAO,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAE,CAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK;YAChB,MAAM,EAA8C,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAW,UAAU,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function payloadsDir(): string;
2
+ export declare function isPayloadDocId(id: string): boolean;
3
+ export declare function savePayloadDoc(value: unknown): string | null;
4
+ export declare function savePayloadDocSerialized(serialized: string): string | null;
5
+ export declare const PAYLOAD_TTL_MS: number;
6
+ export declare function reapOldPayloads(cutoffMs: number): number;
7
+ export declare function readPayloadDoc(id: string): unknown | null;
8
+ //# sourceMappingURL=payload-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-store.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/payload-store.ts"],"names":[],"mappings":"AA2BA,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAOD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAElD;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAS5D;AAID,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc1E;AASD,eAAO,MAAM,cAAc,QAA2B,CAAC;AAiBvD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8BxD;AAID,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAOzD"}
@@ -0,0 +1,101 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ const MAX_PAYLOAD_BYTES = 1_048_576;
5
+ const ID_PATTERN = /^pl_[0-9a-f]{16}$/;
6
+ export function payloadsDir() {
7
+ return process.env.EVE_PAYLOADS_DIR ?? join(process.cwd(), ".workflow-data", "payloads");
8
+ }
9
+ function pathFor(id) {
10
+ return join(payloadsDir(), id.slice(3, 5), `${id}.json`);
11
+ }
12
+ export function isPayloadDocId(id) {
13
+ return ID_PATTERN.test(id);
14
+ }
15
+ export function savePayloadDoc(value) {
16
+ let serialized;
17
+ try {
18
+ serialized = JSON.stringify(value);
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ if (serialized === undefined)
24
+ return null;
25
+ return savePayloadDocSerialized(serialized);
26
+ }
27
+ export function savePayloadDocSerialized(serialized) {
28
+ if (Buffer.byteLength(serialized) > MAX_PAYLOAD_BYTES)
29
+ return null;
30
+ const id = `pl_${createHash("sha256").update(serialized).digest("hex").slice(0, 16)}`;
31
+ try {
32
+ const file = pathFor(id);
33
+ if (!existsSync(file)) {
34
+ mkdirSync(dirname(file), { recursive: true });
35
+ writeFileSync(file, serialized);
36
+ }
37
+ reapOldPayloadsThrottled();
38
+ return id;
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ export const PAYLOAD_TTL_MS = 30 * 24 * 60 * 60 * 1000;
45
+ const REAP_INTERVAL_MS = 60 * 60 * 1000;
46
+ let lastReapAt = 0;
47
+ function reapOldPayloadsThrottled() {
48
+ const now = Date.now();
49
+ if (now - lastReapAt < REAP_INTERVAL_MS)
50
+ return;
51
+ lastReapAt = now;
52
+ try {
53
+ reapOldPayloads(now - PAYLOAD_TTL_MS);
54
+ }
55
+ catch {
56
+ }
57
+ }
58
+ export function reapOldPayloads(cutoffMs) {
59
+ const root = payloadsDir();
60
+ let removed = 0;
61
+ let fanouts;
62
+ try {
63
+ fanouts = readdirSync(root);
64
+ }
65
+ catch {
66
+ return 0;
67
+ }
68
+ for (const fan of fanouts) {
69
+ const dir = join(root, fan);
70
+ let files;
71
+ try {
72
+ files = readdirSync(dir);
73
+ }
74
+ catch {
75
+ continue;
76
+ }
77
+ for (const f of files) {
78
+ const file = join(dir, f);
79
+ try {
80
+ if (statSync(file).mtimeMs < cutoffMs) {
81
+ unlinkSync(file);
82
+ removed++;
83
+ }
84
+ }
85
+ catch {
86
+ }
87
+ }
88
+ }
89
+ return removed;
90
+ }
91
+ export function readPayloadDoc(id) {
92
+ if (!isPayloadDocId(id))
93
+ return null;
94
+ try {
95
+ return JSON.parse(readFileSync(pathFor(id), "utf8"));
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ }
101
+ //# sourceMappingURL=payload-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-store.js","sourceRoot":"","sources":["../../../src/lib/observability/payload-store.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAK1C,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAEpC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,OAAO,CAAC,EAAU;IAEzB,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,OAAO,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAKD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC;AAID,MAAM,UAAU,wBAAwB,CAAC,UAAkB;IACzD,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;QACD,wBAAwB,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AASD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACvD,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxC,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,SAAS,wBAAwB;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,UAAU,GAAG,gBAAgB;QAAE,OAAO;IAChD,UAAU,GAAG,GAAG,CAAC;IACjB,IAAI,CAAC;QACH,eAAe,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACH,CAAC;AAID,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC;gBACH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;oBACtC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAID,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { defineHook } from "eve/hooks";
2
+ import { type ModelConfig } from "../models/model-config.js";
3
+ import { type StepUsage } from "./recorder.js";
4
+ import { type UsageRow } from "../budgets/token-usage-pg.js";
5
+ export declare function isApprovalShape(opts: ReadonlyArray<{
6
+ id?: string;
7
+ }> | undefined): boolean;
8
+ export declare function usageRowFrom(ids: {
9
+ id: string;
10
+ parentRootId: string;
11
+ flow: string | null;
12
+ }, step: {
13
+ turnId: string | null;
14
+ stepIndex: number | null;
15
+ at: string;
16
+ }, model: string, usage: StepUsage, env?: NodeJS.ProcessEnv): UsageRow;
17
+ export declare function envFromToken(token: string | null | undefined): "prod" | "dev" | null;
18
+ export declare function attributedModel(sessionId: string, flow: string | null, file?: string, env?: NodeJS.ProcessEnv): ModelConfig;
19
+ export declare function createRecorderHook(opts?: {
20
+ flow?: string;
21
+ }): ReturnType<typeof defineHook>;
22
+ //# sourceMappingURL=recorder-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder-hook.d.ts","sourceRoot":"","sources":["../../../src/lib/observability/recorder-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,KAAK,WAAW,EAAsC,MAAM,2BAA2B,CAAC;AAEjG,OAAO,EAQL,KAAK,SAAS,EAEf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAwB1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,GAAG,OAAO,CAEzF;AAID,wBAAgB,YAAY,CAC1B,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC9D,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EACrE,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,QAAQ,CAiBV;AAKD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAGpF;AAMD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,IAAI,CAAC,EAAE,MAAM,EACb,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,CAQb;AAWD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAyT9F"}