agents-library 0.1.0 → 0.1.2

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 (110) hide show
  1. package/README.md +178 -0
  2. package/dist/base-agent.d.ts +10 -8
  3. package/dist/base-agent.d.ts.map +1 -1
  4. package/dist/base-agent.js +30 -26
  5. package/dist/base-agent.js.map +1 -1
  6. package/dist/base-bot.d.ts +0 -0
  7. package/dist/base-bot.d.ts.map +0 -0
  8. package/dist/base-bot.js +5 -5
  9. package/dist/base-bot.js.map +1 -1
  10. package/dist/common/result.d.ts +0 -0
  11. package/dist/common/result.d.ts.map +0 -0
  12. package/dist/common/result.js +0 -0
  13. package/dist/common/result.js.map +0 -0
  14. package/dist/common/types.d.ts +0 -0
  15. package/dist/common/types.d.ts.map +0 -0
  16. package/dist/common/types.js +0 -0
  17. package/dist/common/types.js.map +0 -0
  18. package/dist/index.d.ts +12 -6
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +7 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/kadi-event-publisher.d.ts +0 -0
  23. package/dist/kadi-event-publisher.d.ts.map +0 -0
  24. package/dist/kadi-event-publisher.js +1 -1
  25. package/dist/kadi-event-publisher.js.map +1 -1
  26. package/dist/memory/arcadedb-adapter.d.ts +8 -0
  27. package/dist/memory/arcadedb-adapter.d.ts.map +1 -1
  28. package/dist/memory/arcadedb-adapter.js +8 -0
  29. package/dist/memory/arcadedb-adapter.js.map +1 -1
  30. package/dist/memory/entity-extractor.d.ts +110 -0
  31. package/dist/memory/entity-extractor.d.ts.map +1 -0
  32. package/dist/memory/entity-extractor.js +259 -0
  33. package/dist/memory/entity-extractor.js.map +1 -0
  34. package/dist/memory/file-storage-adapter.d.ts +0 -0
  35. package/dist/memory/file-storage-adapter.d.ts.map +0 -0
  36. package/dist/memory/file-storage-adapter.js +0 -0
  37. package/dist/memory/file-storage-adapter.js.map +0 -0
  38. package/dist/memory/memory-service.d.ts +123 -13
  39. package/dist/memory/memory-service.d.ts.map +1 -1
  40. package/dist/memory/memory-service.js +428 -72
  41. package/dist/memory/memory-service.js.map +1 -1
  42. package/dist/memory/types.d.ts +0 -0
  43. package/dist/memory/types.d.ts.map +0 -0
  44. package/dist/memory/types.js +0 -0
  45. package/dist/memory/types.js.map +0 -0
  46. package/dist/producer-tool-utils.d.ts +0 -0
  47. package/dist/producer-tool-utils.d.ts.map +0 -0
  48. package/dist/producer-tool-utils.js +16 -16
  49. package/dist/producer-tool-utils.js.map +1 -1
  50. package/dist/providers/anthropic-provider.d.ts +0 -0
  51. package/dist/providers/anthropic-provider.d.ts.map +0 -0
  52. package/dist/providers/anthropic-provider.js +0 -0
  53. package/dist/providers/anthropic-provider.js.map +0 -0
  54. package/dist/providers/model-manager-provider.d.ts +0 -0
  55. package/dist/providers/model-manager-provider.d.ts.map +0 -0
  56. package/dist/providers/model-manager-provider.js +0 -0
  57. package/dist/providers/model-manager-provider.js.map +0 -0
  58. package/dist/providers/provider-manager.d.ts +0 -0
  59. package/dist/providers/provider-manager.d.ts.map +1 -1
  60. package/dist/providers/provider-manager.js +6 -2
  61. package/dist/providers/provider-manager.js.map +1 -1
  62. package/dist/providers/types.d.ts +0 -0
  63. package/dist/providers/types.d.ts.map +0 -0
  64. package/dist/providers/types.js +0 -0
  65. package/dist/providers/types.js.map +0 -0
  66. package/dist/shadow-agent-factory.d.ts +23 -97
  67. package/dist/shadow-agent-factory.d.ts.map +1 -1
  68. package/dist/shadow-agent-factory.js +116 -306
  69. package/dist/shadow-agent-factory.js.map +1 -1
  70. package/dist/types/agent-config.d.ts +62 -1
  71. package/dist/types/agent-config.d.ts.map +1 -1
  72. package/dist/types/agent-config.js +0 -0
  73. package/dist/types/agent-config.js.map +0 -0
  74. package/dist/types/event-schemas.d.ts +194 -0
  75. package/dist/types/event-schemas.d.ts.map +1 -1
  76. package/dist/types/event-schemas.js +77 -2
  77. package/dist/types/event-schemas.js.map +1 -1
  78. package/dist/types/tool-schemas.d.ts +0 -0
  79. package/dist/types/tool-schemas.d.ts.map +0 -0
  80. package/dist/types/tool-schemas.js +0 -0
  81. package/dist/types/tool-schemas.js.map +0 -0
  82. package/dist/utils/config.d.ts +48 -0
  83. package/dist/utils/config.d.ts.map +1 -0
  84. package/dist/utils/config.js +163 -0
  85. package/dist/utils/config.js.map +1 -0
  86. package/dist/utils/logger.d.ts +11 -1
  87. package/dist/utils/logger.d.ts.map +1 -1
  88. package/dist/utils/logger.js +26 -1
  89. package/dist/utils/logger.js.map +1 -1
  90. package/dist/utils/path-utils.d.ts +22 -0
  91. package/dist/utils/path-utils.d.ts.map +1 -0
  92. package/dist/utils/path-utils.js +51 -0
  93. package/dist/utils/path-utils.js.map +1 -0
  94. package/dist/utils/read-config.d.ts +43 -0
  95. package/dist/utils/read-config.d.ts.map +1 -0
  96. package/dist/utils/read-config.js +97 -0
  97. package/dist/utils/read-config.js.map +1 -0
  98. package/dist/utils/timer.d.ts +0 -0
  99. package/dist/utils/timer.d.ts.map +0 -0
  100. package/dist/utils/timer.js +0 -0
  101. package/dist/utils/timer.js.map +0 -0
  102. package/dist/utils/vault.d.ts +29 -0
  103. package/dist/utils/vault.d.ts.map +1 -0
  104. package/dist/utils/vault.js +79 -0
  105. package/dist/utils/vault.js.map +1 -0
  106. package/dist/worker-agent-factory.d.ts +37 -38
  107. package/dist/worker-agent-factory.d.ts.map +1 -1
  108. package/dist/worker-agent-factory.js +355 -212
  109. package/dist/worker-agent-factory.js.map +1 -1
  110. package/package.json +5 -3
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Shared TOML config loader for KĀDI agents.
3
+ *
4
+ * Loads non-secret configuration from `config.toml` and injects into
5
+ * `process.env` (existing env vars take precedence).
6
+ *
7
+ * Walk-up discovery: searches from CWD upward until it finds config.toml.
8
+ *
9
+ * Professor's paradigm:
10
+ * secrets.toml → encrypted vault (committed)
11
+ * config.toml → non-secret settings (committed)
12
+ * .env → optional local override (NOT committed)
13
+ *
14
+ * Resolution order: process.env > .env (dotenv) > config.toml > defaults
15
+ *
16
+ * @module utils/config
17
+ */
18
+ import { readFileSync, existsSync } from 'node:fs';
19
+ import { resolve, dirname, join } from 'node:path';
20
+ // ── Constants ────────────────────────────────────────────────────────
21
+ const CONFIG_FILENAME = 'config.toml';
22
+ const TAG = '[config]';
23
+ // ── TOML key → env var mapping ───────────────────────────────────────
24
+ //
25
+ // Flat mapping from TOML dotted paths to env var names.
26
+ // Only mapped keys are injected into process.env.
27
+ const TOML_TO_ENV = {
28
+ 'broker.url': 'KADI_BROKER_URL',
29
+ 'broker.networks': 'KADI_NETWORK',
30
+ 'broker.remote.url': 'KADI_BROKER_URL_2',
31
+ 'broker.remote.networks': 'KADI_NETWORK_2',
32
+ 'bot.tool_timeout_ms': 'BOT_TOOL_TIMEOUT_MS',
33
+ 'bot.slack.enabled': 'ENABLE_SLACK_BOT',
34
+ 'bot.slack.user_id': 'SLACK_BOT_USER_ID',
35
+ 'bot.discord.enabled': 'ENABLE_DISCORD_BOT',
36
+ 'bot.discord.user_id': 'DISCORD_BOT_USER_ID',
37
+ 'memory.data_path': 'MEMORY_DATA_PATH',
38
+ };
39
+ // ── Walk-up discovery ────────────────────────────────────────────────
40
+ /**
41
+ * Walk up from `startDir` to filesystem root looking for config.toml.
42
+ */
43
+ export function findConfigFile(startDir) {
44
+ let dir = resolve(startDir);
45
+ while (true) {
46
+ const candidate = join(dir, CONFIG_FILENAME);
47
+ if (existsSync(candidate))
48
+ return candidate;
49
+ const parent = dirname(dir);
50
+ if (parent === dir)
51
+ break; // reached root
52
+ dir = parent;
53
+ }
54
+ return null;
55
+ }
56
+ export function parseSimpleToml(content) {
57
+ const result = {};
58
+ let currentSection = '';
59
+ for (const rawLine of content.split('\n')) {
60
+ const line = rawLine.trim();
61
+ // Skip comments and blank lines
62
+ if (!line || line.startsWith('#'))
63
+ continue;
64
+ // Section header: [broker] or [broker.remote]
65
+ const sectionMatch = line.match(/^\[([a-zA-Z0-9._-]+)\]$/);
66
+ if (sectionMatch) {
67
+ currentSection = sectionMatch[1];
68
+ continue;
69
+ }
70
+ // Key = value
71
+ const kvMatch = line.match(/^([a-zA-Z0-9_-]+)\s*=\s*(.+)$/);
72
+ if (!kvMatch)
73
+ continue;
74
+ const key = kvMatch[1];
75
+ const rawValue = kvMatch[2].trim();
76
+ const fullKey = currentSection ? `${currentSection}.${key}` : key;
77
+ // Parse value
78
+ result[fullKey] = parseTomlValue(rawValue);
79
+ }
80
+ return result;
81
+ }
82
+ function parseTomlValue(raw) {
83
+ // Boolean
84
+ if (raw === 'true')
85
+ return true;
86
+ if (raw === 'false')
87
+ return false;
88
+ // Number (integer or float)
89
+ if (/^-?\d+(\.\d+)?$/.test(raw))
90
+ return Number(raw);
91
+ // String (quoted)
92
+ if ((raw.startsWith('"') && raw.endsWith('"')) ||
93
+ (raw.startsWith("'") && raw.endsWith("'"))) {
94
+ return raw.slice(1, -1);
95
+ }
96
+ // Array of strings: ["a", "b", "c"]
97
+ if (raw.startsWith('[') && raw.endsWith(']')) {
98
+ const inner = raw.slice(1, -1).trim();
99
+ if (!inner)
100
+ return [];
101
+ return inner.split(',').map(s => {
102
+ const trimmed = s.trim();
103
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
104
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
105
+ return trimmed.slice(1, -1);
106
+ }
107
+ return trimmed;
108
+ });
109
+ }
110
+ // Bare string (unquoted)
111
+ return raw;
112
+ }
113
+ // ── Public API ───────────────────────────────────────────────────────
114
+ /**
115
+ * Load config.toml and inject mapped values into process.env.
116
+ *
117
+ * - Walks up from `startDir` (default: CWD) to find config.toml
118
+ * - Only injects keys defined in TOML_TO_ENV mapping
119
+ * - Existing env vars are NOT overwritten (env > config.toml)
120
+ * - Array values are joined with commas (e.g. networks)
121
+ *
122
+ * @param startDir - Directory to start searching from (default: process.cwd())
123
+ * @returns Info about what was loaded
124
+ */
125
+ export function loadConfig(startDir) {
126
+ const configPath = findConfigFile(startDir || process.cwd());
127
+ if (!configPath) {
128
+ return { configPath: null, injectedCount: 0 };
129
+ }
130
+ const content = readFileSync(configPath, 'utf-8');
131
+ const parsed = parseSimpleToml(content);
132
+ let injectedCount = 0;
133
+ for (const [tomlKey, envKey] of Object.entries(TOML_TO_ENV)) {
134
+ // Skip if env var already set (env takes precedence)
135
+ if (process.env[envKey])
136
+ continue;
137
+ const value = parsed[tomlKey];
138
+ if (value === undefined || value === null)
139
+ continue;
140
+ // Convert to string for process.env
141
+ if (Array.isArray(value)) {
142
+ process.env[envKey] = value.join(',');
143
+ }
144
+ else {
145
+ process.env[envKey] = String(value);
146
+ }
147
+ injectedCount++;
148
+ }
149
+ if (injectedCount > 0) {
150
+ console.log(`${TAG} Loaded ${injectedCount} settings from ${configPath}`);
151
+ }
152
+ return { configPath, injectedCount };
153
+ }
154
+ /**
155
+ * Register additional TOML key → env var mappings.
156
+ *
157
+ * Allows agents to extend the default mapping with agent-specific keys
158
+ * before calling loadConfig().
159
+ */
160
+ export function registerConfigMapping(mappings) {
161
+ Object.assign(TOML_TO_ENV, mappings);
162
+ }
163
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -20,15 +20,25 @@
20
20
  *
