itermbot 1.0.2 → 1.0.4

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 (128) hide show
  1. package/.github/workflows/ci.yml +15 -20
  2. package/.github/workflows/release.yml +32 -20
  3. package/README.md +11 -20
  4. package/cleanup-unused.patch +108 -0
  5. package/config/app.yaml +32 -13
  6. package/config/memory.yaml +38 -31
  7. package/config/model.yaml +33 -0
  8. package/config/skill.yaml +8 -0
  9. package/config/tool.yaml +50 -17
  10. package/config/tsconfig.json +4 -1
  11. package/dist/chat/builtin-commands.d.ts +8 -0
  12. package/dist/chat/builtin-commands.d.ts.map +1 -0
  13. package/dist/chat/builtin-commands.js +53 -0
  14. package/dist/chat/builtin-commands.js.map +1 -0
  15. package/dist/chat/progress.d.ts +3 -0
  16. package/dist/chat/progress.d.ts.map +1 -0
  17. package/dist/chat/progress.js +23 -0
  18. package/dist/chat/progress.js.map +1 -0
  19. package/dist/chat/response-safety.d.ts +8 -0
  20. package/dist/chat/response-safety.d.ts.map +1 -0
  21. package/dist/chat/response-safety.js +126 -0
  22. package/dist/chat/response-safety.js.map +1 -0
  23. package/dist/chat/step-display.d.ts +2 -0
  24. package/dist/chat/step-display.d.ts.map +1 -0
  25. package/dist/chat/step-display.js +50 -0
  26. package/dist/chat/step-display.js.map +1 -0
  27. package/dist/chat/tool-result.d.ts +4 -0
  28. package/dist/chat/tool-result.d.ts.map +1 -0
  29. package/dist/chat/tool-result.js +24 -0
  30. package/dist/chat/tool-result.js.map +1 -0
  31. package/dist/config.d.ts +11 -6
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/config.js +26 -12
  34. package/dist/config.js.map +1 -1
  35. package/dist/index.js +308 -151
  36. package/dist/index.js.map +1 -1
  37. package/dist/iterm/direct-command-router.d.ts +24 -0
  38. package/dist/iterm/direct-command-router.d.ts.map +1 -0
  39. package/dist/iterm/direct-command-router.js +213 -0
  40. package/dist/iterm/direct-command-router.js.map +1 -0
  41. package/dist/iterm/session-hint.d.ts +10 -0
  42. package/dist/iterm/session-hint.d.ts.map +1 -0
  43. package/dist/iterm/session-hint.js +43 -0
  44. package/dist/iterm/session-hint.js.map +1 -0
  45. package/dist/iterm/target-panel-policy.d.ts +12 -0
  46. package/dist/iterm/target-panel-policy.d.ts.map +1 -0
  47. package/dist/iterm/target-panel-policy.js +287 -0
  48. package/dist/iterm/target-panel-policy.js.map +1 -0
  49. package/dist/runtime/text-tool-call-recovery.d.ts +23 -0
  50. package/dist/runtime/text-tool-call-recovery.d.ts.map +1 -0
  51. package/dist/runtime/text-tool-call-recovery.js +211 -0
  52. package/dist/runtime/text-tool-call-recovery.js.map +1 -0
  53. package/dist/startup/colors.d.ts +37 -0
  54. package/dist/startup/colors.d.ts.map +1 -0
  55. package/dist/{startup-colors.js → startup/colors.js} +30 -15
  56. package/dist/startup/colors.js.map +1 -0
  57. package/dist/startup/diagnostics.d.ts +8 -0
  58. package/dist/startup/diagnostics.d.ts.map +1 -0
  59. package/dist/startup/diagnostics.js +18 -0
  60. package/dist/startup/diagnostics.js.map +1 -0
  61. package/dist/startup/os.d.ts +10 -0
  62. package/dist/startup/os.d.ts.map +1 -0
  63. package/dist/startup/os.js +67 -0
  64. package/dist/startup/os.js.map +1 -0
  65. package/dist/startup/ui.d.ts +11 -0
  66. package/dist/startup/ui.d.ts.map +1 -0
  67. package/dist/startup/ui.js +49 -0
  68. package/dist/startup/ui.js.map +1 -0
  69. package/package.json +23 -13
  70. package/scripts/internal-package-refs.mjs +158 -0
  71. package/scripts/patch-buildin-cache.sh +1 -4
  72. package/scripts/resolve-deps.js +5 -0
  73. package/scripts/test-llm.mjs +11 -5
  74. package/skills/gpu-ssh-monitor/SKILL.md +22 -3
  75. package/src/chat/builtin-commands.ts +70 -0
  76. package/src/chat/progress.ts +26 -0
  77. package/src/chat/response-safety.ts +134 -0
  78. package/src/chat/step-display.ts +54 -0
  79. package/src/chat/tool-result.ts +22 -0
  80. package/src/config.ts +48 -21
  81. package/src/index.ts +377 -167
  82. package/src/iterm/direct-command-router.ts +274 -0
  83. package/src/iterm/session-hint.ts +49 -0
  84. package/src/iterm/target-panel-policy.ts +341 -0
  85. package/src/runtime/text-tool-call-recovery.ts +257 -0
  86. package/src/{startup-colors.ts → startup/colors.ts} +42 -27
  87. package/src/startup/diagnostics.ts +25 -0
  88. package/src/startup/os.ts +63 -0
  89. package/src/startup/ui.ts +56 -0
  90. package/src/types/marked-terminal.d.ts +3 -0
  91. package/test/builtin-commands.test.mjs +50 -0
  92. package/test/chat-flow.integration.test.mjs +235 -0
  93. package/test/chat-progress.test.mjs +83 -0
  94. package/test/config.test.mjs +22 -0
  95. package/test/diagnostics.test.mjs +45 -0
  96. package/test/direct-command-router.test.mjs +149 -0
  97. package/test/live-iterm-llm.integration.test.mjs +153 -0
  98. package/test/response-safety.test.mjs +44 -0
  99. package/test/session-hint.test.mjs +78 -0
  100. package/test/startup-colors.test.mjs +145 -0
  101. package/test/target-panel-policy.test.mjs +180 -0
  102. package/test/tool-call-recovery.test.mjs +199 -0
  103. package/config/agent.yaml +0 -121
  104. package/config/models.yaml +0 -36
  105. package/config/skills.yaml +0 -4
  106. package/dist/agent.d.ts +0 -14
  107. package/dist/agent.d.ts.map +0 -1
  108. package/dist/agent.js +0 -16
  109. package/dist/agent.js.map +0 -1
  110. package/dist/context.d.ts +0 -12
  111. package/dist/context.d.ts.map +0 -1
  112. package/dist/context.js +0 -20
  113. package/dist/context.js.map +0 -1
  114. package/dist/session-hint.d.ts +0 -4
  115. package/dist/session-hint.d.ts.map +0 -1
  116. package/dist/session-hint.js +0 -25
  117. package/dist/session-hint.js.map +0 -1
  118. package/dist/startup-colors.d.ts +0 -26
  119. package/dist/startup-colors.d.ts.map +0 -1
  120. package/dist/startup-colors.js.map +0 -1
  121. package/dist/target-routing.d.ts +0 -15
  122. package/dist/target-routing.d.ts.map +0 -1
  123. package/dist/target-routing.js +0 -355
  124. package/dist/target-routing.js.map +0 -1
  125. package/src/agent.ts +0 -35
  126. package/src/context.ts +0 -35
  127. package/src/session-hint.ts +0 -28
  128. package/src/target-routing.ts +0 -419
