skyloom 1.14.8 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +2 -2
- package/.github/workflows/publish.yml +51 -4
- package/CONVERSION_PLAN.md +191 -191
- package/config/default.yaml +46 -43
- package/config/models.yaml +928 -155
- package/config/providers.yaml +109 -6
- package/dist/agents/snow.d.ts +2 -0
- package/dist/agents/snow.d.ts.map +1 -1
- package/dist/agents/snow.js +36 -5
- package/dist/agents/snow.js.map +1 -1
- package/dist/cli/loom_chat.d.ts.map +1 -1
- package/dist/cli/loom_chat.js +207 -1
- package/dist/cli/loom_chat.js.map +1 -1
- package/dist/cli/main.js +190 -40
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +6 -31
- package/dist/cli/tui.js.map +1 -1
- package/dist/core/agent.d.ts +6 -4
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +61 -20
- package/dist/core/agent.js.map +1 -1
- package/dist/core/catalog.d.ts.map +1 -1
- package/dist/core/catalog.js +30 -9
- package/dist/core/catalog.js.map +1 -1
- package/dist/core/commands.d.ts +110 -0
- package/dist/core/commands.d.ts.map +1 -0
- package/dist/core/commands.js +633 -0
- package/dist/core/commands.js.map +1 -0
- package/dist/core/concurrency.d.ts +38 -0
- package/dist/core/concurrency.d.ts.map +1 -0
- package/dist/core/concurrency.js +65 -0
- package/dist/core/concurrency.js.map +1 -0
- package/dist/core/factory.js +16 -16
- package/dist/core/file_checkpoint.d.ts +9 -0
- package/dist/core/file_checkpoint.d.ts.map +1 -1
- package/dist/core/file_checkpoint.js +33 -1
- package/dist/core/file_checkpoint.js.map +1 -1
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/llm.js +66 -13
- package/dist/core/llm.js.map +1 -1
- package/dist/core/memory.js +51 -51
- package/dist/core/schemas.d.ts +16 -0
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +32 -0
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/security.d.ts.map +1 -1
- package/dist/core/security.js +27 -0
- package/dist/core/security.js.map +1 -1
- package/dist/core/skymd.js +14 -14
- package/dist/core/trace.d.ts +105 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +213 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/tools/builtin.d.ts +2 -6
- package/dist/tools/builtin.d.ts.map +1 -1
- package/dist/tools/builtin.js +18 -111
- package/dist/tools/builtin.js.map +1 -1
- package/dist/tools/extra.d.ts +13 -0
- package/dist/tools/extra.d.ts.map +1 -0
- package/dist/tools/extra.js +827 -0
- package/dist/tools/extra.js.map +1 -0
- package/dist/tools/guards.d.ts +12 -0
- package/dist/tools/guards.d.ts.map +1 -0
- package/dist/tools/guards.js +143 -0
- package/dist/tools/guards.js.map +1 -0
- package/dist/tools/model_tool.d.ts.map +1 -1
- package/dist/tools/model_tool.js +24 -4
- package/dist/tools/model_tool.js.map +1 -1
- package/dist/web/markdown.d.ts +32 -0
- package/dist/web/markdown.d.ts.map +1 -0
- package/dist/web/markdown.js +202 -0
- package/dist/web/markdown.js.map +1 -0
- package/dist/web/server.d.ts +4 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +14 -582
- package/dist/web/server.js.map +1 -1
- package/dist/web/ui.d.ts +31 -0
- package/dist/web/ui.d.ts.map +1 -0
- package/dist/web/ui.js +1009 -0
- package/dist/web/ui.js.map +1 -0
- package/docs/AESTHETIC_DESIGN.md +152 -152
- package/docs/OPTIMIZATION_PLAN.md +178 -178
- package/package.json +1 -1
- package/src/agents/snow.ts +38 -5
- package/src/cli/commands_md.ts +112 -112
- package/src/cli/input_macros.ts +83 -83
- package/src/cli/loom.ts +1041 -1041
- package/src/cli/loom_chat.ts +772 -603
- package/src/cli/main.ts +853 -723
- package/src/cli/tui.ts +264 -289
- package/src/core/agent/guard.ts +133 -133
- package/src/core/agent/task.ts +100 -100
- package/src/core/agent.ts +1630 -1590
- package/src/core/agent_helpers.ts +500 -500
- package/src/core/bus.ts +221 -221
- package/src/core/cache.ts +153 -153
- package/src/core/catalog.ts +199 -178
- package/src/core/circuit_breaker.ts +119 -119
- package/src/core/commands.ts +704 -0
- package/src/core/concurrency.ts +73 -0
- package/src/core/config.ts +365 -365
- package/src/core/constants.ts +95 -95
- package/src/core/factory.ts +656 -656
- package/src/core/file_checkpoint.ts +163 -136
- package/src/core/hooks.ts +126 -126
- package/src/core/llm.ts +972 -915
- package/src/core/logger.ts +143 -143
- package/src/core/mcp.ts +1001 -1001
- package/src/core/memory.ts +1201 -1201
- package/src/core/middleware.ts +350 -350
- package/src/core/model_config.ts +159 -159
- package/src/core/pipelines.ts +424 -424
- package/src/core/schemas.ts +319 -282
- package/src/core/security.ts +27 -0
- package/src/core/semantic.ts +211 -211
- package/src/core/skill.ts +384 -384
- package/src/core/skymd.ts +143 -143
- package/src/core/theme.ts +65 -65
- package/src/core/tool.ts +457 -457
- package/src/core/trace.ts +236 -0
- package/src/core/verify.ts +71 -71
- package/src/plugins/loader.ts +91 -91
- package/src/skills/loader.ts +75 -75
- package/src/tools/builtin.ts +571 -642
- package/src/tools/computer.ts +279 -279
- package/src/tools/extra.ts +662 -0
- package/src/tools/guards.ts +82 -0
- package/src/tools/model_tool.ts +93 -74
- package/src/tools/todo.ts +76 -76
- package/src/web/markdown.ts +193 -0
- package/src/web/server.ts +117 -693
- package/src/web/ui.ts +949 -0
- package/tests/agent.test.ts +211 -159
- package/tests/agent_helpers.test.ts +48 -48
- package/tests/catalog.test.ts +86 -86
- package/tests/checkpoint_commands.test.ts +124 -124
- package/tests/claude_compat.test.ts +110 -110
- package/tests/commands.test.ts +103 -0
- package/tests/concurrency.test.ts +102 -0
- package/tests/config.test.ts +41 -41
- package/tests/extra_tools.test.ts +212 -0
- package/tests/fence_plugin.test.ts +52 -52
- package/tests/guard.test.ts +75 -75
- package/tests/loom.test.ts +337 -337
- package/tests/memory.test.ts +170 -170
- package/tests/model_config.test.ts +109 -109
- package/tests/skymd.test.ts +146 -146
- package/tests/ssrf.test.ts +38 -38
- package/tests/structured_retry.test.ts +87 -0
- package/tests/task.test.ts +60 -60
- package/tests/todo_toolstats.test.ts +94 -94
- package/tests/trace.test.ts +128 -0
- package/tests/tui.test.ts +67 -67
- package/tests/web.test.ts +169 -0
- package/tsconfig.json +38 -38
package/dist/core/memory.js
CHANGED
|
@@ -135,16 +135,16 @@ class Memory {
|
|
|
135
135
|
this.db.run('PRAGMA journal_mode = MEMORY');
|
|
136
136
|
this.db.run('PRAGMA busy_timeout = 100');
|
|
137
137
|
// Create tables
|
|
138
|
-
this.db.run(`
|
|
139
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
140
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
141
|
-
agent TEXT NOT NULL,
|
|
142
|
-
key TEXT NOT NULL,
|
|
143
|
-
value TEXT NOT NULL,
|
|
144
|
-
category TEXT DEFAULT 'general',
|
|
145
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
146
|
-
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
147
|
-
)
|
|
138
|
+
this.db.run(`
|
|
139
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
140
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
141
|
+
agent TEXT NOT NULL,
|
|
142
|
+
key TEXT NOT NULL,
|
|
143
|
+
value TEXT NOT NULL,
|
|
144
|
+
category TEXT DEFAULT 'general',
|
|
145
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
146
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
147
|
+
)
|
|
148
148
|
`);
|
|
149
149
|
// Migrate existing DBs
|
|
150
150
|
try {
|
|
@@ -168,19 +168,19 @@ class Memory {
|
|
|
168
168
|
}
|
|
169
169
|
this.db.run('CREATE UNIQUE INDEX IF NOT EXISTS idx_agent_key ON memories(agent, key)');
|
|
170
170
|
this.db.run('CREATE INDEX IF NOT EXISTS idx_agent_category ON memories(agent, category)');
|
|
171
|
-
this.db.run(`
|
|
172
|
-
CREATE TABLE IF NOT EXISTS messages (
|
|
173
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
174
|
-
agent TEXT NOT NULL,
|
|
175
|
-
role TEXT NOT NULL,
|
|
176
|
-
content TEXT NOT NULL,
|
|
177
|
-
name TEXT,
|
|
178
|
-
tool_call_id TEXT,
|
|
179
|
-
tool_calls TEXT,
|
|
180
|
-
reasoning_content TEXT,
|
|
181
|
-
session_id TEXT,
|
|
182
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
183
|
-
)
|
|
171
|
+
this.db.run(`
|
|
172
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
173
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
174
|
+
agent TEXT NOT NULL,
|
|
175
|
+
role TEXT NOT NULL,
|
|
176
|
+
content TEXT NOT NULL,
|
|
177
|
+
name TEXT,
|
|
178
|
+
tool_call_id TEXT,
|
|
179
|
+
tool_calls TEXT,
|
|
180
|
+
reasoning_content TEXT,
|
|
181
|
+
session_id TEXT,
|
|
182
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
183
|
+
)
|
|
184
184
|
`);
|
|
185
185
|
this.db.run('CREATE INDEX IF NOT EXISTS idx_messages_agent ON messages(agent, created_at)');
|
|
186
186
|
try {
|
|
@@ -201,26 +201,26 @@ class Memory {
|
|
|
201
201
|
catch {
|
|
202
202
|
// Column already exists
|
|
203
203
|
}
|
|
204
|
-
this.db.run(`
|
|
205
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
206
|
-
id TEXT PRIMARY KEY,
|
|
207
|
-
agent TEXT NOT NULL,
|
|
208
|
-
name TEXT,
|
|
209
|
-
preview TEXT DEFAULT '',
|
|
210
|
-
message_count INTEGER DEFAULT 0,
|
|
211
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
212
|
-
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
213
|
-
)
|
|
204
|
+
this.db.run(`
|
|
205
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
206
|
+
id TEXT PRIMARY KEY,
|
|
207
|
+
agent TEXT NOT NULL,
|
|
208
|
+
name TEXT,
|
|
209
|
+
preview TEXT DEFAULT '',
|
|
210
|
+
message_count INTEGER DEFAULT 0,
|
|
211
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
212
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
213
|
+
)
|
|
214
214
|
`);
|
|
215
215
|
this.db.run('CREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent, updated_at DESC)');
|
|
216
|
-
this.db.run(`
|
|
217
|
-
CREATE TABLE IF NOT EXISTS working_data (
|
|
218
|
-
agent TEXT NOT NULL,
|
|
219
|
-
key TEXT NOT NULL,
|
|
220
|
-
value TEXT NOT NULL,
|
|
221
|
-
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
222
|
-
PRIMARY KEY (agent, key)
|
|
223
|
-
)
|
|
216
|
+
this.db.run(`
|
|
217
|
+
CREATE TABLE IF NOT EXISTS working_data (
|
|
218
|
+
agent TEXT NOT NULL,
|
|
219
|
+
key TEXT NOT NULL,
|
|
220
|
+
value TEXT NOT NULL,
|
|
221
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
222
|
+
PRIMARY KEY (agent, key)
|
|
223
|
+
)
|
|
224
224
|
`);
|
|
225
225
|
this.loadShortTerm();
|
|
226
226
|
this.loadWorking();
|
|
@@ -319,9 +319,9 @@ class Memory {
|
|
|
319
319
|
}
|
|
320
320
|
let rows = [];
|
|
321
321
|
if (this.activeSession) {
|
|
322
|
-
rows = this.dbAll(`SELECT role, content, name, tool_call_id, tool_calls, reasoning_content, created_at
|
|
323
|
-
FROM messages
|
|
324
|
-
WHERE agent = ? AND session_id = ?
|
|
322
|
+
rows = this.dbAll(`SELECT role, content, name, tool_call_id, tool_calls, reasoning_content, created_at
|
|
323
|
+
FROM messages
|
|
324
|
+
WHERE agent = ? AND session_id = ?
|
|
325
325
|
ORDER BY id DESC LIMIT ?`, [this.agentName, this.activeSession, this.config.shortTermLimit]);
|
|
326
326
|
}
|
|
327
327
|
else {
|
|
@@ -557,7 +557,7 @@ class Memory {
|
|
|
557
557
|
return;
|
|
558
558
|
}
|
|
559
559
|
try {
|
|
560
|
-
this.dbRun(`INSERT INTO messages (agent, role, content, name, tool_call_id, tool_calls, reasoning_content, session_id)
|
|
560
|
+
this.dbRun(`INSERT INTO messages (agent, role, content, name, tool_call_id, tool_calls, reasoning_content, session_id)
|
|
561
561
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [this.agentName, role, content, name, toolCallId, toolCalls, reasoningContent, sessionId]);
|
|
562
562
|
if (sessionId) {
|
|
563
563
|
this.dbRun('UPDATE sessions SET message_count = message_count + 1, updated_at = CURRENT_TIMESTAMP WHERE id = ?', [sessionId]);
|
|
@@ -568,9 +568,9 @@ class Memory {
|
|
|
568
568
|
const row = this.dbGet('SELECT COUNT(*) as count FROM messages WHERE agent = ? AND session_id = ? AND role != ?', [this.agentName, sessionId, 'system']);
|
|
569
569
|
if (row && row.count > maxPersisted) {
|
|
570
570
|
const excess = row.count - maxPersisted;
|
|
571
|
-
this.dbRun(`DELETE FROM messages WHERE id IN (
|
|
572
|
-
SELECT id FROM messages WHERE agent = ? AND session_id = ? AND role != ?
|
|
573
|
-
ORDER BY id ASC LIMIT ?
|
|
571
|
+
this.dbRun(`DELETE FROM messages WHERE id IN (
|
|
572
|
+
SELECT id FROM messages WHERE agent = ? AND session_id = ? AND role != ?
|
|
573
|
+
ORDER BY id ASC LIMIT ?
|
|
574
574
|
)`, [this.agentName, sessionId, 'system', excess]);
|
|
575
575
|
}
|
|
576
576
|
}
|
|
@@ -704,7 +704,7 @@ class Memory {
|
|
|
704
704
|
if (!this.db) {
|
|
705
705
|
return;
|
|
706
706
|
}
|
|
707
|
-
this.dbRun(`INSERT INTO memories (agent, key, value, category) VALUES (?, ?, ?, ?)
|
|
707
|
+
this.dbRun(`INSERT INTO memories (agent, key, value, category) VALUES (?, ?, ?, ?)
|
|
708
708
|
ON CONFLICT(agent, key) DO UPDATE SET value = excluded.value, category = excluded.category, updated_at = CURRENT_TIMESTAMP`, [this.agentName, key, JSON.stringify(value), category]);
|
|
709
709
|
}
|
|
710
710
|
/**
|
|
@@ -783,8 +783,8 @@ class Memory {
|
|
|
783
783
|
params.push(pattern, pattern);
|
|
784
784
|
}
|
|
785
785
|
params.push(limit * 2);
|
|
786
|
-
const sql = `SELECT key, value, category, updated_at FROM memories
|
|
787
|
-
WHERE agent = ? AND (${likeClauses})
|
|
786
|
+
const sql = `SELECT key, value, category, updated_at FROM memories
|
|
787
|
+
WHERE agent = ? AND (${likeClauses})
|
|
788
788
|
ORDER BY updated_at DESC LIMIT ?`;
|
|
789
789
|
const rows = this.dbAll(sql, params);
|
|
790
790
|
for (const r of rows) {
|
package/dist/core/schemas.d.ts
CHANGED
|
@@ -79,4 +79,20 @@ export declare function validateTaskPlan(data: unknown): TaskPlanSchema;
|
|
|
79
79
|
* Validate extraction result schema
|
|
80
80
|
*/
|
|
81
81
|
export declare function validateExtractionResult(data: unknown): ExtractionResultSchema;
|
|
82
|
+
/**
|
|
83
|
+
* Ask an LLM for structured output and validate it, retrying with the parse
|
|
84
|
+
* error fed back as a correction when it comes back malformed — the pattern
|
|
85
|
+
* every production agent framework uses (LangGraph structured output, Pydantic
|
|
86
|
+
* AI, OpenAI Agents SDK output types). Without it, a single bad JSON response
|
|
87
|
+
* silently degrades the run (e.g. a multi-step plan collapses to one task).
|
|
88
|
+
*
|
|
89
|
+
* `ask(priorError, attempt)` produces the raw model text; on a retry it receives
|
|
90
|
+
* the previous validation error so the caller can append a correction to the
|
|
91
|
+
* prompt. `parse` must THROW (ideally SchemaValidationError) on invalid input.
|
|
92
|
+
* Returns the first valid value, or throws after exhausting `retries`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function parseWithRetry<T>(ask: (priorError: string | null, attempt: number) => Promise<string>, parse: (raw: string) => T, opts?: {
|
|
95
|
+
retries?: number;
|
|
96
|
+
onRetry?: (attempt: number, error: string) => void;
|
|
97
|
+
}): Promise<T>;
|
|
82
98
|
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,GAAG,EAAE,MAAM,CAAC;gBAEA,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAW;CAK9C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAuFD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,UAAU,CAAC,GACvB,CAAC,CAuBH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CA4C9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CA+B9E"}
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,GAAG,EAAE,MAAM,CAAC;gBAEA,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAW;CAK9C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAuFD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,UAAU,CAAC,GACvB,CAAC,CAuBH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,CA4C9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CA+B9E;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACpE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,EACzB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC9E,OAAO,CAAC,CAAC,CAAC,CAeZ"}
|
package/dist/core/schemas.js
CHANGED
|
@@ -15,6 +15,7 @@ exports.SchemaValidationError = void 0;
|
|
|
15
15
|
exports.parseSchema = parseSchema;
|
|
16
16
|
exports.validateTaskPlan = validateTaskPlan;
|
|
17
17
|
exports.validateExtractionResult = validateExtractionResult;
|
|
18
|
+
exports.parseWithRetry = parseWithRetry;
|
|
18
19
|
/**
|
|
19
20
|
* Error raised when an LLM response fails schema validation.
|
|
20
21
|
* Carries both a human-readable message and the raw text so callers
|
|
@@ -197,4 +198,35 @@ function validateExtractionResult(data) {
|
|
|
197
198
|
});
|
|
198
199
|
return { facts };
|
|
199
200
|
}
|
|
201
|
+
/* ════════════════════════════════════════
|
|
202
|
+
Structured-output retry
|
|
203
|
+
════════════════════════════════════════ */
|
|
204
|
+
/**
|
|
205
|
+
* Ask an LLM for structured output and validate it, retrying with the parse
|
|
206
|
+
* error fed back as a correction when it comes back malformed — the pattern
|
|
207
|
+
* every production agent framework uses (LangGraph structured output, Pydantic
|
|
208
|
+
* AI, OpenAI Agents SDK output types). Without it, a single bad JSON response
|
|
209
|
+
* silently degrades the run (e.g. a multi-step plan collapses to one task).
|
|
210
|
+
*
|
|
211
|
+
* `ask(priorError, attempt)` produces the raw model text; on a retry it receives
|
|
212
|
+
* the previous validation error so the caller can append a correction to the
|
|
213
|
+
* prompt. `parse` must THROW (ideally SchemaValidationError) on invalid input.
|
|
214
|
+
* Returns the first valid value, or throws after exhausting `retries`.
|
|
215
|
+
*/
|
|
216
|
+
async function parseWithRetry(ask, parse, opts) {
|
|
217
|
+
const retries = Math.max(0, opts?.retries ?? 2);
|
|
218
|
+
let lastError = "";
|
|
219
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
220
|
+
const raw = await ask(attempt === 0 ? null : lastError, attempt);
|
|
221
|
+
try {
|
|
222
|
+
return parse(raw);
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
lastError = e instanceof Error ? e.message : String(e);
|
|
226
|
+
if (attempt < retries)
|
|
227
|
+
opts?.onRetry?.(attempt + 1, lastError);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
throw new SchemaValidationError(`structured output still invalid after ${retries + 1} attempt(s): ${lastError}`);
|
|
231
|
+
}
|
|
200
232
|
//# sourceMappingURL=schemas.js.map
|
package/dist/core/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAgKH,kCA0BC;AAKD,4CA4CC;AAKD,4DA+BC;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,oBAAY,WAAW;IACrB,iDAAiD;IACjD,IAAI,IAAI;IACR,kEAAkE;IAClE,GAAG,IAAI;IACP,sEAAsE;IACtE,MAAM,IAAI;IACV,6DAA6D;IAC7D,IAAI,IAAI;IACR,yDAAyD;IACzD,QAAQ,IAAI;CACb;AAKD,QAAA,MAAM,gBAAgB,UAMrB,CAAC;AAEF,QAAA,MAAM,gBAAgB,UAGrB,CAAC;
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,oBAAY,WAAW;IACrB,iDAAiD;IACjD,IAAI,IAAI;IACR,kEAAkE;IAClE,GAAG,IAAI;IACP,sEAAsE;IACtE,MAAM,IAAI;IACV,6DAA6D;IAC7D,IAAI,IAAI;IACR,yDAAyD;IACzD,QAAQ,IAAI;CACb;AAKD,QAAA,MAAM,gBAAgB,UAMrB,CAAC;AAEF,QAAA,MAAM,gBAAgB,UAGrB,CAAC;AAoFF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,qBAAa,eAAe;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAM;IAC5B,WAAW,SAAK;IAChB,iBAAiB,SAAK;IACtB,mBAAmB,SAAK;IACxB,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAU;IAEhE,OAAO,CAAC,gBAAgB,CAAoG;gBAEhH,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;QAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE;IAK9J,2EAA2E;IAC3E,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAI7C,sEAAsE;IACtE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI;IAYxE,8EAA8E;IACxE,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAsC/G,6BAA6B;IAC7B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBlL,8BAA8B;IAC9B,QAAQ;;;;;;;;;;;;;;IAiBR,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC;CAG1G;AAKD,wBAAgB,WAAW,IAAI,eAAe,CAG7C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,qEAAqE;AACrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/core/security.js
CHANGED
|
@@ -61,10 +61,33 @@ const TOOL_DANGER_MAP = {
|
|
|
61
61
|
list_skills: DangerLevel.SAFE,
|
|
62
62
|
recall_facts: DangerLevel.SAFE,
|
|
63
63
|
mcp_list_servers: DangerLevel.SAFE,
|
|
64
|
+
// read-only introspection (extra.ts)
|
|
65
|
+
file_info: DangerLevel.SAFE,
|
|
66
|
+
hash: DangerLevel.SAFE,
|
|
67
|
+
base64: DangerLevel.SAFE,
|
|
68
|
+
json_query: DangerLevel.SAFE,
|
|
69
|
+
dns_lookup: DangerLevel.SAFE,
|
|
70
|
+
port_check: DangerLevel.SAFE,
|
|
71
|
+
env_get: DangerLevel.SAFE,
|
|
72
|
+
disk_usage: DangerLevel.SAFE,
|
|
73
|
+
clipboard_read: DangerLevel.SAFE,
|
|
74
|
+
which: DangerLevel.SAFE,
|
|
75
|
+
diff_files: DangerLevel.SAFE,
|
|
76
|
+
uuid: DangerLevel.SAFE,
|
|
77
|
+
random_string: DangerLevel.SAFE,
|
|
78
|
+
current_time: DangerLevel.SAFE,
|
|
64
79
|
write_file: DangerLevel.LOW,
|
|
65
80
|
edit_file: DangerLevel.LOW,
|
|
66
81
|
copy_file: DangerLevel.LOW,
|
|
67
82
|
move_file: DangerLevel.LOW,
|
|
83
|
+
make_directory: DangerLevel.LOW,
|
|
84
|
+
append_file: DangerLevel.LOW,
|
|
85
|
+
replace_in_file: DangerLevel.LOW,
|
|
86
|
+
sqlite_query: DangerLevel.LOW,
|
|
87
|
+
gzip_file: DangerLevel.LOW,
|
|
88
|
+
gunzip_file: DangerLevel.LOW,
|
|
89
|
+
clipboard_write: DangerLevel.LOW,
|
|
90
|
+
git_branch: DangerLevel.LOW,
|
|
68
91
|
http_get: DangerLevel.LOW,
|
|
69
92
|
fetch_page: DangerLevel.LOW,
|
|
70
93
|
web_search: DangerLevel.LOW,
|
|
@@ -76,6 +99,8 @@ const TOOL_DANGER_MAP = {
|
|
|
76
99
|
git_commit: DangerLevel.MEDIUM,
|
|
77
100
|
git_checkout: DangerLevel.MEDIUM,
|
|
78
101
|
http_post: DangerLevel.MEDIUM,
|
|
102
|
+
http_request: DangerLevel.MEDIUM,
|
|
103
|
+
download_file: DangerLevel.MEDIUM,
|
|
79
104
|
mcp_add_server: DangerLevel.MEDIUM,
|
|
80
105
|
mcp_remove_server: DangerLevel.MEDIUM,
|
|
81
106
|
launch_app: DangerLevel.MEDIUM,
|
|
@@ -87,6 +112,8 @@ const TOOL_DANGER_MAP = {
|
|
|
87
112
|
package_manager: DangerLevel.HIGH,
|
|
88
113
|
service_control: DangerLevel.HIGH,
|
|
89
114
|
delegate_to: DangerLevel.HIGH,
|
|
115
|
+
git_push: DangerLevel.HIGH,
|
|
116
|
+
git_pull: DangerLevel.HIGH,
|
|
90
117
|
mcp_scaffold_server: DangerLevel.HIGH,
|
|
91
118
|
};
|
|
92
119
|
/* ═══════════════════════════════════════
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/core/security.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA8PH,kCAGC;AAED,sCAEC;AAnQD,qCAAqC;AAErC,MAAM,GAAG,GAAG,IAAA,kBAAS,EAAC,UAAU,CAAC,CAAC;AAElC,yBAAyB;AACzB,IAAY,WAWX;AAXD,WAAY,WAAW;IACrB,iDAAiD;IACjD,6CAAQ,CAAA;IACR,kEAAkE;IAClE,2CAAO,CAAA;IACP,sEAAsE;IACtE,iDAAU,CAAA;IACV,6DAA6D;IAC7D,6CAAQ,CAAA;IACR,yDAAyD;IACzD,qDAAY,CAAA;AACd,CAAC,EAXW,WAAW,2BAAX,WAAW,QAWtB;AAED;;6CAE6C;AAC7C,MAAM,gBAAgB,GAAG;IACvB,UAAU,EAAY,cAAc,EAAU,UAAU;IACxD,eAAe,EAAO,QAAQ,EAAgB,gBAAgB;IAC9D,WAAW,EAAW,kBAAkB,EAAM,cAAc;IAC5D,gBAAgB,EAAM,WAAW,EAAa,WAAW;IACzD,sBAAsB,EAAE,gBAAgB;CACzC,CAAC;AA2OO,4CAAgB;AAzOzB,MAAM,gBAAgB,GAAG;IACvB,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IACxC,oBAAoB,EAAE,eAAe;CACtC,CAAC;AAsOyB,4CAAgB;AApO3C;;6CAE6C;AAC7C,MAAM,eAAe,GAAgC;IACnD,SAAS,EAAE,WAAW,CAAC,IAAI;IAC3B,cAAc,EAAE,WAAW,CAAC,IAAI;IAChC,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,QAAQ,EAAE,WAAW,CAAC,IAAI;IAC1B,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,eAAe,EAAE,WAAW,CAAC,IAAI;IACjC,cAAc,EAAE,WAAW,CAAC,IAAI;IAChC,mBAAmB,EAAE,WAAW,CAAC,IAAI;IACrC,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,YAAY,EAAE,WAAW,CAAC,IAAI;IAC9B,gBAAgB,EAAE,WAAW,CAAC,IAAI;IAClC,qCAAqC;IACrC,SAAS,EAAE,WAAW,CAAC,IAAI;IAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,MAAM,EAAE,WAAW,CAAC,IAAI;IACxB,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,OAAO,EAAE,WAAW,CAAC,IAAI;IACzB,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,cAAc,EAAE,WAAW,CAAC,IAAI;IAChC,KAAK,EAAE,WAAW,CAAC,IAAI;IACvB,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,aAAa,EAAE,WAAW,CAAC,IAAI;IAC/B,YAAY,EAAE,WAAW,CAAC,IAAI;IAE9B,UAAU,EAAE,WAAW,CAAC,GAAG;IAC3B,SAAS,EAAE,WAAW,CAAC,GAAG;IAC1B,SAAS,EAAE,WAAW,CAAC,GAAG;IAC1B,SAAS,EAAE,WAAW,CAAC,GAAG;IAC1B,cAAc,EAAE,WAAW,CAAC,GAAG;IAC/B,WAAW,EAAE,WAAW,CAAC,GAAG;IAC5B,eAAe,EAAE,WAAW,CAAC,GAAG;IAChC,YAAY,EAAE,WAAW,CAAC,GAAG;IAC7B,SAAS,EAAE,WAAW,CAAC,GAAG;IAC1B,WAAW,EAAE,WAAW,CAAC,GAAG;IAC5B,eAAe,EAAE,WAAW,CAAC,GAAG;IAChC,UAAU,EAAE,WAAW,CAAC,GAAG;IAC3B,QAAQ,EAAE,WAAW,CAAC,GAAG;IACzB,UAAU,EAAE,WAAW,CAAC,GAAG;IAC3B,UAAU,EAAE,WAAW,CAAC,GAAG;IAC3B,aAAa,EAAE,WAAW,CAAC,GAAG;IAC9B,SAAS,EAAE,WAAW,CAAC,GAAG;IAC1B,SAAS,EAAE,WAAW,CAAC,GAAG;IAE1B,WAAW,EAAE,WAAW,CAAC,MAAM;IAC/B,OAAO,EAAE,WAAW,CAAC,MAAM;IAC3B,UAAU,EAAE,WAAW,CAAC,MAAM;IAC9B,YAAY,EAAE,WAAW,CAAC,MAAM;IAChC,SAAS,EAAE,WAAW,CAAC,MAAM;IAC7B,YAAY,EAAE,WAAW,CAAC,MAAM;IAChC,aAAa,EAAE,WAAW,CAAC,MAAM;IACjC,cAAc,EAAE,WAAW,CAAC,MAAM;IAClC,iBAAiB,EAAE,WAAW,CAAC,MAAM;IACrC,UAAU,EAAE,WAAW,CAAC,MAAM;IAC9B,SAAS,EAAE,WAAW,CAAC,MAAM;IAC7B,YAAY,EAAE,WAAW,CAAC,MAAM;IAEhC,QAAQ,EAAE,WAAW,CAAC,IAAI;IAC1B,UAAU,EAAE,WAAW,CAAC,IAAI;IAC5B,YAAY,EAAE,WAAW,CAAC,IAAI;IAC9B,eAAe,EAAE,WAAW,CAAC,IAAI;IACjC,eAAe,EAAE,WAAW,CAAC,IAAI;IACjC,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,QAAQ,EAAE,WAAW,CAAC,IAAI;IAC1B,QAAQ,EAAE,WAAW,CAAC,IAAI;IAC1B,mBAAmB,EAAE,WAAW,CAAC,IAAI;CACtC,CAAC;AAiBF;;6CAE6C;AAC7C,MAAa,eAAe;IAS1B,YAAY,IAAkJ;QARvJ,aAAQ,GAAiB,EAAE,CAAC;QAC5B,gBAAW,GAAG,CAAC,CAAC;QAChB,sBAAiB,GAAG,CAAC,CAAC;QACtB,wBAAmB,GAAG,CAAC,CAAC;QACxB,iBAAY,GAAsC,MAAM,CAAC;QAExD,qBAAgB,GAA+F,IAAI,CAAC;QAG1H,IAAI,IAAI,EAAE,IAAI;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9C,IAAI,IAAI,EAAE,SAAS;YAAE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;IAC9D,CAAC;IAED,2EAA2E;IAC3E,cAAc,CAAC,QAAgB;QAC7B,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,sEAAsE;IACtE,YAAY,CAAC,QAAgB,EAAE,IAAyB;QACtD,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QACtE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,OAAO,8BAA8B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5F,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,qBAAqB,SAAS,EAAE,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,IAAyB,EAAE,SAAiB;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE5C,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACnF,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,sBAAsB;QACtB,IAAI,KAAK,KAAK,WAAW,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtD,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,EAAE,sBAAsB,QAAQ,YAAY,KAAK,4BAA4B,CAAC,CAAC;QAC9F,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,IAAI,WAAW,CAAC,GAAG;gBAAE,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACxD,IAAI,KAAK,KAAK,WAAW,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,EAAE,kBAAkB,QAAQ,oCAAoC,CAAC,CAAC;YACnH,8CAA8C;YAC9C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,mCAAmC;QAChE,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACpE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,IAAyB,EAAE,WAAwB,EAAE,QAAiB,EAAE,aAAqB,EAAE,UAAkB,EAAE,OAAe;QACzK,MAAM,KAAK,GAAe;YACxB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ;YACxC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACnC,UAAU,EAAE,OAAO;SACpB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI;gBAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;;gBAC3D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,eAAe,EAAE;YACtF,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B;IAC9B,QAAQ;QACN,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC3B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,YAAY,EAAE,IAAI,CAAC,iBAAiB;YACpC,cAAc,EAAE,IAAI,CAAC,mBAAmB;YACxC,OAAO,EAAE;gBACP,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC1E,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM;gBACxE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM;gBAC9E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM;aACnF;YACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;SAChG,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,mBAAmB,CAAC,EAAqF;QACvG,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;CACF;AApHD,0CAoHC;AAED,mCAAmC;AACnC,IAAI,cAAc,GAA2B,IAAI,CAAC;AAElD,SAAgB,WAAW;IACzB,IAAI,CAAC,cAAc;QAAE,cAAc,GAAG,IAAI,eAAe,EAAE,CAAC;IAC5D,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAgB,aAAa;IAC3B,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
|
package/dist/core/skymd.js
CHANGED
|
@@ -109,11 +109,11 @@ function loadProjectMemory(cwd = process.cwd()) {
|
|
|
109
109
|
text = text.slice(0, MAX_MEMORY_CHARS) + '\n…[truncated]';
|
|
110
110
|
return { text, files };
|
|
111
111
|
}
|
|
112
|
-
const SKY_MD_HEADER = `# SKY.md — 项目记忆
|
|
113
|
-
|
|
114
|
-
> Skyloom agents 启动时自动加载本文件。写团队约定、构建/测试命令、代码风格。
|
|
115
|
-
> 对话中输入 \`#内容\` 可快速追加一条。
|
|
116
|
-
|
|
112
|
+
const SKY_MD_HEADER = `# SKY.md — 项目记忆
|
|
113
|
+
|
|
114
|
+
> Skyloom agents 启动时自动加载本文件。写团队约定、构建/测试命令、代码风格。
|
|
115
|
+
> 对话中输入 \`#内容\` 可快速追加一条。
|
|
116
|
+
|
|
117
117
|
`;
|
|
118
118
|
/**
|
|
119
119
|
* Append a one-line note (the \`#\` quick-memory flow).
|
|
@@ -164,14 +164,14 @@ function parseVerifyCommands(memoryText) {
|
|
|
164
164
|
return cmds;
|
|
165
165
|
}
|
|
166
166
|
/** The prompt behind /init — asks the agent to study the repo and write SKY.md. */
|
|
167
|
-
exports.INIT_PROMPT = `请为当前项目生成一份 SKY.md 项目记忆文件(如已存在则改进它):
|
|
168
|
-
|
|
169
|
-
1. 用工具调研项目:读 README、package.json/pyproject.toml/Cargo.toml 等清单文件,list_directory 看结构,必要时读关键入口源码
|
|
170
|
-
2. 写出一份**短而精**的 SKY.md(每一行都占用所有 agent 的上下文,宁缺毋滥),包含:
|
|
171
|
-
- 项目一句话定位与技术栈
|
|
172
|
-
- 构建/测试/lint 命令(放在 "## Verify" 小节的代码块里,agents 会用它自动验证)
|
|
173
|
-
- 目录结构要点(只列关键目录)
|
|
174
|
-
- 代码风格与硬性约束(如「禁止 any」「提交信息格式」)
|
|
175
|
-
3. 用 write_file 写到项目根目录 SKY.md
|
|
167
|
+
exports.INIT_PROMPT = `请为当前项目生成一份 SKY.md 项目记忆文件(如已存在则改进它):
|
|
168
|
+
|
|
169
|
+
1. 用工具调研项目:读 README、package.json/pyproject.toml/Cargo.toml 等清单文件,list_directory 看结构,必要时读关键入口源码
|
|
170
|
+
2. 写出一份**短而精**的 SKY.md(每一行都占用所有 agent 的上下文,宁缺毋滥),包含:
|
|
171
|
+
- 项目一句话定位与技术栈
|
|
172
|
+
- 构建/测试/lint 命令(放在 "## Verify" 小节的代码块里,agents 会用它自动验证)
|
|
173
|
+
- 目录结构要点(只列关键目录)
|
|
174
|
+
- 代码风格与硬性约束(如「禁止 any」「提交信息格式」)
|
|
175
|
+
3. 用 write_file 写到项目根目录 SKY.md
|
|
176
176
|
4. 最后简要汇报你写了什么`;
|
|
177
177
|
//# sourceMappingURL=skymd.js.map
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run tracing — span-based observability for the agent loop.
|
|
3
|
+
*
|
|
4
|
+
* Every leading agent framework (LangGraph/LangSmith, AutoGen, OpenAI Agents
|
|
5
|
+
* SDK) exposes a hierarchical trace of a run: the turn, the LLM calls inside it,
|
|
6
|
+
* the tool calls inside those, each with timing, token/cost accounting and
|
|
7
|
+
* ok/error status. Skyloom logged these as flat, uncorrelated JSON lines, so a
|
|
8
|
+
* latency spike or cost blowup couldn't be attributed to a step.
|
|
9
|
+
*
|
|
10
|
+
* This module is a dependency-free, in-process tracer:
|
|
11
|
+
* - a `Trace` is one turn; it holds a flat list of `Span`s linked by parentId
|
|
12
|
+
* - the `Tracer` keeps the active trace + a span stack, and a ring buffer of
|
|
13
|
+
* recently-finished traces for `/trace` and programmatic inspection
|
|
14
|
+
* - it is pure and clock-injectable, so it is fully unit-testable
|
|
15
|
+
*
|
|
16
|
+
* It never throws into the caller: a disabled tracer hands back no-op handles,
|
|
17
|
+
* and finishing a span/trace is idempotent.
|
|
18
|
+
*/
|
|
19
|
+
export type SpanKind = 'turn' | 'llm' | 'tool' | 'orchestration' | 'task' | 'recall' | 'other';
|
|
20
|
+
export type SpanStatus = 'running' | 'ok' | 'error';
|
|
21
|
+
export interface Span {
|
|
22
|
+
id: string;
|
|
23
|
+
parentId: string | null;
|
|
24
|
+
name: string;
|
|
25
|
+
kind: SpanKind;
|
|
26
|
+
startMs: number;
|
|
27
|
+
endMs: number | null;
|
|
28
|
+
status: SpanStatus;
|
|
29
|
+
/** free-form: tokens, cost, model, tool args preview, error message, … */
|
|
30
|
+
attrs: Record<string, any>;
|
|
31
|
+
}
|
|
32
|
+
export interface Trace {
|
|
33
|
+
traceId: string;
|
|
34
|
+
label: string;
|
|
35
|
+
agent: string;
|
|
36
|
+
startMs: number;
|
|
37
|
+
endMs: number | null;
|
|
38
|
+
spans: Span[];
|
|
39
|
+
}
|
|
40
|
+
export interface TraceTotals {
|
|
41
|
+
durationMs: number;
|
|
42
|
+
spans: number;
|
|
43
|
+
llmCalls: number;
|
|
44
|
+
toolCalls: number;
|
|
45
|
+
errors: number;
|
|
46
|
+
promptTokens: number;
|
|
47
|
+
completionTokens: number;
|
|
48
|
+
totalTokens: number;
|
|
49
|
+
cost: number;
|
|
50
|
+
}
|
|
51
|
+
/** A handle to one open span. `end()` is idempotent; child spans nest under it. */
|
|
52
|
+
export declare class SpanHandle {
|
|
53
|
+
private tracer;
|
|
54
|
+
readonly span: Span | null;
|
|
55
|
+
constructor(tracer: Tracer | null, span: Span | null);
|
|
56
|
+
/** Merge attributes into the span (e.g. token usage learned mid-flight). */
|
|
57
|
+
set(attrs: Record<string, any>): this;
|
|
58
|
+
/** Finish the span. Safe to call more than once. */
|
|
59
|
+
end(status?: SpanStatus, attrs?: Record<string, any>): void;
|
|
60
|
+
}
|
|
61
|
+
export declare class Tracer {
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
private now;
|
|
64
|
+
private maxFinished;
|
|
65
|
+
private active;
|
|
66
|
+
private stack;
|
|
67
|
+
private finished;
|
|
68
|
+
constructor(opts?: {
|
|
69
|
+
now?: () => number;
|
|
70
|
+
maxFinished?: number;
|
|
71
|
+
enabled?: boolean;
|
|
72
|
+
});
|
|
73
|
+
/** Begin a trace (one turn). Returns the root span handle. */
|
|
74
|
+
startTrace(label: string, agent?: string): SpanHandle;
|
|
75
|
+
/**
|
|
76
|
+
* Open a child span under the current span (or the root).
|
|
77
|
+
* `leaf: true` attaches the span to the current parent but does NOT push it
|
|
78
|
+
* onto the nesting stack — use it for work that runs concurrently (e.g. tools
|
|
79
|
+
* executed in parallel), so siblings don't accidentally nest under each other.
|
|
80
|
+
*/
|
|
81
|
+
startSpan(name: string, kind: SpanKind, attrs?: Record<string, any>, opts?: {
|
|
82
|
+
leaf?: boolean;
|
|
83
|
+
}): SpanHandle;
|
|
84
|
+
/** @internal — used by SpanHandle.end(). Idempotent. */
|
|
85
|
+
_endSpan(span: Span, status: SpanStatus, attrs?: Record<string, any>): void;
|
|
86
|
+
/** Finalize the active trace, closing any still-open spans, and archive it. */
|
|
87
|
+
endTrace(): Trace | null;
|
|
88
|
+
/** The most recently finished trace (or the active one if none finished). */
|
|
89
|
+
last(): Trace | null;
|
|
90
|
+
/** Recent finished traces, newest last. */
|
|
91
|
+
recent(n?: number): Trace[];
|
|
92
|
+
clear(): void;
|
|
93
|
+
}
|
|
94
|
+
/** Sum token/cost/status across a trace's spans. */
|
|
95
|
+
export declare function traceTotals(trace: Trace): TraceTotals;
|
|
96
|
+
/**
|
|
97
|
+
* Render a trace as an indented tree. `color`/`dim`/`ok`/`err` are optional
|
|
98
|
+
* stylers (so the TUI can pass chalk; tests get plain text).
|
|
99
|
+
*/
|
|
100
|
+
export declare function renderTrace(trace: Trace, style?: {
|
|
101
|
+
dim?: (s: string) => string;
|
|
102
|
+
ok?: (s: string) => string;
|
|
103
|
+
err?: (s: string) => string;
|
|
104
|
+
}): string;
|
|
105
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/core/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC/F,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mFAAmF;AACnF,qBAAa,UAAU;IACT,OAAO,CAAC,MAAM;IAAiB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;gBAAjD,MAAM,EAAE,MAAM,GAAG,IAAI,EAAW,IAAI,EAAE,IAAI,GAAG,IAAI;IACrE,4EAA4E;IAC5E,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAIrC,oDAAoD;IACpD,GAAG,CAAC,MAAM,GAAE,UAAiB,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;CAGlE;AAUD,qBAAa,MAAM;IACjB,OAAO,UAAQ;IACf,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAe;gBAEnB,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAMlF,8DAA8D;IAC9D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU;IAUjD;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,UAAU;IAgB/G,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAS3E,+EAA+E;IAC/E,QAAQ,IAAI,KAAK,GAAG,IAAI;IAexB,6EAA6E;IAC7E,IAAI,IAAI,KAAK,GAAG,IAAI;IAIpB,2CAA2C;IAC3C,MAAM,CAAC,CAAC,SAAK,GAAG,KAAK,EAAE;IAIvB,KAAK,IAAI,IAAI;CAKd;AAMD,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAiBrD;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,GAC/F,MAAM,CAiCR"}
|