jfl 0.1.1 → 0.2.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/README.md +77 -7
- package/clawdbot-plugin/clawdbot.plugin.json +20 -0
- package/clawdbot-plugin/index.js +555 -0
- package/clawdbot-plugin/index.ts +582 -0
- package/clawdbot-skill/SKILL.md +33 -336
- package/clawdbot-skill/index.ts +491 -321
- package/clawdbot-skill/skill.json +4 -13
- package/dist/commands/clawdbot.d.ts +11 -0
- package/dist/commands/clawdbot.d.ts.map +1 -0
- package/dist/commands/clawdbot.js +215 -0
- package/dist/commands/clawdbot.js.map +1 -0
- package/dist/commands/gtm-process-update.d.ts +10 -0
- package/dist/commands/gtm-process-update.d.ts.map +1 -0
- package/dist/commands/gtm-process-update.js +101 -0
- package/dist/commands/gtm-process-update.js.map +1 -0
- package/dist/commands/onboard.d.ts.map +1 -1
- package/dist/commands/onboard.js +203 -15
- package/dist/commands/onboard.js.map +1 -1
- package/dist/commands/openclaw.d.ts +56 -0
- package/dist/commands/openclaw.d.ts.map +1 -0
- package/dist/commands/openclaw.js +700 -0
- package/dist/commands/openclaw.js.map +1 -0
- package/dist/commands/service-validate.d.ts +12 -0
- package/dist/commands/service-validate.d.ts.map +1 -0
- package/dist/commands/service-validate.js +611 -0
- package/dist/commands/service-validate.js.map +1 -0
- package/dist/commands/services-create.d.ts +15 -0
- package/dist/commands/services-create.d.ts.map +1 -0
- package/dist/commands/services-create.js +1452 -0
- package/dist/commands/services-create.js.map +1 -0
- package/dist/commands/services-sync-agents.d.ts +23 -0
- package/dist/commands/services-sync-agents.d.ts.map +1 -0
- package/dist/commands/services-sync-agents.js +207 -0
- package/dist/commands/services-sync-agents.js.map +1 -0
- package/dist/commands/services.d.ts +7 -1
- package/dist/commands/services.d.ts.map +1 -1
- package/dist/commands/services.js +347 -22
- package/dist/commands/services.js.map +1 -1
- package/dist/commands/update.js +0 -0
- package/dist/commands/validate-settings.d.ts +37 -0
- package/dist/commands/validate-settings.d.ts.map +1 -0
- package/dist/commands/validate-settings.js +197 -0
- package/dist/commands/validate-settings.js.map +1 -0
- package/dist/index.js +155 -60
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-generator.d.ts.map +1 -1
- package/dist/lib/agent-generator.js +94 -1
- package/dist/lib/agent-generator.js.map +1 -1
- package/dist/lib/openclaw-registry.d.ts +48 -0
- package/dist/lib/openclaw-registry.d.ts.map +1 -0
- package/dist/lib/openclaw-registry.js +181 -0
- package/dist/lib/openclaw-registry.js.map +1 -0
- package/dist/lib/openclaw-sdk.d.ts +107 -0
- package/dist/lib/openclaw-sdk.d.ts.map +1 -0
- package/dist/lib/openclaw-sdk.js +208 -0
- package/dist/lib/openclaw-sdk.js.map +1 -0
- package/dist/lib/peer-agent-generator.d.ts +44 -0
- package/dist/lib/peer-agent-generator.d.ts.map +1 -0
- package/dist/lib/peer-agent-generator.js +286 -0
- package/dist/lib/peer-agent-generator.js.map +1 -0
- package/dist/lib/service-detector.d.ts +1 -1
- package/dist/lib/service-detector.d.ts.map +1 -1
- package/dist/lib/service-detector.js +118 -5
- package/dist/lib/service-detector.js.map +1 -1
- package/dist/lib/service-gtm.d.ts +157 -0
- package/dist/lib/service-gtm.d.ts.map +1 -0
- package/dist/lib/service-gtm.js +786 -0
- package/dist/lib/service-gtm.js.map +1 -0
- package/dist/lib/service-mcp-base.d.ts +10 -1
- package/dist/lib/service-mcp-base.d.ts.map +1 -1
- package/dist/lib/service-mcp-base.js +20 -1
- package/dist/lib/service-mcp-base.js.map +1 -1
- package/dist/mcp/service-peer-mcp.d.ts +36 -0
- package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
- package/dist/mcp/service-peer-mcp.js +220 -0
- package/dist/mcp/service-peer-mcp.js.map +1 -0
- package/dist/mcp/service-registry-mcp.js +0 -0
- package/dist/utils/settings-validator.d.ts +4 -1
- package/dist/utils/settings-validator.d.ts.map +1 -1
- package/dist/utils/settings-validator.js +25 -1
- package/dist/utils/settings-validator.js.map +1 -1
- package/package.json +2 -1
- package/template/.claude/service-settings.json +32 -0
- package/template/.claude/settings.json +10 -0
- package/template/.claude/skills/end/SKILL.md +1780 -0
- package/template/.jfl/config.json +2 -1
- package/template/.mcp.json +1 -7
- package/template/CLAUDE.md +1042 -248
- package/template/CLAUDE.md.bak +1187 -0
- package/template/scripts/commit-gtm.sh +56 -0
- package/template/scripts/commit-product.sh +68 -0
- package/template/scripts/migrate-to-branch-sessions.sh +201 -0
- package/template/scripts/session/auto-commit.sh +4 -3
- package/template/scripts/session/jfl-doctor.sh +222 -83
- package/template/scripts/session/session-cleanup.sh +109 -21
- package/template/scripts/session/session-end.sh +26 -13
- package/template/scripts/session/session-init.sh +280 -98
- package/template/scripts/session/test-critical-infrastructure.sh +293 -0
- package/template/scripts/session/test-experience-level.sh +336 -0
- package/template/scripts/session/test-session-cleanup.sh +268 -0
- package/template/scripts/session/test-session-sync.sh +320 -0
- package/template/scripts/where-am-i.sh +78 -0
- package/template/templates/service-agent/.claude/settings.json +32 -0
- package/template/templates/service-agent/CLAUDE.md +334 -0
- package/template/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
- package/template/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
- package/template/templates/service-agent/knowledge/RUNBOOK.md +412 -0
- package/template/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
- package/dist/commands/session-mgmt.d.ts +0 -33
- package/dist/commands/session-mgmt.d.ts.map +0 -1
- package/dist/commands/session-mgmt.js +0 -404
- package/dist/commands/session-mgmt.js.map +0 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @purpose Generate service agent definitions for GTM integration
|
|
7
7
|
*/
|
|
8
|
-
import { writeFileSync, mkdirSync, existsSync } from "fs";
|
|
8
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync } from "fs";
|
|
9
9
|
import { join } from "path";
|
|
10
10
|
/**
|
|
11
11
|
* Map service type to agent color
|
|
@@ -71,6 +71,97 @@ function generateSafetyGates(metadata) {
|
|
|
71
71
|
}
|
|
72
72
|
return gates;
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Generate peer services section for service CLAUDE.md
|
|
76
|
+
*/
|
|
77
|
+
function generatePeerServicesSection(currentServiceName, gtmPath) {
|
|
78
|
+
// Try to load registered services from GTM config
|
|
79
|
+
const gtmConfigPath = join(gtmPath, ".jfl/config.json");
|
|
80
|
+
if (!existsSync(gtmConfigPath)) {
|
|
81
|
+
return `## Peer Services Available
|
|
82
|
+
|
|
83
|
+
You can collaborate with other services in this GTM workspace.
|
|
84
|
+
Run \`jfl services sync-agents\` to discover peer services.`;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const gtmConfig = JSON.parse(readFileSync(gtmConfigPath, "utf-8"));
|
|
88
|
+
const registeredServices = gtmConfig.registered_services || [];
|
|
89
|
+
// Filter out current service
|
|
90
|
+
const peers = registeredServices.filter((s) => s.name !== currentServiceName && s.status === "active");
|
|
91
|
+
if (peers.length === 0) {
|
|
92
|
+
return `## Peer Services Available
|
|
93
|
+
|
|
94
|
+
No other services registered yet. When services are onboarded, you'll be able to @ mention them.`;
|
|
95
|
+
}
|
|
96
|
+
// Generate peer services table
|
|
97
|
+
const peerTable = peers
|
|
98
|
+
.map((p) => {
|
|
99
|
+
const whenToUse = getWhenToUseForType(p.type);
|
|
100
|
+
return `| @peer-service-${p.name} | ${p.type} | ${whenToUse} |`;
|
|
101
|
+
})
|
|
102
|
+
.join("\n");
|
|
103
|
+
return `## Peer Services Available
|
|
104
|
+
|
|
105
|
+
You can collaborate with other services in this GTM workspace:
|
|
106
|
+
|
|
107
|
+
| Peer Service | Type | When to Use |
|
|
108
|
+
|--------------|------|-------------|
|
|
109
|
+
${peerTable}
|
|
110
|
+
|
|
111
|
+
### How to Collaborate
|
|
112
|
+
|
|
113
|
+
**Direct @-mention (preferred):**
|
|
114
|
+
\`\`\`
|
|
115
|
+
@peer-service-formation can you generate a landing page?
|
|
116
|
+
@peer-service-context-hub what changed system-wide in last 24h?
|
|
117
|
+
\`\`\`
|
|
118
|
+
|
|
119
|
+
**MCP fallback (if agent spawning unavailable):**
|
|
120
|
+
\`\`\`
|
|
121
|
+
service_peer_call("peer-service-formation", "generate", {...})
|
|
122
|
+
service_peer_list() # List all peers
|
|
123
|
+
service_peer_status("peer-service-formation") # Check status
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
### When to Collaborate vs Handle Alone
|
|
127
|
+
|
|
128
|
+
**Collaborate when:**
|
|
129
|
+
- Task outside your service's core responsibility
|
|
130
|
+
- Need data/context from another service
|
|
131
|
+
- Coordinating multi-service operation
|
|
132
|
+
|
|
133
|
+
**Handle alone when:**
|
|
134
|
+
- Task within your service's domain
|
|
135
|
+
- Operation is service-local
|
|
136
|
+
- You have all needed context`;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return `## Peer Services Available
|
|
140
|
+
|
|
141
|
+
Run \`jfl services sync-agents\` to discover peer services.`;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get "When to Use" guidance for a service type
|
|
146
|
+
*/
|
|
147
|
+
function getWhenToUseForType(type) {
|
|
148
|
+
switch (type) {
|
|
149
|
+
case "api":
|
|
150
|
+
return "API data/endpoints";
|
|
151
|
+
case "web":
|
|
152
|
+
return "Frontend/UI tasks";
|
|
153
|
+
case "worker":
|
|
154
|
+
return "Background jobs";
|
|
155
|
+
case "infrastructure":
|
|
156
|
+
return "System health/metrics";
|
|
157
|
+
case "container":
|
|
158
|
+
return "Container ops";
|
|
159
|
+
case "cli":
|
|
160
|
+
return "CLI automation";
|
|
161
|
+
default:
|
|
162
|
+
return "Service tasks";
|
|
163
|
+
}
|
|
164
|
+
}
|
|
74
165
|
/**
|
|
75
166
|
* Generate agent definition content
|
|
76
167
|
*/
|
|
@@ -192,6 +283,8 @@ You can be invoked via:
|
|
|
192
283
|
|
|
193
284
|
When spawned, the GTM agent may provide context from GTM knowledge docs. Use this to align with overall strategy.
|
|
194
285
|
|
|
286
|
+
${generatePeerServicesSection(agentDef.name.replace("service-", ""), gtmPath)}
|
|
287
|
+
|
|
195
288
|
## Example Requests
|
|
196
289
|
|
|
197
290
|
**"What's your current status?"**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-generator.js","sourceRoot":"","sources":["../../src/lib/agent-generator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-generator.js","sourceRoot":"","sources":["../../src/lib/agent-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Agent Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages the multi-GTM agent registry at ~/.config/jfl/openclaw-agents.json.
|
|
5
|
+
* Tracks which agents are registered, their GTM workspaces, and active sessions.
|
|
6
|
+
*
|
|
7
|
+
* @purpose Multi-GTM agent registry management for OpenClaw protocol
|
|
8
|
+
* @spec specs/OPENCLAW_SPEC.md#5-multi-gtm-agent-registry
|
|
9
|
+
*/
|
|
10
|
+
export interface GtmRegistration {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
path: string;
|
|
14
|
+
default: boolean;
|
|
15
|
+
registered_at: string;
|
|
16
|
+
}
|
|
17
|
+
export interface AgentSession {
|
|
18
|
+
branch: string;
|
|
19
|
+
started_at: string;
|
|
20
|
+
worktree: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface AgentEntry {
|
|
23
|
+
id: string;
|
|
24
|
+
runtime: string;
|
|
25
|
+
manifest_path: string | null;
|
|
26
|
+
registered_gtms: GtmRegistration[];
|
|
27
|
+
active_gtm: string | null;
|
|
28
|
+
session: AgentSession | null;
|
|
29
|
+
}
|
|
30
|
+
export interface AgentRegistry {
|
|
31
|
+
version: string;
|
|
32
|
+
agents: Record<string, AgentEntry>;
|
|
33
|
+
}
|
|
34
|
+
export declare function getAgent(agentId: string): AgentEntry | null;
|
|
35
|
+
export declare function listAgents(): AgentEntry[];
|
|
36
|
+
export declare function ensureAgent(agentId: string, runtime?: string): AgentEntry;
|
|
37
|
+
export declare function setManifestPath(agentId: string, manifestPath: string): void;
|
|
38
|
+
export declare function registerGtm(agentId: string, gtmPath: string, gtmName: string, setDefault?: boolean): GtmRegistration;
|
|
39
|
+
export declare function getActiveGtm(agentId: string): GtmRegistration | null;
|
|
40
|
+
export declare function switchGtm(agentId: string, gtmId: string): GtmRegistration;
|
|
41
|
+
export declare function listGtms(agentId: string): GtmRegistration[];
|
|
42
|
+
export declare function removeGtm(agentId: string, gtmId: string): boolean;
|
|
43
|
+
export declare function updateSession(agentId: string, session: AgentSession | null): void;
|
|
44
|
+
export declare function getActiveSession(agentId: string): AgentSession | null;
|
|
45
|
+
export declare function clearSession(agentId: string): void;
|
|
46
|
+
export declare function removeAgent(agentId: string): boolean;
|
|
47
|
+
export declare function getRegistryPath(): string;
|
|
48
|
+
//# sourceMappingURL=openclaw-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-registry.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,eAAe,EAAE,CAAA;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACnC;AA8BD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG3D;AAED,wBAAgB,UAAU,IAAI,UAAU,EAAE,CAGzC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAiB,GAAG,UAAU,CAgBnF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAM3E;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAe,GAC1B,eAAe,CA2CjB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAKpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAezE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAI3D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBjE;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GAAG,IAAI,GAC3B,IAAI,CASN;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGrE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Agent Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages the multi-GTM agent registry at ~/.config/jfl/openclaw-agents.json.
|
|
5
|
+
* Tracks which agents are registered, their GTM workspaces, and active sessions.
|
|
6
|
+
*
|
|
7
|
+
* @purpose Multi-GTM agent registry management for OpenClaw protocol
|
|
8
|
+
* @spec specs/OPENCLAW_SPEC.md#5-multi-gtm-agent-registry
|
|
9
|
+
*/
|
|
10
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
11
|
+
import { join, dirname, basename } from "path";
|
|
12
|
+
import { JFL_PATHS } from "../utils/jfl-paths.js";
|
|
13
|
+
const REGISTRY_FILE = join(JFL_PATHS.config, "openclaw-agents.json");
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Registry I/O
|
|
16
|
+
// ============================================================================
|
|
17
|
+
function loadRegistry() {
|
|
18
|
+
if (!existsSync(REGISTRY_FILE)) {
|
|
19
|
+
return { version: "1.0", agents: {} };
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
return JSON.parse(readFileSync(REGISTRY_FILE, "utf-8"));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return { version: "1.0", agents: {} };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function saveRegistry(registry) {
|
|
29
|
+
const dir = dirname(REGISTRY_FILE);
|
|
30
|
+
if (!existsSync(dir)) {
|
|
31
|
+
mkdirSync(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
writeFileSync(REGISTRY_FILE, JSON.stringify(registry, null, 2) + "\n");
|
|
34
|
+
}
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Agent Operations
|
|
37
|
+
// ============================================================================
|
|
38
|
+
export function getAgent(agentId) {
|
|
39
|
+
const registry = loadRegistry();
|
|
40
|
+
return registry.agents[agentId] || null;
|
|
41
|
+
}
|
|
42
|
+
export function listAgents() {
|
|
43
|
+
const registry = loadRegistry();
|
|
44
|
+
return Object.values(registry.agents);
|
|
45
|
+
}
|
|
46
|
+
export function ensureAgent(agentId, runtime = "custom") {
|
|
47
|
+
const registry = loadRegistry();
|
|
48
|
+
if (!registry.agents[agentId]) {
|
|
49
|
+
registry.agents[agentId] = {
|
|
50
|
+
id: agentId,
|
|
51
|
+
runtime,
|
|
52
|
+
manifest_path: null,
|
|
53
|
+
registered_gtms: [],
|
|
54
|
+
active_gtm: null,
|
|
55
|
+
session: null,
|
|
56
|
+
};
|
|
57
|
+
saveRegistry(registry);
|
|
58
|
+
}
|
|
59
|
+
return registry.agents[agentId];
|
|
60
|
+
}
|
|
61
|
+
export function setManifestPath(agentId, manifestPath) {
|
|
62
|
+
const registry = loadRegistry();
|
|
63
|
+
if (registry.agents[agentId]) {
|
|
64
|
+
registry.agents[agentId].manifest_path = manifestPath;
|
|
65
|
+
saveRegistry(registry);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// GTM Operations
|
|
70
|
+
// ============================================================================
|
|
71
|
+
export function registerGtm(agentId, gtmPath, gtmName, setDefault = false) {
|
|
72
|
+
const registry = loadRegistry();
|
|
73
|
+
const agent = registry.agents[agentId];
|
|
74
|
+
if (!agent) {
|
|
75
|
+
throw new Error(`Agent "${agentId}" not found in registry. Call ensureAgent() first.`);
|
|
76
|
+
}
|
|
77
|
+
const gtmId = basename(gtmPath).toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
78
|
+
// Check if already registered
|
|
79
|
+
const existing = agent.registered_gtms.find((g) => g.path === gtmPath);
|
|
80
|
+
if (existing) {
|
|
81
|
+
if (setDefault) {
|
|
82
|
+
agent.registered_gtms.forEach((g) => (g.default = false));
|
|
83
|
+
existing.default = true;
|
|
84
|
+
}
|
|
85
|
+
saveRegistry(registry);
|
|
86
|
+
return existing;
|
|
87
|
+
}
|
|
88
|
+
// If first GTM or explicit default, mark as default
|
|
89
|
+
const isDefault = setDefault || agent.registered_gtms.length === 0;
|
|
90
|
+
if (isDefault) {
|
|
91
|
+
agent.registered_gtms.forEach((g) => (g.default = false));
|
|
92
|
+
}
|
|
93
|
+
const registration = {
|
|
94
|
+
id: gtmId,
|
|
95
|
+
name: gtmName,
|
|
96
|
+
path: gtmPath,
|
|
97
|
+
default: isDefault,
|
|
98
|
+
registered_at: new Date().toISOString(),
|
|
99
|
+
};
|
|
100
|
+
agent.registered_gtms.push(registration);
|
|
101
|
+
if (isDefault) {
|
|
102
|
+
agent.active_gtm = gtmId;
|
|
103
|
+
}
|
|
104
|
+
saveRegistry(registry);
|
|
105
|
+
return registration;
|
|
106
|
+
}
|
|
107
|
+
export function getActiveGtm(agentId) {
|
|
108
|
+
const agent = getAgent(agentId);
|
|
109
|
+
if (!agent || !agent.active_gtm)
|
|
110
|
+
return null;
|
|
111
|
+
return agent.registered_gtms.find((g) => g.id === agent.active_gtm) || null;
|
|
112
|
+
}
|
|
113
|
+
export function switchGtm(agentId, gtmId) {
|
|
114
|
+
const registry = loadRegistry();
|
|
115
|
+
const agent = registry.agents[agentId];
|
|
116
|
+
if (!agent) {
|
|
117
|
+
throw new Error(`Agent "${agentId}" not found in registry`);
|
|
118
|
+
}
|
|
119
|
+
const gtm = agent.registered_gtms.find((g) => g.id === gtmId);
|
|
120
|
+
if (!gtm) {
|
|
121
|
+
throw new Error(`GTM "${gtmId}" not registered for agent "${agentId}"`);
|
|
122
|
+
}
|
|
123
|
+
agent.active_gtm = gtmId;
|
|
124
|
+
saveRegistry(registry);
|
|
125
|
+
return gtm;
|
|
126
|
+
}
|
|
127
|
+
export function listGtms(agentId) {
|
|
128
|
+
const agent = getAgent(agentId);
|
|
129
|
+
if (!agent)
|
|
130
|
+
return [];
|
|
131
|
+
return agent.registered_gtms;
|
|
132
|
+
}
|
|
133
|
+
export function removeGtm(agentId, gtmId) {
|
|
134
|
+
const registry = loadRegistry();
|
|
135
|
+
const agent = registry.agents[agentId];
|
|
136
|
+
if (!agent)
|
|
137
|
+
return false;
|
|
138
|
+
const idx = agent.registered_gtms.findIndex((g) => g.id === gtmId);
|
|
139
|
+
if (idx === -1)
|
|
140
|
+
return false;
|
|
141
|
+
agent.registered_gtms.splice(idx, 1);
|
|
142
|
+
if (agent.active_gtm === gtmId) {
|
|
143
|
+
agent.active_gtm = agent.registered_gtms[0]?.id || null;
|
|
144
|
+
}
|
|
145
|
+
saveRegistry(registry);
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
// ============================================================================
|
|
149
|
+
// Session Operations
|
|
150
|
+
// ============================================================================
|
|
151
|
+
export function updateSession(agentId, session) {
|
|
152
|
+
const registry = loadRegistry();
|
|
153
|
+
const agent = registry.agents[agentId];
|
|
154
|
+
if (!agent) {
|
|
155
|
+
throw new Error(`Agent "${agentId}" not found in registry`);
|
|
156
|
+
}
|
|
157
|
+
agent.session = session;
|
|
158
|
+
saveRegistry(registry);
|
|
159
|
+
}
|
|
160
|
+
export function getActiveSession(agentId) {
|
|
161
|
+
const agent = getAgent(agentId);
|
|
162
|
+
return agent?.session || null;
|
|
163
|
+
}
|
|
164
|
+
export function clearSession(agentId) {
|
|
165
|
+
updateSession(agentId, null);
|
|
166
|
+
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Utility
|
|
169
|
+
// ============================================================================
|
|
170
|
+
export function removeAgent(agentId) {
|
|
171
|
+
const registry = loadRegistry();
|
|
172
|
+
if (!registry.agents[agentId])
|
|
173
|
+
return false;
|
|
174
|
+
delete registry.agents[agentId];
|
|
175
|
+
saveRegistry(registry);
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
export function getRegistryPath() {
|
|
179
|
+
return REGISTRY_FILE;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=openclaw-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-registry.js","sourceRoot":"","sources":["../../src/lib/openclaw-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper around Context Hub HTTP API and direct file I/O.
|
|
5
|
+
* For Node.js agent runtimes (Clawdbot, custom) that prefer imports over shell-outs.
|
|
6
|
+
*
|
|
7
|
+
* Primary path: HTTP to Context Hub (fast, no process spawn).
|
|
8
|
+
* Fallback: Shell out to `jfl openclaw` commands.
|
|
9
|
+
*
|
|
10
|
+
* @purpose Runtime-agnostic SDK for OpenClaw agent protocol
|
|
11
|
+
* @spec specs/OPENCLAW_SPEC.md
|
|
12
|
+
*/
|
|
13
|
+
export interface OpenClawConfig {
|
|
14
|
+
agentId: string;
|
|
15
|
+
hubUrl?: string;
|
|
16
|
+
gtmPath?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SessionInfo {
|
|
19
|
+
session_id: string;
|
|
20
|
+
branch: string;
|
|
21
|
+
gtm_path: string;
|
|
22
|
+
gtm_name: string;
|
|
23
|
+
context_hub: {
|
|
24
|
+
url: string;
|
|
25
|
+
healthy: boolean;
|
|
26
|
+
};
|
|
27
|
+
auto_commit: {
|
|
28
|
+
running: boolean;
|
|
29
|
+
interval: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface HealthStatus {
|
|
33
|
+
healthy: boolean;
|
|
34
|
+
context_hub: boolean;
|
|
35
|
+
uncommitted_changes: boolean;
|
|
36
|
+
last_commit: string | null;
|
|
37
|
+
session_duration_seconds: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ContextItem {
|
|
40
|
+
source: string;
|
|
41
|
+
type: string;
|
|
42
|
+
title: string;
|
|
43
|
+
content: string;
|
|
44
|
+
path?: string;
|
|
45
|
+
relevance?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface MemoryResult {
|
|
48
|
+
id: string;
|
|
49
|
+
title: string;
|
|
50
|
+
summary: string;
|
|
51
|
+
type: string;
|
|
52
|
+
ts: string;
|
|
53
|
+
relevance: string;
|
|
54
|
+
score: number;
|
|
55
|
+
}
|
|
56
|
+
export interface JournalEntry {
|
|
57
|
+
v: number;
|
|
58
|
+
ts: string;
|
|
59
|
+
session: string;
|
|
60
|
+
type: "feature" | "fix" | "decision" | "milestone" | "spec" | "discovery";
|
|
61
|
+
status?: "complete" | "incomplete" | "blocked";
|
|
62
|
+
title: string;
|
|
63
|
+
summary: string;
|
|
64
|
+
detail?: string;
|
|
65
|
+
files?: string[];
|
|
66
|
+
decision?: string;
|
|
67
|
+
incomplete?: string[];
|
|
68
|
+
next?: string;
|
|
69
|
+
learned?: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface GtmInfo {
|
|
72
|
+
id: string;
|
|
73
|
+
name: string;
|
|
74
|
+
path: string;
|
|
75
|
+
default: boolean;
|
|
76
|
+
registered_at: string;
|
|
77
|
+
}
|
|
78
|
+
export interface ServiceInfo {
|
|
79
|
+
name: string;
|
|
80
|
+
path: string;
|
|
81
|
+
type: string;
|
|
82
|
+
status: string;
|
|
83
|
+
}
|
|
84
|
+
export declare class OpenClawClient {
|
|
85
|
+
private agentId;
|
|
86
|
+
private hubUrl;
|
|
87
|
+
private gtmPath;
|
|
88
|
+
private http;
|
|
89
|
+
private sessionId;
|
|
90
|
+
constructor(config: OpenClawConfig);
|
|
91
|
+
sessionStart(gtmPath?: string): Promise<SessionInfo>;
|
|
92
|
+
sessionEnd(sync?: boolean): Promise<void>;
|
|
93
|
+
heartbeat(): Promise<HealthStatus>;
|
|
94
|
+
getContext(query?: string, taskType?: string): Promise<ContextItem[]>;
|
|
95
|
+
searchMemory(query: string, type?: string): Promise<MemoryResult[]>;
|
|
96
|
+
writeJournal(entry: Partial<JournalEntry>): Promise<void>;
|
|
97
|
+
listGtms(): Promise<GtmInfo[]>;
|
|
98
|
+
switchGtm(gtmId: string): Promise<void>;
|
|
99
|
+
createGtm(name: string, path?: string): Promise<string>;
|
|
100
|
+
tagService(name: string, message: string): Promise<void>;
|
|
101
|
+
listServices(): Promise<ServiceInfo[]>;
|
|
102
|
+
private cli;
|
|
103
|
+
private getAuthHeaders;
|
|
104
|
+
private resolveGtmPath;
|
|
105
|
+
private getCurrentSessionBranch;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=openclaw-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-sdk.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-sdk.ts"],"names":[],"mappings":"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"}
|