@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,184 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
const TOKEN_LIKE_PATTERNS = [
|
|
3
|
+
/\b(sk|ghp|ghu|github_pat|cr)_[A-Za-z0-9_\-]{12,}\b/g,
|
|
4
|
+
/\bAIza[0-9A-Za-z\-_]{20,}\b/g
|
|
5
|
+
];
|
|
6
|
+
const URL_CREDENTIAL_PATTERN = /https?:\/\/[^/\s:@]+:[^@\s/]+@/g;
|
|
7
|
+
export function redactCollectedData(context, resolved, sources) {
|
|
8
|
+
const events = [];
|
|
9
|
+
const clonedResolved = deepClone(resolved);
|
|
10
|
+
const clonedSources = deepClone(sources);
|
|
11
|
+
const redactString = (value, location) => {
|
|
12
|
+
let next = value;
|
|
13
|
+
if (containsPathLike(value, context.homeDir)) {
|
|
14
|
+
const before = next;
|
|
15
|
+
next = normalizeKnownPaths(next, context);
|
|
16
|
+
if (next !== before) {
|
|
17
|
+
events.push({
|
|
18
|
+
kind: "path",
|
|
19
|
+
location,
|
|
20
|
+
beforePreview: preview(before),
|
|
21
|
+
afterPreview: preview(next),
|
|
22
|
+
reason: "Normalized machine-specific path."
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
for (const pattern of TOKEN_LIKE_PATTERNS) {
|
|
27
|
+
const before = next;
|
|
28
|
+
next = next.replace(pattern, "{{REDACTED_SECRET}}");
|
|
29
|
+
if (next !== before) {
|
|
30
|
+
events.push({
|
|
31
|
+
kind: "token-like",
|
|
32
|
+
location,
|
|
33
|
+
beforePreview: preview(before),
|
|
34
|
+
afterPreview: preview(next),
|
|
35
|
+
reason: "Removed token-like secret value."
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
{
|
|
40
|
+
const before = next;
|
|
41
|
+
next = next.replace(URL_CREDENTIAL_PATTERN, "https://{{REDACTED_CREDENTIALS}}@");
|
|
42
|
+
if (next !== before) {
|
|
43
|
+
events.push({
|
|
44
|
+
kind: "url-credential",
|
|
45
|
+
location,
|
|
46
|
+
beforePreview: preview(before),
|
|
47
|
+
afterPreview: preview(next),
|
|
48
|
+
reason: "Removed credential embedded in URL."
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return next;
|
|
53
|
+
};
|
|
54
|
+
walkMutable(clonedResolved, "resolved", (value, location) => {
|
|
55
|
+
if (typeof value === "string") {
|
|
56
|
+
return redactString(value, location);
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
});
|
|
60
|
+
for (const record of clonedSources.records) {
|
|
61
|
+
const before = record.sourcePath;
|
|
62
|
+
const after = normalizeKnownPaths(before, context);
|
|
63
|
+
if (after !== before) {
|
|
64
|
+
record.sourcePath = after;
|
|
65
|
+
events.push({
|
|
66
|
+
kind: "path",
|
|
67
|
+
location: `sources.records:${record.key}`,
|
|
68
|
+
beforePreview: preview(before),
|
|
69
|
+
afterPreview: preview(after),
|
|
70
|
+
reason: "Normalized source path."
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const bindingsTemplate = createBindingsTemplate(clonedResolved.bindings, events);
|
|
75
|
+
return {
|
|
76
|
+
resolved: clonedResolved,
|
|
77
|
+
sources: clonedSources,
|
|
78
|
+
audit: {
|
|
79
|
+
generatedAt: new Date().toISOString(),
|
|
80
|
+
rulesVersion: "0.1",
|
|
81
|
+
eventCount: events.length,
|
|
82
|
+
events
|
|
83
|
+
},
|
|
84
|
+
bindingsTemplate
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function createBindingsTemplate(bindings, events) {
|
|
88
|
+
const lines = bindings.map((binding) => {
|
|
89
|
+
events.push({
|
|
90
|
+
kind: "binding-template",
|
|
91
|
+
location: `bindings:${binding.key}`,
|
|
92
|
+
beforePreview: binding.key,
|
|
93
|
+
afterPreview: `${binding.key}=`,
|
|
94
|
+
reason: "Generated placeholder entry in bindings template."
|
|
95
|
+
});
|
|
96
|
+
return `${binding.key}=`;
|
|
97
|
+
});
|
|
98
|
+
return lines.length > 0 ? `${lines.join("\n")}\n` : "# No bindings detected yet.\n";
|
|
99
|
+
}
|
|
100
|
+
function containsPathLike(value, homeDir) {
|
|
101
|
+
const normalizedHome = normalizeSlashes(homeDir).toLowerCase();
|
|
102
|
+
const normalizedValue = normalizeSlashes(value).toLowerCase();
|
|
103
|
+
return normalizedValue.includes(normalizedHome) || /[A-Za-z]:\\/.test(value);
|
|
104
|
+
}
|
|
105
|
+
function normalizeKnownPaths(value, context) {
|
|
106
|
+
let next = value;
|
|
107
|
+
const homeVariants = new Set([
|
|
108
|
+
context.homeDir,
|
|
109
|
+
normalizeSlashes(context.homeDir),
|
|
110
|
+
context.homeDir.replace(/\//g, "\\")
|
|
111
|
+
]);
|
|
112
|
+
for (const variant of homeVariants) {
|
|
113
|
+
if (variant) {
|
|
114
|
+
next = replaceAllCaseInsensitive(next, variant, "{{HOME}}");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const cwdVariants = new Set([
|
|
118
|
+
context.cwd,
|
|
119
|
+
normalizeSlashes(context.cwd),
|
|
120
|
+
context.cwd.replace(/\//g, "\\")
|
|
121
|
+
]);
|
|
122
|
+
for (const variant of cwdVariants) {
|
|
123
|
+
if (variant) {
|
|
124
|
+
next = replaceAllCaseInsensitive(next, variant, "{{PROJECT_ROOT}}");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Best-effort redaction of Windows username in remaining home-like paths.
|
|
128
|
+
const parsedHome = path.parse(context.homeDir);
|
|
129
|
+
const homeParts = normalizeSlashes(context.homeDir).split("/");
|
|
130
|
+
const username = homeParts[homeParts.length - 1];
|
|
131
|
+
if (username) {
|
|
132
|
+
next = next.replace(new RegExp(escapeRegExp(username), "gi"), "{{USERNAME}}");
|
|
133
|
+
}
|
|
134
|
+
if (parsedHome.root) {
|
|
135
|
+
next = next.replace(/([A-Za-z]):\\Users\\\{\{USERNAME\}\}/gi, "{{HOME}}");
|
|
136
|
+
}
|
|
137
|
+
return next;
|
|
138
|
+
}
|
|
139
|
+
function walkMutable(value, location, visit) {
|
|
140
|
+
if (Array.isArray(value)) {
|
|
141
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
142
|
+
const current = value[index];
|
|
143
|
+
if (typeof current === "object" && current !== null) {
|
|
144
|
+
walkMutable(current, `${location}[${index}]`, visit);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
value[index] = visit(current, `${location}[${index}]`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
if (value && typeof value === "object") {
|
|
153
|
+
for (const [key, current] of Object.entries(value)) {
|
|
154
|
+
if (typeof current === "object" && current !== null) {
|
|
155
|
+
walkMutable(current, `${location}.${key}`, visit);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
value[key] = visit(current, `${location}.${key}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return value;
|
|
162
|
+
}
|
|
163
|
+
return visit(value, location);
|
|
164
|
+
}
|
|
165
|
+
function preview(value) {
|
|
166
|
+
return value.length > 120 ? `${value.slice(0, 117)}...` : value;
|
|
167
|
+
}
|
|
168
|
+
function normalizeSlashes(value) {
|
|
169
|
+
return value.replace(/\\/g, "/");
|
|
170
|
+
}
|
|
171
|
+
function replaceAllCaseSensitive(input, search, replacement) {
|
|
172
|
+
return input.split(search).join(replacement);
|
|
173
|
+
}
|
|
174
|
+
function replaceAllCaseInsensitive(input, search, replacement) {
|
|
175
|
+
const regex = new RegExp(escapeRegExp(search), "gi");
|
|
176
|
+
return input.replace(regex, replacement);
|
|
177
|
+
}
|
|
178
|
+
function escapeRegExp(input) {
|
|
179
|
+
return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
180
|
+
}
|
|
181
|
+
function deepClone(value) {
|
|
182
|
+
return JSON.parse(JSON.stringify(value));
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/core/redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BoxManifest, ResolvedSnapshot, SourceSnapshot } from "./types.js";
|
|
2
|
+
export declare const BOX_SCHEMA_VERSION = "agentbox/v0.1";
|
|
3
|
+
export declare function createEmptyResolvedSnapshot(hostId: ResolvedSnapshot["host"]["id"]): ResolvedSnapshot;
|
|
4
|
+
export declare function createEmptySources(): SourceSnapshot;
|
|
5
|
+
export declare function createBoxManifest(input: {
|
|
6
|
+
name: string;
|
|
7
|
+
sourceHost: BoxManifest["metadata"]["sourceHost"];
|
|
8
|
+
sourceVersion?: string;
|
|
9
|
+
}): BoxManifest;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export const BOX_SCHEMA_VERSION = "agentbox/v0.1";
|
|
2
|
+
export function createEmptyResolvedSnapshot(hostId) {
|
|
3
|
+
return {
|
|
4
|
+
host: {
|
|
5
|
+
id: hostId,
|
|
6
|
+
platform: process.platform,
|
|
7
|
+
shell: process.env.SHELL ?? process.env.ComSpec
|
|
8
|
+
},
|
|
9
|
+
profile: {},
|
|
10
|
+
memory: {},
|
|
11
|
+
session: {},
|
|
12
|
+
skills: {},
|
|
13
|
+
plugins: {},
|
|
14
|
+
tools: {},
|
|
15
|
+
preferences: {},
|
|
16
|
+
securityPolicy: {},
|
|
17
|
+
hooks: {},
|
|
18
|
+
runtime: {},
|
|
19
|
+
bindings: [],
|
|
20
|
+
hostArtifacts: []
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function createEmptySources() {
|
|
24
|
+
return {
|
|
25
|
+
precedenceOrder: ["session", "project", "workspace", "user", "global", "default"],
|
|
26
|
+
records: []
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function createBoxManifest(input) {
|
|
30
|
+
return {
|
|
31
|
+
apiVersion: "agentbox/v0.1",
|
|
32
|
+
kind: "AgentBox",
|
|
33
|
+
metadata: {
|
|
34
|
+
name: input.name,
|
|
35
|
+
version: "0.1.0",
|
|
36
|
+
createdAt: new Date().toISOString(),
|
|
37
|
+
sourceHost: input.sourceHost,
|
|
38
|
+
sourceVersion: input.sourceVersion
|
|
39
|
+
},
|
|
40
|
+
compatibility: {
|
|
41
|
+
sourceHost: input.sourceHost,
|
|
42
|
+
suggestedTargets: ["claude-code"]
|
|
43
|
+
},
|
|
44
|
+
layers: {
|
|
45
|
+
profile: { path: "layers/profile.yaml", portability: "portable" },
|
|
46
|
+
memory: { path: "layers/memory.yaml", portability: "adaptable" },
|
|
47
|
+
session: { path: "layers/session.yaml", portability: "adaptable" },
|
|
48
|
+
skills: { path: "layers/skills.yaml", portability: "adaptable" },
|
|
49
|
+
plugins: { path: "layers/plugins.yaml", portability: "host-specific" },
|
|
50
|
+
tools: { path: "layers/tools.yaml", portability: "adaptable" },
|
|
51
|
+
preferences: { path: "layers/preferences.yaml", portability: "adaptable" },
|
|
52
|
+
securityPolicy: { path: "layers/security-policy.yaml", portability: "host-specific" },
|
|
53
|
+
hooks: { path: "layers/hooks.yaml", portability: "host-specific" },
|
|
54
|
+
runtime: { path: "layers/runtime.yaml", portability: "adaptable" },
|
|
55
|
+
bindings: { path: "layers/bindings.yaml", portability: "host-specific" },
|
|
56
|
+
hostArtifacts: { path: "layers/host-artifacts.yaml", portability: "opaque" }
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/core/schemas.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD,MAAM,UAAU,2BAA2B,CAAC,MAAsC;IAChF,OAAO;QACL,IAAI,EAAE;YACJ,EAAE,EAAE,MAAM;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO;SAChD;QACD,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,EAAE;QAClB,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;QACjF,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAIjC;IACC,OAAO;QACL,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC;QACD,aAAa,EAAE;YACb,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,gBAAgB,EAAE,CAAC,aAAa,CAAC;SAClC;QACD,MAAM,EAAE;YACN,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,UAAU,EAAE;YACjE,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE;YAChE,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE;YAClE,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE;YAChE,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE;YACtE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,WAAW,EAAE;YAC9D,WAAW,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,WAAW,EAAE;YAC1E,cAAc,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,eAAe,EAAE;YACrF,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE;YAClE,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,WAAW,EAAE;YAClE,QAAQ,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,eAAe,EAAE;YACxE,aAAa,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,QAAQ,EAAE;SAC7E;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export type PortabilityLabel = "portable" | "adaptable" | "host-specific" | "opaque";
|
|
2
|
+
export type SensitivityLabel = "public" | "internal" | "sensitive" | "secret";
|
|
3
|
+
export type SupportedHost = "claude-code" | "unknown";
|
|
4
|
+
export type SessionCaptureMode = "portable" | "rich" | "raw";
|
|
5
|
+
export interface PackageMetadata {
|
|
6
|
+
name: string;
|
|
7
|
+
version: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
sourceHost: SupportedHost;
|
|
10
|
+
sourceVersion?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CollectedItemRef {
|
|
13
|
+
id: string;
|
|
14
|
+
layer: string;
|
|
15
|
+
sourcePath: string;
|
|
16
|
+
extractionMethod: "structured" | "artifact-fallback" | "derived";
|
|
17
|
+
portability: PortabilityLabel;
|
|
18
|
+
sensitivity: SensitivityLabel;
|
|
19
|
+
transformed: boolean;
|
|
20
|
+
redacted: boolean;
|
|
21
|
+
notes?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface HostArtifact {
|
|
24
|
+
path: string;
|
|
25
|
+
detectedFormat: "file" | "directory" | "json" | "yaml" | "toml" | "markdown" | "sqlite" | "unknown";
|
|
26
|
+
probableCategory: string;
|
|
27
|
+
portability: PortabilityLabel;
|
|
28
|
+
sensitivity: SensitivityLabel;
|
|
29
|
+
}
|
|
30
|
+
export interface BindingRequirement {
|
|
31
|
+
key: string;
|
|
32
|
+
kind: "secret" | "identity" | "path" | "endpoint";
|
|
33
|
+
required: boolean;
|
|
34
|
+
description: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ResolvedSnapshot {
|
|
37
|
+
host: {
|
|
38
|
+
id: SupportedHost;
|
|
39
|
+
version?: string;
|
|
40
|
+
platform: string;
|
|
41
|
+
shell?: string;
|
|
42
|
+
};
|
|
43
|
+
profile: Record<string, unknown>;
|
|
44
|
+
memory: Record<string, unknown>;
|
|
45
|
+
session: Record<string, unknown>;
|
|
46
|
+
skills: Record<string, unknown>;
|
|
47
|
+
plugins: Record<string, unknown>;
|
|
48
|
+
tools: Record<string, unknown>;
|
|
49
|
+
preferences: Record<string, unknown>;
|
|
50
|
+
securityPolicy: Record<string, unknown>;
|
|
51
|
+
hooks: Record<string, unknown>;
|
|
52
|
+
runtime: Record<string, unknown>;
|
|
53
|
+
bindings: BindingRequirement[];
|
|
54
|
+
hostArtifacts: HostArtifact[];
|
|
55
|
+
}
|
|
56
|
+
export interface SourceRecord {
|
|
57
|
+
key: string;
|
|
58
|
+
sourcePath: string;
|
|
59
|
+
layer: string;
|
|
60
|
+
origin: "session" | "project" | "workspace" | "user" | "global" | "default" | "unknown";
|
|
61
|
+
note?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface SourceSnapshot {
|
|
64
|
+
precedenceOrder: string[];
|
|
65
|
+
records: SourceRecord[];
|
|
66
|
+
}
|
|
67
|
+
export interface BoxManifest {
|
|
68
|
+
apiVersion: "agentbox/v0.1";
|
|
69
|
+
kind: "AgentBox";
|
|
70
|
+
metadata: PackageMetadata;
|
|
71
|
+
compatibility: {
|
|
72
|
+
sourceHost: SupportedHost;
|
|
73
|
+
suggestedTargets: SupportedHost[];
|
|
74
|
+
};
|
|
75
|
+
layers: {
|
|
76
|
+
profile: {
|
|
77
|
+
path: string;
|
|
78
|
+
portability: PortabilityLabel;
|
|
79
|
+
};
|
|
80
|
+
memory: {
|
|
81
|
+
path: string;
|
|
82
|
+
portability: PortabilityLabel;
|
|
83
|
+
};
|
|
84
|
+
session: {
|
|
85
|
+
path: string;
|
|
86
|
+
portability: PortabilityLabel;
|
|
87
|
+
};
|
|
88
|
+
skills: {
|
|
89
|
+
path: string;
|
|
90
|
+
portability: PortabilityLabel;
|
|
91
|
+
};
|
|
92
|
+
plugins: {
|
|
93
|
+
path: string;
|
|
94
|
+
portability: PortabilityLabel;
|
|
95
|
+
};
|
|
96
|
+
tools: {
|
|
97
|
+
path: string;
|
|
98
|
+
portability: PortabilityLabel;
|
|
99
|
+
};
|
|
100
|
+
preferences: {
|
|
101
|
+
path: string;
|
|
102
|
+
portability: PortabilityLabel;
|
|
103
|
+
};
|
|
104
|
+
securityPolicy: {
|
|
105
|
+
path: string;
|
|
106
|
+
portability: PortabilityLabel;
|
|
107
|
+
};
|
|
108
|
+
hooks: {
|
|
109
|
+
path: string;
|
|
110
|
+
portability: PortabilityLabel;
|
|
111
|
+
};
|
|
112
|
+
runtime: {
|
|
113
|
+
path: string;
|
|
114
|
+
portability: PortabilityLabel;
|
|
115
|
+
};
|
|
116
|
+
bindings: {
|
|
117
|
+
path: string;
|
|
118
|
+
portability: PortabilityLabel;
|
|
119
|
+
};
|
|
120
|
+
hostArtifacts: {
|
|
121
|
+
path: string;
|
|
122
|
+
portability: PortabilityLabel;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function toYaml(value: unknown): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/core/yaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,SAAS,CAAC,KAAK,EAAE;QACtB,SAAS,EAAE,CAAC;QACZ,cAAc,EAAE,OAAO;KACxB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ResolvedSnapshot } from "../core/types.js";
|
|
2
|
+
import type { ImportContext, ImportPreviewResult } from "./types.js";
|
|
3
|
+
export declare function generateClaudeCodePreview(outputDir: string, resolved: ResolvedSnapshot, context: ImportContext): Promise<ImportPreviewResult>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
|
+
import { toYaml } from "../core/yaml.js";
|
|
5
|
+
import { buildPortableMemoryMarkdown, buildPortableMemoryPreview, buildPortableSessionMarkdown, buildPortableSessionPreview, buildPortableSkillsPreview } from "./portable.js";
|
|
6
|
+
export async function generateClaudeCodePreview(outputDir, resolved, context) {
|
|
7
|
+
await mkdir(outputDir, { recursive: true });
|
|
8
|
+
const warnings = [];
|
|
9
|
+
const settingsJson = buildClaudeSettingsPreview(resolved, context, warnings);
|
|
10
|
+
const summaryYaml = buildClaudeSummary(resolved, context, warnings);
|
|
11
|
+
const profileMarkdown = buildClaudeProfilePreview(resolved, context, warnings);
|
|
12
|
+
const skillsYaml = buildPortableSkillsPreview(resolved, context.sourceHost);
|
|
13
|
+
const memoryYaml = buildPortableMemoryPreview(resolved, context.sourceHost);
|
|
14
|
+
const memoryMarkdown = buildPortableMemoryMarkdown(resolved, context.sourceHost);
|
|
15
|
+
const sessionYaml = buildPortableSessionPreview(resolved, context.sourceHost);
|
|
16
|
+
// Build session markdown with actual file content extraction
|
|
17
|
+
const sessionMarkdown = await buildPortableSessionMarkdown(resolved, context.sourceHost, context.tempDir);
|
|
18
|
+
const files = {
|
|
19
|
+
settings: path.join(outputDir, "settings.json"),
|
|
20
|
+
skills: path.join(outputDir, "skills.yaml"),
|
|
21
|
+
memoryYaml: path.join(outputDir, "memory.yaml"),
|
|
22
|
+
memoryMarkdown: path.join(outputDir, "memory.md"),
|
|
23
|
+
sessionYaml: path.join(outputDir, "session.yaml"),
|
|
24
|
+
sessionMarkdown: path.join(outputDir, "session.md"),
|
|
25
|
+
summary: path.join(outputDir, "summary.yaml"),
|
|
26
|
+
profile: path.join(outputDir, "profile.md")
|
|
27
|
+
};
|
|
28
|
+
const generatedFiles = Object.values(files);
|
|
29
|
+
const plan = [
|
|
30
|
+
{
|
|
31
|
+
sourceLayer: "preferences, plugins, tools, securityPolicy, bindings",
|
|
32
|
+
targetPath: files.settings,
|
|
33
|
+
action: "create-preview",
|
|
34
|
+
risk: "medium",
|
|
35
|
+
notes: ["Represents translated Claude Code settings preview; not yet written to ~/.claude/settings.json."]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
sourceLayer: "skills",
|
|
39
|
+
targetPath: files.skills,
|
|
40
|
+
action: "create-preview",
|
|
41
|
+
risk: "low",
|
|
42
|
+
notes: ["Portable skills inventory translated for Claude Code review and later apply."]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
sourceLayer: "memory",
|
|
46
|
+
targetPath: files.memoryYaml,
|
|
47
|
+
action: "create-preview",
|
|
48
|
+
risk: "low",
|
|
49
|
+
notes: ["Structured portable memory preview for machine-readable migration."]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
sourceLayer: "memory",
|
|
53
|
+
targetPath: files.memoryMarkdown,
|
|
54
|
+
action: "create-preview",
|
|
55
|
+
risk: "low",
|
|
56
|
+
notes: ["Human-readable memory excerpts that can be reattached to Claude-visible docs."]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
sourceLayer: "session",
|
|
60
|
+
targetPath: files.sessionYaml,
|
|
61
|
+
action: "create-preview",
|
|
62
|
+
risk: "low",
|
|
63
|
+
notes: ["Structured portable session preview for machine-readable migration."]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
sourceLayer: "session",
|
|
67
|
+
targetPath: files.sessionMarkdown,
|
|
68
|
+
action: "create-preview",
|
|
69
|
+
risk: "low",
|
|
70
|
+
notes: ["Human-readable session summary for Claude review after import."]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
sourceLayer: "warnings",
|
|
74
|
+
targetPath: files.summary,
|
|
75
|
+
action: "create-preview",
|
|
76
|
+
risk: "low",
|
|
77
|
+
notes: ["Human-readable import summary for review."]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
sourceLayer: "profile",
|
|
81
|
+
targetPath: files.profile,
|
|
82
|
+
action: "create-preview",
|
|
83
|
+
risk: "low",
|
|
84
|
+
notes: ["Preview of CLAUDE.md-style profile content."]
|
|
85
|
+
}
|
|
86
|
+
];
|
|
87
|
+
await writeFile(files.settings, `${JSON.stringify(settingsJson, null, 2)}\n`, "utf8");
|
|
88
|
+
await writeFile(files.skills, toYaml(skillsYaml), "utf8");
|
|
89
|
+
await writeFile(files.memoryYaml, toYaml(memoryYaml), "utf8");
|
|
90
|
+
await writeFile(files.memoryMarkdown, memoryMarkdown, "utf8");
|
|
91
|
+
await writeFile(files.sessionYaml, toYaml(sessionYaml), "utf8");
|
|
92
|
+
await writeFile(files.sessionMarkdown, sessionMarkdown, "utf8");
|
|
93
|
+
await writeFile(files.summary, toYaml(summaryYaml), "utf8");
|
|
94
|
+
await writeFile(files.profile, profileMarkdown, "utf8");
|
|
95
|
+
const reportPath = path.join(outputDir, "report.yaml");
|
|
96
|
+
const report = {
|
|
97
|
+
targetHost: "claude-code",
|
|
98
|
+
targetScope: "user",
|
|
99
|
+
generatedFiles,
|
|
100
|
+
warnings
|
|
101
|
+
};
|
|
102
|
+
await writeFile(reportPath, toYaml(report), "utf8");
|
|
103
|
+
return {
|
|
104
|
+
targetHost: "claude-code",
|
|
105
|
+
outputDir,
|
|
106
|
+
generatedFiles,
|
|
107
|
+
warnings,
|
|
108
|
+
plan
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function buildClaudeSettingsPreview(resolved, context, warnings) {
|
|
112
|
+
const plugins = resolved.plugins;
|
|
113
|
+
const tools = resolved.tools;
|
|
114
|
+
const settings = {
|
|
115
|
+
enabledPlugins: plugins.enabledPlugins ?? {},
|
|
116
|
+
extraKnownMarketplaces: plugins.extraKnownMarketplaces ?? {}
|
|
117
|
+
};
|
|
118
|
+
if (tools.mcpServers && Object.keys(tools.mcpServers).length > 0) {
|
|
119
|
+
settings.mcpServers = replaceTemplatesInObject(tools.mcpServers, context.bindings);
|
|
120
|
+
}
|
|
121
|
+
warnings.push("Only portable content (plugins, MCP servers) included. Model/API settings preserved from target environment.");
|
|
122
|
+
return settings;
|
|
123
|
+
}
|
|
124
|
+
function buildClaudeSummary(resolved, context, warnings) {
|
|
125
|
+
return {
|
|
126
|
+
sourceHost: context.sourceHost,
|
|
127
|
+
targetHost: context.targetHost,
|
|
128
|
+
pluginCount: Object.keys(resolved.plugins.enabledPlugins ?? {}).length,
|
|
129
|
+
skillNames: resolved.skills.installedSkillNames ??
|
|
130
|
+
resolved.skills.sharedSkillNames ??
|
|
131
|
+
[],
|
|
132
|
+
bindingsProvided: Object.keys(context.bindings),
|
|
133
|
+
warnings
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function buildClaudeProfilePreview(resolved, context, warnings) {
|
|
137
|
+
const profile = resolved.profile;
|
|
138
|
+
const content = (typeof profile.projectInstructionContent === "string" && profile.projectInstructionContent) ||
|
|
139
|
+
(typeof profile.userInstructionContent === "string" && profile.userInstructionContent) ||
|
|
140
|
+
(typeof profile.projectInstructionPreview === "string" && profile.projectInstructionPreview) ||
|
|
141
|
+
(typeof profile.userInstructionPreview === "string" && profile.userInstructionPreview) ||
|
|
142
|
+
"";
|
|
143
|
+
if (!content) {
|
|
144
|
+
warnings.push("No source profile text was available; generated CLAUDE preview contains summary only.");
|
|
145
|
+
}
|
|
146
|
+
return [
|
|
147
|
+
"# CLAUDE Preview",
|
|
148
|
+
"",
|
|
149
|
+
`Imported from source host: ${context.sourceHost}`,
|
|
150
|
+
"",
|
|
151
|
+
content || "No portable profile text was captured in the current snapshot."
|
|
152
|
+
].join("\n");
|
|
153
|
+
}
|
|
154
|
+
function replaceTemplatesInObject(obj, bindings) {
|
|
155
|
+
const result = {};
|
|
156
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
157
|
+
if (typeof value === "string") {
|
|
158
|
+
result[key] = replaceTemplates(value, bindings);
|
|
159
|
+
}
|
|
160
|
+
else if (Array.isArray(value)) {
|
|
161
|
+
result[key] = value.map((item) => (typeof item === "string" ? replaceTemplates(item, bindings) : item));
|
|
162
|
+
}
|
|
163
|
+
else if (value && typeof value === "object") {
|
|
164
|
+
result[key] = replaceTemplatesInObject(value, bindings);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
result[key] = value;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
function replaceTemplates(text, bindings) {
|
|
173
|
+
let result = text;
|
|
174
|
+
// Replace standard path templates
|
|
175
|
+
result = result.replace(/\{\{HOME\}\}/g, homedir().replace(/\\/g, "\\\\"));
|
|
176
|
+
// Replace user bindings
|
|
177
|
+
for (const [key, value] of Object.entries(bindings)) {
|
|
178
|
+
result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, "g"), value);
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/import/claude-code.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 generateCodexPreview(outputDir: string, resolved: ResolvedSnapshot, context: ImportContext): Promise<ImportPreviewResult>;
|