@@ -0,0 +1,8 @@
1
+ export type ResponseSafetyMode = "off" | "balanced" | "strict";
2
+ export type ResponseSafetyOptions = {
3
+ evidenceText?: string;
4
+ targetOs?: string;
5
+ };
6
+ export declare function enforceResponseSafety(text: string): string;
7
+ export declare function enforceResponseSafetyWithMode(text: string, mode?: ResponseSafetyMode, options?: ResponseSafetyOptions): string;
8
+ //# sourceMappingURL=response-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-safety.d.ts","sourceRoot":"","sources":["../../src/chat/response-safety.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAsCF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAoDD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,kBAA+B,EACrC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,MAAM,CA+BR"}
@@ -0,0 +1,126 @@
1
+ function containsDangerousCommand(text) {
2
+ const patterns = [
3
+ /\brm\s+-rf\b/i,
4
+ /\bsudo\s+rm\b/i,
5
+ /\bmkfs(\.| )/i,
6
+ /\bdd\s+if=/i,
7
+ /\bdiskutil\s+erase/i,
8
+ ];
9
+ return patterns.some((re) => re.test(text));
10
+ }
11
+ function redactDangerousCommands(text) {
12
+ return text
13
+ .replace(/\brm\s+-rf\b/gi, "[redacted-destructive-command]")
14
+ .replace(/\bsudo\s+rm\b/gi, "[redacted-destructive-command]")
15
+ .replace(/\bmkfs(\.| )\S*/gi, "[redacted-destructive-command]")
16
+ .replace(/\bdd\s+if=\S+/gi, "[redacted-destructive-command]")
17
+ .replace(/\bdiskutil\s+erase\S*/gi, "[redacted-destructive-command]");
18
+ }
19
+ function removeRedactedSuggestionLines(text) {
20
+ const lines = text
21
+ .split("\n")
22
+ .filter((line) => !line.includes("[redacted-destructive-command]"));
23
+ return lines.join("\n").trim();
24
+ }
25
+ function buildGenericSafeGuidance() {
26
+ return [
27
+ "Safety-preserving workflow:",
28
+ "1. Start with non-destructive inspection and validation.",
29
+ "2. Propose reversible actions before irreversible ones.",
30
+ "3. Ask for explicit confirmation before destructive operations.",
31
+ ].join("\n");
32
+ }
33
+ export function enforceResponseSafety(text) {
34
+ const trimmed = text.trim();
35
+ if (!trimmed)
36
+ return trimmed;
37
+ return enforceResponseSafetyWithMode(trimmed, "balanced");
38
+ }
39
+ function extractAbsolutePaths(text) {
40
+ // Restrict path tokens to common path chars so we don't capture markup like "<parameter=...>".
41
+ const matches = text.match(/(?:^|[^A-Za-z0-9_])((?:\/[A-Za-z0-9._-]+)+)/g) ?? [];
42
+ const paths = matches
43
+ .map((raw) => raw.replace(/^[^/]+/, "").trim())
44
+ .map((p) => p.replace(/[.?!]+$/, ""))
45
+ .filter((p) => p.startsWith("/") && p.length > 1);
46
+ return Array.from(new Set(paths));
47
+ }
48
+ function hasEvidencePathOverlap(path, evidencePaths) {
49
+ for (const ev of evidencePaths) {
50
+ if (path === ev)
51
+ return true;
52
+ if (path.startsWith(`${ev}/`))
53
+ return true;
54
+ if (ev.startsWith(`${path}/`))
55
+ return true;
56
+ }
57
+ return false;
58
+ }
59
+ function replaceUngroundedPaths(text, options) {
60
+ const evidence = options?.evidenceText?.trim() ?? "";
61
+ if (!evidence)
62
+ return { text, replaced: 0 };
63
+ const responsePaths = extractAbsolutePaths(text);
64
+ if (responsePaths.length === 0)
65
+ return { text, replaced: 0 };
66
+ const evidencePaths = new Set(extractAbsolutePaths(evidence));
67
+ if (evidencePaths.size === 0)
68
+ return { text, replaced: 0 };
69
+ let out = text;
70
+ let replaced = 0;
71
+ for (const path of responsePaths) {
72
+ if (hasEvidencePathOverlap(path, evidencePaths))
73
+ continue;
74
+ const escaped = path.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
75
+ const re = new RegExp(escaped, "g");
76
+ if (re.test(out)) {
77
+ out = out.replace(re, "(not detected from evidence)");
78
+ replaced += 1;
79
+ }
80
+ }
81
+ // Extra guard for macOS: '/home/*' is usually ungrounded unless explicitly present in evidence.
82
+ if ((options?.targetOs ?? "").toLowerCase() === "darwin" && !Array.from(evidencePaths).some((p) => p.startsWith("/home/"))) {
83
+ const homeRe = /\/home\/[A-Za-z0-9._-]+/g;
84
+ if (homeRe.test(out)) {
85
+ out = out.replace(homeRe, "(not detected from evidence)");
86
+ replaced += 1;
87
+ }
88
+ }
89
+ return { text: out, replaced };
90
+ }
91
+ export function enforceResponseSafetyWithMode(text, mode = "balanced", options) {
92
+ const trimmed = text.trim();
93
+ if (!trimmed)
94
+ return trimmed;
95
+ if (mode === "off")
96
+ return trimmed;
97
+ const grounded = replaceUngroundedPaths(trimmed, options);
98
+ if (!containsDangerousCommand(grounded.text)) {
99
+ if (grounded.replaced === 0)
100
+ return grounded.text;
101
+ return `${grounded.text}\n\nSafety note: some paths were replaced because they were not found in tool evidence.`;
102
+ }
103
+ const redacted = redactDangerousCommands(grounded.text);
104
+ if (mode === "balanced") {
105
+ const out = [
106
+ redacted,
107
+ "",
108
+ "Safety note: destructive command suggestions were redacted. Proceed only with explicit confirmation.",
109
+ ].join("\n");
110
+ if (grounded.replaced === 0)
111
+ return out;
112
+ return `${out}\nSafety note: some paths were replaced because they were not found in tool evidence.`;
113
+ }
114
+ const cleaned = removeRedactedSuggestionLines(redacted);
115
+ const safetyNote = [
116
+ "Safety note: destructive command suggestions were redacted.",
117
+ "Prefer non-destructive validation first.",
118
+ "Proceed with destructive operations only after explicit confirmation.",
119
+ ].join(" ");
120
+ const body = cleaned.length > 0 ? cleaned : "Potentially destructive suggestions were removed.";
121
+ const strictOut = `${body}\n\n${buildGenericSafeGuidance()}\n\n${safetyNote}`;
122
+ if (grounded.replaced === 0)
123
+ return strictOut;
124
+ return `${strictOut}\nSafety note: some paths were replaced because they were not found in tool evidence.`;
125
+ }
126
+ //# sourceMappingURL=response-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-safety.js","sourceRoot":"","sources":["../../src/chat/response-safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function renderStepLine(line: string): string;
2
+ //# sourceMappingURL=step-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-display.d.ts","sourceRoot":"","sources":["../../src/chat/step-display.ts"],"names":[],"mappings":"AAaA,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwCnD"}
@@ -0,0 +1,50 @@
1
+ function supportsColor() {
2
+ return Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
3
+ }
4
+ function colorize(text, code) {
5
+ if (!supportsColor())
6
+ return text;
7
+ return `${code}${text}\x1b[0m`;
8
+ }
9
+ function trimStepPrefix(line) {
10
+ return line.replace(/^ {4}/, "");
11
+ }
12
+ export function renderStepLine(line) {
13
+ if (!line)
14
+ return "";
15
+ if (line.startsWith("=== Steps: ")) {
16
+ return colorize(`╭─ ${line.replace(/^===\s*/, "").replace(/\s*===$/, "")}`, "\x1b[1m\x1b[36m");
17
+ }
18
+ if (line.startsWith("=== Steps complete: ")) {
19
+ return colorize(`╰─ ${line.replace(/^===\s*/, "").replace(/\s*===$/, "")}`, "\x1b[1m\x1b[32m");
20
+ }
21
+ if (/^\[\d{2}\] ▶ /.test(line)) {
22
+ return colorize(`├─ ${line}`, "\x1b[33m");
23
+ }
24
+ if (/^\[\d{2}\] ✓ /.test(line)) {
25
+ return colorize(`├─ ${line}`, "\x1b[32m");
26
+ }
27
+ if (/^\[\d{2}\] ✖ /.test(line)) {
28
+ return colorize(`├─ ${line}`, "\x1b[31m");
29
+ }
30
+ if (line.startsWith(" reason: ")) {
31
+ return colorize(`│ ${trimStepPrefix(line)}`, "\x1b[2m");
32
+ }
33
+ if (line.startsWith(" error: ")) {
34
+ return colorize(`│ ${trimStepPrefix(line)}`, "\x1b[31m");
35
+ }
36
+ if (line.startsWith(" progress ")) {
37
+ return colorize(`│ ${trimStepPrefix(line)}`, "\x1b[34m");
38
+ }
39
+ if (line.startsWith(" skill: ")) {
40
+ return colorize(`│ ${trimStepPrefix(line)}`, "\x1b[35m");
41
+ }
42
+ if (line.startsWith(" memory: ")) {
43
+ return colorize(`│ ${trimStepPrefix(line)}`, "\x1b[2m");
44
+ }
45
+ if (line.startsWith(" context: ") || line.startsWith(" planning retry: ")) {
46
+ return colorize(`│ ${trimStepPrefix(line)}`, "\x1b[2m");
47
+ }
48
+ return line;
49
+ }
50
+ //# sourceMappingURL=step-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-display.js","sourceRoot":"","sources":["../../src/chat/step-display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function normalizeToolInvokeResult(raw: unknown): unknown;
2
+ export declare function toolResultOutputText(value: unknown): string | null;
3
+ export declare function stringifyToolResult(value: unknown): string;
4
+ //# sourceMappingURL=tool-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result.d.ts","sourceRoot":"","sources":["../../src/chat/tool-result.ts"],"names":[],"mappings":"AAEA,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE/D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMlE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAO1D"}
@@ -0,0 +1,24 @@
1
+ import { asRecord } from "@easynet/agent-common/utils";
2
+ export function normalizeToolInvokeResult(raw) {
3
+ return raw;
4
+ }
5
+ export function toolResultOutputText(value) {
6
+ const root = asRecord(value);
7
+ const result = asRecord(root?.result);
8
+ if (typeof result?.output === "string")
9
+ return result.output;
10
+ if (typeof root?.output === "string")
11
+ return root.output;
12
+ return null;
13
+ }
14
+ export function stringifyToolResult(value) {
15
+ if (typeof value === "string")
16
+ return value;
17
+ try {
18
+ return JSON.stringify(value, null, 2);
19
+ }
20
+ catch {
21
+ return String(value);
22
+ }
23
+ }
24
+ //# sourceMappingURL=tool-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../src/chat/tool-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,OAAO,MAAM,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IAC7D,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,7 +1,12 @@
1
- import { type AgentRuntimeConfig } from "@easynet/agent-runtime";
2
- export type AppConfig = AgentRuntimeConfig;
3
- export declare function loadAppConfig(configPath?: string): Promise<AppConfig>;
4
- export declare function getModelsConfigPath(config: AppConfig, agentName?: string): string;
5
- export declare function getMemoryConfigPath(config: AppConfig, agentName?: string): string;
6
- export declare function getToolConfigPath(config: AppConfig, agentName?: string): string;
1
+ export type PromptTemplates = {
2
+ systemPrompt?: string;
3
+ };
4
+ export type ResponseSafetyMode = "off" | "balanced" | "strict";
5
+ export type AppConfig = {
6
+ printSteps?: boolean;
7
+ maxSteps?: number;
8
+ promptTemplates?: PromptTemplates;
9
+ responseSafetyMode?: ResponseSafetyMode;
10
+ };
11
+ export declare function loadAppConfig(configPath: string): Promise<AppConfig>;
7
12
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAE3C,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAG3E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/E"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC,CAAC;AAEF,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAqC1E"}
package/dist/config.js CHANGED
@@ -1,15 +1,29 @@
1
- import { createRuntimeConfig, getModelsConfigPath as getRuntimeModelsConfigPath, getMemoryConfigPath as getRuntimeMemoryConfigPath, getToolConfigPath as getRuntimeToolConfigPath, } from "@easynet/agent-runtime";
1
+ import { resolveKindResourceFile, asObject } from "@easynet/agent-common/config";
2
2
  export async function loadAppConfig(configPath) {
3
- const runtimeConfig = await createRuntimeConfig({ configPath });
4
- return runtimeConfig;
5
- }
6
- export function getModelsConfigPath(config, agentName) {
7
- return getRuntimeModelsConfigPath(config, agentName);
8
- }
9
- export function getMemoryConfigPath(config, agentName) {
10
- return getRuntimeMemoryConfigPath(config, agentName);
11
- }
12
- export function getToolConfigPath(config, agentName) {
13
- return getRuntimeToolConfigPath(config, agentName);
3
+ try {
4
+ const resource = await resolveKindResourceFile(configPath, {
5
+ baseDir: process.cwd(),
6
+ expectedApiVersion: "easynet.world/v1",
7
+ expectedKind: "AppConfig",
8
+ });
9
+ const spec = asObject(resource.spec);
10
+ const modeRaw = typeof spec?.responseSafetyMode === "string" ? spec.responseSafetyMode.trim().toLowerCase() : "";
11
+ const responseSafetyMode = modeRaw === "off" || modeRaw === "balanced" || modeRaw === "strict"
12
+ ? modeRaw
13
+ : undefined;
14
+ const printSteps = typeof spec?.printSteps === "boolean" ? spec.printSteps : undefined;
15
+ const maxSteps = typeof spec?.maxSteps === "number" && Number.isFinite(spec.maxSteps)
16
+ ? Math.max(1, Math.floor(spec.maxSteps))
17
+ : undefined;
18
+ return {
19
+ printSteps,
20
+ maxSteps,
21
+ promptTemplates: spec?.promptTemplates,
22
+ responseSafetyMode,
23
+ };
24
+ }
25
+ catch {
26
+ return {};
27
+ }
14
28
  }
15
29
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,IAAI,0BAA0B,EACjD,mBAAmB,IAAI,0BAA0B,EACjD,iBAAiB,IAAI,wBAAwB,GAE9C,MAAM,wBAAwB,CAAC;AAIhC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAmB;IACrD,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,SAAkB;IACvE,OAAO,0BAA0B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,SAAkB;IACvE,OAAO,0BAA0B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,SAAkB;IACrE,OAAO,wBAAwB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAejF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAK3C,UAAU,EAAE;YACb,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;YACtB,kBAAkB,EAAE,kBAAkB;YACtC,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAKtB,CAAC;QACd,MAAM,OAAO,GAAG,OAAO,IAAI,EAAE,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjH,MAAM,kBAAkB,GACtB,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,QAAQ;YACjE,CAAC,CAAE,OAA8B;YACjC,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,UAAU,GAAG,OAAO,IAAI,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,QAAQ,GACZ,OAAO,IAAI,EAAE,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YAClE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO;YACL,UAAU;YACV,QAAQ;YACR,eAAe,EAAE,IAAI,EAAE,eAAe;YACtC,kBAAkB;SACnB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}