21
21
  * @module logger
22
22
  */
23
+ /**
24
+ * Set the minimum log level. Messages below this level are suppressed.
25
+ * Hierarchy: debug < info < warn < error
26
+ */
27
+ export declare function setLogLevel(level: string): void;
23
28
  /**
24
29
  * Module name constants for structured logging
25
30
  * All use kebab-case for consistency with KĀDI naming conventions
26
31
  */
27
- export declare const MODULE_AGENT: "template-agent";
32
+ export declare let MODULE_AGENT: string;
28
33
  export declare const MODULE_SLACK_BOT: "slack-bot";
29
34
  export declare const MODULE_DISCORD_BOT: "discord-bot";
30
35
  export declare const MODULE_TASK_HANDLER: "task-handler";
31
36
  export declare const MODULE_TOOLS: "tools";
37
+ /**
38
+ * Set the MODULE_AGENT tag to the agent's ID.
39
+ * Call once at startup so all files importing MODULE_AGENT get the right name.
40
+ */
41
+ export declare function setAgentTag(name: string): void;
32
42
  /**
33
43
  * UnrealLogger class for Unreal Engine-style structured logging
34
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAG,gBAAyB,CAAC;AACtD,eAAO,MAAM,gBAAgB,EAAG,WAAoB,CAAC;AACrD,eAAO,MAAM,kBAAkB,EAAG,aAAsB,CAAC;AACzD,eAAO,MAAM,mBAAmB,EAAG,cAAuB,CAAC;AAC3D,eAAO,MAAM,YAAY,EAAG,OAAgB,CAAC;AAoB7C;;;;;;;;;;;GAWG;AACH,cAAM,MAAM;IACR;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAkBrB;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAO5E;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAO5E;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAkBrG;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAMhF;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;;GAGG;AACH,eAAO,IAAI,YAAY,EAAuB,MAAM,CAAC;AACrD,eAAO,MAAM,gBAAgB,EAAG,WAAoB,CAAC;AACrD,eAAO,MAAM,kBAAkB,EAAG,aAAsB,CAAC;AACzD,eAAO,MAAM,mBAAmB,EAAG,cAAuB,CAAC;AAC3D,eAAO,MAAM,YAAY,EAAG,OAAgB,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAoBD;;;;;;;;;;;GAWG;AACH,cAAM,MAAM;IACR;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAkBrB;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAQ5E;;;;;;;;;OASG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAQ5E;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAmBrG;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;CAOhF;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -20,15 +20,32 @@
20
20
  *
21
21
  * @module logger
22
22
  */
