skyloom 1.12.0 → 1.13.1
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 +36 -36
- package/README.md +137 -46
- package/config/default.yaml +43 -47
- package/config/models.yaml +155 -155
- package/config/providers.yaml +39 -39
- package/config/skills/api_integrator/SKILL.md +15 -15
- package/config/skills/arch_designer/SKILL.md +13 -13
- package/config/skills/ci_cd_manager/SKILL.md +14 -14
- package/config/skills/code_analysis/SKILL.md +13 -13
- package/config/skills/code_generator/SKILL.md +12 -12
- package/config/skills/code_reviewer/SKILL.md +13 -13
- package/config/skills/content_writer/SKILL.md +14 -14
- package/config/skills/data_transformer/SKILL.md +15 -15
- package/config/skills/document_analysis/SKILL.md +13 -13
- package/config/skills/emotional_companion/SKILL.md +15 -15
- package/config/skills/performance_checker/SKILL.md +14 -14
- package/config/skills/security_auditor/SKILL.md +14 -14
- package/config/skills/self_evolve/SKILL.md +13 -13
- package/config/skills/sys_operator/SKILL.md +15 -15
- package/config/skills/task_planner/SKILL.md +14 -14
- package/config/skills/web_research/SKILL.md +14 -14
- package/config/skills/workflow_designer/SKILL.md +13 -13
- package/dist/agents/dew.js +52 -52
- package/dist/agents/fair.js +84 -84
- package/dist/agents/fog.js +30 -30
- package/dist/agents/frost.js +32 -32
- package/dist/agents/rain.js +32 -32
- package/dist/agents/snow.js +68 -68
- package/dist/cli/main.js +127 -74
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui.d.ts +52 -19
- package/dist/cli/tui.d.ts.map +1 -1
- package/dist/cli/tui.js +198 -265
- package/dist/cli/tui.js.map +1 -1
- package/dist/core/agent/task.d.ts +58 -0
- package/dist/core/agent/task.d.ts.map +1 -0
- package/dist/core/agent/task.js +83 -0
- package/dist/core/agent/task.js.map +1 -0
- package/dist/core/agent.d.ts +2 -45
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +61 -145
- package/dist/core/agent.js.map +1 -1
- package/dist/core/agent_helpers.d.ts +10 -0
- package/dist/core/agent_helpers.d.ts.map +1 -1
- package/dist/core/agent_helpers.js +39 -0
- package/dist/core/agent_helpers.js.map +1 -1
- package/dist/core/catalog.d.ts +71 -0
- package/dist/core/catalog.d.ts.map +1 -0
- package/dist/core/catalog.js +176 -0
- package/dist/core/catalog.js.map +1 -0
- package/dist/core/config.d.ts +8 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +12 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/factory.js +16 -16
- package/dist/core/llm.d.ts +7 -0
- package/dist/core/llm.d.ts.map +1 -1
- package/dist/core/llm.js +139 -7
- package/dist/core/llm.js.map +1 -1
- package/dist/core/longdoc.js +5 -5
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +69 -62
- package/dist/core/memory.js.map +1 -1
- package/dist/core/theme.d.ts +46 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +42 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/web/server.js +542 -519
- package/dist/web/server.js.map +1 -1
- package/docs/AESTHETIC_DESIGN.md +144 -0
- package/docs/OPTIMIZATION_PLAN.md +178 -0
- package/package.json +60 -60
- package/scripts/install.js +48 -48
- package/scripts/link.js +10 -10
- package/setup.bat +79 -79
- package/skill-test-ty2fOA/test.md +10 -10
- package/src/agents/dew.ts +70 -70
- package/src/agents/fair.ts +102 -102
- package/src/agents/fog.ts +48 -48
- package/src/agents/frost.ts +50 -50
- package/src/agents/rain.ts +50 -50
- package/src/agents/snow.ts +239 -239
- package/src/cli/main.ts +417 -372
- package/src/cli/mode.ts +58 -58
- package/src/cli/tui.ts +174 -223
- package/src/core/agent/task.ts +100 -0
- package/src/core/agent.ts +1446 -1549
- package/src/core/agent_helpers.ts +496 -461
- package/src/core/arbitrate.ts +162 -162
- package/src/core/catalog.ts +178 -0
- package/src/core/checkpoint.ts +94 -94
- package/src/core/config.ts +20 -4
- package/src/core/estimate.ts +104 -104
- package/src/core/evolve.ts +191 -191
- package/src/core/factory.ts +627 -627
- package/src/core/filter.ts +103 -103
- package/src/core/graph.ts +156 -156
- package/src/core/icons.ts +53 -53
- package/src/core/index.ts +37 -37
- package/src/core/learn.ts +146 -146
- package/src/core/llm.ts +108 -5
- package/src/core/longdoc.ts +155 -155
- package/src/core/mcp_server.ts +176 -176
- package/src/core/memory.ts +1178 -1171
- package/src/core/profile.ts +255 -255
- package/src/core/router.ts +124 -124
- package/src/core/sandbox.ts +142 -142
- package/src/core/security.ts +243 -243
- package/src/core/skill.ts +342 -342
- package/src/core/theme.ts +65 -0
- package/src/core/tool_router.ts +193 -193
- package/src/core/vector.ts +152 -152
- package/src/core/workspace.ts +150 -150
- package/src/plugins/loader.ts +66 -66
- package/src/skills/loader.ts +46 -46
- package/src/sql.js.d.ts +29 -29
- package/src/tools/builtin.ts +380 -380
- package/src/tools/computer.ts +269 -269
- package/src/tools/delegate.ts +49 -49
- package/src/web/server.ts +660 -634
- package/src/web/tts.ts +93 -93
- package/tests/agent_helpers.test.ts +48 -0
- package/tests/bus.test.ts +121 -121
- package/tests/catalog.test.ts +86 -0
- package/tests/config.test.ts +41 -0
- package/tests/icons.test.ts +45 -45
- package/tests/memory.test.ts +147 -0
- package/tests/router.test.ts +86 -86
- package/tests/schemas.test.ts +51 -51
- package/tests/semantic.test.ts +83 -83
- package/tests/setup.ts +10 -10
- package/tests/skill.test.ts +172 -172
- package/tests/task.test.ts +60 -0
- package/tests/tool.test.ts +108 -108
- package/tests/tool_router.test.ts +71 -71
- package/tests/tui.test.ts +67 -0
- package/vitest.config.ts +17 -17
package/src/plugins/loader.ts
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Plugin loader — loads external plugins that register additional tools.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as fs from 'fs';
|
|
6
|
-
import * as path from 'path';
|
|
7
|
-
import { ToolRegistry } from '../core/tool';
|
|
8
|
-
import { getLogger } from '../core/logger';
|
|
9
|
-
|
|
10
|
-
const log = getLogger('plugin-loader');
|
|
11
|
-
|
|
12
|
-
export class PluginLoader {
|
|
13
|
-
private toolRegistry: ToolRegistry;
|
|
14
|
-
|
|
15
|
-
constructor(toolRegistry: ToolRegistry) {
|
|
16
|
-
this.toolRegistry = toolRegistry;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Load plugins from specified directories.
|
|
21
|
-
*/
|
|
22
|
-
loadFromDirectories(directories: string[]): number {
|
|
23
|
-
let total = 0;
|
|
24
|
-
for (const dir of directories) {
|
|
25
|
-
total += this.loadDirectory(dir);
|
|
26
|
-
}
|
|
27
|
-
return total;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Load a single plugin directory.
|
|
32
|
-
*/
|
|
33
|
-
private loadDirectory(dir: string): number {
|
|
34
|
-
if (!fs.existsSync(dir)) {
|
|
35
|
-
log.debug('plugin_dir_not_found', { dir });
|
|
36
|
-
return 0;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
let count = 0;
|
|
40
|
-
try {
|
|
41
|
-
const entries = fs.readdirSync(dir);
|
|
42
|
-
for (const entry of entries) {
|
|
43
|
-
const pluginPath = path.join(dir, entry);
|
|
44
|
-
if (!fs.statSync(pluginPath).isDirectory()) continue;
|
|
45
|
-
|
|
46
|
-
const pluginFile = path.join(pluginPath, 'index.js');
|
|
47
|
-
if (!fs.existsSync(pluginFile)) continue;
|
|
48
|
-
|
|
49
|
-
try {
|
|
50
|
-
const plugin = require(pluginFile);
|
|
51
|
-
if (typeof plugin.register === 'function') {
|
|
52
|
-
plugin.register(this.toolRegistry);
|
|
53
|
-
count++;
|
|
54
|
-
log.info('plugin_loaded', { name: entry });
|
|
55
|
-
}
|
|
56
|
-
} catch (e) {
|
|
57
|
-
log.warn('plugin_load_failed', { name: entry, error: String(e) });
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
} catch (e) {
|
|
61
|
-
log.warn('plugin_dir_scan_failed', { dir, error: String(e) });
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return count;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Plugin loader — loads external plugins that register additional tools.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { ToolRegistry } from '../core/tool';
|
|
8
|
+
import { getLogger } from '../core/logger';
|
|
9
|
+
|
|
10
|
+
const log = getLogger('plugin-loader');
|
|
11
|
+
|
|
12
|
+
export class PluginLoader {
|
|
13
|
+
private toolRegistry: ToolRegistry;
|
|
14
|
+
|
|
15
|
+
constructor(toolRegistry: ToolRegistry) {
|
|
16
|
+
this.toolRegistry = toolRegistry;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Load plugins from specified directories.
|
|
21
|
+
*/
|
|
22
|
+
loadFromDirectories(directories: string[]): number {
|
|
23
|
+
let total = 0;
|
|
24
|
+
for (const dir of directories) {
|
|
25
|
+
total += this.loadDirectory(dir);
|
|
26
|
+
}
|
|
27
|
+
return total;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Load a single plugin directory.
|
|
32
|
+
*/
|
|
33
|
+
private loadDirectory(dir: string): number {
|
|
34
|
+
if (!fs.existsSync(dir)) {
|
|
35
|
+
log.debug('plugin_dir_not_found', { dir });
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
let count = 0;
|
|
40
|
+
try {
|
|
41
|
+
const entries = fs.readdirSync(dir);
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
const pluginPath = path.join(dir, entry);
|
|
44
|
+
if (!fs.statSync(pluginPath).isDirectory()) continue;
|
|
45
|
+
|
|
46
|
+
const pluginFile = path.join(pluginPath, 'index.js');
|
|
47
|
+
if (!fs.existsSync(pluginFile)) continue;
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
const plugin = require(pluginFile);
|
|
51
|
+
if (typeof plugin.register === 'function') {
|
|
52
|
+
plugin.register(this.toolRegistry);
|
|
53
|
+
count++;
|
|
54
|
+
log.info('plugin_loaded', { name: entry });
|
|
55
|
+
}
|
|
56
|
+
} catch (e) {
|
|
57
|
+
log.warn('plugin_load_failed', { name: entry, error: String(e) });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
} catch (e) {
|
|
61
|
+
log.warn('plugin_dir_scan_failed', { dir, error: String(e) });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return count;
|
|
65
|
+
}
|
|
66
|
+
}
|
package/src/skills/loader.ts
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill loader — registers all built-in skills from skill definition files.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as fs from 'fs';
|
|
6
|
-
import * as path from 'path';
|
|
7
|
-
import { SkillRegistry } from '../core/skill';
|
|
8
|
-
import { getLogger } from '../core/logger';
|
|
9
|
-
|
|
10
|
-
const log = getLogger('skills-loader');
|
|
11
|
-
|
|
12
|
-
// Built-in skill directories to scan
|
|
13
|
-
const BUILTIN_SKILL_DIRS = [
|
|
14
|
-
path.join(__dirname, '..', '..', 'config', 'skills'),
|
|
15
|
-
path.join(__dirname, '..', '..', 'assets', 'builtin_skills'),
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Register all available skills from built-in directories.
|
|
20
|
-
*/
|
|
21
|
-
export function registerAllSkills(registry: SkillRegistry): void {
|
|
22
|
-
for (const dir of BUILTIN_SKILL_DIRS) {
|
|
23
|
-
if (!fs.existsSync(dir)) continue;
|
|
24
|
-
|
|
25
|
-
try {
|
|
26
|
-
const entries = fs.readdirSync(dir);
|
|
27
|
-
for (const entry of entries) {
|
|
28
|
-
const skillDir = path.join(dir, entry);
|
|
29
|
-
if (!fs.statSync(skillDir).isDirectory()) continue;
|
|
30
|
-
|
|
31
|
-
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
32
|
-
if (!fs.existsSync(skillFile)) continue;
|
|
33
|
-
|
|
34
|
-
const skill = registry.loadSkillsFromDirectory(skillDir);
|
|
35
|
-
if (skill.length > 0) {
|
|
36
|
-
log.debug('registered_skill', { name: entry, file: skillFile });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
} catch (e) {
|
|
40
|
-
log.warn('skill_load_failed', { dir, error: String(e) });
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const count = registry.listNames().length;
|
|
45
|
-
log.info('skills_loaded', { count });
|
|
46
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Skill loader — registers all built-in skills from skill definition files.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { SkillRegistry } from '../core/skill';
|
|
8
|
+
import { getLogger } from '../core/logger';
|
|
9
|
+
|
|
10
|
+
const log = getLogger('skills-loader');
|
|
11
|
+
|
|
12
|
+
// Built-in skill directories to scan
|
|
13
|
+
const BUILTIN_SKILL_DIRS = [
|
|
14
|
+
path.join(__dirname, '..', '..', 'config', 'skills'),
|
|
15
|
+
path.join(__dirname, '..', '..', 'assets', 'builtin_skills'),
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Register all available skills from built-in directories.
|
|
20
|
+
*/
|
|
21
|
+
export function registerAllSkills(registry: SkillRegistry): void {
|
|
22
|
+
for (const dir of BUILTIN_SKILL_DIRS) {
|
|
23
|
+
if (!fs.existsSync(dir)) continue;
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
const entries = fs.readdirSync(dir);
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
const skillDir = path.join(dir, entry);
|
|
29
|
+
if (!fs.statSync(skillDir).isDirectory()) continue;
|
|
30
|
+
|
|
31
|
+
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
32
|
+
if (!fs.existsSync(skillFile)) continue;
|
|
33
|
+
|
|
34
|
+
const skill = registry.loadSkillsFromDirectory(skillDir);
|
|
35
|
+
if (skill.length > 0) {
|
|
36
|
+
log.debug('registered_skill', { name: entry, file: skillFile });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
} catch (e) {
|
|
40
|
+
log.warn('skill_load_failed', { dir, error: String(e) });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const count = registry.listNames().length;
|
|
45
|
+
log.info('skills_loaded', { count });
|
|
46
|
+
}
|
package/src/sql.js.d.ts
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
declare module 'sql.js' {
|
|
2
|
-
interface SqlJsStatic {
|
|
3
|
-
Database: new (data?: ArrayLike<number> | Buffer | null) => Database;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
interface QueryExecResult {
|
|
7
|
-
columns: string[];
|
|
8
|
-
values: any[][];
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
interface Statement {
|
|
12
|
-
bind(params?: any[]): boolean;
|
|
13
|
-
step(): boolean;
|
|
14
|
-
getAsObject(params?: object): Record<string, any>;
|
|
15
|
-
free(): boolean;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
interface Database {
|
|
19
|
-
run(sql: string, params?: any[]): Database;
|
|
20
|
-
exec(sql: string): QueryExecResult[];
|
|
21
|
-
prepare(sql: string): Statement;
|
|
22
|
-
export(): Uint8Array;
|
|
23
|
-
close(): void;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export type { Database, SqlJsStatic, Statement };
|
|
27
|
-
|
|
28
|
-
export default function initSqlJs(opts?: any): Promise<SqlJsStatic>;
|
|
29
|
-
}
|
|
1
|
+
declare module 'sql.js' {
|
|
2
|
+
interface SqlJsStatic {
|
|
3
|
+
Database: new (data?: ArrayLike<number> | Buffer | null) => Database;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
interface QueryExecResult {
|
|
7
|
+
columns: string[];
|
|
8
|
+
values: any[][];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface Statement {
|
|
12
|
+
bind(params?: any[]): boolean;
|
|
13
|
+
step(): boolean;
|
|
14
|
+
getAsObject(params?: object): Record<string, any>;
|
|
15
|
+
free(): boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface Database {
|
|
19
|
+
run(sql: string, params?: any[]): Database;
|
|
20
|
+
exec(sql: string): QueryExecResult[];
|
|
21
|
+
prepare(sql: string): Statement;
|
|
22
|
+
export(): Uint8Array;
|
|
23
|
+
close(): void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type { Database, SqlJsStatic, Statement };
|
|
27
|
+
|
|
28
|
+
export default function initSqlJs(opts?: any): Promise<SqlJsStatic>;
|
|
29
|
+
}
|