@synap-core/cli 1.13.0 → 1.13.1-next.20261102.3a66eb1
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 +13 -3
- package/dist/build-info.json +2 -3
- package/dist/commands/agents.js +12 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/capability.d.ts +86 -0
- package/dist/commands/capability.js +117 -30
- package/dist/commands/capability.js.map +1 -1
- package/dist/commands/context.js +2 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +13 -0
- package/dist/commands/data-extra.js +23 -2
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/doctor.d.ts +18 -0
- package/dist/commands/doctor.js +28 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +4 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys-request.d.ts +48 -0
- package/dist/commands/keys-request.js +236 -0
- package/dist/commands/keys-request.js.map +1 -0
- package/dist/commands/keys-request.test.d.ts +1 -0
- package/dist/commands/keys-request.test.js +176 -0
- package/dist/commands/keys-request.test.js.map +1 -0
- package/dist/commands/knowledge.d.ts +42 -5
- package/dist/commands/knowledge.js +90 -27
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/market.d.ts +89 -31
- package/dist/commands/market.js +215 -222
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -1
- package/dist/commands/mcp.js +14 -9
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/pods.js +6 -2
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.js +7 -1
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/providers.d.ts +22 -6
- package/dist/commands/providers.js +39 -32
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/raycast.d.ts +15 -0
- package/dist/commands/raycast.js +36 -10
- package/dist/commands/raycast.js.map +1 -1
- package/dist/commands/status.js +12 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.backoff.test.js +13 -3
- package/dist/commands/statusline.backoff.test.js.map +1 -1
- package/dist/commands/statusline.d.ts +104 -9
- package/dist/commands/statusline.js +392 -148
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/statusline.line2.test.d.ts +15 -0
- package/dist/commands/statusline.line2.test.js +226 -0
- package/dist/commands/statusline.line2.test.js.map +1 -0
- package/dist/commands/statusline.needs-you.test.d.ts +1 -0
- package/dist/commands/statusline.needs-you.test.js +17 -0
- package/dist/commands/statusline.needs-you.test.js.map +1 -0
- package/dist/commands/statusline.now.test.d.ts +10 -0
- package/dist/commands/statusline.now.test.js +250 -0
- package/dist/commands/statusline.now.test.js.map +1 -0
- package/dist/commands/tracks.d.ts +1 -0
- package/dist/commands/tracks.js +4 -0
- package/dist/commands/tracks.js.map +1 -1
- package/dist/commands/upload.js +12 -0
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/wait.d.ts +124 -0
- package/dist/commands/wait.js +384 -0
- package/dist/commands/wait.js.map +1 -0
- package/dist/commands/wait.test.d.ts +8 -0
- package/dist/commands/wait.test.js +308 -0
- package/dist/commands/wait.test.js.map +1 -0
- package/dist/commands/worker-github-app.d.ts +63 -0
- package/dist/commands/worker-github-app.js +161 -0
- package/dist/commands/worker-github-app.js.map +1 -0
- package/dist/commands/worker-github-app.test.d.ts +1 -0
- package/dist/commands/worker-github-app.test.js +102 -0
- package/dist/commands/worker-github-app.test.js.map +1 -0
- package/dist/commands/worker-github-broker.d.ts +39 -0
- package/dist/commands/worker-github-broker.js +106 -0
- package/dist/commands/worker-github-broker.js.map +1 -0
- package/dist/commands/worker-github-broker.test.d.ts +1 -0
- package/dist/commands/worker-github-broker.test.js +90 -0
- package/dist/commands/worker-github-broker.test.js.map +1 -0
- package/dist/commands/worker-runs.test.d.ts +1 -0
- package/dist/commands/worker-runs.test.js +150 -0
- package/dist/commands/worker-runs.test.js.map +1 -0
- package/dist/commands/worker-worktrees.d.ts +34 -0
- package/dist/commands/worker-worktrees.js +87 -0
- package/dist/commands/worker-worktrees.js.map +1 -0
- package/dist/commands/worker.d.ts +207 -5
- package/dist/commands/worker.js +540 -46
- package/dist/commands/worker.js.map +1 -1
- package/dist/commands/worker.test.js +269 -3
- package/dist/commands/worker.test.js.map +1 -1
- package/dist/index.js +60 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/agents-config.d.ts +9 -0
- package/dist/lib/agents-config.js +20 -0
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/atomic-file.d.ts +20 -1
- package/dist/lib/atomic-file.js +100 -2
- package/dist/lib/atomic-file.js.map +1 -1
- package/dist/lib/auth.d.ts +25 -0
- package/dist/lib/auth.js +49 -9
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/box/job-server.js +4 -0
- package/dist/lib/box/job-server.js.map +1 -1
- package/dist/lib/bridge-invocation.test.d.ts +1 -0
- package/dist/lib/bridge-invocation.test.js +75 -0
- package/dist/lib/bridge-invocation.test.js.map +1 -0
- package/dist/lib/bridge-status.d.ts +144 -0
- package/dist/lib/bridge-status.js +227 -0
- package/dist/lib/bridge-status.js.map +1 -0
- package/dist/lib/bridge-status.test.d.ts +6 -0
- package/dist/lib/bridge-status.test.js +197 -0
- package/dist/lib/bridge-status.test.js.map +1 -0
- package/dist/lib/client-header.test.js +19 -1
- package/dist/lib/client-header.test.js.map +1 -1
- package/dist/lib/conversation-headers.d.ts +67 -2
- package/dist/lib/conversation-headers.js +122 -6
- package/dist/lib/conversation-headers.js.map +1 -1
- package/dist/lib/conversation-headers.test.d.ts +1 -0
- package/dist/lib/conversation-headers.test.js +78 -0
- package/dist/lib/conversation-headers.test.js.map +1 -0
- package/dist/lib/credential-class.d.ts +12 -1
- package/dist/lib/credential-class.js +20 -0
- package/dist/lib/credential-class.js.map +1 -1
- package/dist/lib/device-connect.d.ts +45 -0
- package/dist/lib/device-connect.js +60 -0
- package/dist/lib/device-connect.js.map +1 -1
- package/dist/lib/goal-words.js +6 -3
- package/dist/lib/goal-words.js.map +1 -1
- package/dist/lib/hub-client.d.ts +59 -1
- package/dist/lib/hub-client.js +130 -36
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/key-locations.d.ts +3 -3
- package/dist/lib/key-locations.js +3 -39
- package/dist/lib/key-locations.js.map +1 -1
- package/dist/lib/machine-instance.d.ts +7 -5
- package/dist/lib/machine-instance.js +7 -5
- package/dist/lib/machine-instance.js.map +1 -1
- package/dist/lib/mcp-bridge.d.ts +43 -0
- package/dist/lib/mcp-bridge.js +199 -11
- package/dist/lib/mcp-bridge.js.map +1 -1
- package/dist/lib/mcp-bridge.test.js +194 -2
- package/dist/lib/mcp-bridge.test.js.map +1 -1
- package/dist/lib/mcp-call.d.ts +5 -1
- package/dist/lib/mcp-call.js +7 -6
- package/dist/lib/mcp-call.js.map +1 -1
- package/dist/lib/mcp-connector-url.test.d.ts +1 -0
- package/dist/lib/mcp-connector-url.test.js +13 -0
- package/dist/lib/mcp-connector-url.test.js.map +1 -0
- package/dist/lib/mcp-snippets.d.ts +16 -0
- package/dist/lib/mcp-snippets.js +20 -2
- package/dist/lib/mcp-snippets.js.map +1 -1
- package/dist/lib/now-line.d.ts +66 -0
- package/dist/lib/now-line.js +193 -0
- package/dist/lib/now-line.js.map +1 -0
- package/dist/lib/now-line.test.d.ts +5 -0
- package/dist/lib/now-line.test.js +177 -0
- package/dist/lib/now-line.test.js.map +1 -0
- package/dist/lib/package-updates.d.ts +66 -0
- package/dist/lib/package-updates.js +76 -0
- package/dist/lib/package-updates.js.map +1 -0
- package/dist/lib/pod.d.ts +0 -4
- package/dist/lib/pod.js +0 -7
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/register-claude-code-mcp.test.js +19 -0
- package/dist/lib/register-claude-code-mcp.test.js.map +1 -1
- package/dist/lib/safe-open.d.ts +5 -3
- package/dist/lib/safe-open.js +9 -8
- package/dist/lib/safe-open.js.map +1 -1
- package/dist/lib/self-host.d.ts +17 -0
- package/dist/lib/self-host.js +24 -0
- package/dist/lib/self-host.js.map +1 -0
- package/dist/lib/targets.d.ts +31 -0
- package/dist/lib/targets.js +100 -104
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/template-lifecycle.d.ts +0 -31
- package/dist/lib/template-lifecycle.js +0 -74
- package/dist/lib/template-lifecycle.js.map +1 -1
- package/dist/lib/term.d.ts +24 -0
- package/dist/lib/term.js +52 -0
- package/dist/lib/term.js.map +1 -0
- package/dist/lib/term.test.d.ts +1 -0
- package/dist/lib/term.test.js +29 -0
- package/dist/lib/term.test.js.map +1 -0
- package/dist/lib/transcript-index.d.ts +94 -0
- package/dist/lib/transcript-index.js +321 -0
- package/dist/lib/transcript-index.js.map +1 -0
- package/dist/lib/transcript-index.test.d.ts +10 -0
- package/dist/lib/transcript-index.test.js +200 -0
- package/dist/lib/transcript-index.test.js.map +1 -0
- package/dist/lib/wait-help.d.ts +11 -0
- package/dist/lib/wait-help.js +25 -0
- package/dist/lib/wait-help.js.map +1 -0
- package/dist/lib/wait-state.d.ts +57 -0
- package/dist/lib/wait-state.js +114 -0
- package/dist/lib/wait-state.js.map +1 -0
- package/package.json +2 -2
- package/skills/synap/SKILL.md +81 -44
- package/skills/synap/code-skills.md +15 -1
- package/skills/synap/concepts.md +36 -26
- package/skills/synap/document-embeds.md +15 -1
- package/skills/synap/focus-sessions.md +4 -4
- package/skills/synap/from-intent.md +2 -2
- package/skills/synap/governance-rules.md +2 -0
- package/skills/synap/hand-off.md +10 -6
- package/skills/synap/reflexes.md +4 -4
- package/skills/synap/work-model.md +1 -1
- package/skills/synap/writing-titles.md +7 -0
- package/skills/synap-app/SKILL.md +2 -2
- package/skills/synap-app/overview.md +2 -2
- package/skills/synap-market/SKILL.md +1 -1
- package/skills/synap-market/governance-and-catalog.md +1 -1
- package/skills/synap-schema/SKILL.md +4 -1
- package/skills/synap-schema/intent-vocabulary-ssot.md +4 -1
- package/dist/commands/template.d.ts +0 -42
- package/dist/commands/template.js +0 -191
- package/dist/commands/template.js.map +0 -1
- package/dist/lib/browser-auth.d.ts +0 -35
- package/dist/lib/browser-auth.js +0 -170
- package/dist/lib/browser-auth.js.map +0 -1
- package/dist/lib/openclaw.d.ts +0 -32
- package/dist/lib/openclaw.js +0 -165
- package/dist/lib/openclaw.js.map +0 -1
- package/dist/lib/seed.d.ts +0 -13
- package/dist/lib/seed.js +0 -135
- package/dist/lib/seed.js.map +0 -1
package/dist/lib/openclaw.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenClaw detection and configuration utilities.
|
|
3
|
-
* Reads/writes OpenClaw config without modifying unrelated settings.
|
|
4
|
-
*/
|
|
5
|
-
export interface OpenClawInfo {
|
|
6
|
-
found: boolean;
|
|
7
|
-
/** How OpenClaw was detected — affects which commands can be used */
|
|
8
|
-
runtime?: "local" | "docker";
|
|
9
|
-
/** Docker container name, set when runtime === "docker" */
|
|
10
|
-
containerName?: string;
|
|
11
|
-
version?: string;
|
|
12
|
-
configPath?: string;
|
|
13
|
-
config?: Record<string, unknown>;
|
|
14
|
-
gatewayRunning?: boolean;
|
|
15
|
-
gatewayPort?: number;
|
|
16
|
-
skillsDir?: string;
|
|
17
|
-
}
|
|
18
|
-
export declare function detectOpenClaw(): OpenClawInfo;
|
|
19
|
-
export declare function readOpenClawConfig(): Record<string, unknown> | null;
|
|
20
|
-
export declare function writeOpenClawConfig(config: Record<string, unknown>): void;
|
|
21
|
-
export declare function getConfigPermissions(): {
|
|
22
|
-
mode: string;
|
|
23
|
-
safe: boolean;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Get a nested config value safely.
|
|
27
|
-
*/
|
|
28
|
-
export declare function getConfigValue(config: Record<string, unknown>, path: string): unknown;
|
|
29
|
-
/**
|
|
30
|
-
* Set a nested config value.
|
|
31
|
-
*/
|
|
32
|
-
export declare function setConfigValue(config: Record<string, unknown>, path: string, value: unknown): void;
|
package/dist/lib/openclaw.js
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenClaw detection and configuration utilities.
|
|
3
|
-
* Reads/writes OpenClaw config without modifying unrelated settings.
|
|
4
|
-
*/
|
|
5
|
-
import { existsSync, readFileSync, statSync } from "fs";
|
|
6
|
-
import { writeSecretFile } from "./atomic-file.js";
|
|
7
|
-
import { homedir } from "os";
|
|
8
|
-
import { join } from "path";
|
|
9
|
-
import { execSync } from "child_process";
|
|
10
|
-
const OPENCLAW_DIR = join(homedir(), ".openclaw");
|
|
11
|
-
const OPENCLAW_CONFIG = join(OPENCLAW_DIR, "openclaw.json");
|
|
12
|
-
const OPENCLAW_SKILLS = join(OPENCLAW_DIR, "skills");
|
|
13
|
-
export function detectOpenClaw() {
|
|
14
|
-
// Detection priority:
|
|
15
|
-
// 1. Docker container (most reliable — actively running state)
|
|
16
|
-
// 2. Local install (openclaw binary in PATH + ~/.openclaw dir)
|
|
17
|
-
//
|
|
18
|
-
// Why Docker first: the presence of ~/.openclaw on the host doesn't prove
|
|
19
|
-
// OpenClaw is installed locally — it may be a stray directory, or the
|
|
20
|
-
// Synap deploy dir may live in the same home. A running Docker container
|
|
21
|
-
// is a much stronger signal.
|
|
22
|
-
// ── Path 1: Docker container ───────────────────────────────────────────
|
|
23
|
-
const dockerInfo = detectOpenClawDocker();
|
|
24
|
-
if (dockerInfo)
|
|
25
|
-
return dockerInfo;
|
|
26
|
-
// ── Path 2: Local install (npm -g or npx) ─────────────────────────────
|
|
27
|
-
// Require BOTH ~/.openclaw AND an `openclaw` binary in PATH.
|
|
28
|
-
// ~/.openclaw alone is not enough (could be a leftover dir).
|
|
29
|
-
let localBinaryVersion;
|
|
30
|
-
try {
|
|
31
|
-
const out = execSync("openclaw --version 2>/dev/null", {
|
|
32
|
-
encoding: "utf-8",
|
|
33
|
-
timeout: 5000,
|
|
34
|
-
}).trim();
|
|
35
|
-
const match = out.match(/\d+\.\d+\.\d+/);
|
|
36
|
-
if (match)
|
|
37
|
-
localBinaryVersion = match[0];
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
// binary not in PATH — not a local install
|
|
41
|
-
}
|
|
42
|
-
if (existsSync(OPENCLAW_DIR) && localBinaryVersion) {
|
|
43
|
-
const info = {
|
|
44
|
-
found: true,
|
|
45
|
-
runtime: "local",
|
|
46
|
-
configPath: OPENCLAW_CONFIG,
|
|
47
|
-
skillsDir: OPENCLAW_SKILLS,
|
|
48
|
-
version: localBinaryVersion,
|
|
49
|
-
};
|
|
50
|
-
// Config
|
|
51
|
-
if (existsSync(OPENCLAW_CONFIG)) {
|
|
52
|
-
try {
|
|
53
|
-
info.config = JSON.parse(readFileSync(OPENCLAW_CONFIG, "utf-8"));
|
|
54
|
-
}
|
|
55
|
-
catch { /* corrupted */ }
|
|
56
|
-
}
|
|
57
|
-
// Gateway
|
|
58
|
-
const port = info.config?.gateway?.port ?? 18789;
|
|
59
|
-
info.gatewayPort = port;
|
|
60
|
-
try {
|
|
61
|
-
execSync(`curl -sf http://127.0.0.1:${port}/health >/dev/null 2>&1`, { timeout: 3000 });
|
|
62
|
-
info.gatewayRunning = true;
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
info.gatewayRunning = false;
|
|
66
|
-
}
|
|
67
|
-
return info;
|
|
68
|
-
}
|
|
69
|
-
return { found: false };
|
|
70
|
-
}
|
|
71
|
-
function detectOpenClawDocker() {
|
|
72
|
-
// (a) Check for a running container with "openclaw" in the name/image
|
|
73
|
-
let containerName = null;
|
|
74
|
-
let version;
|
|
75
|
-
try {
|
|
76
|
-
const psOut = execSync("docker ps --format '{{.Names}}\\t{{.Image}}' 2>/dev/null", { encoding: "utf-8", timeout: 4000 });
|
|
77
|
-
for (const line of psOut.split("\n")) {
|
|
78
|
-
if (/openclaw/i.test(line)) {
|
|
79
|
-
containerName = line.split("\t")[0]?.trim() ?? null;
|
|
80
|
-
// Extract version from image tag e.g. openclaw:2026.3.31
|
|
81
|
-
const verMatch = line.match(/:(\d{4}\.\d+\.\d+)/);
|
|
82
|
-
if (verMatch)
|
|
83
|
-
version = verMatch[1];
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
catch { /* docker not available */ }
|
|
89
|
-
// (b) Gateway probe — works even if container name doesn't match pattern
|
|
90
|
-
let gatewayRunning = false;
|
|
91
|
-
try {
|
|
92
|
-
execSync("curl -sf http://127.0.0.1:18789/health >/dev/null 2>&1", { timeout: 3000 });
|
|
93
|
-
gatewayRunning = true;
|
|
94
|
-
}
|
|
95
|
-
catch { /* not responding */ }
|
|
96
|
-
// Need at least one signal to claim found
|
|
97
|
-
if (!containerName && !gatewayRunning)
|
|
98
|
-
return null;
|
|
99
|
-
return {
|
|
100
|
-
found: true,
|
|
101
|
-
runtime: "docker",
|
|
102
|
-
containerName: containerName ?? "openclaw",
|
|
103
|
-
version,
|
|
104
|
-
gatewayRunning,
|
|
105
|
-
gatewayPort: 18789,
|
|
106
|
-
// No local config/skillsDir — they live inside the container volume
|
|
107
|
-
configPath: undefined,
|
|
108
|
-
skillsDir: undefined,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
export function readOpenClawConfig() {
|
|
112
|
-
if (!existsSync(OPENCLAW_CONFIG))
|
|
113
|
-
return null;
|
|
114
|
-
try {
|
|
115
|
-
return JSON.parse(readFileSync(OPENCLAW_CONFIG, "utf-8"));
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
export function writeOpenClawConfig(config) {
|
|
122
|
-
writeSecretFile(OPENCLAW_CONFIG, JSON.stringify(config, null, 2) + "\n");
|
|
123
|
-
}
|
|
124
|
-
export function getConfigPermissions() {
|
|
125
|
-
try {
|
|
126
|
-
const stat = statSync(OPENCLAW_DIR);
|
|
127
|
-
const mode = (stat.mode & 0o777).toString(8);
|
|
128
|
-
return { mode, safe: (stat.mode & 0o077) === 0 }; // safe = no group/world perms
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
// ENOENT = dir doesn't exist (Docker runtime — config lives in container volume)
|
|
132
|
-
const code = err?.code;
|
|
133
|
-
if (code === "ENOENT")
|
|
134
|
-
return { mode: "N/A", safe: true };
|
|
135
|
-
return { mode: "???", safe: false };
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Get a nested config value safely.
|
|
140
|
-
*/
|
|
141
|
-
export function getConfigValue(config, path) {
|
|
142
|
-
const parts = path.split(".");
|
|
143
|
-
let current = config;
|
|
144
|
-
for (const part of parts) {
|
|
145
|
-
if (current == null || typeof current !== "object")
|
|
146
|
-
return undefined;
|
|
147
|
-
current = current[part];
|
|
148
|
-
}
|
|
149
|
-
return current;
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Set a nested config value.
|
|
153
|
-
*/
|
|
154
|
-
export function setConfigValue(config, path, value) {
|
|
155
|
-
const parts = path.split(".");
|
|
156
|
-
let current = config;
|
|
157
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
158
|
-
if (!(parts[i] in current) || typeof current[parts[i]] !== "object") {
|
|
159
|
-
current[parts[i]] = {};
|
|
160
|
-
}
|
|
161
|
-
current = current[parts[i]];
|
|
162
|
-
}
|
|
163
|
-
current[parts[parts.length - 1]] = value;
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=openclaw.js.map
|
package/dist/lib/openclaw.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/lib/openclaw.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/seed.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Seed Agent OS entities from OpenClaw config.
|
|
3
|
-
*
|
|
4
|
-
* Auto-detects the OpenClaw agent, installed skills, and model provider,
|
|
5
|
-
* then creates corresponding entities in the Synap pod so the dashboard
|
|
6
|
-
* is pre-populated on first open.
|
|
7
|
-
*/
|
|
8
|
-
import type { OpenClawInfo } from "./openclaw.js";
|
|
9
|
-
/**
|
|
10
|
-
* Detect OpenClaw config and create Agent, Skill, Provider entities.
|
|
11
|
-
* Returns the number of entities created.
|
|
12
|
-
*/
|
|
13
|
-
export declare function seedAgentEntities(podUrl: string, apiKey: string, oc: OpenClawInfo): Promise<number>;
|
package/dist/lib/seed.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Seed Agent OS entities from OpenClaw config.
|
|
3
|
-
*
|
|
4
|
-
* Auto-detects the OpenClaw agent, installed skills, and model provider,
|
|
5
|
-
* then creates corresponding entities in the Synap pod so the dashboard
|
|
6
|
-
* is pre-populated on first open.
|
|
7
|
-
*/
|
|
8
|
-
import { getConfigValue } from "./openclaw.js";
|
|
9
|
-
/**
|
|
10
|
-
* Detect OpenClaw config and create Agent, Skill, Provider entities.
|
|
11
|
-
* Returns the number of entities created.
|
|
12
|
-
*/
|
|
13
|
-
export async function seedAgentEntities(podUrl, apiKey, oc) {
|
|
14
|
-
const entities = [];
|
|
15
|
-
// 1. Agent entity — the OpenClaw instance itself
|
|
16
|
-
const agentProps = {
|
|
17
|
-
"agent-status": oc.gatewayRunning ? "Active" : "Idle",
|
|
18
|
-
"agent-runtime": "OpenClaw",
|
|
19
|
-
"agent-deployment": "Local Machine",
|
|
20
|
-
};
|
|
21
|
-
if (oc.version)
|
|
22
|
-
agentProps["agent-version"] = oc.version;
|
|
23
|
-
// Detect channels from config
|
|
24
|
-
if (oc.config) {
|
|
25
|
-
const channels = [];
|
|
26
|
-
const channelConfig = getConfigValue(oc.config, "channels");
|
|
27
|
-
if (channelConfig) {
|
|
28
|
-
if (channelConfig.telegram)
|
|
29
|
-
channels.push("Telegram");
|
|
30
|
-
if (channelConfig.discord)
|
|
31
|
-
channels.push("Discord");
|
|
32
|
-
if (channelConfig.slack)
|
|
33
|
-
channels.push("Slack");
|
|
34
|
-
if (channelConfig.whatsapp)
|
|
35
|
-
channels.push("WhatsApp");
|
|
36
|
-
if (channelConfig.email)
|
|
37
|
-
channels.push("Email");
|
|
38
|
-
}
|
|
39
|
-
// Always has CLI/TUI
|
|
40
|
-
channels.push("CLI");
|
|
41
|
-
agentProps["agent-channels"] = channels;
|
|
42
|
-
if (channels.length > 0)
|
|
43
|
-
agentProps["agent-channel"] = channels[0];
|
|
44
|
-
}
|
|
45
|
-
// Detect model
|
|
46
|
-
const model = oc.config
|
|
47
|
-
? getConfigValue(oc.config, "models.default") ??
|
|
48
|
-
getConfigValue(oc.config, "models.primary")
|
|
49
|
-
: undefined;
|
|
50
|
-
if (model)
|
|
51
|
-
agentProps["agent-model"] = model;
|
|
52
|
-
entities.push({
|
|
53
|
-
profileSlug: "agent",
|
|
54
|
-
title: `OpenClaw Agent${oc.version ? ` v${oc.version}` : ""}`,
|
|
55
|
-
properties: agentProps,
|
|
56
|
-
});
|
|
57
|
-
// 2. Skill entities — from installed skills
|
|
58
|
-
if (oc.config) {
|
|
59
|
-
const skills = getConfigValue(oc.config, "skills.installed");
|
|
60
|
-
if (Array.isArray(skills)) {
|
|
61
|
-
for (const skill of skills.slice(0, 10)) {
|
|
62
|
-
// cap at 10
|
|
63
|
-
const name = skill.name ?? skill.id ?? "Unknown Skill";
|
|
64
|
-
entities.push({
|
|
65
|
-
profileSlug: "skill",
|
|
66
|
-
title: name,
|
|
67
|
-
properties: {
|
|
68
|
-
"skill-category": "community",
|
|
69
|
-
"skill-source-url": skill.id
|
|
70
|
-
? `https://clawhub.io/skills/${skill.id}`
|
|
71
|
-
: undefined,
|
|
72
|
-
},
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Always add synap skill
|
|
78
|
-
entities.push({
|
|
79
|
-
profileSlug: "skill",
|
|
80
|
-
title: "synap",
|
|
81
|
-
properties: {
|
|
82
|
-
"skill-category": "infrastructure",
|
|
83
|
-
"skill-source-url": "https://github.com/synap-core/backend/tree/main/skills/synap",
|
|
84
|
-
"skill-trust": "Verified",
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
// 3. Provider entity — model provider
|
|
88
|
-
if (oc.config) {
|
|
89
|
-
const providers = getConfigValue(oc.config, "models.providers");
|
|
90
|
-
if (providers) {
|
|
91
|
-
for (const [name, config] of Object.entries(providers).slice(0, 5)) {
|
|
92
|
-
const providerConfig = config;
|
|
93
|
-
entities.push({
|
|
94
|
-
profileSlug: "provider",
|
|
95
|
-
title: name.charAt(0).toUpperCase() + name.slice(1),
|
|
96
|
-
properties: {
|
|
97
|
-
"provider-type": name,
|
|
98
|
-
"provider-base-url": providerConfig.baseUrl,
|
|
99
|
-
"provider-key-health": providerConfig.apiKey
|
|
100
|
-
? "Healthy"
|
|
101
|
-
: "Missing",
|
|
102
|
-
},
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Create entities via Hub Protocol
|
|
108
|
-
let created = 0;
|
|
109
|
-
for (const entity of entities) {
|
|
110
|
-
try {
|
|
111
|
-
const res = await fetch(`${podUrl}/api/hub/entities`, {
|
|
112
|
-
method: "POST",
|
|
113
|
-
headers: {
|
|
114
|
-
"Content-Type": "application/json",
|
|
115
|
-
Authorization: `Bearer ${apiKey}`,
|
|
116
|
-
},
|
|
117
|
-
body: JSON.stringify({
|
|
118
|
-
userId: "system",
|
|
119
|
-
agentUserId: "system",
|
|
120
|
-
profileSlug: entity.profileSlug,
|
|
121
|
-
title: entity.title,
|
|
122
|
-
properties: entity.properties,
|
|
123
|
-
reasoning: "Auto-seeded by synap init",
|
|
124
|
-
}),
|
|
125
|
-
});
|
|
126
|
-
if (res.ok)
|
|
127
|
-
created++;
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
// skip failed entities silently
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return created;
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=seed.js.map
|
package/dist/lib/seed.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/lib/seed.ts"],"names":[],"mappings":"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"}
|