23
+ // ── Log level filtering ──────────────────────────────────────────────
24
+ const LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
25
+ let currentLevel = LEVELS.info;
26
+ /**
27
+ * Set the minimum log level. Messages below this level are suppressed.
28
+ * Hierarchy: debug < info < warn < error
29
+ */
30
+ export function setLogLevel(level) {
31
+ currentLevel = LEVELS[level.toLowerCase()] ?? LEVELS.info;
32
+ }
23
33
  /**
24
34
  * Module name constants for structured logging
25
35
  * All use kebab-case for consistency with KĀDI naming conventions
26
36
  */
27
- export const MODULE_AGENT = 'template-agent';
37
+ export let MODULE_AGENT = 'template-agent';
28
38
  export const MODULE_SLACK_BOT = 'slack-bot';
29
39
  export const MODULE_DISCORD_BOT = 'discord-bot';
30
40
  export const MODULE_TASK_HANDLER = 'task-handler';
31
41
  export const MODULE_TOOLS = 'tools';
42
+ /**
43
+ * Set the MODULE_AGENT tag to the agent's ID.
44
+ * Call once at startup so all files importing MODULE_AGENT get the right name.
45
+ */
46
+ export function setAgentTag(name) {
47
+ MODULE_AGENT = name;
48
+ }
32
49
  /**
33
50
  * ANSI Color Codes for Terminal Output
34
51
  *
@@ -123,6 +140,8 @@ class Logger {
123
140
  * @param data - Optional data to log (will be logged on separate line)
124
141
  */
