@nuomiji/agentbox 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 +21 -0
- package/README.md +253 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/collector/collector.d.ts +15 -0
- package/dist/collector/collector.js +118 -0
- package/dist/collector/collector.js.map +1 -0
- package/dist/collector/known-layers.d.ts +2 -0
- package/dist/collector/known-layers.js +15 -0
- package/dist/collector/known-layers.js.map +1 -0
- package/dist/collector/probe.d.ts +19 -0
- package/dist/collector/probe.js +2 -0
- package/dist/collector/probe.js.map +1 -0
- package/dist/commands/apply.d.ts +10 -0
- package/dist/commands/apply.js +234 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/bind.d.ts +8 -0
- package/dist/commands/bind.js +78 -0
- package/dist/commands/bind.js.map +1 -0
- package/dist/commands/collect.d.ts +8 -0
- package/dist/commands/collect.js +22 -0
- package/dist/commands/collect.js.map +1 -0
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.js +24 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import-simple.d.ts +6 -0
- package/dist/commands/import-simple.js +96 -0
- package/dist/commands/import-simple.js.map +1 -0
- package/dist/commands/import.d.ts +8 -0
- package/dist/commands/import.js +108 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/inspect.d.ts +1 -0
- package/dist/commands/inspect.js +21 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/install-skills.d.ts +11 -0
- package/dist/commands/install-skills.js +316 -0
- package/dist/commands/install-skills.js.map +1 -0
- package/dist/commands/pack.d.ts +4 -0
- package/dist/commands/pack.js +37 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/preview.d.ts +8 -0
- package/dist/commands/preview.js +108 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/unpack.d.ts +4 -0
- package/dist/commands/unpack.js +45 -0
- package/dist/commands/unpack.js.map +1 -0
- package/dist/core/archive.d.ts +2 -0
- package/dist/core/archive.js +46 -0
- package/dist/core/archive.js.map +1 -0
- package/dist/core/bindings.d.ts +22 -0
- package/dist/core/bindings.js +46 -0
- package/dist/core/bindings.js.map +1 -0
- package/dist/core/env.d.ts +13 -0
- package/dist/core/env.js +49 -0
- package/dist/core/env.js.map +1 -0
- package/dist/core/fs.d.ts +12 -0
- package/dist/core/fs.js +233 -0
- package/dist/core/fs.js.map +1 -0
- package/dist/core/materialize.d.ts +10 -0
- package/dist/core/materialize.js +54 -0
- package/dist/core/materialize.js.map +1 -0
- package/dist/core/redaction.d.ts +25 -0
- package/dist/core/redaction.js +184 -0
- package/dist/core/redaction.js.map +1 -0
- package/dist/core/schemas.d.ts +9 -0
- package/dist/core/schemas.js +60 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/types.d.ts +125 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/yaml.d.ts +1 -0
- package/dist/core/yaml.js +8 -0
- package/dist/core/yaml.js.map +1 -0
- package/dist/import/claude-code.d.ts +3 -0
- package/dist/import/claude-code.js +182 -0
- package/dist/import/claude-code.js.map +1 -0
- package/dist/import/codex.d.ts +3 -0
- package/dist/import/codex.js +162 -0
- package/dist/import/codex.js.map +1 -0
- package/dist/import/compatibility.d.ts +42 -0
- package/dist/import/compatibility.js +99 -0
- package/dist/import/compatibility.js.map +1 -0
- package/dist/import/install-plan.d.ts +43 -0
- package/dist/import/install-plan.js +125 -0
- package/dist/import/install-plan.js.map +1 -0
- package/dist/import/openclaw.d.ts +3 -0
- package/dist/import/openclaw.js +128 -0
- package/dist/import/openclaw.js.map +1 -0
- package/dist/import/portable.d.ts +6 -0
- package/dist/import/portable.js +394 -0
- package/dist/import/portable.js.map +1 -0
- package/dist/import/types.d.ts +21 -0
- package/dist/import/types.js +2 -0
- package/dist/import/types.js.map +1 -0
- package/dist/probes/claude-code.d.ts +9 -0
- package/dist/probes/claude-code.js +244 -0
- package/dist/probes/claude-code.js.map +1 -0
- package/dist/probes/codex.d.ts +10 -0
- package/dist/probes/codex.js +219 -0
- package/dist/probes/codex.js.map +1 -0
- package/dist/probes/cursor.d.ts +9 -0
- package/dist/probes/cursor.js +102 -0
- package/dist/probes/cursor.js.map +1 -0
- package/dist/probes/openclaw.d.ts +9 -0
- package/dist/probes/openclaw.js +52 -0
- package/dist/probes/openclaw.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { toYaml } from "../core/yaml.js";
|
|
4
|
+
import { buildPortableMemoryMarkdown, buildPortableMemoryPreview, buildPortableSessionMarkdown, buildPortableSessionPreview, buildPortableSkillsPreview } from "./portable.js";
|
|
5
|
+
export async function generateCodexPreview(outputDir, resolved, context) {
|
|
6
|
+
const targetDir = path.join(outputDir, "codex");
|
|
7
|
+
await mkdir(targetDir, { recursive: true });
|
|
8
|
+
const warnings = [];
|
|
9
|
+
const configToml = buildCodexConfigPreview(resolved, context, warnings);
|
|
10
|
+
const summaryYaml = buildCodexSummary(resolved, context, warnings);
|
|
11
|
+
const skillsYaml = buildPortableSkillsPreview(resolved, context.sourceHost);
|
|
12
|
+
const memoryYaml = buildPortableMemoryPreview(resolved, context.sourceHost);
|
|
13
|
+
const memoryMarkdown = buildPortableMemoryMarkdown(resolved, context.sourceHost);
|
|
14
|
+
const sessionYaml = buildPortableSessionPreview(resolved, context.sourceHost);
|
|
15
|
+
const sessionMarkdown = buildPortableSessionMarkdown(resolved, context.sourceHost);
|
|
16
|
+
const files = {
|
|
17
|
+
config: path.join(targetDir, "config.preview.toml"),
|
|
18
|
+
skills: path.join(targetDir, "skills.preview.yaml"),
|
|
19
|
+
memoryYaml: path.join(targetDir, "memory.preview.yaml"),
|
|
20
|
+
memoryMarkdown: path.join(targetDir, "memory.preview.md"),
|
|
21
|
+
sessionYaml: path.join(targetDir, "session.preview.yaml"),
|
|
22
|
+
sessionMarkdown: path.join(targetDir, "session.preview.md"),
|
|
23
|
+
summary: path.join(targetDir, "import-summary.yaml")
|
|
24
|
+
};
|
|
25
|
+
const generatedFiles = Object.values(files);
|
|
26
|
+
const plan = [
|
|
27
|
+
{
|
|
28
|
+
sourceLayer: "preferences, tools, securityPolicy",
|
|
29
|
+
targetPath: files.config,
|
|
30
|
+
action: "create-preview",
|
|
31
|
+
risk: "medium",
|
|
32
|
+
notes: ["Represents translated Codex config preview; not yet written to ~/.codex/config.toml."]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
sourceLayer: "skills",
|
|
36
|
+
targetPath: files.skills,
|
|
37
|
+
action: "create-preview",
|
|
38
|
+
risk: "low",
|
|
39
|
+
notes: ["Portable skills inventory translated for Codex review and later apply."]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
sourceLayer: "memory",
|
|
43
|
+
targetPath: files.memoryYaml,
|
|
44
|
+
action: "create-preview",
|
|
45
|
+
risk: "low",
|
|
46
|
+
notes: ["Structured portable memory preview for machine-readable migration."]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
sourceLayer: "memory",
|
|
50
|
+
targetPath: files.memoryMarkdown,
|
|
51
|
+
action: "create-preview",
|
|
52
|
+
risk: "low",
|
|
53
|
+
notes: ["Human-readable memory excerpts for Codex-visible memories."]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
sourceLayer: "session",
|
|
57
|
+
targetPath: files.sessionYaml,
|
|
58
|
+
action: "create-preview",
|
|
59
|
+
risk: "low",
|
|
60
|
+
notes: ["Structured portable session preview for machine-readable migration."]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
sourceLayer: "session",
|
|
64
|
+
targetPath: files.sessionMarkdown,
|
|
65
|
+
action: "create-preview",
|
|
66
|
+
risk: "low",
|
|
67
|
+
notes: ["Human-readable session summary for Codex review after import."]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
sourceLayer: "hostArtifacts, warnings",
|
|
71
|
+
targetPath: files.summary,
|
|
72
|
+
action: "create-preview",
|
|
73
|
+
risk: "low",
|
|
74
|
+
notes: ["Human-readable import summary for review."]
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
await writeFile(files.config, configToml, "utf8");
|
|
78
|
+
await writeFile(files.skills, toYaml(skillsYaml), "utf8");
|
|
79
|
+
await writeFile(files.memoryYaml, toYaml(memoryYaml), "utf8");
|
|
80
|
+
await writeFile(files.memoryMarkdown, memoryMarkdown, "utf8");
|
|
81
|
+
await writeFile(files.sessionYaml, toYaml(sessionYaml), "utf8");
|
|
82
|
+
await writeFile(files.sessionMarkdown, sessionMarkdown, "utf8");
|
|
83
|
+
await writeFile(files.summary, toYaml(summaryYaml), "utf8");
|
|
84
|
+
const reportPath = path.join(targetDir, "import-report.yaml");
|
|
85
|
+
const report = {
|
|
86
|
+
targetHost: "codex",
|
|
87
|
+
targetScope: "user",
|
|
88
|
+
generatedFiles,
|
|
89
|
+
warnings
|
|
90
|
+
};
|
|
91
|
+
await writeFile(reportPath, toYaml(report), "utf8");
|
|
92
|
+
return {
|
|
93
|
+
targetHost: "codex",
|
|
94
|
+
outputDir: targetDir,
|
|
95
|
+
generatedFiles,
|
|
96
|
+
warnings,
|
|
97
|
+
plan
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function buildCodexConfigPreview(resolved, context, warnings) {
|
|
101
|
+
const lines = [];
|
|
102
|
+
const tools = resolved.tools;
|
|
103
|
+
lines.push("# AgentBox import preview - Portable content only");
|
|
104
|
+
lines.push(`# Source host: ${context.sourceHost}`);
|
|
105
|
+
lines.push("# Note: Model/API settings preserved from target environment");
|
|
106
|
+
lines.push("");
|
|
107
|
+
warnings.push("Only portable content (MCP servers) included. Model/API settings preserved from target environment.");
|
|
108
|
+
const mcpServers = tools.mcpServers ?? {};
|
|
109
|
+
lines.push("[mcp_servers]");
|
|
110
|
+
for (const [serverName, serverValue] of Object.entries(mcpServers)) {
|
|
111
|
+
if (!serverValue || typeof serverValue !== "object") {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const server = serverValue;
|
|
115
|
+
lines.push("");
|
|
116
|
+
lines.push(`[mcp_servers.${serverName}]`);
|
|
117
|
+
for (const [key, value] of Object.entries(server)) {
|
|
118
|
+
if (key === "env") {
|
|
119
|
+
warnings.push(`MCP server "${serverName}" environment values are not inlined in preview config.`);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
lines.push(`${key} = ${toTomlValue(value)}`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return `${lines.join("\n")}\n`;
|
|
126
|
+
}
|
|
127
|
+
function buildCodexSummary(resolved, context, warnings) {
|
|
128
|
+
return {
|
|
129
|
+
sourceHost: context.sourceHost,
|
|
130
|
+
targetHost: context.targetHost,
|
|
131
|
+
model: resolved.preferences.model ?? null,
|
|
132
|
+
bindingsProvided: Object.keys(context.bindings),
|
|
133
|
+
skillNames: resolved.skills.sharedSkillNames ??
|
|
134
|
+
resolved.skills.installedSkillNames ??
|
|
135
|
+
[],
|
|
136
|
+
hostArtifacts: resolved.hostArtifacts,
|
|
137
|
+
warnings
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function toTomlValue(value) {
|
|
141
|
+
if (typeof value === "string") {
|
|
142
|
+
return `"${escapeTomlString(value)}"`;
|
|
143
|
+
}
|
|
144
|
+
if (typeof value === "number" || typeof value === "bigint") {
|
|
145
|
+
return String(value);
|
|
146
|
+
}
|
|
147
|
+
if (typeof value === "boolean") {
|
|
148
|
+
return value ? "true" : "false";
|
|
149
|
+
}
|
|
150
|
+
if (Array.isArray(value)) {
|
|
151
|
+
return `[${value.map((entry) => toTomlValue(entry)).join(", ")}]`;
|
|
152
|
+
}
|
|
153
|
+
if (value && typeof value === "object") {
|
|
154
|
+
const objectEntries = Object.entries(value);
|
|
155
|
+
return `{ ${objectEntries.map(([key, entry]) => `${key} = ${toTomlValue(entry)}`).join(", ")} }`;
|
|
156
|
+
}
|
|
157
|
+
return `""`;
|
|
158
|
+
}
|
|
159
|
+
function escapeTomlString(value) {
|
|
160
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/import/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BindingRequirement, ResolvedSnapshot, SupportedHost } from "../core/types.js";
|
|
2
|
+
import type { BindingResolutionResult } from "../core/bindings.js";
|
|
3
|
+
import type { InstallScope } from "../core/materialize.js";
|
|
4
|
+
import type { SkillInstallPlan } from "./install-plan.js";
|
|
5
|
+
import type { ImportPreviewResult } from "./types.js";
|
|
6
|
+
export interface CompatibilityReport {
|
|
7
|
+
apiVersion: "agentbox/v0.1";
|
|
8
|
+
kind: "CompatibilityReport";
|
|
9
|
+
sourceHost: SupportedHost;
|
|
10
|
+
targetHost: SupportedHost;
|
|
11
|
+
targetScope: InstallScope;
|
|
12
|
+
overallStatus: "ready" | "ready-with-warnings" | "blocked";
|
|
13
|
+
blockers: string[];
|
|
14
|
+
manualActions: string[];
|
|
15
|
+
warnings: string[];
|
|
16
|
+
bindings: {
|
|
17
|
+
required: number;
|
|
18
|
+
provided: number;
|
|
19
|
+
missingRequiredKeys: string[];
|
|
20
|
+
entries: Array<{
|
|
21
|
+
key: string;
|
|
22
|
+
kind: BindingRequirement["kind"];
|
|
23
|
+
required: boolean;
|
|
24
|
+
provided: boolean;
|
|
25
|
+
source: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
layers: Array<{
|
|
30
|
+
layer: string;
|
|
31
|
+
status: "portable" | "preview-only" | "manual" | "blocked" | "not-applicable";
|
|
32
|
+
notes: string[];
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export declare function buildCompatibilityReport(input: {
|
|
36
|
+
resolved: ResolvedSnapshot;
|
|
37
|
+
sourceHost: SupportedHost;
|
|
38
|
+
targetHost: SupportedHost;
|
|
39
|
+
bindingResolution: BindingResolutionResult;
|
|
40
|
+
preview: ImportPreviewResult;
|
|
41
|
+
skillInstallPlan: SkillInstallPlan;
|
|
42
|
+
}): CompatibilityReport;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export function buildCompatibilityReport(input) {
|
|
2
|
+
const { resolved, sourceHost, targetHost, bindingResolution, preview, skillInstallPlan } = input;
|
|
3
|
+
const blockers = [];
|
|
4
|
+
const manualActions = [];
|
|
5
|
+
const warnings = [...preview.warnings, ...skillInstallPlan.warnings];
|
|
6
|
+
if (bindingResolution.missingRequired.length > 0) {
|
|
7
|
+
blockers.push(`Missing required bindings: ${bindingResolution.missingRequired.map((entry) => entry.key).join(", ")}`);
|
|
8
|
+
}
|
|
9
|
+
const manualSkillEntries = skillInstallPlan.entries.filter((entry) => entry.status === "manual-review");
|
|
10
|
+
if (manualSkillEntries.length > 0) {
|
|
11
|
+
manualActions.push(`Manual skill reconstruction required for: ${manualSkillEntries.map((entry) => entry.skillName).join(", ")}`);
|
|
12
|
+
}
|
|
13
|
+
if (preview.warnings.length > 0) {
|
|
14
|
+
manualActions.push("Review import warnings before writing into a real host environment.");
|
|
15
|
+
}
|
|
16
|
+
if (hasPluginData(resolved) && targetHost !== sourceHost) {
|
|
17
|
+
manualActions.push("Review plugin portability manually; plugin runtime state is not fully reconstructed yet.");
|
|
18
|
+
}
|
|
19
|
+
const layers = [
|
|
20
|
+
buildLayer("profile", hasMeaningfulProfile(resolved) ? "portable" : "preview-only", [
|
|
21
|
+
hasMeaningfulProfile(resolved)
|
|
22
|
+
? "Portable profile preview is available for import."
|
|
23
|
+
: "No portable profile text was captured; summary-only preview is available."
|
|
24
|
+
]),
|
|
25
|
+
buildLayer("memory", "preview-only", [
|
|
26
|
+
"Memory currently imports as a portable summary/inventory preview, not a full semantic replay."
|
|
27
|
+
]),
|
|
28
|
+
buildLayer("skills", manualSkillEntries.length > 0 ? "manual" : "preview-only", manualSkillEntries.length > 0
|
|
29
|
+
? ["Some skills require manual reconstruction. See skill-install-plan.yaml."]
|
|
30
|
+
: ["Skill inventory and reconstruction plan are available in skill-install-plan.yaml."]),
|
|
31
|
+
buildLayer("tools", "preview-only", [
|
|
32
|
+
"Tool and MCP settings are translated into target-host preview config where supported."
|
|
33
|
+
]),
|
|
34
|
+
buildLayer("bindings", bindingResolution.missingRequired.length > 0 ? "blocked" : "portable", bindingResolution.missingRequired.length > 0
|
|
35
|
+
? ["Import is blocked until all required bindings are provided."]
|
|
36
|
+
: ["All required bindings needed for previewed import are present."]),
|
|
37
|
+
buildLayer("plugins", hasPluginData(resolved) ? "manual" : "not-applicable", [
|
|
38
|
+
hasPluginData(resolved)
|
|
39
|
+
? "Plugin identifiers are preserved, but plugin runtime portability still needs manual review."
|
|
40
|
+
: "No portable plugin data was captured for this snapshot."
|
|
41
|
+
]),
|
|
42
|
+
buildLayer("session", hasMeaningfulSession(resolved) ? "preview-only" : "not-applicable", [
|
|
43
|
+
hasMeaningfulSession(resolved)
|
|
44
|
+
? "Session imports as portable summaries/documents for review, not as a resumable native runtime session."
|
|
45
|
+
: "No portable session data was captured for this snapshot."
|
|
46
|
+
]),
|
|
47
|
+
buildLayer("hostArtifacts", resolved.hostArtifacts.length > 0 ? "manual" : "not-applicable", [
|
|
48
|
+
resolved.hostArtifacts.length > 0
|
|
49
|
+
? "Host-specific artifacts were detected and preserved in metadata only."
|
|
50
|
+
: "No host-specific artifacts were detected."
|
|
51
|
+
])
|
|
52
|
+
];
|
|
53
|
+
return {
|
|
54
|
+
apiVersion: "agentbox/v0.1",
|
|
55
|
+
kind: "CompatibilityReport",
|
|
56
|
+
sourceHost,
|
|
57
|
+
targetHost,
|
|
58
|
+
targetScope: skillInstallPlan.scope,
|
|
59
|
+
overallStatus: blockers.length > 0 ? "blocked" : warnings.length > 0 || manualActions.length > 0 ? "ready-with-warnings" : "ready",
|
|
60
|
+
blockers,
|
|
61
|
+
manualActions,
|
|
62
|
+
warnings,
|
|
63
|
+
bindings: {
|
|
64
|
+
required: bindingResolution.entries.filter((entry) => entry.required).length,
|
|
65
|
+
provided: bindingResolution.entries.filter((entry) => entry.required && entry.provided).length,
|
|
66
|
+
missingRequiredKeys: bindingResolution.missingRequired.map((entry) => entry.key),
|
|
67
|
+
entries: bindingResolution.entries.map((entry) => ({
|
|
68
|
+
key: entry.key,
|
|
69
|
+
kind: entry.kind,
|
|
70
|
+
required: entry.required,
|
|
71
|
+
provided: entry.provided,
|
|
72
|
+
source: entry.source,
|
|
73
|
+
description: entry.description
|
|
74
|
+
}))
|
|
75
|
+
},
|
|
76
|
+
layers
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function buildLayer(layer, status, notes) {
|
|
80
|
+
return { layer, status, notes };
|
|
81
|
+
}
|
|
82
|
+
function hasMeaningfulProfile(resolved) {
|
|
83
|
+
const profile = resolved.profile;
|
|
84
|
+
return typeof profile.projectInstructionPreview === "string" || typeof profile.userInstructionPreview === "string";
|
|
85
|
+
}
|
|
86
|
+
function hasPluginData(resolved) {
|
|
87
|
+
return Object.keys(resolved.plugins).length > 0;
|
|
88
|
+
}
|
|
89
|
+
function hasMeaningfulSession(resolved) {
|
|
90
|
+
const session = resolved.session;
|
|
91
|
+
return (typeof session.portableSummary === "string" ||
|
|
92
|
+
Array.isArray(session.recentPrompts) ||
|
|
93
|
+
Array.isArray(session.recentPlanPreviews) ||
|
|
94
|
+
Array.isArray(session.recentTodoPreviews) ||
|
|
95
|
+
Array.isArray(session.recentHistoryEntries) ||
|
|
96
|
+
Array.isArray(session.rawHistoryEntries) ||
|
|
97
|
+
Array.isArray(session.rawPlanDocuments));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../../src/import/compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { InstallScope } from "../core/materialize.js";
|
|
2
|
+
import type { ResolvedSnapshot, SupportedHost } from "../core/types.js";
|
|
3
|
+
export interface SkillInstallPlan {
|
|
4
|
+
apiVersion: "agentbox/v0.1";
|
|
5
|
+
kind: "SkillInstallPlan";
|
|
6
|
+
sourceHost: SupportedHost;
|
|
7
|
+
targetHost: SupportedHost;
|
|
8
|
+
scope: InstallScope;
|
|
9
|
+
targetStrategy: {
|
|
10
|
+
scope: InstallScope;
|
|
11
|
+
downloadRoot: string;
|
|
12
|
+
activationRoot: string;
|
|
13
|
+
activationMode: "shared-root" | "host-local" | "workspace-local";
|
|
14
|
+
};
|
|
15
|
+
entries: SkillInstallPlanEntry[];
|
|
16
|
+
warnings: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface SkillInstallPlanEntry {
|
|
19
|
+
skillName: string;
|
|
20
|
+
status: "ready" | "manual-review";
|
|
21
|
+
installStrategy: "git-clone-and-verify" | "manual";
|
|
22
|
+
source: {
|
|
23
|
+
source?: string | null;
|
|
24
|
+
sourceType?: string | null;
|
|
25
|
+
sourceUrl?: string | null;
|
|
26
|
+
skillPath?: string | null;
|
|
27
|
+
expectedHash?: string | null;
|
|
28
|
+
pluginName?: string | null;
|
|
29
|
+
};
|
|
30
|
+
target: {
|
|
31
|
+
scope: InstallScope;
|
|
32
|
+
downloadRoot: string;
|
|
33
|
+
activationRoot: string;
|
|
34
|
+
targetFolderName: string;
|
|
35
|
+
activationMode: "shared-root" | "host-local" | "workspace-local";
|
|
36
|
+
};
|
|
37
|
+
suggestedCommands: string[];
|
|
38
|
+
notes: string[];
|
|
39
|
+
}
|
|
40
|
+
export declare function buildSkillInstallPlan(resolved: ResolvedSnapshot, sourceHost: SupportedHost, targetHost: SupportedHost, options?: {
|
|
41
|
+
scope?: InstallScope;
|
|
42
|
+
}): SkillInstallPlan;
|
|
43
|
+
export declare function resolveSkillTargetStrategy(targetHost: SupportedHost, scope: InstallScope): SkillInstallPlan["targetStrategy"];
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { getDefaultInstallScope } from "../core/materialize.js";
|
|
2
|
+
export function buildSkillInstallPlan(resolved, sourceHost, targetHost, options) {
|
|
3
|
+
const skills = resolved.skills;
|
|
4
|
+
const scope = options?.scope ?? getDefaultInstallScope(targetHost);
|
|
5
|
+
const targetStrategy = resolveSkillTargetStrategy(targetHost, scope);
|
|
6
|
+
const sharedSkillNames = asStrings(skills.sharedSkillNames);
|
|
7
|
+
const installedSkillNames = asStrings(skills.installedSkillNames);
|
|
8
|
+
const lockfileSkills = asObject(skills.lockfileSkills);
|
|
9
|
+
const skillNames = new Set([
|
|
10
|
+
...sharedSkillNames,
|
|
11
|
+
...installedSkillNames,
|
|
12
|
+
...Object.keys(lockfileSkills)
|
|
13
|
+
]);
|
|
14
|
+
const warnings = [];
|
|
15
|
+
const entries = Array.from(skillNames)
|
|
16
|
+
.sort((left, right) => left.localeCompare(right))
|
|
17
|
+
.map((skillName) => buildSkillEntry(skillName, lockfileSkills[skillName], targetStrategy, warnings));
|
|
18
|
+
if (entries.length === 0) {
|
|
19
|
+
warnings.push("No portable skill entries were found in the current snapshot.");
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
apiVersion: "agentbox/v0.1",
|
|
23
|
+
kind: "SkillInstallPlan",
|
|
24
|
+
sourceHost,
|
|
25
|
+
targetHost,
|
|
26
|
+
scope,
|
|
27
|
+
targetStrategy,
|
|
28
|
+
entries,
|
|
29
|
+
warnings
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildSkillEntry(skillName, rawSkillRecord, targetStrategy, warnings) {
|
|
33
|
+
const skillRecord = asObject(rawSkillRecord);
|
|
34
|
+
const sourceUrl = asOptionalString(skillRecord.sourceUrl);
|
|
35
|
+
const sourceType = asOptionalString(skillRecord.sourceType);
|
|
36
|
+
const source = asOptionalString(skillRecord.source);
|
|
37
|
+
const skillPath = asOptionalString(skillRecord.skillPath);
|
|
38
|
+
const expectedHash = asOptionalString(skillRecord.skillFolderHash);
|
|
39
|
+
const pluginName = asOptionalString(skillRecord.pluginName);
|
|
40
|
+
const notes = [];
|
|
41
|
+
const suggestedCommands = [];
|
|
42
|
+
let status = "ready";
|
|
43
|
+
let installStrategy = "git-clone-and-verify";
|
|
44
|
+
if (!sourceUrl) {
|
|
45
|
+
status = "manual-review";
|
|
46
|
+
installStrategy = "manual";
|
|
47
|
+
notes.push("No sourceUrl was captured for this skill, so AgentBox cannot reconstruct it automatically yet.");
|
|
48
|
+
warnings.push(`Skill "${skillName}" is missing sourceUrl metadata and will require manual reconstruction.`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
suggestedCommands.push(`git clone ${sourceUrl} ${joinPortablePath(targetStrategy.downloadRoot, skillName)}`);
|
|
52
|
+
if (expectedHash) {
|
|
53
|
+
suggestedCommands.push(`# verify expected skill folder hash: ${expectedHash}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
notes.push("No skillFolderHash was captured, so post-install verification is weaker than ideal.");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (skillPath) {
|
|
60
|
+
notes.push(`Expected skill entry file inside repo: ${skillPath}`);
|
|
61
|
+
}
|
|
62
|
+
if (pluginName) {
|
|
63
|
+
notes.push(`This skill is associated with plugin "${pluginName}" and may require a matching plugin install on the target host.`);
|
|
64
|
+
}
|
|
65
|
+
if (targetStrategy.activationMode !== "shared-root") {
|
|
66
|
+
notes.push(`Target host ${targetStrategy.activationMode} install may require host-specific skill registration after download.`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
notes.push("Target host is expected to consume skills from the shared skill root.");
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
skillName,
|
|
73
|
+
status,
|
|
74
|
+
installStrategy,
|
|
75
|
+
source: {
|
|
76
|
+
source,
|
|
77
|
+
sourceType,
|
|
78
|
+
sourceUrl,
|
|
79
|
+
skillPath,
|
|
80
|
+
expectedHash,
|
|
81
|
+
pluginName
|
|
82
|
+
},
|
|
83
|
+
target: {
|
|
84
|
+
scope: targetStrategy.scope,
|
|
85
|
+
downloadRoot: targetStrategy.downloadRoot,
|
|
86
|
+
activationRoot: targetStrategy.activationRoot,
|
|
87
|
+
targetFolderName: skillName,
|
|
88
|
+
activationMode: targetStrategy.activationMode
|
|
89
|
+
},
|
|
90
|
+
suggestedCommands,
|
|
91
|
+
notes
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function resolveSkillTargetStrategy(targetHost, scope) {
|
|
95
|
+
if (targetHost === "claude-code") {
|
|
96
|
+
return {
|
|
97
|
+
scope,
|
|
98
|
+
downloadRoot: scope === "user" ? "{{HOME}}\\.agents\\skills" : "{{PROJECT_ROOT}}\\.agents\\skills",
|
|
99
|
+
activationRoot: scope === "user" ? "{{HOME}}\\.claude\\skills" : "{{PROJECT_ROOT}}\\.claude\\skills",
|
|
100
|
+
activationMode: "shared-root"
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
scope,
|
|
105
|
+
downloadRoot: "{{TARGET_SKILLS_ROOT}}",
|
|
106
|
+
activationRoot: "{{TARGET_SKILLS_ROOT}}",
|
|
107
|
+
activationMode: "host-local"
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function joinPortablePath(root, name) {
|
|
111
|
+
const normalizedRoot = root.replace(/[\\\/]+$/, "");
|
|
112
|
+
return `${normalizedRoot}\\${name}`;
|
|
113
|
+
}
|
|
114
|
+
function asStrings(value) {
|
|
115
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
|
|
116
|
+
}
|
|
117
|
+
function asObject(value) {
|
|
118
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
119
|
+
? value
|
|
120
|
+
: {};
|
|
121
|
+
}
|
|
122
|
+
function asOptionalString(value) {
|
|
123
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=install-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-plan.js","sourceRoot":"","sources":["../../src/import/install-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ResolvedSnapshot } from "../core/types.js";
|
|
2
|
+
import type { ImportContext, ImportPreviewResult } from "./types.js";
|
|
3
|
+
export declare function generateOpenClawPreview(outputDir: string, resolved: ResolvedSnapshot, context: ImportContext): Promise<ImportPreviewResult>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { toYaml } from "../core/yaml.js";
|
|
4
|
+
import { buildPortableMemoryMarkdown, buildPortableMemoryPreview, buildPortableSessionMarkdown, buildPortableSessionPreview, buildPortableSkillsPreview } from "./portable.js";
|
|
5
|
+
export async function generateOpenClawPreview(outputDir, resolved, context) {
|
|
6
|
+
const targetDir = path.join(outputDir, "openclaw");
|
|
7
|
+
await mkdir(targetDir, { recursive: true });
|
|
8
|
+
const warnings = [];
|
|
9
|
+
const agentConfig = buildOpenClawAgentConfig(resolved, context, warnings);
|
|
10
|
+
const skillsPreview = buildPortableSkillsPreview(resolved, context.sourceHost);
|
|
11
|
+
const memoryPreview = buildPortableMemoryPreview(resolved, context.sourceHost);
|
|
12
|
+
const memoryMarkdown = buildPortableMemoryMarkdown(resolved, context.sourceHost);
|
|
13
|
+
const sessionPreview = buildPortableSessionPreview(resolved, context.sourceHost);
|
|
14
|
+
const sessionMarkdown = buildPortableSessionMarkdown(resolved, context.sourceHost);
|
|
15
|
+
const summaryYaml = buildOpenClawSummary(resolved, context, warnings);
|
|
16
|
+
const files = {
|
|
17
|
+
config: path.join(targetDir, "agent-config.preview.yaml"),
|
|
18
|
+
skills: path.join(targetDir, "skills.preview.yaml"),
|
|
19
|
+
memoryYaml: path.join(targetDir, "memory.preview.yaml"),
|
|
20
|
+
memoryMarkdown: path.join(targetDir, "memory.preview.md"),
|
|
21
|
+
sessionYaml: path.join(targetDir, "session.preview.yaml"),
|
|
22
|
+
sessionMarkdown: path.join(targetDir, "session.preview.md"),
|
|
23
|
+
summary: path.join(targetDir, "import-summary.yaml")
|
|
24
|
+
};
|
|
25
|
+
const generatedFiles = Object.values(files);
|
|
26
|
+
const plan = [
|
|
27
|
+
{
|
|
28
|
+
sourceLayer: "profile, preferences, tools, bindings",
|
|
29
|
+
targetPath: files.config,
|
|
30
|
+
action: "create-preview",
|
|
31
|
+
risk: "medium",
|
|
32
|
+
notes: ["Represents translated OpenClaw agent/project configuration preview; not yet written to a real OpenClaw workspace."]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
sourceLayer: "skills",
|
|
36
|
+
targetPath: files.skills,
|
|
37
|
+
action: "create-preview",
|
|
38
|
+
risk: "low",
|
|
39
|
+
notes: ["Represents shared and installable skills that would be attached to the OpenClaw environment."]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
sourceLayer: "memory",
|
|
43
|
+
targetPath: files.memoryYaml,
|
|
44
|
+
action: "create-preview",
|
|
45
|
+
risk: "low",
|
|
46
|
+
notes: ["Structured portable memory preview for machine-readable migration."]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
sourceLayer: "memory",
|
|
50
|
+
targetPath: files.memoryMarkdown,
|
|
51
|
+
action: "create-preview",
|
|
52
|
+
risk: "low",
|
|
53
|
+
notes: ["Human-readable memory excerpts that can be reattached to the OpenClaw environment."]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
sourceLayer: "session",
|
|
57
|
+
targetPath: files.sessionYaml,
|
|
58
|
+
action: "create-preview",
|
|
59
|
+
risk: "low",
|
|
60
|
+
notes: ["Structured portable session preview for machine-readable migration."]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
sourceLayer: "session",
|
|
64
|
+
targetPath: files.sessionMarkdown,
|
|
65
|
+
action: "create-preview",
|
|
66
|
+
risk: "low",
|
|
67
|
+
notes: ["Human-readable session summary for manual review before apply."]
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
sourceLayer: "session, plugins, hostArtifacts, warnings",
|
|
71
|
+
targetPath: files.summary,
|
|
72
|
+
action: "create-preview",
|
|
73
|
+
risk: "low",
|
|
74
|
+
notes: ["Human-readable summary for manual review before any future apply step."]
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
await writeFile(files.config, toYaml(agentConfig), "utf8");
|
|
78
|
+
await writeFile(files.skills, toYaml(skillsPreview), "utf8");
|
|
79
|
+
await writeFile(files.memoryYaml, toYaml(memoryPreview), "utf8");
|
|
80
|
+
await writeFile(files.memoryMarkdown, memoryMarkdown, "utf8");
|
|
81
|
+
await writeFile(files.sessionYaml, toYaml(sessionPreview), "utf8");
|
|
82
|
+
await writeFile(files.sessionMarkdown, sessionMarkdown, "utf8");
|
|
83
|
+
await writeFile(files.summary, toYaml(summaryYaml), "utf8");
|
|
84
|
+
const reportPath = path.join(targetDir, "import-report.yaml");
|
|
85
|
+
const report = {
|
|
86
|
+
targetHost: "openclaw",
|
|
87
|
+
targetScope: "user",
|
|
88
|
+
generatedFiles,
|
|
89
|
+
warnings
|
|
90
|
+
};
|
|
91
|
+
await writeFile(reportPath, toYaml(report), "utf8");
|
|
92
|
+
return {
|
|
93
|
+
targetHost: "openclaw",
|
|
94
|
+
outputDir: targetDir,
|
|
95
|
+
generatedFiles,
|
|
96
|
+
warnings,
|
|
97
|
+
plan
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function buildOpenClawAgentConfig(resolved, context, warnings) {
|
|
101
|
+
const profile = resolved.profile;
|
|
102
|
+
const tools = resolved.tools;
|
|
103
|
+
const profilePreview = (typeof profile.projectInstructionPreview === "string" && profile.projectInstructionPreview) ||
|
|
104
|
+
(typeof profile.userInstructionPreview === "string" && profile.userInstructionPreview) ||
|
|
105
|
+
null;
|
|
106
|
+
if (!profilePreview) {
|
|
107
|
+
warnings.push("No source profile text preview was available; OpenClaw config uses summary-only profile metadata.");
|
|
108
|
+
}
|
|
109
|
+
warnings.push("Only portable content (MCP servers, profile) included. Model/API settings preserved from target environment.");
|
|
110
|
+
return {
|
|
111
|
+
importedFrom: context.sourceHost,
|
|
112
|
+
profilePreview,
|
|
113
|
+
toolConnections: {
|
|
114
|
+
mcpServers: tools.mcpServers ?? {}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function buildOpenClawSummary(resolved, context, warnings) {
|
|
119
|
+
return {
|
|
120
|
+
sourceHost: context.sourceHost,
|
|
121
|
+
targetHost: context.targetHost,
|
|
122
|
+
bindingsProvided: Object.keys(context.bindings),
|
|
123
|
+
sessionSummary: resolved.session,
|
|
124
|
+
hostArtifacts: resolved.hostArtifacts,
|
|
125
|
+
warnings
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=openclaw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/import/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ResolvedSnapshot } from "../core/types.js";
|
|
2
|
+
export declare function buildPortableSkillsPreview(resolved: ResolvedSnapshot, sourceHost: string): Record<string, unknown>;
|
|
3
|
+
export declare function buildPortableMemoryPreview(resolved: ResolvedSnapshot, sourceHost: string): Record<string, unknown>;
|
|
4
|
+
export declare function buildPortableSessionPreview(resolved: ResolvedSnapshot, sourceHost: string): Record<string, unknown>;
|
|
5
|
+
export declare function buildPortableMemoryMarkdown(resolved: ResolvedSnapshot, sourceHost: string): string;
|
|
6
|
+
export declare function buildPortableSessionMarkdown(resolved: ResolvedSnapshot, sourceHost: string, tempDir?: string): Promise<string>;
|