jfl 0.1.0 → 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 +443 -145
- 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/context-hub.d.ts +5 -0
- package/dist/commands/context-hub.d.ts.map +1 -1
- package/dist/commands/context-hub.js +394 -28
- package/dist/commands/context-hub.js.map +1 -1
- 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/init.d.ts.map +1 -1
- package/dist/commands/init.js +278 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +32 -33
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/memory.d.ts +38 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +229 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/migrate-services.d.ts +8 -0
- package/dist/commands/migrate-services.d.ts.map +1 -0
- package/dist/commands/migrate-services.js +182 -0
- package/dist/commands/migrate-services.js.map +1 -0
- package/dist/commands/onboard.d.ts +24 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +663 -0
- package/dist/commands/onboard.js.map +1 -0
- 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/orchestrate.d.ts +14 -0
- package/dist/commands/orchestrate.d.ts.map +1 -0
- package/dist/commands/orchestrate.js +270 -0
- package/dist/commands/orchestrate.js.map +1 -0
- package/dist/commands/profile.d.ts +46 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +498 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/repair.d.ts.map +1 -1
- package/dist/commands/repair.js +37 -0
- package/dist/commands/repair.js.map +1 -1
- package/dist/commands/service-agent.d.ts +16 -0
- package/dist/commands/service-agent.d.ts.map +1 -0
- package/dist/commands/service-agent.js +375 -0
- package/dist/commands/service-agent.js.map +1 -0
- package/dist/commands/service-manager.d.ts +12 -0
- package/dist/commands/service-manager.d.ts.map +1 -0
- package/dist/commands/service-manager.js +967 -0
- package/dist/commands/service-manager.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-scan.d.ts +13 -0
- package/dist/commands/services-scan.d.ts.map +1 -0
- package/dist/commands/services-scan.js +251 -0
- package/dist/commands/services-scan.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 +19 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +742 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/session.d.ts +5 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +68 -586
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +17 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +75 -21
- package/dist/commands/update.js.map +1 -1
- 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/commands/voice.d.ts +0 -1
- package/dist/commands/voice.d.ts.map +1 -1
- package/dist/commands/voice.js +16 -15
- package/dist/commands/voice.js.map +1 -1
- package/dist/index.js +395 -141
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-generator.d.ts +26 -0
- package/dist/lib/agent-generator.d.ts.map +1 -0
- package/dist/lib/agent-generator.js +331 -0
- package/dist/lib/agent-generator.js.map +1 -0
- package/dist/lib/memory-db.d.ts +102 -0
- package/dist/lib/memory-db.d.ts.map +1 -0
- package/dist/lib/memory-db.js +313 -0
- package/dist/lib/memory-db.js.map +1 -0
- package/dist/lib/memory-indexer.d.ts +47 -0
- package/dist/lib/memory-indexer.d.ts.map +1 -0
- package/dist/lib/memory-indexer.js +215 -0
- package/dist/lib/memory-indexer.js.map +1 -0
- package/dist/lib/memory-search.d.ts +41 -0
- package/dist/lib/memory-search.d.ts.map +1 -0
- package/dist/lib/memory-search.js +246 -0
- package/dist/lib/memory-search.js.map +1 -0
- 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-dependencies.d.ts +44 -0
- package/dist/lib/service-dependencies.d.ts.map +1 -0
- package/dist/lib/service-dependencies.js +314 -0
- package/dist/lib/service-dependencies.js.map +1 -0
- package/dist/lib/service-detector.d.ts +61 -0
- package/dist/lib/service-detector.d.ts.map +1 -0
- package/dist/lib/service-detector.js +521 -0
- package/dist/lib/service-detector.js.map +1 -0
- 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 +103 -0
- package/dist/lib/service-mcp-base.d.ts.map +1 -0
- package/dist/lib/service-mcp-base.js +263 -0
- package/dist/lib/service-mcp-base.js.map +1 -0
- package/dist/lib/service-utils.d.ts +103 -0
- package/dist/lib/service-utils.d.ts.map +1 -0
- package/dist/lib/service-utils.js +368 -0
- package/dist/lib/service-utils.js.map +1 -0
- package/dist/lib/skill-generator.d.ts +21 -0
- package/dist/lib/skill-generator.d.ts.map +1 -0
- package/dist/lib/skill-generator.js +253 -0
- package/dist/lib/skill-generator.js.map +1 -0
- package/dist/lib/stratus-client.d.ts +100 -0
- package/dist/lib/stratus-client.d.ts.map +1 -0
- package/dist/lib/stratus-client.js +255 -0
- package/dist/lib/stratus-client.js.map +1 -0
- package/dist/mcp/context-hub-mcp.js +135 -53
- package/dist/mcp/context-hub-mcp.js.map +1 -1
- package/dist/mcp/service-mcp-server.d.ts +12 -0
- package/dist/mcp/service-mcp-server.d.ts.map +1 -0
- package/dist/mcp/service-mcp-server.js +434 -0
- package/dist/mcp/service-mcp-server.js.map +1 -0
- 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.d.ts +13 -0
- package/dist/mcp/service-registry-mcp.d.ts.map +1 -0
- package/dist/mcp/service-registry-mcp.js +330 -0
- package/dist/mcp/service-registry-mcp.js.map +1 -0
- package/dist/ui/banner.js +1 -1
- package/dist/ui/banner.js.map +1 -1
- package/dist/ui/context-hub-logs.d.ts +10 -0
- package/dist/ui/context-hub-logs.d.ts.map +1 -0
- package/dist/ui/context-hub-logs.js +175 -0
- package/dist/ui/context-hub-logs.js.map +1 -0
- package/dist/ui/service-dashboard.d.ts +11 -0
- package/dist/ui/service-dashboard.d.ts.map +1 -0
- package/dist/ui/service-dashboard.js +357 -0
- package/dist/ui/service-dashboard.js.map +1 -0
- package/dist/ui/services-manager.d.ts +11 -0
- package/dist/ui/services-manager.d.ts.map +1 -0
- package/dist/ui/services-manager.js +507 -0
- package/dist/ui/services-manager.js.map +1 -0
- package/dist/utils/auth-guard.d.ts.map +1 -1
- package/dist/utils/auth-guard.js +8 -9
- package/dist/utils/auth-guard.js.map +1 -1
- package/dist/utils/claude-md-generator.d.ts +10 -0
- package/dist/utils/claude-md-generator.d.ts.map +1 -0
- package/dist/utils/claude-md-generator.js +215 -0
- package/dist/utils/claude-md-generator.js.map +1 -0
- package/dist/utils/ensure-context-hub.d.ts +20 -0
- package/dist/utils/ensure-context-hub.d.ts.map +1 -0
- package/dist/utils/ensure-context-hub.js +65 -0
- package/dist/utils/ensure-context-hub.js.map +1 -0
- package/dist/utils/ensure-project.d.ts.map +1 -1
- package/dist/utils/ensure-project.js +3 -4
- package/dist/utils/ensure-project.js.map +1 -1
- package/dist/utils/jfl-config.d.ts +19 -0
- package/dist/utils/jfl-config.d.ts.map +1 -0
- package/dist/utils/jfl-config.js +112 -0
- package/dist/utils/jfl-config.js.map +1 -0
- package/dist/utils/jfl-migration.d.ts +29 -0
- package/dist/utils/jfl-migration.d.ts.map +1 -0
- package/dist/utils/jfl-migration.js +142 -0
- package/dist/utils/jfl-migration.js.map +1 -0
- package/dist/utils/jfl-paths.d.ts +55 -0
- package/dist/utils/jfl-paths.d.ts.map +1 -0
- package/dist/utils/jfl-paths.js +120 -0
- package/dist/utils/jfl-paths.js.map +1 -0
- package/dist/utils/settings-validator.d.ts +73 -0
- package/dist/utils/settings-validator.d.ts.map +1 -0
- package/dist/utils/settings-validator.js +222 -0
- package/dist/utils/settings-validator.js.map +1 -0
- package/package.json +19 -3
- package/scripts/commit-gtm.sh +56 -0
- package/scripts/commit-product.sh +68 -0
- package/scripts/context-query.sh +45 -0
- package/scripts/session/auto-commit.sh +297 -0
- package/scripts/session/jfl-doctor.sh +707 -0
- package/scripts/session/session-cleanup.sh +268 -0
- package/scripts/session/session-end.sh +198 -0
- package/scripts/session/session-init.sh +350 -0
- package/scripts/session/session-init.sh.backup +292 -0
- package/scripts/session/session-sync.sh +167 -0
- package/scripts/session/test-context-preservation.sh +160 -0
- package/scripts/session/test-critical-infrastructure.sh +293 -0
- package/scripts/session/test-experience-level.sh +336 -0
- package/scripts/session/test-session-cleanup.sh +268 -0
- package/scripts/session/test-session-sync.sh +320 -0
- package/scripts/voice-start.sh +36 -8
- package/scripts/where-am-i.sh +78 -0
- package/template/.claude/service-settings.json +32 -0
- package/template/.claude/settings.json +14 -1
- package/template/.claude/skills/end/SKILL.md +1780 -0
- package/template/.jfl/config.json +2 -1
- package/template/CLAUDE.md +1039 -134
- 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 +58 -6
- package/template/scripts/session/jfl-doctor.sh +137 -17
- package/template/scripts/session/session-cleanup.sh +268 -0
- package/template/scripts/session/session-end.sh +4 -0
- package/template/scripts/session/session-init.sh +253 -66
- 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
- package/template/scripts/session/auto-merge.sh +0 -325
|
@@ -0,0 +1,208 @@
|
|
|
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
|
+
import { execSync } from "child_process";
|
|
14
|
+
import { existsSync, readFileSync, appendFileSync, mkdirSync } from "fs";
|
|
15
|
+
import { join } from "path";
|
|
16
|
+
import axios from "axios";
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Client
|
|
19
|
+
// ============================================================================
|
|
20
|
+
export class OpenClawClient {
|
|
21
|
+
agentId;
|
|
22
|
+
hubUrl;
|
|
23
|
+
gtmPath;
|
|
24
|
+
http;
|
|
25
|
+
sessionId = null;
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.agentId = config.agentId;
|
|
28
|
+
this.hubUrl = config.hubUrl || "http://localhost:4242";
|
|
29
|
+
this.gtmPath = config.gtmPath || null;
|
|
30
|
+
this.http = axios.create({
|
|
31
|
+
baseURL: this.hubUrl,
|
|
32
|
+
timeout: 10000,
|
|
33
|
+
headers: this.getAuthHeaders(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// ==========================================================================
|
|
37
|
+
// Session Lifecycle
|
|
38
|
+
// ==========================================================================
|
|
39
|
+
async sessionStart(gtmPath) {
|
|
40
|
+
const result = this.cli(`session-start --agent ${this.agentId}${gtmPath ? ` --gtm "${gtmPath}"` : ""} --json`);
|
|
41
|
+
const info = JSON.parse(result);
|
|
42
|
+
this.sessionId = info.session_id;
|
|
43
|
+
this.gtmPath = info.gtm_path;
|
|
44
|
+
return info;
|
|
45
|
+
}
|
|
46
|
+
async sessionEnd(sync = false) {
|
|
47
|
+
this.cli(`session-end${sync ? " --sync" : ""} --json`);
|
|
48
|
+
this.sessionId = null;
|
|
49
|
+
}
|
|
50
|
+
async heartbeat() {
|
|
51
|
+
const result = this.cli("heartbeat --json");
|
|
52
|
+
return JSON.parse(result);
|
|
53
|
+
}
|
|
54
|
+
// ==========================================================================
|
|
55
|
+
// Context (via HTTP API)
|
|
56
|
+
// ==========================================================================
|
|
57
|
+
async getContext(query, taskType) {
|
|
58
|
+
try {
|
|
59
|
+
const resp = await this.http.post("/api/context", {
|
|
60
|
+
query,
|
|
61
|
+
taskType,
|
|
62
|
+
maxItems: 30,
|
|
63
|
+
});
|
|
64
|
+
return resp.data.items || resp.data || [];
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Fallback to CLI
|
|
68
|
+
const args = [
|
|
69
|
+
query ? `--query "${query}"` : "",
|
|
70
|
+
taskType ? `--task-type ${taskType}` : "",
|
|
71
|
+
]
|
|
72
|
+
.filter(Boolean)
|
|
73
|
+
.join(" ");
|
|
74
|
+
const result = this.cli(`context ${args} --json`);
|
|
75
|
+
return JSON.parse(result);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async searchMemory(query, type) {
|
|
79
|
+
try {
|
|
80
|
+
const resp = await this.http.post("/api/memory/search", {
|
|
81
|
+
query,
|
|
82
|
+
type,
|
|
83
|
+
maxItems: 10,
|
|
84
|
+
});
|
|
85
|
+
return resp.data.results || resp.data || [];
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Fallback not available for memory search via CLI
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ==========================================================================
|
|
93
|
+
// Journal (direct JSONL append)
|
|
94
|
+
// ==========================================================================
|
|
95
|
+
async writeJournal(entry) {
|
|
96
|
+
const session = this.sessionId || this.getCurrentSessionBranch();
|
|
97
|
+
if (!session) {
|
|
98
|
+
throw new Error("No active session. Call sessionStart() first.");
|
|
99
|
+
}
|
|
100
|
+
const gtmPath = this.resolveGtmPath();
|
|
101
|
+
if (!gtmPath) {
|
|
102
|
+
throw new Error("No GTM path resolved. Register with a GTM first.");
|
|
103
|
+
}
|
|
104
|
+
const journalDir = join(gtmPath, ".jfl", "journal");
|
|
105
|
+
if (!existsSync(journalDir)) {
|
|
106
|
+
mkdirSync(journalDir, { recursive: true });
|
|
107
|
+
}
|
|
108
|
+
const fullEntry = {
|
|
109
|
+
v: 1,
|
|
110
|
+
ts: new Date().toISOString(),
|
|
111
|
+
session,
|
|
112
|
+
type: entry.type || "feature",
|
|
113
|
+
title: entry.title || "Untitled",
|
|
114
|
+
summary: entry.summary || "",
|
|
115
|
+
...entry,
|
|
116
|
+
};
|
|
117
|
+
const journalFile = join(journalDir, `${session}.jsonl`);
|
|
118
|
+
appendFileSync(journalFile, JSON.stringify(fullEntry) + "\n");
|
|
119
|
+
}
|
|
120
|
+
// ==========================================================================
|
|
121
|
+
// GTM Management
|
|
122
|
+
// ==========================================================================
|
|
123
|
+
async listGtms() {
|
|
124
|
+
const result = this.cli("gtm-list --json");
|
|
125
|
+
return JSON.parse(result);
|
|
126
|
+
}
|
|
127
|
+
async switchGtm(gtmId) {
|
|
128
|
+
this.cli(`gtm-switch "${gtmId}" --json`);
|
|
129
|
+
}
|
|
130
|
+
async createGtm(name, path) {
|
|
131
|
+
const args = path ? `"${name}" --path "${path}"` : `"${name}"`;
|
|
132
|
+
const result = this.cli(`gtm-create ${args} --json`);
|
|
133
|
+
const parsed = JSON.parse(result);
|
|
134
|
+
return parsed.path || parsed.gtm_path;
|
|
135
|
+
}
|
|
136
|
+
// ==========================================================================
|
|
137
|
+
// Service Coordination
|
|
138
|
+
// ==========================================================================
|
|
139
|
+
async tagService(name, message) {
|
|
140
|
+
this.cli(`tag "${name}" "${message}"`);
|
|
141
|
+
}
|
|
142
|
+
async listServices() {
|
|
143
|
+
const gtmPath = this.resolveGtmPath();
|
|
144
|
+
if (!gtmPath)
|
|
145
|
+
return [];
|
|
146
|
+
const configPath = join(gtmPath, ".jfl", "config.json");
|
|
147
|
+
if (!existsSync(configPath))
|
|
148
|
+
return [];
|
|
149
|
+
try {
|
|
150
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
151
|
+
return config.registered_services || [];
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// ==========================================================================
|
|
158
|
+
// Private Helpers
|
|
159
|
+
// ==========================================================================
|
|
160
|
+
cli(subcommand) {
|
|
161
|
+
try {
|
|
162
|
+
return execSync(`jfl openclaw ${subcommand}`, {
|
|
163
|
+
encoding: "utf-8",
|
|
164
|
+
timeout: 30000,
|
|
165
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
166
|
+
}).trim();
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
throw new Error(`jfl openclaw ${subcommand} failed: ${err.stderr || err.message}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
getAuthHeaders() {
|
|
173
|
+
const gtmPath = this.resolveGtmPath();
|
|
174
|
+
if (!gtmPath)
|
|
175
|
+
return {};
|
|
176
|
+
const tokenPath = join(gtmPath, ".jfl", "context-hub.token");
|
|
177
|
+
if (!existsSync(tokenPath))
|
|
178
|
+
return {};
|
|
179
|
+
const token = readFileSync(tokenPath, "utf-8").trim();
|
|
180
|
+
return { Authorization: `Bearer ${token}` };
|
|
181
|
+
}
|
|
182
|
+
resolveGtmPath() {
|
|
183
|
+
if (this.gtmPath)
|
|
184
|
+
return this.gtmPath;
|
|
185
|
+
// Try to get from registry via CLI
|
|
186
|
+
try {
|
|
187
|
+
const result = this.cli("status --json");
|
|
188
|
+
const status = JSON.parse(result);
|
|
189
|
+
return status.gtm_path || null;
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
getCurrentSessionBranch() {
|
|
196
|
+
try {
|
|
197
|
+
return execSync("git branch --show-current", {
|
|
198
|
+
encoding: "utf-8",
|
|
199
|
+
timeout: 5000,
|
|
200
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
201
|
+
}).trim();
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=openclaw-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-sdk.js","sourceRoot":"","sources":["../../src/lib/openclaw-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Peer Agent Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates peer service agent references in service .claude/agents/ directory.
|
|
5
|
+
* Enables service-to-service @-mentions while maintaining security boundaries.
|
|
6
|
+
*
|
|
7
|
+
* @purpose Generate peer service agent references for cross-service collaboration
|
|
8
|
+
*/
|
|
9
|
+
export interface PeerAgentDefinition {
|
|
10
|
+
name: string;
|
|
11
|
+
serviceName: string;
|
|
12
|
+
serviceType: string;
|
|
13
|
+
servicePath: string;
|
|
14
|
+
capabilities: string[];
|
|
15
|
+
description: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ServiceRegistration {
|
|
18
|
+
name: string;
|
|
19
|
+
path: string;
|
|
20
|
+
type: string;
|
|
21
|
+
registered_at: string;
|
|
22
|
+
status: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get registered services from GTM config
|
|
26
|
+
*/
|
|
27
|
+
export declare function getRegisteredServices(gtmPath: string): ServiceRegistration[];
|
|
28
|
+
/**
|
|
29
|
+
* Generate peer agent definition from service metadata
|
|
30
|
+
*/
|
|
31
|
+
export declare function generatePeerAgentDefinition(peerService: ServiceRegistration, currentServicePath: string, gtmPath: string): PeerAgentDefinition;
|
|
32
|
+
/**
|
|
33
|
+
* Write peer agent definition to service's .claude/agents/ directory
|
|
34
|
+
*/
|
|
35
|
+
export declare function writePeerAgentDefinition(agentDef: PeerAgentDefinition, servicePath: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Sync peer agents for a service - add/update/remove peer agent files
|
|
38
|
+
*/
|
|
39
|
+
export declare function syncPeerAgents(servicePath: string, gtmPath: string): {
|
|
40
|
+
added: number;
|
|
41
|
+
updated: number;
|
|
42
|
+
removed: number;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=peer-agent-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-agent-generator.d.ts","sourceRoot":"","sources":["../../src/lib/peer-agent-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAa5E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,EAChC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE,MAAM,GACd,mBAAmB,CAcrB;AAsDD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,MAAM,GAClB,MAAM,CAsFR;AAyED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA2DrD"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Peer Agent Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates peer service agent references in service .claude/agents/ directory.
|
|
5
|
+
* Enables service-to-service @-mentions while maintaining security boundaries.
|
|
6
|
+
*
|
|
7
|
+
* @purpose Generate peer service agent references for cross-service collaboration
|
|
8
|
+
*/
|
|
9
|
+
import { writeFileSync, mkdirSync, existsSync, readdirSync, unlinkSync } from "fs";
|
|
10
|
+
import { join } from "path";
|
|
11
|
+
import { readFileSync } from "fs";
|
|
12
|
+
/**
|
|
13
|
+
* Get registered services from GTM config
|
|
14
|
+
*/
|
|
15
|
+
export function getRegisteredServices(gtmPath) {
|
|
16
|
+
const configPath = join(gtmPath, ".jfl/config.json");
|
|
17
|
+
if (!existsSync(configPath)) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
22
|
+
return config.registered_services || [];
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate peer agent definition from service metadata
|
|
30
|
+
*/
|
|
31
|
+
export function generatePeerAgentDefinition(peerService, currentServicePath, gtmPath) {
|
|
32
|
+
const name = `peer-service-${peerService.name}`;
|
|
33
|
+
// Generate capability-based triggers
|
|
34
|
+
const capabilities = generatePeerCapabilities(peerService.type);
|
|
35
|
+
return {
|
|
36
|
+
name,
|
|
37
|
+
serviceName: peerService.name,
|
|
38
|
+
serviceType: peerService.type,
|
|
39
|
+
servicePath: peerService.path,
|
|
40
|
+
capabilities,
|
|
41
|
+
description: `Peer service for ${peerService.name} (${peerService.type})`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate capabilities based on service type
|
|
46
|
+
*/
|
|
47
|
+
function generatePeerCapabilities(serviceType) {
|
|
48
|
+
const caps = [];
|
|
49
|
+
switch (serviceType) {
|
|
50
|
+
case "web":
|
|
51
|
+
case "api":
|
|
52
|
+
caps.push("Handle API requests and serve data");
|
|
53
|
+
caps.push("Manage database operations");
|
|
54
|
+
caps.push("Process user input and validation");
|
|
55
|
+
break;
|
|
56
|
+
case "worker":
|
|
57
|
+
caps.push("Process background jobs and queues");
|
|
58
|
+
caps.push("Handle scheduled tasks");
|
|
59
|
+
caps.push("Perform async operations");
|
|
60
|
+
break;
|
|
61
|
+
case "cli":
|
|
62
|
+
caps.push("Execute command-line operations");
|
|
63
|
+
caps.push("Automate workflows");
|
|
64
|
+
caps.push("Provide interactive tools");
|
|
65
|
+
break;
|
|
66
|
+
case "library":
|
|
67
|
+
caps.push("Provide reusable functionality");
|
|
68
|
+
caps.push("Support code development and testing");
|
|
69
|
+
caps.push("Maintain documentation and examples");
|
|
70
|
+
caps.push("Build and publish artifacts");
|
|
71
|
+
break;
|
|
72
|
+
case "infrastructure":
|
|
73
|
+
caps.push("Monitor system health");
|
|
74
|
+
caps.push("Aggregate metrics and logs");
|
|
75
|
+
caps.push("Coordinate service operations");
|
|
76
|
+
break;
|
|
77
|
+
case "container":
|
|
78
|
+
caps.push("Manage containerized services");
|
|
79
|
+
caps.push("Handle Docker operations");
|
|
80
|
+
caps.push("Control service lifecycle");
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
caps.push("Provide service-specific functionality");
|
|
84
|
+
}
|
|
85
|
+
return caps;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Write peer agent definition to service's .claude/agents/ directory
|
|
89
|
+
*/
|
|
90
|
+
export function writePeerAgentDefinition(agentDef, servicePath) {
|
|
91
|
+
const agentsDir = join(servicePath, ".claude/agents");
|
|
92
|
+
// Ensure directory exists
|
|
93
|
+
if (!existsSync(agentsDir)) {
|
|
94
|
+
mkdirSync(agentsDir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
const agentFile = join(agentsDir, `${agentDef.name}.md`);
|
|
97
|
+
const whenToUse = generateWhenToUse(agentDef.serviceType, agentDef.serviceName);
|
|
98
|
+
const content = `---
|
|
99
|
+
name: ${agentDef.name}
|
|
100
|
+
version: 1.0.0
|
|
101
|
+
color: blue
|
|
102
|
+
description: ${agentDef.description}
|
|
103
|
+
type: peer-service
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
# Peer Service: ${agentDef.serviceName}
|
|
107
|
+
|
|
108
|
+
**Service Type:** ${agentDef.serviceType}
|
|
109
|
+
**Service Path:** \`${agentDef.servicePath}\`
|
|
110
|
+
|
|
111
|
+
## When to Collaborate
|
|
112
|
+
|
|
113
|
+
${whenToUse}
|
|
114
|
+
|
|
115
|
+
## Capabilities
|
|
116
|
+
|
|
117
|
+
${agentDef.capabilities.map((cap) => `- ${cap}`).join("\n")}
|
|
118
|
+
|
|
119
|
+
## How to Invoke
|
|
120
|
+
|
|
121
|
+
Use @-mention to collaborate with this peer service:
|
|
122
|
+
|
|
123
|
+
\`\`\`
|
|
124
|
+
@${agentDef.name} what's your current status?
|
|
125
|
+
@${agentDef.name} can you help with [specific task]?
|
|
126
|
+
@${agentDef.name} what changed recently?
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
## Security
|
|
130
|
+
|
|
131
|
+
- This is a **peer service** - you can see its status but cannot modify its files
|
|
132
|
+
- All operations route through Service Manager with security checks
|
|
133
|
+
- You cannot call yourself as a peer (self-calls are blocked)
|
|
134
|
+
- Destructive operations require explicit approval
|
|
135
|
+
|
|
136
|
+
## Communication Pattern
|
|
137
|
+
|
|
138
|
+
When you @-mention this peer:
|
|
139
|
+
1. Service Manager validates the request
|
|
140
|
+
2. Peer agent spawns in its own working directory
|
|
141
|
+
3. Peer agent processes the request with its own context
|
|
142
|
+
4. Result returns to you
|
|
143
|
+
5. You can continue collaborating or work independently
|
|
144
|
+
|
|
145
|
+
## Examples
|
|
146
|
+
|
|
147
|
+
**Status check:**
|
|
148
|
+
\`\`\`
|
|
149
|
+
@${agentDef.name} what's your current status?
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
**Request collaboration:**
|
|
153
|
+
\`\`\`
|
|
154
|
+
@${agentDef.name} I need help with [specific task]. Can you handle [specific part]?
|
|
155
|
+
\`\`\`
|
|
156
|
+
|
|
157
|
+
**Context sharing:**
|
|
158
|
+
\`\`\`
|
|
159
|
+
@${agentDef.name} what changed in your service in the last 24 hours?
|
|
160
|
+
\`\`\`
|
|
161
|
+
|
|
162
|
+
## Remember
|
|
163
|
+
|
|
164
|
+
- **Collaborate when:** Task outside your service's core responsibility, need data from another service, coordinating multi-service operation
|
|
165
|
+
- **Handle alone when:** Task within your service's domain, operation is service-local
|
|
166
|
+
- **Always provide context:** When asking for help, explain what you need and why
|
|
167
|
+
`;
|
|
168
|
+
writeFileSync(agentFile, content);
|
|
169
|
+
return agentFile;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Generate "When to Use" guidance based on service type
|
|
173
|
+
*/
|
|
174
|
+
function generateWhenToUse(serviceType, serviceName) {
|
|
175
|
+
switch (serviceType) {
|
|
176
|
+
case "api":
|
|
177
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
178
|
+
- Check API endpoint status or health
|
|
179
|
+
- Understand API routes and handlers
|
|
180
|
+
- Coordinate API changes that affect your service
|
|
181
|
+
- Get data from API endpoints
|
|
182
|
+
- Verify API schema or contracts`;
|
|
183
|
+
case "web":
|
|
184
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
185
|
+
- Check frontend deployment status
|
|
186
|
+
- Understand UI components or flows
|
|
187
|
+
- Coordinate UI changes with backend
|
|
188
|
+
- Get user-facing content or copy
|
|
189
|
+
- Verify frontend build status`;
|
|
190
|
+
case "worker":
|
|
191
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
192
|
+
- Check background job status
|
|
193
|
+
- Understand job queue state
|
|
194
|
+
- Coordinate async operations
|
|
195
|
+
- Trigger or schedule jobs
|
|
196
|
+
- Verify job processing results`;
|
|
197
|
+
case "library":
|
|
198
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
199
|
+
- Understand library APIs and interfaces
|
|
200
|
+
- Work on plugin or package features
|
|
201
|
+
- Run library tests and builds
|
|
202
|
+
- Update documentation
|
|
203
|
+
- Debug integration issues`;
|
|
204
|
+
case "infrastructure":
|
|
205
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
206
|
+
- Check system health across services
|
|
207
|
+
- Get aggregated metrics or logs
|
|
208
|
+
- Coordinate service deployments
|
|
209
|
+
- Understand infrastructure state
|
|
210
|
+
- Verify connectivity or resources`;
|
|
211
|
+
case "container":
|
|
212
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
213
|
+
- Check container status
|
|
214
|
+
- Understand Docker configuration
|
|
215
|
+
- Coordinate container operations
|
|
216
|
+
- Verify container health
|
|
217
|
+
- Get container logs or metrics`;
|
|
218
|
+
case "cli":
|
|
219
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
220
|
+
- Execute CLI commands
|
|
221
|
+
- Automate workflows
|
|
222
|
+
- Run scripts or tools
|
|
223
|
+
- Get CLI output or results
|
|
224
|
+
- Verify CLI functionality`;
|
|
225
|
+
default:
|
|
226
|
+
return `Use \`@peer-service-${serviceName}\` when you need to:
|
|
227
|
+
- Check service status
|
|
228
|
+
- Understand service capabilities
|
|
229
|
+
- Coordinate with this service
|
|
230
|
+
- Get service-specific data
|
|
231
|
+
- Verify service operations`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Sync peer agents for a service - add/update/remove peer agent files
|
|
236
|
+
*/
|
|
237
|
+
export function syncPeerAgents(servicePath, gtmPath) {
|
|
238
|
+
const stats = { added: 0, updated: 0, removed: 0 };
|
|
239
|
+
// Get service name from its config
|
|
240
|
+
const serviceConfigPath = join(servicePath, ".jfl/config.json");
|
|
241
|
+
if (!existsSync(serviceConfigPath)) {
|
|
242
|
+
throw new Error(`Service config not found: ${serviceConfigPath}`);
|
|
243
|
+
}
|
|
244
|
+
const serviceConfig = JSON.parse(readFileSync(serviceConfigPath, "utf-8"));
|
|
245
|
+
const currentServiceName = serviceConfig.name;
|
|
246
|
+
// Get registered services from GTM
|
|
247
|
+
const registeredServices = getRegisteredServices(gtmPath);
|
|
248
|
+
// Filter out current service (can't be peer with self)
|
|
249
|
+
const peerServices = registeredServices.filter((s) => s.name !== currentServiceName);
|
|
250
|
+
// Ensure .claude/agents directory exists
|
|
251
|
+
const agentsDir = join(servicePath, ".claude/agents");
|
|
252
|
+
if (!existsSync(agentsDir)) {
|
|
253
|
+
mkdirSync(agentsDir, { recursive: true });
|
|
254
|
+
}
|
|
255
|
+
// Get existing peer agent files
|
|
256
|
+
const existingPeerFiles = existsSync(agentsDir)
|
|
257
|
+
? readdirSync(agentsDir).filter((f) => f.startsWith("peer-service-") && f.endsWith(".md"))
|
|
258
|
+
: [];
|
|
259
|
+
// Generate/update peer agent files for all registered services
|
|
260
|
+
const currentPeerFiles = new Set();
|
|
261
|
+
for (const peerService of peerServices) {
|
|
262
|
+
const agentDef = generatePeerAgentDefinition(peerService, servicePath, gtmPath);
|
|
263
|
+
const fileName = `${agentDef.name}.md`;
|
|
264
|
+
currentPeerFiles.add(fileName);
|
|
265
|
+
const filePath = join(agentsDir, fileName);
|
|
266
|
+
if (existsSync(filePath)) {
|
|
267
|
+
// Update existing
|
|
268
|
+
writePeerAgentDefinition(agentDef, servicePath);
|
|
269
|
+
stats.updated++;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
// Add new
|
|
273
|
+
writePeerAgentDefinition(agentDef, servicePath);
|
|
274
|
+
stats.added++;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Remove stale peer agent files (services that were unregistered)
|
|
278
|
+
for (const existingFile of existingPeerFiles) {
|
|
279
|
+
if (!currentPeerFiles.has(existingFile)) {
|
|
280
|
+
unlinkSync(join(agentsDir, existingFile));
|
|
281
|
+
stats.removed++;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return stats;
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=peer-agent-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-agent-generator.js","sourceRoot":"","sources":["../../src/lib/peer-agent-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service Dependency Management
|
|
3
|
+
*
|
|
4
|
+
* Handles service dependencies - ensures services start in correct order,
|
|
5
|
+
* auto-starts required dependencies, prevents stopping services with dependents.
|
|
6
|
+
*
|
|
7
|
+
* @purpose Dependency resolution and validation for service mesh
|
|
8
|
+
*/
|
|
9
|
+
interface Service {
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
depends_on?: string[];
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
interface DependencyGraph {
|
|
17
|
+
nodes: string[];
|
|
18
|
+
edges: Map<string, string[]>;
|
|
19
|
+
dependents: Map<string, string[]>;
|
|
20
|
+
}
|
|
21
|
+
export declare function buildDependencyGraph(services: Record<string, Service>): DependencyGraph;
|
|
22
|
+
export declare function getStartOrder(serviceName: string, services: Record<string, Service>): string[];
|
|
23
|
+
export declare function getStopOrder(serviceName: string, services: Record<string, Service>): string[];
|
|
24
|
+
export declare function detectCycles(services: Record<string, Service>): string[] | null;
|
|
25
|
+
export declare function validateDependencies(services: Record<string, Service>): {
|
|
26
|
+
valid: boolean;
|
|
27
|
+
errors: string[];
|
|
28
|
+
};
|
|
29
|
+
export declare function getServiceStatus(serviceName: string): Promise<any>;
|
|
30
|
+
export declare function isServiceRunning(serviceName: string): Promise<boolean>;
|
|
31
|
+
export declare function startWithDependencies(serviceName: string, options?: {
|
|
32
|
+
dryRun?: boolean;
|
|
33
|
+
verbose?: boolean;
|
|
34
|
+
onProgress?: (service: string, action: string) => void;
|
|
35
|
+
}): Promise<string[]>;
|
|
36
|
+
export declare function stopWithDependents(serviceName: string, options?: {
|
|
37
|
+
dryRun?: boolean;
|
|
38
|
+
verbose?: boolean;
|
|
39
|
+
force?: boolean;
|
|
40
|
+
onProgress?: (service: string, action: string) => void;
|
|
41
|
+
}): Promise<string[]>;
|
|
42
|
+
export declare function visualizeDependencies(services: Record<string, Service>): string;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=service-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-dependencies.d.ts","sourceRoot":"","sources":["../../src/lib/service-dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAOD,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAClC;AAmBD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAsBvF;AAMD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAwB9F;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAqB7F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAqC/E;AAMD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACvE,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAuBA;AAMD,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAUxE;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5E;AAMD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAClD,GACL,OAAO,CAAC,MAAM,EAAE,CAAC,CAgEnB;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAClD,GACL,OAAO,CAAC,MAAM,EAAE,CAAC,CA8EnB;AAMD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA2B/E"}
|