125
142
  info(module, message, elapsedTime, data) {
143
+ if (currentLevel > LEVELS.info)
144
+ return;
126
145
  console.log(this.formatMessage(module, 'Info', message, elapsedTime, COLORS.CYAN));
127
146
  if (data) {
128
147
  console.log(data);
@@ -139,6 +158,8 @@ class Logger {
139
158
  * @param data - Optional data to log
140
159
  */
141
160
  warn(module, message, elapsedTime, data) {
161
+ if (currentLevel > LEVELS.warn)
162
+ return;
142
163
  console.warn(this.formatMessage(module, 'Warning', message, elapsedTime, COLORS.YELLOW));
143
164
  if (data) {
144
165
  console.warn(data);
@@ -156,6 +177,8 @@ class Logger {
156
177
  * @param data - Optional additional data to log
157
178
  */
158
179
  error(module, message, elapsedTime, error, data) {
180
+ if (currentLevel > LEVELS.error)
181
+ return;
159
182
  console.error(this.formatMessage(module, 'Error', message, elapsedTime, COLORS.RED));
160
183
  if (error instanceof Error) {
161
184
  if (error.stack) {
@@ -183,6 +206,8 @@ class Logger {
183
206
  * @param data - Optional data to log
184
207
  */
185
208
  debug(module, message, elapsedTime, data) {
209
+ if (currentLevel > LEVELS.debug)
210
+ return;
186
211
  console.log(this.formatMessage(module, 'Debug', message, elapsedTime, COLORS.GRAY));
187
212
  if (data) {
188
213
  console.log(data);
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cross-platform path utilities for WSL/Windows interop.
3
+ *
4
+ * When git worktrees are created on Windows, the `.git` file stores
5
+ * Windows-style paths (e.g. `C:/GitHub/...`). If the agent later runs
6
+ * inside WSL, those paths must be translated to `/mnt/c/GitHub/...`.
7
+ */
8
+ /**
9
+ * Detect whether the current process is running inside WSL.
10
+ * Uses `/proc/version` which contains "microsoft" or "WSL" on WSL distros.
11
+ */
12
+ export declare function isWsl(): boolean;
13
+ /**
14
+ * Convert a Windows-style path to a WSL path when running inside WSL.
15
+ *
16
+ * `C:/GitHub/foo` → `/mnt/c/GitHub/foo`
17
+ * `D:\Projects\bar` → `/mnt/d/Projects/bar`
18
+ *
19
+ * If not running in WSL, or the path is already POSIX, returns as-is.
20
+ */
21
+ export declare function toNativePath(p: string): string;
22
+ //# sourceMappingURL=path-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;GAGG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAgB/B;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAU9C"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Cross-platform path utilities for WSL/Windows interop.
3
+ *
4
+ * When git worktrees are created on Windows, the `.git` file stores
5
+ * Windows-style paths (e.g. `C:/GitHub/...`). If the agent later runs
6
+ * inside WSL, those paths must be translated to `/mnt/c/GitHub/...`.
7
+ */
8
+ import os from 'os';
9
+ import fs from 'fs';
10
+ /** Cached result — true when running inside WSL. */
11
+ let _isWsl = null;
12
+ /**
13
+ * Detect whether the current process is running inside WSL.
14
+ * Uses `/proc/version` which contains "microsoft" or "WSL" on WSL distros.
15
+ */
16
+ export function isWsl() {
17
+ if (_isWsl !== null)
18
+ return _isWsl;
19
+ if (os.platform() !== 'linux') {
20
+ _isWsl = false;
21
+ return false;
22
+ }
23
+ try {
24
+ const procVersion = fs.readFileSync('/proc/version', 'utf-8').toLowerCase();
25
+ _isWsl = procVersion.includes('microsoft') || procVersion.includes('wsl');
26
+ }
27
+ catch {
28
+ _isWsl = false;
29
+ }
30
+ return _isWsl;
31
+ }
32
+ /**
33
+ * Convert a Windows-style path to a WSL path when running inside WSL.
34
+ *
35
+ * `C:/GitHub/foo` → `/mnt/c/GitHub/foo`
36
+ * `D:\Projects\bar` → `/mnt/d/Projects/bar`
37
+ *
38
+ * If not running in WSL, or the path is already POSIX, returns as-is.
39
+ */
40
+ export function toNativePath(p) {
41
+ if (!isWsl())
42
+ return p;
43
+ // Match drive letter: C:/ or C:\ (case-insensitive)
44
+ const match = p.match(/^([A-Za-z]):[/\\](.*)/);
45
+ if (!match)
46
+ return p;
47
+ const drive = match[1].toLowerCase();
48
+ const rest = match[2].replace(/\\/g, '/');
49
+ return `/mnt/${drive}/${rest}`;
50
+ }
51
+ //# sourceMappingURL=path-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.js","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,oDAAoD;AACpD,IAAI,MAAM,GAAmB,IAAI,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,KAAK;IACnB,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAEnC,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,GAAG,KAAK,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5E,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;IAEvB,oDAAoD;IACpD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IAErB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,QAAQ,KAAK,IAAI,IAAI,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Typed config reader for KĀDI agents.
3
+ *
4
+ * Returns a `Config` wrapper around the parsed config.toml with typed
5
+ * accessors that throw on missing or wrong-type values.
6
+ *
7
+ * Usage:
8
+ * const cfg = readConfig();
9
+ * const url = cfg.string('broker.url'); // throws if missing
10
+ * const nets = cfg.strings('broker.networks'); // throws if missing
11
+ * if (cfg.has('broker.remote.url')) { ... } // optional check
12
+ *
13
+ * @module utils/read-config
14
+ */
15
+ export declare class Config {
16
+ private data;
17
+ readonly path: string;
18
+ constructor(data: Record<string, unknown>, path: string);
19
+ /** Check if a key exists. */
20
+ has(key: string): boolean;
21
+ /** Get raw value. Returns undefined if missing. */
22
+ get(key: string): unknown;
23
+ /** Get a string value. Throws if missing or wrong type. */
24
+ string(key: string): string;
25
+ /** Get a string array. Throws if missing or wrong type. */
26
+ strings(key: string): string[];
27
+ /** Get a boolean. Throws if missing or wrong type. */
28
+ bool(key: string): boolean;
29
+ /** Get a number. Throws if missing or wrong type. */
30
+ number(key: string): number;
31
+ private require;
32
+ }
33
+ /**
34
+ * Walk up from CWD to find config.toml, parse it, return a Config instance.
35
+ * Throws if config.toml is not found.
36
+ */
37
+ export declare function readConfig(startDir?: string): Config;
38
+ /**
39
+ * Read a specific TOML file by path and return a Config instance.
40
+ * Unlike readConfig(), this does not walk up directories — it reads the exact file.
41
+ */
42
+ export declare function readConfigFile(filePath: string): Config;
43
+ //# sourceMappingURL=read-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-config.d.ts","sourceRoot":"","sources":["../../src/utils/read-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,qBAAa,MAAM;IACjB,OAAO,CAAC,IAAI,CAA0B;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM;IAKvD,6BAA6B;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,mDAAmD;IACnD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,2DAA2D;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAU3B,2DAA2D;IAC3D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAU9B,sDAAsD;IACtD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU1B,qDAAqD;IACrD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAY3B,OAAO,CAAC,OAAO;CAShB;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvD"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Typed config reader for KĀDI agents.
3
+ *
4
+ * Returns a `Config` wrapper around the parsed config.toml with typed
5
+ * accessors that throw on missing or wrong-type values.
6
+ *
7
+ * Usage:
8
+ * const cfg = readConfig();
9
+ * const url = cfg.string('broker.url'); // throws if missing
10
+ * const nets = cfg.strings('broker.networks'); // throws if missing
11
+ * if (cfg.has('broker.remote.url')) { ... } // optional check
12
+ *
13
+ * @module utils/read-config
14
+ */
15
+ import { readFileSync } from 'node:fs';
16
+ import { findConfigFile, parseSimpleToml } from './config.js';
17
+ // ── Config class ─────────────────────────────────────────────────────
18
+ export class Config {
19
+ data;
20
+ path;
21
+ constructor(data, path) {
22
+ this.data = data;
23
+ this.path = path;
24
+ }
25
+ /** Check if a key exists. */
26
+ has(key) {
27
+ return this.data[key] !== undefined;
28
+ }
29
+ /** Get raw value. Returns undefined if missing. */
30
+ get(key) {
31
+ return this.data[key];
32
+ }
33
+ /** Get a string value. Throws if missing or wrong type. */
34
+ string(key) {
35
+ const value = this.require(key);
36
+ if (typeof value !== 'string') {
37
+ throw new Error(`Config key '${key}' in ${this.path} is ${typeof value}, expected string`);
38
+ }
39
+ return value;
40
+ }
41
+ /** Get a string array. Throws if missing or wrong type. */
42
+ strings(key) {
43
+ const value = this.require(key);
44
+ if (!Array.isArray(value)) {
45
+ throw new Error(`Config key '${key}' in ${this.path} is ${typeof value}, expected string[]`);
46
+ }
47
+ return value;
48
+ }
49
+ /** Get a boolean. Throws if missing or wrong type. */
50
+ bool(key) {
51
+ const value = this.require(key);
52
+ if (typeof value !== 'boolean') {
53
+ throw new Error(`Config key '${key}' in ${this.path} is ${typeof value}, expected boolean`);
54
+ }
55
+ return value;
56
+ }
57
+ /** Get a number. Throws if missing or wrong type. */
58
+ number(key) {
59
+ const value = this.require(key);
60
+ if (typeof value !== 'number') {
61
+ throw new Error(`Config key '${key}' in ${this.path} is ${typeof value}, expected number`);
62
+ }
63
+ return value;
64
+ }
65
+ // ── Internal ─────────────────────────────────────────────────────
66
+ require(key) {
67
+ const value = this.data[key];
68
+ if (value === undefined) {
69
+ throw new Error(`Missing required config key '${key}' in ${this.path}`);
70
+ }
71
+ return value;
72
+ }
73
+ }
74
+ // ── Public API ───────────────────────────────────────────────────────
75
+ /**
76
+ * Walk up from CWD to find config.toml, parse it, return a Config instance.
77
+ * Throws if config.toml is not found.
78
+ */
79
+ export function readConfig(startDir) {
80
+ const configPath = findConfigFile(startDir || process.cwd());
81
+ if (!configPath) {
82
+ throw new Error(`config.toml not found. Searched upward from: ${startDir || process.cwd()}`);
83
+ }
84
+ const content = readFileSync(configPath, 'utf-8');
85
+ const data = parseSimpleToml(content);
86
+ return new Config(data, configPath);
87
+ }
88
+ /**
89
+ * Read a specific TOML file by path and return a Config instance.
90
+ * Unlike readConfig(), this does not walk up directories — it reads the exact file.
91
+ */
92
+ export function readConfigFile(filePath) {
93
+ const content = readFileSync(filePath, 'utf-8');
94
+ const data = parseSimpleToml(content);
95
+ return new Config(data, filePath);
96
+ }
97
+ //# sourceMappingURL=read-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-config.js","sourceRoot":"","sources":["../../src/utils/read-config.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Shared vault credential loader for KĀDI agents.
3
+ *
4
+ * Loads credentials from one or more vaults specified in config.toml:
5
+ * [secrets]
6
+ * VAULTS = ["anthropic", "model-manager"]
7
+ * KEYS = ["ANTHROPIC_API_KEY", "MODEL_MANAGER_BASE_URL", "MODEL_MANAGER_API_KEY"]
8
+ *
9
+ * Falls back to the hardcoded defaults if config.toml is missing or
10
+ * has no [secrets] section.
11
+ *
12
+ * @module utils/vault
13
+ */
14
+ export type VaultCredentials = Record<string, string>;
15
+ /** @deprecated Use VaultCredentials instead */
16
+ export type ModelManagerCredentials = VaultCredentials;
17
+ /**
18
+ * Load credentials from configured vaults.
19
+ *
20
+ * Reads [secrets] VAULTS and KEYS from config.toml.
21
+ * For each key, tries each vault in order until found.
22
+ *
23
+ * Returns empty object if vault or secret-ability is unavailable
24
+ * (graceful degradation).
25
+ */
26
+ export declare function loadVaultCredentials(): Promise<VaultCredentials>;
27
+ /** @deprecated Use loadVaultCredentials instead */
28
+ export declare const loadModelManagerCredentials: typeof loadVaultCredentials;
29
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/utils/vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,+CAA+C;AAC/C,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AAIvD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkDtE;AAED,mDAAmD;AACnD,eAAO,MAAM,2BAA2B,6BAAuB,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Shared vault credential loader for KĀDI agents.
3
+ *
4
+ * Loads credentials from one or more vaults specified in config.toml:
5
+ * [secrets]
6
+ * VAULTS = ["anthropic", "model-manager"]
7
+ * KEYS = ["ANTHROPIC_API_KEY", "MODEL_MANAGER_BASE_URL", "MODEL_MANAGER_API_KEY"]
8
+ *
9
+ * Falls back to the hardcoded defaults if config.toml is missing or
10
+ * has no [secrets] section.
11
+ *
12
+ * @module utils/vault
13
+ */
14
+ import { readConfig } from './read-config.js';
15
+ // ── Constants ────────────────────────────────────────────────────────
16
+ const DEFAULT_VAULTS = ['model-manager'];
17
+ const DEFAULT_KEYS = [
18
+ 'MODEL_MANAGER_BASE_URL',
19
+ 'MODEL_MANAGER_API_KEY',
20
+ 'ANTHROPIC_API_KEY',
21
+ ];
22
+ const TAG = '[vault]';
23
+ // ── Public API ───────────────────────────────────────────────────────
24
+ /**
25
+ * Load credentials from configured vaults.
26
+ *
27
+ * Reads [secrets] VAULTS and KEYS from config.toml.
28
+ * For each key, tries each vault in order until found.
29
+ *
30
+ * Returns empty object if vault or secret-ability is unavailable
31
+ * (graceful degradation).
32
+ */
33
+ export async function loadVaultCredentials() {
34
+ const credentials = {};
35
+ // Resolve vault names and keys from config.toml
36
+ let vaultNames;
37
+ let vaultKeys;
38
+ try {
39
+ const cfg = readConfig();
40
+ vaultNames = cfg.has('secrets.VAULTS') ? cfg.strings('secrets.VAULTS') : DEFAULT_VAULTS;
41
+ vaultKeys = cfg.has('secrets.KEYS') ? cfg.strings('secrets.KEYS') : DEFAULT_KEYS;
42
+ }
43
+ catch {
44
+ vaultNames = DEFAULT_VAULTS;
45
+ vaultKeys = DEFAULT_KEYS;
46
+ }
47
+ try {
48
+ const { KadiClient } = await import('@kadi.build/core');
49
+ const tmpClient = new KadiClient({ name: 'vault-loader', version: '1.0.0' });
50
+ const secrets = await tmpClient.loadNative('secret-ability');
51
+ // For each key, try each vault in order until found
52
+ for (const key of vaultKeys) {
53
+ for (const vault of vaultNames) {
54
+ try {
55
+ const result = await secrets.invoke('get', { vault, key });
56
+ if (result?.value) {
57
+ credentials[key] = result.value;
58
+ break; // Found — skip remaining vaults for this key
59
+ }
60
+ }
61
+ catch {
62
+ // Key not in this vault — try next
63
+ }
64
+ }
65
+ }
66
+ await secrets.disconnect();
67
+ const loaded = Object.keys(credentials).length;
68
+ if (loaded > 0) {
69
+ console.log(`${TAG} Loaded ${loaded}/${vaultKeys.length} credentials from vaults: ${vaultNames.join(', ')}`);
70
+ }
71
+ }
72
+ catch (err) {
73
+ console.warn(`${TAG} secret-ability unavailable — using env vars only (${err?.message ?? err})`);
74
+ }
75
+ return credentials;
76
+ }
77
+ /** @deprecated Use loadVaultCredentials instead */
78
+ export const loadModelManagerCredentials = loadVaultCredentials;
79
+ //# sourceMappingURL=vault.js.map