@qoren/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +162 -0
- package/dist/args.d.ts +5 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +23 -0
- package/dist/args.js.map +1 -0
- package/dist/commands/account.d.ts +4 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +154 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/agent.d.ts +27 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +968 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/api.d.ts +4 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +66 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/approvals.d.ts +11 -0
- package/dist/commands/approvals.d.ts.map +1 -0
- package/dist/commands/approvals.js +140 -0
- package/dist/commands/approvals.js.map +1 -0
- package/dist/commands/auth.d.ts +4 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +215 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/clients.d.ts +62 -0
- package/dist/commands/clients.d.ts.map +1 -0
- package/dist/commands/clients.js +311 -0
- package/dist/commands/clients.js.map +1 -0
- package/dist/commands/console.d.ts +4 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/console.js +26 -0
- package/dist/commands/console.js.map +1 -0
- package/dist/commands/customAgent.d.ts +42 -0
- package/dist/commands/customAgent.d.ts.map +1 -0
- package/dist/commands/customAgent.js +449 -0
- package/dist/commands/customAgent.js.map +1 -0
- package/dist/commands/designer.d.ts +32 -0
- package/dist/commands/designer.d.ts.map +1 -0
- package/dist/commands/designer.js +682 -0
- package/dist/commands/designer.js.map +1 -0
- package/dist/commands/env.d.ts +15 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +245 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/interactive.d.ts +4 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +30 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/jobs.d.ts +4 -0
- package/dist/commands/jobs.d.ts.map +1 -0
- package/dist/commands/jobs.js +59 -0
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/secrets.d.ts +15 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +164 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/webhook.d.ts +4 -0
- package/dist/commands/webhook.d.ts.map +1 -0
- package/dist/commands/webhook.js +275 -0
- package/dist/commands/webhook.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +117 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +52 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +163 -0
- package/dist/context.js.map +1 -0
- package/dist/duration.d.ts +9 -0
- package/dist/duration.d.ts.map +1 -0
- package/dist/duration.js +30 -0
- package/dist/duration.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/issues.d.ts +10 -0
- package/dist/issues.d.ts.map +1 -0
- package/dist/issues.js +45 -0
- package/dist/issues.js.map +1 -0
- package/dist/jobProgress.d.ts +12 -0
- package/dist/jobProgress.d.ts.map +1 -0
- package/dist/jobProgress.js +56 -0
- package/dist/jobProgress.js.map +1 -0
- package/dist/loopback.d.ts +28 -0
- package/dist/loopback.d.ts.map +1 -0
- package/dist/loopback.js +110 -0
- package/dist/loopback.js.map +1 -0
- package/dist/migrate/apply.d.ts +29 -0
- package/dist/migrate/apply.d.ts.map +1 -0
- package/dist/migrate/apply.js +135 -0
- package/dist/migrate/apply.js.map +1 -0
- package/dist/migrate/bundle.d.ts +89 -0
- package/dist/migrate/bundle.d.ts.map +1 -0
- package/dist/migrate/bundle.js +681 -0
- package/dist/migrate/bundle.js.map +1 -0
- package/dist/migrate/tar.d.ts +9 -0
- package/dist/migrate/tar.d.ts.map +1 -0
- package/dist/migrate/tar.js +89 -0
- package/dist/migrate/tar.js.map +1 -0
- package/dist/output.d.ts +46 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +152 -0
- package/dist/output.js.map +1 -0
- package/dist/program.d.ts +17 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +89 -0
- package/dist/program.js.map +1 -0
- package/dist/runtimes.d.ts +11 -0
- package/dist/runtimes.d.ts.map +1 -0
- package/dist/runtimes.js +20 -0
- package/dist/runtimes.js.map +1 -0
- package/dist/slug.d.ts +3 -0
- package/dist/slug.d.ts.map +1 -0
- package/dist/slug.js +15 -0
- package/dist/slug.js.map +1 -0
- package/dist/taskChain.d.ts +20 -0
- package/dist/taskChain.d.ts.map +1 -0
- package/dist/taskChain.js +40 -0
- package/dist/taskChain.js.map +1 -0
- package/dist/taskDelivery.d.ts +33 -0
- package/dist/taskDelivery.d.ts.map +1 -0
- package/dist/taskDelivery.js +67 -0
- package/dist/taskDelivery.js.map +1 -0
- package/dist/tui/app.d.ts +5 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +130 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/index.d.ts +12 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +34 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/model.d.ts +110 -0
- package/dist/tui/model.d.ts.map +1 -0
- package/dist/tui/model.js +257 -0
- package/dist/tui/model.js.map +1 -0
- package/dist/tui/overlay.d.ts +66 -0
- package/dist/tui/overlay.d.ts.map +1 -0
- package/dist/tui/overlay.js +216 -0
- package/dist/tui/overlay.js.map +1 -0
- package/dist/tui/panes/account.d.ts +5 -0
- package/dist/tui/panes/account.d.ts.map +1 -0
- package/dist/tui/panes/account.js +108 -0
- package/dist/tui/panes/account.js.map +1 -0
- package/dist/tui/panes/agents.d.ts +9 -0
- package/dist/tui/panes/agents.d.ts.map +1 -0
- package/dist/tui/panes/agents.js +340 -0
- package/dist/tui/panes/agents.js.map +1 -0
- package/dist/tui/panes/chat.d.ts +14 -0
- package/dist/tui/panes/chat.d.ts.map +1 -0
- package/dist/tui/panes/chat.js +169 -0
- package/dist/tui/panes/chat.js.map +1 -0
- package/dist/tui/panes/environments.d.ts +6 -0
- package/dist/tui/panes/environments.d.ts.map +1 -0
- package/dist/tui/panes/environments.js +364 -0
- package/dist/tui/panes/environments.js.map +1 -0
- package/dist/tui/panes/jobs.d.ts +5 -0
- package/dist/tui/panes/jobs.d.ts.map +1 -0
- package/dist/tui/panes/jobs.js +104 -0
- package/dist/tui/panes/jobs.js.map +1 -0
- package/dist/tui/store.d.ts +40 -0
- package/dist/tui/store.d.ts.map +1 -0
- package/dist/tui/store.js +124 -0
- package/dist/tui/store.js.map +1 -0
- package/dist/tui/ui.d.ts +95 -0
- package/dist/tui/ui.d.ts.map +1 -0
- package/dist/tui/ui.js +144 -0
- package/dist/tui/ui.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HostedAgentRuntime as AgentRuntime } from "@qoren/sdk";
|
|
2
|
+
import { type Context } from "../context.js";
|
|
3
|
+
import type { ImportPlan } from "./bundle.js";
|
|
4
|
+
export type ApplyOptions = {
|
|
5
|
+
environmentId: string;
|
|
6
|
+
name: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
runtime: AgentRuntime;
|
|
9
|
+
model: string;
|
|
10
|
+
templateName: string;
|
|
11
|
+
importSecrets: boolean;
|
|
12
|
+
wait: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type ApplyResult = {
|
|
15
|
+
templateSlug: string;
|
|
16
|
+
jobId: string;
|
|
17
|
+
agentId: string | null;
|
|
18
|
+
slug: string;
|
|
19
|
+
secretsSet: string[];
|
|
20
|
+
runtimeFilesCopied: number;
|
|
21
|
+
ok: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare function applyPlan(ctx: Context, plan: ImportPlan, options: ApplyOptions): Promise<ApplyResult>;
|
|
24
|
+
/** Move everything staged under workspace/.qoren-import into the runtime
|
|
25
|
+
* home, preserving relative paths, then drop the staging directory. Existing
|
|
26
|
+
* files are overwritten: the operator asked to import, and a fresh deploy has
|
|
27
|
+
* nothing of its own worth keeping under memory/ yet. */
|
|
28
|
+
export declare function moveCommand(homeVar: string): string;
|
|
29
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/migrate/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoB9C,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,EAAE,EAAE,OAAO,CAAC;CACb,CAAC;AAWF,wBAAsB,SAAS,CAC7B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CAqGtB;AAED;;;yDAGyD;AACzD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUnD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { orgSlug } from "../context.js";
|
|
2
|
+
import { followJob } from "../jobProgress.js";
|
|
3
|
+
import { bold, dim, note, warn } from "../output.js";
|
|
4
|
+
const STAGE_DIR = "workspace/.qoren-import";
|
|
5
|
+
/** The variable each runtime's shell wrapper sets to its own home. */
|
|
6
|
+
const HOME_VAR = {
|
|
7
|
+
hermes: "HERMES_HOME",
|
|
8
|
+
openclaw: "OPENCLAW_HOME",
|
|
9
|
+
codex: "CODEX_HOME",
|
|
10
|
+
};
|
|
11
|
+
export async function applyPlan(ctx, plan, options) {
|
|
12
|
+
// 1. Template.
|
|
13
|
+
note(`Saving template ${bold(options.templateName)}…`);
|
|
14
|
+
const saved = await ctx.qoren.templates.save({
|
|
15
|
+
name: options.templateName,
|
|
16
|
+
description: `Migrated ${options.runtime} agent (${plan.mcpServers.length} MCP servers, ${plan.scheduledTasks.length} scheduled tasks).`,
|
|
17
|
+
soulMd: plan.soulMd,
|
|
18
|
+
agentsMd: plan.agentsMd || null,
|
|
19
|
+
model: options.model,
|
|
20
|
+
runtimes: [options.runtime],
|
|
21
|
+
mcpServers: plan.mcpServers,
|
|
22
|
+
scheduledTasks: plan.scheduledTasks,
|
|
23
|
+
workspaceFiles: plan.workspaceFiles,
|
|
24
|
+
overwrite: true,
|
|
25
|
+
});
|
|
26
|
+
const templateSlug = savedSlug(saved) ?? options.templateName;
|
|
27
|
+
for (const finding of savedWarnings(saved))
|
|
28
|
+
warn(finding);
|
|
29
|
+
// 2. Secrets.
|
|
30
|
+
const secretsSet = [];
|
|
31
|
+
const secretNames = Object.keys(plan.secrets);
|
|
32
|
+
if (options.importSecrets && secretNames.length > 0) {
|
|
33
|
+
const org = await orgSlug(ctx);
|
|
34
|
+
// Saved for the target environment's agency client (when it has one), so the values neither reach
|
|
35
|
+
// other clients' agents nor lose to a same-named secret that client already has.
|
|
36
|
+
const { customerId } = await ctx.qoren.environments.get(options.environmentId);
|
|
37
|
+
for (const name of secretNames) {
|
|
38
|
+
await ctx.qoren.secrets.set(org, {
|
|
39
|
+
name,
|
|
40
|
+
value: plan.secrets[name],
|
|
41
|
+
description: `Imported from the previous ${options.runtime} install.`,
|
|
42
|
+
customerId: customerId ?? null,
|
|
43
|
+
});
|
|
44
|
+
secretsSet.push(name);
|
|
45
|
+
}
|
|
46
|
+
note(`Stored ${secretsSet.length} secret(s) in the vault: ${secretsSet.join(", ")}`);
|
|
47
|
+
}
|
|
48
|
+
else if (secretNames.length > 0) {
|
|
49
|
+
warn(`The bundle carries values for ${secretNames.join(", ")} but --import-secrets was not given, so they were not stored.`);
|
|
50
|
+
}
|
|
51
|
+
// 3. Deploy.
|
|
52
|
+
const created = await ctx.qoren.agents.create({
|
|
53
|
+
machineId: options.environmentId,
|
|
54
|
+
slug: options.slug,
|
|
55
|
+
name: options.name,
|
|
56
|
+
runtime: options.runtime,
|
|
57
|
+
model: options.model,
|
|
58
|
+
presetName: templateSlug,
|
|
59
|
+
...(secretsSet.length > 0 ? { clientSecretNames: secretsSet } : {}),
|
|
60
|
+
});
|
|
61
|
+
for (const finding of created.safetyWarnings ?? []) {
|
|
62
|
+
warn(`${finding.severity}: ${finding.title} ${dim(finding.suggestion)}`);
|
|
63
|
+
}
|
|
64
|
+
const result = {
|
|
65
|
+
templateSlug,
|
|
66
|
+
jobId: created.jobId,
|
|
67
|
+
agentId: null,
|
|
68
|
+
slug: options.slug,
|
|
69
|
+
secretsSet,
|
|
70
|
+
runtimeFilesCopied: 0,
|
|
71
|
+
ok: false,
|
|
72
|
+
};
|
|
73
|
+
if (!options.wait) {
|
|
74
|
+
if (plan.runtimeFiles.length > 0) {
|
|
75
|
+
warn(`${plan.runtimeFiles.length} runtime file(s) (memory, skills) were NOT copied because --no-wait skips the post-deploy step. Re-run without it, or copy them yourself with qoren agent exec.`);
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
await followJob(ctx, created.jobId, `Deploying ${bold(options.name)}…`);
|
|
80
|
+
// 4. Runtime-home files.
|
|
81
|
+
const agent = (await ctx.qoren.agents.list(options.environmentId)).find((a) => a.slug === options.slug);
|
|
82
|
+
if (!agent) {
|
|
83
|
+
warn("The deploy finished but the agent could not be found by slug; runtime files were not copied.");
|
|
84
|
+
return { ...result, ok: true };
|
|
85
|
+
}
|
|
86
|
+
result.agentId = agent._id;
|
|
87
|
+
if (plan.runtimeFiles.length > 0) {
|
|
88
|
+
note(`Copying ${plan.runtimeFiles.length} file(s) into the runtime home…`);
|
|
89
|
+
for (const file of plan.runtimeFiles) {
|
|
90
|
+
await ctx.qoren.agents.writeFile(agent._id, `${STAGE_DIR}/${file.path}`, file.content);
|
|
91
|
+
}
|
|
92
|
+
const homeVar = HOME_VAR[options.runtime];
|
|
93
|
+
const moved = await ctx.qoren.agents.exec(agent._id, moveCommand(homeVar));
|
|
94
|
+
if (moved.exitCode !== 0) {
|
|
95
|
+
warn(`Copying runtime files failed (exit ${moved.exitCode}): ${moved.stdErr.trim() || moved.stdOut.trim()}. They are still staged under ${STAGE_DIR}.`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
result.runtimeFilesCopied = plan.runtimeFiles.length;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return { ...result, ok: true };
|
|
102
|
+
}
|
|
103
|
+
/** Move everything staged under workspace/.qoren-import into the runtime
|
|
104
|
+
* home, preserving relative paths, then drop the staging directory. Existing
|
|
105
|
+
* files are overwritten: the operator asked to import, and a fresh deploy has
|
|
106
|
+
* nothing of its own worth keeping under memory/ yet. */
|
|
107
|
+
export function moveCommand(homeVar) {
|
|
108
|
+
return [
|
|
109
|
+
"set -e",
|
|
110
|
+
`dst="\${${homeVar}:-}"`,
|
|
111
|
+
`[ -n "$dst" ] || { echo "${homeVar} is not set" >&2; exit 3; }`,
|
|
112
|
+
`src="$HOME/${STAGE_DIR}"`,
|
|
113
|
+
`cd "$src"`,
|
|
114
|
+
`find . -type f | while IFS= read -r f; do mkdir -p "$dst/$(dirname "$f")"; cp "$f" "$dst/$f"; done`,
|
|
115
|
+
`cd "$HOME" && rm -rf "$src"`,
|
|
116
|
+
].join("; ");
|
|
117
|
+
}
|
|
118
|
+
function savedSlug(saved) {
|
|
119
|
+
if (typeof saved !== "object" || saved === null)
|
|
120
|
+
return null;
|
|
121
|
+
const slug = saved.slug;
|
|
122
|
+
return typeof slug === "string" && slug ? slug : null;
|
|
123
|
+
}
|
|
124
|
+
function savedWarnings(saved) {
|
|
125
|
+
if (typeof saved !== "object" || saved === null)
|
|
126
|
+
return [];
|
|
127
|
+
const warnings = saved.safetyWarnings;
|
|
128
|
+
if (!Array.isArray(warnings))
|
|
129
|
+
return [];
|
|
130
|
+
return warnings.map((w) => {
|
|
131
|
+
const f = w;
|
|
132
|
+
return `${f.severity ?? "warning"}: ${f.title ?? ""} ${f.suggestion ?? ""}`.trim();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/migrate/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { TarEntry } from "./tar.js";
|
|
2
|
+
export type AgentRuntime = "hermes" | "openclaw" | "codex";
|
|
3
|
+
/** Structurally the API's McpServer (see @qoren/sdk types). */
|
|
4
|
+
export type McpServer = {
|
|
5
|
+
name: string;
|
|
6
|
+
transport: "stdio" | "http";
|
|
7
|
+
command?: string;
|
|
8
|
+
args?: string[];
|
|
9
|
+
env?: Record<string, string>;
|
|
10
|
+
url?: string;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
enabled?: boolean;
|
|
13
|
+
toolInclude?: string[];
|
|
14
|
+
toolExclude?: string[];
|
|
15
|
+
};
|
|
16
|
+
export type ScheduledTask = {
|
|
17
|
+
name: string;
|
|
18
|
+
schedule: string;
|
|
19
|
+
prompt: string;
|
|
20
|
+
};
|
|
21
|
+
export type WorkspaceFile = {
|
|
22
|
+
path: string;
|
|
23
|
+
description: string;
|
|
24
|
+
content: string;
|
|
25
|
+
};
|
|
26
|
+
export declare const RUNTIMES: AgentRuntime[];
|
|
27
|
+
export type ExportManifest = {
|
|
28
|
+
format: string;
|
|
29
|
+
runtime: AgentRuntime;
|
|
30
|
+
runtimeVersion?: string;
|
|
31
|
+
exportedAt?: string;
|
|
32
|
+
host?: string;
|
|
33
|
+
sourceHome?: string;
|
|
34
|
+
model?: string;
|
|
35
|
+
withSecrets?: boolean;
|
|
36
|
+
withSessions?: boolean;
|
|
37
|
+
envNames?: string[];
|
|
38
|
+
files?: string[];
|
|
39
|
+
skipped?: string[];
|
|
40
|
+
};
|
|
41
|
+
export type Bundle = {
|
|
42
|
+
manifest: ExportManifest;
|
|
43
|
+
/** Text files, keyed by their path relative to `bundle/files/`. */
|
|
44
|
+
files: Map<string, string>;
|
|
45
|
+
/** The raw dotenv the exporter packed under --with-secrets, if any. */
|
|
46
|
+
secretsEnv: string | null;
|
|
47
|
+
};
|
|
48
|
+
/** A file to place under the runtime's own home (HERMES_HOME, OPENCLAW_HOME or
|
|
49
|
+
* CODEX_HOME) after the agent is deployed. Distinct from a template seed file,
|
|
50
|
+
* which lands under the agent's Unix home. */
|
|
51
|
+
export type RuntimeFile = {
|
|
52
|
+
path: string;
|
|
53
|
+
content: string;
|
|
54
|
+
};
|
|
55
|
+
export type ImportPlan = {
|
|
56
|
+
runtime: AgentRuntime;
|
|
57
|
+
/** The model the source was using, or null when the exporter found none. */
|
|
58
|
+
model: string | null;
|
|
59
|
+
soulMd: string;
|
|
60
|
+
agentsMd: string;
|
|
61
|
+
mcpServers: McpServer[];
|
|
62
|
+
scheduledTasks: ScheduledTask[];
|
|
63
|
+
workspaceFiles: WorkspaceFile[];
|
|
64
|
+
runtimeFiles: RuntimeFile[];
|
|
65
|
+
/** Env var names the source defined and Qoren does not provide itself. */
|
|
66
|
+
envNames: string[];
|
|
67
|
+
/** Values for those names, when the bundle carried them. */
|
|
68
|
+
secrets: Record<string, string>;
|
|
69
|
+
/** Things the operator should know that are not errors. */
|
|
70
|
+
notes: string[];
|
|
71
|
+
};
|
|
72
|
+
export declare function parseBundle(entries: TarEntry[]): Bundle;
|
|
73
|
+
export declare function planImport(bundle: Bundle): ImportPlan;
|
|
74
|
+
/** Mirrors WorkspaceFile.IsSafePath on the server: relative, no parent
|
|
75
|
+
* segments, and a conservative character set (no spaces). */
|
|
76
|
+
export declare function isSafePath(path: string): boolean;
|
|
77
|
+
/** Hermes' `mcp_servers:` block. Hermes writes it as a map of name to a map of
|
|
78
|
+
* command/args/env or url/headers, and `tools: {include, exclude}`. */
|
|
79
|
+
export declare function mcpFromYaml(yaml: string): McpServer[];
|
|
80
|
+
/** Both Hermes and OpenClaw keep scheduled jobs in a `cron/jobs.json` whose
|
|
81
|
+
* shape has shifted between versions; read the fields that matter and skip
|
|
82
|
+
* what cannot be understood rather than refusing the whole file. */
|
|
83
|
+
export declare function tasksFromJobsJson(json: string | undefined): ScheduledTask[];
|
|
84
|
+
export declare function parseDotenv(text: string): Record<string, string>;
|
|
85
|
+
/** JSON, or the JSON-with-comments-and-trailing-commas that OpenClaw accepts. */
|
|
86
|
+
export declare function parseLenientJson(text: string): Record<string, unknown> | null;
|
|
87
|
+
export declare function parseMinimalYaml(text: string): Record<string, unknown>;
|
|
88
|
+
export declare function parseMinimalToml(text: string): Map<string, unknown>;
|
|
89
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/migrate/bundle.ts"],"names":[],"mappings":"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"}
|