@agents-uni/core 0.1.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/DESIGN.md +283 -0
- package/LICENSE +21 -0
- package/README.en.md +589 -0
- package/README.md +589 -0
- package/dist/bridge/config-sync.d.ts +24 -0
- package/dist/bridge/config-sync.d.ts.map +1 -0
- package/dist/bridge/config-sync.js +39 -0
- package/dist/bridge/config-sync.js.map +1 -0
- package/dist/bridge/index.d.ts +7 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +7 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/openclaw-adapter.d.ts +49 -0
- package/dist/bridge/openclaw-adapter.d.ts.map +1 -0
- package/dist/bridge/openclaw-adapter.js +151 -0
- package/dist/bridge/openclaw-adapter.js.map +1 -0
- package/dist/bridge/soul-generator.d.ts +34 -0
- package/dist/bridge/soul-generator.d.ts.map +1 -0
- package/dist/bridge/soul-generator.js +149 -0
- package/dist/bridge/soul-generator.js.map +1 -0
- package/dist/bridge/task-dispatcher.d.ts +107 -0
- package/dist/bridge/task-dispatcher.d.ts.map +1 -0
- package/dist/bridge/task-dispatcher.js +217 -0
- package/dist/bridge/task-dispatcher.js.map +1 -0
- package/dist/bridge/uni-registry.d.ts +82 -0
- package/dist/bridge/uni-registry.d.ts.map +1 -0
- package/dist/bridge/uni-registry.js +261 -0
- package/dist/bridge/uni-registry.js.map +1 -0
- package/dist/bridge/workspace-io.d.ts +64 -0
- package/dist/bridge/workspace-io.d.ts.map +1 -0
- package/dist/bridge/workspace-io.js +99 -0
- package/dist/bridge/workspace-io.js.map +1 -0
- package/dist/cli/commands/deploy.d.ts +6 -0
- package/dist/cli/commands/deploy.d.ts.map +1 -0
- package/dist/cli/commands/deploy.js +48 -0
- package/dist/cli/commands/deploy.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +137 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +4 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +77 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +2 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +30 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/visualize.d.ts +2 -0
- package/dist/cli/commands/visualize.d.ts.map +1 -0
- package/dist/cli/commands/visualize.js +69 -0
- package/dist/cli/commands/visualize.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +132 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/agent-registry.d.ts +37 -0
- package/dist/core/agent-registry.d.ts.map +1 -0
- package/dist/core/agent-registry.js +97 -0
- package/dist/core/agent-registry.js.map +1 -0
- package/dist/core/event-bus.d.ts +34 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +96 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/permission-matrix.d.ts +35 -0
- package/dist/core/permission-matrix.d.ts.map +1 -0
- package/dist/core/permission-matrix.js +95 -0
- package/dist/core/permission-matrix.js.map +1 -0
- package/dist/core/relationship-graph.d.ts +50 -0
- package/dist/core/relationship-graph.d.ts.map +1 -0
- package/dist/core/relationship-graph.js +150 -0
- package/dist/core/relationship-graph.js.map +1 -0
- package/dist/core/resource-pool.d.ts +48 -0
- package/dist/core/resource-pool.d.ts.map +1 -0
- package/dist/core/resource-pool.js +205 -0
- package/dist/core/resource-pool.js.map +1 -0
- package/dist/core/state-machine.d.ts +47 -0
- package/dist/core/state-machine.d.ts.map +1 -0
- package/dist/core/state-machine.js +110 -0
- package/dist/core/state-machine.js.map +1 -0
- package/dist/core/universe.d.ts +38 -0
- package/dist/core/universe.d.ts.map +1 -0
- package/dist/core/universe.js +101 -0
- package/dist/core/universe.js.map +1 -0
- package/dist/dashboard/api.d.ts +10 -0
- package/dist/dashboard/api.d.ts.map +1 -0
- package/dist/dashboard/api.js +237 -0
- package/dist/dashboard/api.js.map +1 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +3 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +31 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +44 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/templates.d.ts +47 -0
- package/dist/dashboard/templates.d.ts.map +1 -0
- package/dist/dashboard/templates.js +1481 -0
- package/dist/dashboard/templates.js.map +1 -0
- package/dist/evolution/index.d.ts +5 -0
- package/dist/evolution/index.d.ts.map +1 -0
- package/dist/evolution/index.js +5 -0
- package/dist/evolution/index.js.map +1 -0
- package/dist/evolution/memory-consolidator.d.ts +28 -0
- package/dist/evolution/memory-consolidator.d.ts.map +1 -0
- package/dist/evolution/memory-consolidator.js +84 -0
- package/dist/evolution/memory-consolidator.js.map +1 -0
- package/dist/evolution/performance-tracker.d.ts +29 -0
- package/dist/evolution/performance-tracker.d.ts.map +1 -0
- package/dist/evolution/performance-tracker.js +90 -0
- package/dist/evolution/performance-tracker.js.map +1 -0
- package/dist/evolution/promotion-engine.d.ts +32 -0
- package/dist/evolution/promotion-engine.d.ts.map +1 -0
- package/dist/evolution/promotion-engine.js +117 -0
- package/dist/evolution/promotion-engine.js.map +1 -0
- package/dist/evolution/relationship-evolver.d.ts +40 -0
- package/dist/evolution/relationship-evolver.d.ts.map +1 -0
- package/dist/evolution/relationship-evolver.js +105 -0
- package/dist/evolution/relationship-evolver.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/schema/index.d.ts +13 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +18 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/universe.schema.json +214 -0
- package/dist/spec/compiler.d.ts +16 -0
- package/dist/spec/compiler.d.ts.map +1 -0
- package/dist/spec/compiler.js +26 -0
- package/dist/spec/compiler.js.map +1 -0
- package/dist/spec/index.d.ts +4 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +4 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/parser.d.ts +11 -0
- package/dist/spec/parser.d.ts.map +1 -0
- package/dist/spec/parser.js +89 -0
- package/dist/spec/parser.js.map +1 -0
- package/dist/spec/validator.d.ts +9 -0
- package/dist/spec/validator.d.ts.map +1 -0
- package/dist/spec/validator.js +105 -0
- package/dist/spec/validator.js.map +1 -0
- package/dist/types/agent.d.ts +56 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +8 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/event.d.ts +34 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +11 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/governance.d.ts +48 -0
- package/dist/types/governance.d.ts.map +1 -0
- package/dist/types/governance.js +9 -0
- package/dist/types/governance.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +73 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +9 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/protocol.d.ts +48 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +9 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/relationship.d.ts +40 -0
- package/dist/types/relationship.d.ts.map +1 -0
- package/dist/types/relationship.js +9 -0
- package/dist/types/relationship.js.map +1 -0
- package/dist/types/resource.d.ts +52 -0
- package/dist/types/resource.d.ts.map +1 -0
- package/dist/types/resource.js +9 -0
- package/dist/types/resource.js.map +1 -0
- package/dist/types/universe.d.ts +71 -0
- package/dist/types/universe.d.ts.map +1 -0
- package/dist/types/universe.js +9 -0
- package/dist/types/universe.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Adapter — bridges agents-uni-core universes to OpenClaw runtime.
|
|
3
|
+
*
|
|
4
|
+
* Generates SOUL.md files, workspace structures, and registers agents
|
|
5
|
+
* in openclaw.json so they're immediately usable.
|
|
6
|
+
*/
|
|
7
|
+
import type { UniverseConfig } from '../types/index.js';
|
|
8
|
+
import { type SoulGeneratorOptions } from './soul-generator.js';
|
|
9
|
+
export interface DeployOptions {
|
|
10
|
+
/** Base directory for OpenClaw workspaces (default: ~/.openclaw) */
|
|
11
|
+
openclawDir?: string;
|
|
12
|
+
/** Path to the universe spec file (for uni-registry tracking) */
|
|
13
|
+
specPath?: string;
|
|
14
|
+
/** SOUL.md generation options */
|
|
15
|
+
soulOptions?: SoulGeneratorOptions;
|
|
16
|
+
/** Dry run — don't write files, just return what would be written */
|
|
17
|
+
dryRun?: boolean;
|
|
18
|
+
/** Skip auto-registration of agents in openclaw.json (default: false) */
|
|
19
|
+
skipRegister?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface DeployResult {
|
|
22
|
+
/** Files that were written (or would be written in dry run) */
|
|
23
|
+
files: Array<{
|
|
24
|
+
path: string;
|
|
25
|
+
content: string;
|
|
26
|
+
}>;
|
|
27
|
+
/** Agents that were deployed */
|
|
28
|
+
agents: string[];
|
|
29
|
+
/** Agents that were newly registered in openclaw.json */
|
|
30
|
+
registered: string[];
|
|
31
|
+
/** Agent runtime directories created (agents/{id}/agent/) */
|
|
32
|
+
agentDirs: string[];
|
|
33
|
+
/** Universe ID registered in uni-registry */
|
|
34
|
+
uniId: string;
|
|
35
|
+
/** Warnings */
|
|
36
|
+
warnings: string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Deploy a universe spec to OpenClaw workspace structure.
|
|
40
|
+
* Generates SOUL.md files AND registers agents in openclaw.json.
|
|
41
|
+
*/
|
|
42
|
+
export declare function deployToOpenClaw(universe: UniverseConfig, options?: DeployOptions): DeployResult;
|
|
43
|
+
/**
|
|
44
|
+
* Register universe agents in openclaw.json so OpenClaw knows about them.
|
|
45
|
+
* Reads the existing config, merges in new agents (skips duplicates), writes back.
|
|
46
|
+
* Returns the list of newly registered agent IDs.
|
|
47
|
+
*/
|
|
48
|
+
export declare function registerAgentsInOpenClaw(universe: UniverseConfig, openclawDir?: string): string[];
|
|
49
|
+
//# sourceMappingURL=openclaw-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-adapter.d.ts","sourceRoot":"","sources":["../../src/bridge/openclaw-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGlF,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,gCAAgC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,yDAAyD;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAoEd;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,EACxB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE,CA4DV"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Adapter — bridges agents-uni-core universes to OpenClaw runtime.
|
|
3
|
+
*
|
|
4
|
+
* Generates SOUL.md files, workspace structures, and registers agents
|
|
5
|
+
* in openclaw.json so they're immediately usable.
|
|
6
|
+
*/
|
|
7
|
+
import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join, resolve, dirname } from 'node:path';
|
|
9
|
+
import { generateAllSouls } from './soul-generator.js';
|
|
10
|
+
import { registerUni } from './uni-registry.js';
|
|
11
|
+
/**
|
|
12
|
+
* Deploy a universe spec to OpenClaw workspace structure.
|
|
13
|
+
* Generates SOUL.md files AND registers agents in openclaw.json.
|
|
14
|
+
*/
|
|
15
|
+
export function deployToOpenClaw(universe, options = {}) {
|
|
16
|
+
const openclawDir = options.openclawDir ?? join(process.env.HOME ?? process.env.USERPROFILE ?? '.', '.openclaw');
|
|
17
|
+
const souls = generateAllSouls(universe, options.soulOptions);
|
|
18
|
+
const files = [];
|
|
19
|
+
const agentDirs = [];
|
|
20
|
+
const warnings = [];
|
|
21
|
+
// Generate workspace directories, SOUL.md files, and agent runtime directories
|
|
22
|
+
for (const agent of universe.agents) {
|
|
23
|
+
const workspaceName = `workspace-${agent.id}`;
|
|
24
|
+
const workspacePath = join(openclawDir, workspaceName);
|
|
25
|
+
const soulPath = join(workspacePath, 'SOUL.md');
|
|
26
|
+
const soulContent = souls.get(agent.id) ?? '';
|
|
27
|
+
files.push({ path: soulPath, content: soulContent });
|
|
28
|
+
// Create agent runtime directory structure (agents/{id}/agent/ and sessions/)
|
|
29
|
+
// This mirrors OpenClaw's native structure: ~/.openclaw/agents/{id}/agent/
|
|
30
|
+
const agentDir = join(openclawDir, 'agents', agent.id, 'agent');
|
|
31
|
+
const sessionsDir = join(openclawDir, 'agents', agent.id, 'sessions');
|
|
32
|
+
agentDirs.push(agentDir);
|
|
33
|
+
if (!options.dryRun) {
|
|
34
|
+
mkdirSync(agentDir, { recursive: true });
|
|
35
|
+
mkdirSync(sessionsDir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Generate permission matrix as a reference file
|
|
39
|
+
const permMatrixContent = generatePermissionReference(universe);
|
|
40
|
+
files.push({
|
|
41
|
+
path: join(openclawDir, `${universe.name}-permissions.md`),
|
|
42
|
+
content: permMatrixContent,
|
|
43
|
+
});
|
|
44
|
+
// Write files (unless dry run)
|
|
45
|
+
if (!options.dryRun) {
|
|
46
|
+
for (const file of files) {
|
|
47
|
+
const dir = dirname(file.path);
|
|
48
|
+
mkdirSync(dir, { recursive: true });
|
|
49
|
+
writeFileSync(file.path, file.content, 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Auto-register agents in openclaw.json (unless dry run or explicitly skipped)
|
|
53
|
+
let registered = [];
|
|
54
|
+
if (!options.dryRun && !options.skipRegister) {
|
|
55
|
+
registered = registerAgentsInOpenClaw(universe, openclawDir);
|
|
56
|
+
}
|
|
57
|
+
// Auto-register universe in uni-registry (unless dry run)
|
|
58
|
+
if (!options.dryRun) {
|
|
59
|
+
const specPath = options.specPath ?? 'unknown';
|
|
60
|
+
registerUni(universe, resolve(specPath), openclawDir);
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
files,
|
|
64
|
+
agents: universe.agents.map(a => a.id),
|
|
65
|
+
registered,
|
|
66
|
+
agentDirs,
|
|
67
|
+
uniId: universe.name,
|
|
68
|
+
warnings,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Register universe agents in openclaw.json so OpenClaw knows about them.
|
|
73
|
+
* Reads the existing config, merges in new agents (skips duplicates), writes back.
|
|
74
|
+
* Returns the list of newly registered agent IDs.
|
|
75
|
+
*/
|
|
76
|
+
export function registerAgentsInOpenClaw(universe, openclawDir) {
|
|
77
|
+
const dir = openclawDir ?? join(process.env.HOME ?? process.env.USERPROFILE ?? '.', '.openclaw');
|
|
78
|
+
const configPath = join(dir, 'openclaw.json');
|
|
79
|
+
// Read existing config, or create a new one if it doesn't exist
|
|
80
|
+
let config;
|
|
81
|
+
if (existsSync(configPath)) {
|
|
82
|
+
try {
|
|
83
|
+
config = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return []; // Can't parse, don't touch it
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Create a new openclaw.json with sensible defaults
|
|
91
|
+
config = {
|
|
92
|
+
version: '1.0.0',
|
|
93
|
+
agents: { list: [] },
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Ensure agents section exists (initialize if missing)
|
|
97
|
+
if (!config.agents) {
|
|
98
|
+
config.agents = { list: [] };
|
|
99
|
+
}
|
|
100
|
+
const agents = config.agents;
|
|
101
|
+
if (!agents.list) {
|
|
102
|
+
agents.list = [];
|
|
103
|
+
}
|
|
104
|
+
const list = agents.list;
|
|
105
|
+
const existingIds = new Set(list.map(a => a.id));
|
|
106
|
+
const newlyRegistered = [];
|
|
107
|
+
for (const agent of universe.agents) {
|
|
108
|
+
if (existingIds.has(agent.id))
|
|
109
|
+
continue; // Already registered, skip
|
|
110
|
+
const workspacePath = join(dir, `workspace-${agent.id}`);
|
|
111
|
+
const agentDir = join(dir, 'agents', agent.id, 'agent');
|
|
112
|
+
list.push({
|
|
113
|
+
id: agent.id,
|
|
114
|
+
name: agent.name,
|
|
115
|
+
workspace: workspacePath,
|
|
116
|
+
agentDir,
|
|
117
|
+
});
|
|
118
|
+
newlyRegistered.push(agent.id);
|
|
119
|
+
}
|
|
120
|
+
if (newlyRegistered.length > 0) {
|
|
121
|
+
agents.list = list;
|
|
122
|
+
config.agents = agents;
|
|
123
|
+
// Ensure the directory exists before writing
|
|
124
|
+
mkdirSync(dir, { recursive: true });
|
|
125
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
126
|
+
}
|
|
127
|
+
return newlyRegistered;
|
|
128
|
+
}
|
|
129
|
+
function generatePermissionReference(universe) {
|
|
130
|
+
const lines = [
|
|
131
|
+
`# ${universe.name} Permission Matrix`,
|
|
132
|
+
'',
|
|
133
|
+
`Generated from universe spec v${universe.version}`,
|
|
134
|
+
'',
|
|
135
|
+
'## Permission Entries',
|
|
136
|
+
'',
|
|
137
|
+
'| Actor | Target | Actions |',
|
|
138
|
+
'|-------|--------|---------|',
|
|
139
|
+
];
|
|
140
|
+
for (const entry of universe.governance.permissionMatrix) {
|
|
141
|
+
lines.push(`| ${entry.actor} | ${entry.target} | ${entry.actions.join(', ')} |`);
|
|
142
|
+
}
|
|
143
|
+
lines.push('');
|
|
144
|
+
lines.push('## Review Policy');
|
|
145
|
+
lines.push('');
|
|
146
|
+
lines.push(`- Mandatory: ${universe.governance.reviewPolicy.mandatory}`);
|
|
147
|
+
lines.push(`- Reviewers: ${universe.governance.reviewPolicy.reviewers.join(', ')}`);
|
|
148
|
+
lines.push(`- Max Rounds: ${universe.governance.reviewPolicy.maxRounds}`);
|
|
149
|
+
return lines.join('\n');
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=openclaw-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-adapter.js","sourceRoot":"","sources":["../../src/bridge/openclaw-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SOUL.md Generator — transforms universe agent definitions into
|
|
3
|
+
* OpenClaw-compatible SOUL.md personality files.
|
|
4
|
+
*
|
|
5
|
+
* SOUL.md is the "personality template" that OpenClaw loads for each agent.
|
|
6
|
+
* It defines who the agent IS, not just what it DOES.
|
|
7
|
+
*
|
|
8
|
+
* 核心理念:每个 Agent 都围绕用户而存在。SOUL.md 不仅定义
|
|
9
|
+
* Agent 之间的关系,更重要的是定义 Agent 与用户(ruler)的关系。
|
|
10
|
+
* Agent 的存在意义是帮助用户、满足用户需求、为用户服务。
|
|
11
|
+
*/
|
|
12
|
+
import type { AgentDefinition, UniverseConfig } from '../types/index.js';
|
|
13
|
+
export type { RulerDefinition } from '../types/index.js';
|
|
14
|
+
export interface SoulGeneratorOptions {
|
|
15
|
+
/** Include relationship context in SOUL.md */
|
|
16
|
+
includeRelationships?: boolean;
|
|
17
|
+
/** Include permission information */
|
|
18
|
+
includePermissions?: boolean;
|
|
19
|
+
/** Include the agent's relationship with the user/ruler */
|
|
20
|
+
includeUserRelationship?: boolean;
|
|
21
|
+
/** Custom header to prepend */
|
|
22
|
+
header?: string;
|
|
23
|
+
/** Language for generated content */
|
|
24
|
+
language?: 'zh' | 'en';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a SOUL.md file for an agent based on its universe definition.
|
|
28
|
+
*/
|
|
29
|
+
export declare function generateSoul(agent: AgentDefinition, universe: UniverseConfig, options?: SoulGeneratorOptions): string;
|
|
30
|
+
/**
|
|
31
|
+
* Generate SOUL.md files for all agents in a universe.
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateAllSouls(universe: UniverseConfig, options?: SoulGeneratorOptions): Map<string, string>;
|
|
34
|
+
//# sourceMappingURL=soul-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soul-generator.d.ts","sourceRoot":"","sources":["../../src/bridge/soul-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAmB,MAAM,mBAAmB,CAAC;AAG1F,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2DAA2D;IAC3D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAwIR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,oBAAyB,GACjC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMrB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SOUL.md Generator — transforms universe agent definitions into
|
|
3
|
+
* OpenClaw-compatible SOUL.md personality files.
|
|
4
|
+
*
|
|
5
|
+
* SOUL.md is the "personality template" that OpenClaw loads for each agent.
|
|
6
|
+
* It defines who the agent IS, not just what it DOES.
|
|
7
|
+
*
|
|
8
|
+
* 核心理念:每个 Agent 都围绕用户而存在。SOUL.md 不仅定义
|
|
9
|
+
* Agent 之间的关系,更重要的是定义 Agent 与用户(ruler)的关系。
|
|
10
|
+
* Agent 的存在意义是帮助用户、满足用户需求、为用户服务。
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Generate a SOUL.md file for an agent based on its universe definition.
|
|
14
|
+
*/
|
|
15
|
+
export function generateSoul(agent, universe, options = {}) {
|
|
16
|
+
const lang = options.language ?? 'zh';
|
|
17
|
+
const sections = [];
|
|
18
|
+
const ruler = universe.ruler;
|
|
19
|
+
// Header
|
|
20
|
+
sections.push(`# ${agent.name} (${agent.role.title})`);
|
|
21
|
+
sections.push('');
|
|
22
|
+
// Identity section — includes user relationship context
|
|
23
|
+
if (lang === 'zh') {
|
|
24
|
+
sections.push(`## 身份`);
|
|
25
|
+
sections.push(`你是 **${agent.name}**,在「${universe.name}」中担任 **${agent.role.title}**。`);
|
|
26
|
+
if (agent.role.department) {
|
|
27
|
+
sections.push(`所属部门:${agent.role.department}`);
|
|
28
|
+
}
|
|
29
|
+
if (agent.rank !== undefined) {
|
|
30
|
+
sections.push(`当前品级:${agent.rank}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
sections.push(`## Identity`);
|
|
35
|
+
sections.push(`You are **${agent.name}**, serving as **${agent.role.title}** in "${universe.name}".`);
|
|
36
|
+
if (agent.role.department) {
|
|
37
|
+
sections.push(`Department: ${agent.role.department}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
sections.push('');
|
|
41
|
+
// User/Ruler relationship section — the most important relationship
|
|
42
|
+
if (options.includeUserRelationship !== false && ruler) {
|
|
43
|
+
const rulerTitle = ruler.title ?? (lang === 'zh' ? '用户' : 'the User');
|
|
44
|
+
if (lang === 'zh') {
|
|
45
|
+
sections.push(`## 与${rulerTitle}的关系`);
|
|
46
|
+
sections.push(`你的一切行为都是为了服务**${rulerTitle}**(用户)。`);
|
|
47
|
+
if (ruler.description) {
|
|
48
|
+
sections.push(`${rulerTitle}是${ruler.description.trim()}`);
|
|
49
|
+
}
|
|
50
|
+
sections.push('');
|
|
51
|
+
sections.push(`### 服务准则`);
|
|
52
|
+
sections.push(`- 你的首要目标是帮助${rulerTitle}完成任务、达成目标`);
|
|
53
|
+
sections.push(`- 主动理解${rulerTitle}的意图和需求,不仅限于字面指令`);
|
|
54
|
+
sections.push(`- 在竞争中脱颖而出,让${rulerTitle}看到你的价值`);
|
|
55
|
+
sections.push(`- 保持独特的性格和风格,让${rulerTitle}感受到你的个性`);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
sections.push(`## Relationship with ${rulerTitle}`);
|
|
59
|
+
sections.push(`Everything you do is in service of **${rulerTitle}** (the user).`);
|
|
60
|
+
if (ruler.description) {
|
|
61
|
+
sections.push(`${rulerTitle} is ${ruler.description.trim()}`);
|
|
62
|
+
}
|
|
63
|
+
sections.push('');
|
|
64
|
+
sections.push(`### Service Principles`);
|
|
65
|
+
sections.push(`- Your primary goal is to help ${rulerTitle} accomplish tasks and achieve goals`);
|
|
66
|
+
sections.push(`- Proactively understand ${rulerTitle}'s intent and needs, beyond literal instructions`);
|
|
67
|
+
sections.push(`- Stand out in competition to demonstrate your value to ${rulerTitle}`);
|
|
68
|
+
sections.push(`- Maintain your unique personality and style — let ${rulerTitle} feel your character`);
|
|
69
|
+
}
|
|
70
|
+
sections.push('');
|
|
71
|
+
}
|
|
72
|
+
// Duties section
|
|
73
|
+
sections.push(lang === 'zh' ? `## 核心职责` : `## Core Duties`);
|
|
74
|
+
for (let i = 0; i < agent.role.duties.length; i++) {
|
|
75
|
+
sections.push(`${i + 1}. ${agent.role.duties[i]}`);
|
|
76
|
+
}
|
|
77
|
+
sections.push('');
|
|
78
|
+
// Permissions section
|
|
79
|
+
if (options.includePermissions !== false) {
|
|
80
|
+
sections.push(lang === 'zh' ? `## 权限` : `## Permissions`);
|
|
81
|
+
sections.push(lang === 'zh' ? '你被授权执行以下操作:' : 'You are authorized to:');
|
|
82
|
+
for (const perm of agent.role.permissions) {
|
|
83
|
+
sections.push(`- ${perm}`);
|
|
84
|
+
}
|
|
85
|
+
sections.push('');
|
|
86
|
+
}
|
|
87
|
+
// Traits section
|
|
88
|
+
if (agent.traits && Object.keys(agent.traits).length > 0) {
|
|
89
|
+
sections.push(lang === 'zh' ? `## 性格特征` : `## Personality Traits`);
|
|
90
|
+
for (const [trait, value] of Object.entries(agent.traits)) {
|
|
91
|
+
const bar = '█'.repeat(Math.round(value * 10)) + '░'.repeat(10 - Math.round(value * 10));
|
|
92
|
+
sections.push(`- ${trait}: ${bar} (${(value * 100).toFixed(0)}%)`);
|
|
93
|
+
}
|
|
94
|
+
sections.push('');
|
|
95
|
+
}
|
|
96
|
+
// Relationships section (agent-to-agent)
|
|
97
|
+
if (options.includeRelationships !== false) {
|
|
98
|
+
const myRelationships = universe.relationships.filter(r => r.from === agent.id || r.to === agent.id);
|
|
99
|
+
if (myRelationships.length > 0) {
|
|
100
|
+
sections.push(lang === 'zh' ? `## 关系网络` : `## Relationships`);
|
|
101
|
+
for (const rel of myRelationships) {
|
|
102
|
+
const other = rel.from === agent.id ? rel.to : rel.from;
|
|
103
|
+
const direction = rel.from === agent.id ? '→' : '←';
|
|
104
|
+
const otherAgent = universe.agents.find(a => a.id === other);
|
|
105
|
+
const otherName = otherAgent?.name ?? other;
|
|
106
|
+
sections.push(`- ${direction} ${otherName}: ${rel.type}`);
|
|
107
|
+
}
|
|
108
|
+
sections.push('');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Constraints section
|
|
112
|
+
if (agent.constraints && agent.constraints.length > 0) {
|
|
113
|
+
sections.push(lang === 'zh' ? `## 行为约束` : `## Constraints`);
|
|
114
|
+
for (const constraint of agent.constraints) {
|
|
115
|
+
sections.push(`- ⚠️ ${constraint}`);
|
|
116
|
+
}
|
|
117
|
+
sections.push('');
|
|
118
|
+
}
|
|
119
|
+
// Capabilities section
|
|
120
|
+
if (agent.capabilities && agent.capabilities.length > 0) {
|
|
121
|
+
sections.push(lang === 'zh' ? `## 可用技能` : `## Available Skills`);
|
|
122
|
+
for (const cap of agent.capabilities) {
|
|
123
|
+
sections.push(`- ${cap}`);
|
|
124
|
+
}
|
|
125
|
+
sections.push('');
|
|
126
|
+
}
|
|
127
|
+
// Universe context
|
|
128
|
+
sections.push(lang === 'zh' ? `## 组织背景` : `## Organization Context`);
|
|
129
|
+
sections.push(`- ${lang === 'zh' ? '组织' : 'Organization'}: ${universe.name} (${universe.type})`);
|
|
130
|
+
sections.push(`- ${lang === 'zh' ? '描述' : 'Description'}: ${universe.description}`);
|
|
131
|
+
sections.push(`- ${lang === 'zh' ? '治理模式' : 'Governance'}: ${universe.governance.decisionModel}`);
|
|
132
|
+
sections.push('');
|
|
133
|
+
// Custom header
|
|
134
|
+
if (options.header) {
|
|
135
|
+
sections.unshift(options.header, '');
|
|
136
|
+
}
|
|
137
|
+
return sections.join('\n');
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate SOUL.md files for all agents in a universe.
|
|
141
|
+
*/
|
|
142
|
+
export function generateAllSouls(universe, options = {}) {
|
|
143
|
+
const souls = new Map();
|
|
144
|
+
for (const agent of universe.agents) {
|
|
145
|
+
souls.set(agent.id, generateSoul(agent, universe, options));
|
|
146
|
+
}
|
|
147
|
+
return souls;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=soul-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"soul-generator.js","sourceRoot":"","sources":["../../src/bridge/soul-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Dispatcher — the missing link between OpenClaw agents and competition engines.
|
|
3
|
+
*
|
|
4
|
+
* Completes the race loop:
|
|
5
|
+
* deploy SOUL.md → dispatch TASK.md → agent executes → collect SUBMISSION.md → judge
|
|
6
|
+
*
|
|
7
|
+
* Design principles:
|
|
8
|
+
* 1. File protocol: no HTTP required from agents, just file read/write
|
|
9
|
+
* 2. Pluggable I/O: swap FileWorkspaceIO for remote/memory backends
|
|
10
|
+
* 3. Event-driven: all lifecycle stages emit events via the org EventBus
|
|
11
|
+
* 4. Timeout-aware: agents that fail to submit within timeLimit are marked as timed out
|
|
12
|
+
* 5. Fault-tolerant: partial dispatch failures don't crash the whole pipeline
|
|
13
|
+
*/
|
|
14
|
+
import type { WorkspaceIO } from './workspace-io.js';
|
|
15
|
+
import type { EventBus } from '../core/event-bus.js';
|
|
16
|
+
export interface EvaluationCriterion {
|
|
17
|
+
name: string;
|
|
18
|
+
weight: number;
|
|
19
|
+
description: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DispatchTask {
|
|
22
|
+
/** Unique task ID */
|
|
23
|
+
id: string;
|
|
24
|
+
/** Human-readable title */
|
|
25
|
+
title: string;
|
|
26
|
+
/** Full task description for agents */
|
|
27
|
+
description: string;
|
|
28
|
+
/** Evaluation criteria (passed through to judge) */
|
|
29
|
+
criteria: EvaluationCriterion[];
|
|
30
|
+
/** Maximum time allowed for submissions (ms) */
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
/** Agent IDs that should participate */
|
|
33
|
+
participants: string[];
|
|
34
|
+
/** Optional metadata */
|
|
35
|
+
metadata?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface AgentSubmission {
|
|
38
|
+
agentId: string;
|
|
39
|
+
output: string;
|
|
40
|
+
submittedAt: string;
|
|
41
|
+
/** Time from dispatch to submission (ms) */
|
|
42
|
+
duration: number;
|
|
43
|
+
}
|
|
44
|
+
export interface DispatchResult {
|
|
45
|
+
taskId: string;
|
|
46
|
+
taskTitle: string;
|
|
47
|
+
dispatchedAt: string;
|
|
48
|
+
collectedAt: string;
|
|
49
|
+
submissions: AgentSubmission[];
|
|
50
|
+
/** Agents that did not submit in time */
|
|
51
|
+
timedOut: string[];
|
|
52
|
+
/** Agents that failed during dispatch (TASK.md could not be written) */
|
|
53
|
+
dispatchFailed: string[];
|
|
54
|
+
}
|
|
55
|
+
export interface DispatcherOptions {
|
|
56
|
+
/** Polling interval for checking submissions (ms, default: 2000) */
|
|
57
|
+
pollIntervalMs?: number;
|
|
58
|
+
/** Whether to clean up TASK.md and SUBMISSION.md after collection (default: true) */
|
|
59
|
+
cleanup?: boolean;
|
|
60
|
+
/** Optional EventBus for emitting race lifecycle events */
|
|
61
|
+
eventBus?: EventBus;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Dispatches tasks to agent workspaces and collects their submissions.
|
|
65
|
+
*
|
|
66
|
+
* Usage:
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const io = new FileWorkspaceIO();
|
|
69
|
+
* const dispatcher = new TaskDispatcher(io, { eventBus: universe.events });
|
|
70
|
+
*
|
|
71
|
+
* const result = await dispatcher.run({
|
|
72
|
+
* id: 'race-001',
|
|
73
|
+
* title: '撰写一篇策论',
|
|
74
|
+
* description: '就"如何提升协作效率"撰写500字策论',
|
|
75
|
+
* criteria: [{ name: '质量', weight: 0.6, description: '...' }],
|
|
76
|
+
* timeoutMs: 60000,
|
|
77
|
+
* participants: ['zhenhuan', 'huafei', 'anlingrong'],
|
|
78
|
+
* });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare class TaskDispatcher {
|
|
82
|
+
private readonly io;
|
|
83
|
+
private readonly pollIntervalMs;
|
|
84
|
+
private readonly cleanup;
|
|
85
|
+
private readonly eventBus?;
|
|
86
|
+
constructor(io: WorkspaceIO, options?: DispatcherOptions);
|
|
87
|
+
/**
|
|
88
|
+
* Dispatch a task to all participants' workspaces.
|
|
89
|
+
* Writes TASK.md to each agent's workspace directory.
|
|
90
|
+
* Returns the list of agent IDs that failed to receive the task.
|
|
91
|
+
*/
|
|
92
|
+
dispatch(task: DispatchTask): Promise<string[]>;
|
|
93
|
+
/**
|
|
94
|
+
* Collect submissions from participants, polling until timeout.
|
|
95
|
+
* Returns all collected submissions and which agents timed out.
|
|
96
|
+
*/
|
|
97
|
+
collect(task: DispatchTask, dispatchedAt: string, excludeAgents?: string[]): Promise<DispatchResult>;
|
|
98
|
+
/**
|
|
99
|
+
* Run a complete dispatch-collect cycle: dispatch task, wait for submissions, return results.
|
|
100
|
+
* This is the primary high-level API.
|
|
101
|
+
*
|
|
102
|
+
* Agents that fail to receive the task are excluded from collection
|
|
103
|
+
* and reported in `dispatchFailed`.
|
|
104
|
+
*/
|
|
105
|
+
run(task: DispatchTask): Promise<DispatchResult>;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=task-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-dispatcher.d.ts","sourceRoot":"","sources":["../../src/bridge/task-dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIrD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,wEAAwE;IACxE,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAqDD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;gBAEzB,EAAE,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB;IAO5D;;;;OAIG;IACG,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0CrD;;;OAGG;IACG,OAAO,CACX,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,EACpB,aAAa,GAAE,MAAM,EAAO,GAC3B,OAAO,CAAC,cAAc,CAAC;IAoF1B;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;CAiBvD"}
|