@autopilot-harness/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 +21 -0
- package/README.md +55 -0
- package/assets/autopilot-harness-hook.mjs +193 -0
- package/assets/vendor/migrations/001_initial.sql +62 -0
- package/assets/vendor/migrations/002_pending_followup.sql +4 -0
- package/assets/vendor/migrations/003_reviewing_item.sql +1 -0
- package/assets/vendor/runtime.mjs +5524 -0
- package/dist/assets/autopilot-harness-hook.mjs +193 -0
- package/dist/assets/vendor/migrations/001_initial.sql +62 -0
- package/dist/assets/vendor/migrations/002_pending_followup.sql +4 -0
- package/dist/assets/vendor/migrations/003_reviewing_item.sql +1 -0
- package/dist/assets/vendor/runtime.mjs +5524 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +300 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/init/config-merge.d.ts +27 -0
- package/dist/init/config-merge.d.ts.map +1 -0
- package/dist/init/config-merge.js +115 -0
- package/dist/init/config-merge.js.map +1 -0
- package/dist/init/default-config.d.ts +17 -0
- package/dist/init/default-config.d.ts.map +1 -0
- package/dist/init/default-config.js +101 -0
- package/dist/init/default-config.js.map +1 -0
- package/dist/init/hooks-merge.d.ts +25 -0
- package/dist/init/hooks-merge.d.ts.map +1 -0
- package/dist/init/hooks-merge.js +134 -0
- package/dist/init/hooks-merge.js.map +1 -0
- package/dist/init/install.d.ts +31 -0
- package/dist/init/install.d.ts.map +1 -0
- package/dist/init/install.js +829 -0
- package/dist/init/install.js.map +1 -0
- package/dist/init/platforms.d.ts +60 -0
- package/dist/init/platforms.d.ts.map +1 -0
- package/dist/init/platforms.js +275 -0
- package/dist/init/platforms.js.map +1 -0
- package/dist/init/tui.d.ts +65 -0
- package/dist/init/tui.d.ts.map +1 -0
- package/dist/init/tui.js +549 -0
- package/dist/init/tui.js.map +1 -0
- package/dist/init/types.d.ts +75 -0
- package/dist/init/types.d.ts.map +1 -0
- package/dist/init/types.js +9 -0
- package/dist/init/types.js.map +1 -0
- package/dist/init/wizard-copy.d.ts +74 -0
- package/dist/init/wizard-copy.d.ts.map +1 -0
- package/dist/init/wizard-copy.js +173 -0
- package/dist/init/wizard-copy.js.map +1 -0
- package/dist/init/wizard-helpers.d.ts +103 -0
- package/dist/init/wizard-helpers.d.ts.map +1 -0
- package/dist/init/wizard-helpers.js +724 -0
- package/dist/init/wizard-helpers.js.map +1 -0
- package/dist/locale-set.d.ts +24 -0
- package/dist/locale-set.d.ts.map +1 -0
- package/dist/locale-set.js +286 -0
- package/dist/locale-set.js.map +1 -0
- package/dist/names.d.ts +5 -0
- package/dist/names.d.ts.map +1 -0
- package/dist/names.js +5 -0
- package/dist/names.js.map +1 -0
- package/dist/project-fs.d.ts +48 -0
- package/dist/project-fs.d.ts.map +1 -0
- package/dist/project-fs.js +210 -0
- package/dist/project-fs.js.map +1 -0
- package/dist/read-untrusted-file.d.ts +41 -0
- package/dist/read-untrusted-file.d.ts.map +1 -0
- package/dist/read-untrusted-file.js +362 -0
- package/dist/read-untrusted-file.js.map +1 -0
- package/dist/session.d.ts +38 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +242 -0
- package/dist/session.js.map +1 -0
- package/dist/status-doctor.d.ts +22 -0
- package/dist/status-doctor.d.ts.map +1 -0
- package/dist/status-doctor.js +712 -0
- package/dist/status-doctor.js.map +1 -0
- package/dist/uninstall.d.ts +31 -0
- package/dist/uninstall.d.ts.map +1 -0
- package/dist/uninstall.js +333 -0
- package/dist/uninstall.js.map +1 -0
- package/dist/upgrade.d.ts +29 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +290 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/vendor-entry.d.ts +6 -0
- package/dist/vendor-entry.d.ts.map +1 -0
- package/dist/vendor-entry.js +16 -0
- package/dist/vendor-entry.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-helpers.js","sourceRoot":"","sources":["../../src/init/wizard-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type LocaleCode, type TriggerKey } from "@autopilot-harness/i18n";
|
|
2
|
+
export interface LocaleSetOptions {
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
locale: string;
|
|
5
|
+
}
|
|
6
|
+
export interface LocaleSetOk {
|
|
7
|
+
ok: true;
|
|
8
|
+
locale: LocaleCode;
|
|
9
|
+
previousLocale: LocaleCode;
|
|
10
|
+
written: string[];
|
|
11
|
+
triggersUpdated: TriggerKey[];
|
|
12
|
+
triggersPreserved: TriggerKey[];
|
|
13
|
+
}
|
|
14
|
+
export interface LocaleSetFail {
|
|
15
|
+
ok: false;
|
|
16
|
+
error: string;
|
|
17
|
+
}
|
|
18
|
+
export type LocaleSetResult = LocaleSetOk | LocaleSetFail;
|
|
19
|
+
/**
|
|
20
|
+
* Switch project locale: set config.locale, update stock triggers only,
|
|
21
|
+
* rewrite skill descriptions. Never touches plans/.
|
|
22
|
+
*/
|
|
23
|
+
export declare function setProjectLocale(opts: LocaleSetOptions): LocaleSetResult;
|
|
24
|
+
//# sourceMappingURL=locale-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-set.d.ts","sourceRoot":"","sources":["../src/locale-set.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,UAAU,EAEf,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAqDjC,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,iBAAiB,EAAE,UAAU,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,aAAa,CAAC;AA6G1D;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CA6JxE"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { isAlias, isMap, isScalar, isSeq, parseDocument } from "yaml";
|
|
4
|
+
import { isLocaleCode, sameStringList, skillDescriptions, stockTriggers, } from "@autopilot-harness/i18n";
|
|
5
|
+
import { assertNotSymlink, assertRealpathInside, mkdirRealDirSync, assertParentDirInProject, assertWrittenInsideProject, isRealDirectory, assertPresentRealFile } from "./init/wizard-helpers.js";
|
|
6
|
+
import { MAX_UNTRUSTED_TEXT_BYTES, readUntrustedUtf8File, writeFileReplaceSync, } from "./read-untrusted-file.js";
|
|
7
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const SKILL_NAMES = [
|
|
9
|
+
"autopilot-on",
|
|
10
|
+
"autopilot-run",
|
|
11
|
+
"autopilot-off",
|
|
12
|
+
"autopilot-resume",
|
|
13
|
+
"autopilot-replan",
|
|
14
|
+
];
|
|
15
|
+
const TRIGGER_KEYS = [
|
|
16
|
+
"on",
|
|
17
|
+
"run",
|
|
18
|
+
"off",
|
|
19
|
+
"resume",
|
|
20
|
+
"replan",
|
|
21
|
+
"resume_review",
|
|
22
|
+
];
|
|
23
|
+
/** Refuse absurd configs (DoS / accidental paste). */
|
|
24
|
+
const MAX_CONFIG_BYTES = MAX_UNTRUSTED_TEXT_BYTES;
|
|
25
|
+
/**
|
|
26
|
+
* Pre-i18n init defaults (en / zh-CN). Treat as stock so locale set still
|
|
27
|
+
* migrates triggers written before stockTriggers() grew extra phrases.
|
|
28
|
+
*/
|
|
29
|
+
const LEGACY_STOCK = {
|
|
30
|
+
en: {
|
|
31
|
+
on: ["Autopilot ON"],
|
|
32
|
+
run: ["Autopilot RUN"],
|
|
33
|
+
off: ["Autopilot OFF"],
|
|
34
|
+
resume: ["Autopilot RESUME"],
|
|
35
|
+
replan: ["Autopilot REPLAN"],
|
|
36
|
+
resume_review: ["Resume review"],
|
|
37
|
+
},
|
|
38
|
+
"zh-CN": {
|
|
39
|
+
on: ["Autopilot ON", "开启自动驾驶"],
|
|
40
|
+
run: ["Autopilot RUN", "开始执行"],
|
|
41
|
+
off: ["Autopilot OFF", "关闭自动驾驶"],
|
|
42
|
+
resume: ["Autopilot RESUME", "继续执行"],
|
|
43
|
+
replan: ["Autopilot REPLAN", "修改方案"],
|
|
44
|
+
resume_review: ["继续自审", "Resume review"],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
function resolveTemplatesRoot() {
|
|
48
|
+
const cliRoot = path.resolve(__dirname, "..");
|
|
49
|
+
const candidates = [
|
|
50
|
+
path.resolve(cliRoot, "../templates"),
|
|
51
|
+
path.resolve(cliRoot, "node_modules/@autopilot-harness/templates"),
|
|
52
|
+
];
|
|
53
|
+
return (candidates.find((p) => isRealDirectory(path.join(p, "skills"))) ??
|
|
54
|
+
candidates[0]);
|
|
55
|
+
}
|
|
56
|
+
/** Fail closed before mutating the project when templates are unavailable. */
|
|
57
|
+
function assertTemplatesReady() {
|
|
58
|
+
const templatesRoot = resolveTemplatesRoot();
|
|
59
|
+
if (!isRealDirectory(path.join(templatesRoot, "skills"))) {
|
|
60
|
+
throw new Error(`Templates package not found at ${templatesRoot}`);
|
|
61
|
+
}
|
|
62
|
+
for (const name of SKILL_NAMES) {
|
|
63
|
+
const tplPath = path.join(templatesRoot, "skills", name, "SKILL.md.tpl");
|
|
64
|
+
assertPresentRealFile(tplPath, `skill template ${name}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Escape for YAML double-quoted scalars inside skill frontmatter. */
|
|
68
|
+
function escapeYamlDoubleQuoted(value) {
|
|
69
|
+
return value
|
|
70
|
+
.replace(/\\/g, "\\\\")
|
|
71
|
+
.replace(/"/g, '\\"')
|
|
72
|
+
.replace(/\n/g, "\\n")
|
|
73
|
+
.replace(/\r/g, "\\r");
|
|
74
|
+
}
|
|
75
|
+
function renderSkill(template, description) {
|
|
76
|
+
return template.replaceAll("{{description}}", escapeYamlDoubleQuoted(description));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Read a trigger list without Node#toJSON (avoids alias expansion).
|
|
80
|
+
* Returns null when the node is not a plain string sequence.
|
|
81
|
+
*/
|
|
82
|
+
function plainStringList(node) {
|
|
83
|
+
if (node === undefined || node === null)
|
|
84
|
+
return null;
|
|
85
|
+
if (!isSeq(node))
|
|
86
|
+
return null;
|
|
87
|
+
const out = [];
|
|
88
|
+
for (const item of node.items) {
|
|
89
|
+
if (isAlias(item) || !isScalar(item) || typeof item.value !== "string") {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
out.push(item.value);
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
function rewriteSkills(projectRoot, locale) {
|
|
97
|
+
const written = [];
|
|
98
|
+
const templatesRoot = resolveTemplatesRoot();
|
|
99
|
+
const descriptions = skillDescriptions(locale);
|
|
100
|
+
const skillsRoot = path.join(projectRoot, ".cursor", "skills");
|
|
101
|
+
assertNotSymlink(skillsRoot, ".cursor/skills/");
|
|
102
|
+
for (const name of SKILL_NAMES) {
|
|
103
|
+
const tplPath = path.join(templatesRoot, "skills", name, "SKILL.md.tpl");
|
|
104
|
+
assertPresentRealFile(tplPath, `skill template ${name}`);
|
|
105
|
+
const destDir = path.join(skillsRoot, name);
|
|
106
|
+
mkdirRealDirSync(destDir, `.cursor/skills/${name}/`, projectRoot);
|
|
107
|
+
assertRealpathInside(projectRoot, destDir, `.cursor/skills/${name}/`);
|
|
108
|
+
const dest = path.join(destDir, "SKILL.md");
|
|
109
|
+
assertNotSymlink(dest, `.cursor/skills/${name}/SKILL.md`);
|
|
110
|
+
const body = renderSkill(readUntrustedUtf8File(tplPath, MAX_UNTRUSTED_TEXT_BYTES, `skill template ${name}`), descriptions[name]);
|
|
111
|
+
writeFileAtomic(dest, body, projectRoot, `.cursor/skills/${name}/`);
|
|
112
|
+
written.push(path.relative(projectRoot, dest));
|
|
113
|
+
}
|
|
114
|
+
return written;
|
|
115
|
+
}
|
|
116
|
+
function isStockTriggerList(current, key) {
|
|
117
|
+
// Match stock/legacy for *any* known locale so a wrong/missing config.locale
|
|
118
|
+
// cannot freeze the other language's stock phrases as "custom".
|
|
119
|
+
for (const loc of ["en", "zh-CN"]) {
|
|
120
|
+
if (sameStringList(current, stockTriggers(loc)[key]))
|
|
121
|
+
return true;
|
|
122
|
+
if (sameStringList(current, LEGACY_STOCK[loc][key]))
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
function writeFileAtomic(filePath, contents, projectRoot, parentLabel) {
|
|
128
|
+
assertParentDirInProject(projectRoot, filePath, parentLabel);
|
|
129
|
+
writeFileReplaceSync(filePath, contents);
|
|
130
|
+
assertWrittenInsideProject(projectRoot, filePath, path.basename(filePath));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Switch project locale: set config.locale, update stock triggers only,
|
|
134
|
+
* rewrite skill descriptions. Never touches plans/.
|
|
135
|
+
*/
|
|
136
|
+
export function setProjectLocale(opts) {
|
|
137
|
+
if (typeof opts.locale !== "string") {
|
|
138
|
+
return {
|
|
139
|
+
ok: false,
|
|
140
|
+
error: `Unsupported locale (en | zh-CN).`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (typeof opts.projectRoot !== "string" || opts.projectRoot.trim() === "") {
|
|
144
|
+
return { ok: false, error: "projectRoot must be a non-empty string" };
|
|
145
|
+
}
|
|
146
|
+
// Strip BOM + trim so copy-pasted args still match isLocaleCode.
|
|
147
|
+
const localeArg = opts.locale.replace(/^\uFEFF/, "").trim();
|
|
148
|
+
if (!isLocaleCode(localeArg)) {
|
|
149
|
+
return {
|
|
150
|
+
ok: false,
|
|
151
|
+
error: `Unsupported locale "${opts.locale}" (en | zh-CN).`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const nextLocale = localeArg;
|
|
155
|
+
const projectRoot = path.resolve(opts.projectRoot.trim());
|
|
156
|
+
const configPath = path.join(projectRoot, ".autopilot", "config.yml");
|
|
157
|
+
try {
|
|
158
|
+
assertNotSymlink(path.join(projectRoot, ".autopilot"), ".autopilot/");
|
|
159
|
+
assertNotSymlink(path.join(projectRoot, ".cursor"), ".cursor/");
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
163
|
+
return { ok: false, error: msg };
|
|
164
|
+
}
|
|
165
|
+
let raw;
|
|
166
|
+
try {
|
|
167
|
+
// Avoid existsSync: dangling symlinks look missing but must fail closed.
|
|
168
|
+
raw = readUntrustedUtf8File(configPath, MAX_CONFIG_BYTES, ".autopilot/config.yml");
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
const code = err?.code;
|
|
172
|
+
if (code === "ENOENT") {
|
|
173
|
+
return {
|
|
174
|
+
ok: false,
|
|
175
|
+
error: "Project is not initialized (.autopilot/config.yml missing). Run init first.",
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
179
|
+
return { ok: false, error: `Cannot read config.yml: ${msg}` };
|
|
180
|
+
}
|
|
181
|
+
let doc;
|
|
182
|
+
try {
|
|
183
|
+
// yaml@2.9+: maxAliasCount is a toJS option, not a parse option.
|
|
184
|
+
doc = parseDocument(raw);
|
|
185
|
+
}
|
|
186
|
+
catch (err) {
|
|
187
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
188
|
+
return { ok: false, error: `config.yml is not valid YAML: ${msg}` };
|
|
189
|
+
}
|
|
190
|
+
if (doc.errors.length > 0) {
|
|
191
|
+
const first = doc.errors[0];
|
|
192
|
+
return {
|
|
193
|
+
ok: false,
|
|
194
|
+
error: `config.yml YAML error: ${first.message}`,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (!doc.contents || !isMap(doc.contents)) {
|
|
198
|
+
return { ok: false, error: "config.yml root must be a mapping" };
|
|
199
|
+
}
|
|
200
|
+
const previousRaw = doc.get("locale");
|
|
201
|
+
const previousLocale = typeof previousRaw === "string" && isLocaleCode(previousRaw)
|
|
202
|
+
? previousRaw
|
|
203
|
+
: "en";
|
|
204
|
+
const triggersUpdated = [];
|
|
205
|
+
const triggersPreserved = [];
|
|
206
|
+
const newStock = stockTriggers(nextLocale);
|
|
207
|
+
const triggersNode = doc.get("triggers");
|
|
208
|
+
if (isMap(triggersNode)) {
|
|
209
|
+
for (const key of TRIGGER_KEYS) {
|
|
210
|
+
const currentNode = triggersNode.get(key, true);
|
|
211
|
+
// Missing key → install next-locale stock (incomplete configs).
|
|
212
|
+
if (currentNode === undefined || currentNode === null) {
|
|
213
|
+
triggersNode.set(key, [...newStock[key]]);
|
|
214
|
+
triggersUpdated.push(key);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const current = plainStringList(currentNode);
|
|
218
|
+
if (current !== null && isStockTriggerList(current, key)) {
|
|
219
|
+
const next = [...newStock[key]];
|
|
220
|
+
// Skip no-op rewrites so idempotent locale set does not claim "updated".
|
|
221
|
+
if (!sameStringList(current, next)) {
|
|
222
|
+
triggersNode.set(key, next);
|
|
223
|
+
triggersUpdated.push(key);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
triggersPreserved.push(key);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else if (triggersNode === undefined || triggersNode === null) {
|
|
232
|
+
// No triggers map → install stock (+ default match) for the target locale.
|
|
233
|
+
const built = {
|
|
234
|
+
match: "line_start",
|
|
235
|
+
};
|
|
236
|
+
for (const key of TRIGGER_KEYS) {
|
|
237
|
+
built[key] = [...newStock[key]];
|
|
238
|
+
triggersUpdated.push(key);
|
|
239
|
+
}
|
|
240
|
+
doc.set("triggers", built);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
triggersPreserved.push(...TRIGGER_KEYS);
|
|
244
|
+
}
|
|
245
|
+
doc.set("locale", nextLocale);
|
|
246
|
+
try {
|
|
247
|
+
assertTemplatesReady();
|
|
248
|
+
// Ensure skills tree is creatable *before* rewriting config.yml.
|
|
249
|
+
const skillsRoot = path.join(projectRoot, ".cursor", "skills");
|
|
250
|
+
mkdirRealDirSync(skillsRoot, ".cursor/skills/", projectRoot);
|
|
251
|
+
assertRealpathInside(projectRoot, skillsRoot, ".cursor/skills/");
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
255
|
+
return { ok: false, error: msg };
|
|
256
|
+
}
|
|
257
|
+
const written = [];
|
|
258
|
+
try {
|
|
259
|
+
// Config first so a later skill failure can be fixed by re-running locale set.
|
|
260
|
+
writeFileAtomic(configPath, String(doc), projectRoot, ".autopilot/");
|
|
261
|
+
written.push(path.relative(projectRoot, configPath));
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
265
|
+
return { ok: false, error: `locale set failed writing config: ${msg}` };
|
|
266
|
+
}
|
|
267
|
+
try {
|
|
268
|
+
written.push(...rewriteSkills(projectRoot, nextLocale));
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
272
|
+
return {
|
|
273
|
+
ok: false,
|
|
274
|
+
error: `locale set updated config.yml to ${nextLocale}, but skill rewrite failed: ${msg}. Re-run locale set ${nextLocale} to retry skills.`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
ok: true,
|
|
279
|
+
locale: nextLocale,
|
|
280
|
+
previousLocale,
|
|
281
|
+
written,
|
|
282
|
+
triggersUpdated,
|
|
283
|
+
triggersPreserved,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=locale-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-set.js","sourceRoot":"","sources":["../src/locale-set.ts"],"names":[],"mappings":"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"}
|
package/dist/names.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const CLI_NAME = "autopilot-harness";
|
|
2
|
+
/** npm package name for `npx` (scoped). Bin name remains {@link CLI_NAME}. */
|
|
3
|
+
export declare const NPM_PACKAGE_NAME = "@autopilot-harness/cli";
|
|
4
|
+
export declare const PREFERRED_NAME = "Autopilot";
|
|
5
|
+
//# sourceMappingURL=names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,sBAAsB,CAAC;AAC5C,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,cAAc,cAAc,CAAC"}
|
package/dist/names.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAC5C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { assertNotSymlink, resolveNofollowFlag } from "./read-untrusted-file.js";
|
|
2
|
+
export { assertNotSymlink, resolveNofollowFlag };
|
|
3
|
+
/** Resolve project root; refuse empty/blank (path.resolve("") → cwd). */
|
|
4
|
+
export declare function resolveProjectRootOrThrow(projectRoot: string): string;
|
|
5
|
+
/** After mkdir/resolve, ensure realpath stays under project root. */
|
|
6
|
+
export declare function assertRealpathInside(projectRoot: string, targetPath: string, label: string): void;
|
|
7
|
+
/** Parent of filePath must be a real in-project directory (no symlink). */
|
|
8
|
+
export declare function assertParentDirInProject(projectRoot: string, filePath: string, label: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Written path must be a regular in-project file (no symlink / non-file).
|
|
11
|
+
* Does not unlink — callers that need fail-closed cleanup use
|
|
12
|
+
* assertWrittenInsideProject or handle pairs themselves.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assertRegularFileInsideProject(projectRoot: string, filePath: string, label: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Post-write check: if a parent-dir symlink race wrote outside the project,
|
|
17
|
+
* unlink the escaped path (best-effort) and fail closed.
|
|
18
|
+
* Also refuses a raced symlink / non-file at filePath.
|
|
19
|
+
*/
|
|
20
|
+
export declare function assertWrittenInsideProject(projectRoot: string, filePath: string, label: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Verify each path is a regular in-project file; on any failure unlink *all*
|
|
23
|
+
* listed paths (best-effort) then rethrow the first error — avoids torn pairs
|
|
24
|
+
* (e.g. vendor migration kept + runtime removed).
|
|
25
|
+
*/
|
|
26
|
+
export declare function assertPairInsideOrUnlinkAll(projectRoot: string, files: ReadonlyArray<readonly [path: string, label: string]>): void;
|
|
27
|
+
/**
|
|
28
|
+
* mkdir -p with symlink/file fail-closed.
|
|
29
|
+
* Also refuses symlink *parents* under projectRoot — recursive mkdir follows
|
|
30
|
+
* intermediate symlinks and would otherwise create dirs outside the project
|
|
31
|
+
* before a later assertRealpathInside can run.
|
|
32
|
+
* When projectRoot is set, verifies realpath after mkdir (closes check→mkdir race).
|
|
33
|
+
*/
|
|
34
|
+
export declare function mkdirRealDirSync(dirPath: string, label: string, projectRoot?: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Package-asset probe: present as a real regular file (lstat; not symlink).
|
|
37
|
+
* Prefer over existsSync — dangling links look missing; pointing links look present.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isRealRegularFile(p: string): boolean;
|
|
40
|
+
/** Package-asset probe: present as a real directory (lstat; not symlink). */
|
|
41
|
+
export declare function isRealDirectory(p: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Require a real regular file at p (single lstat).
|
|
44
|
+
* Symlink / non-file / missing each get a distinct error — a planted link or
|
|
45
|
+
* directory must not be reported as merely "missing".
|
|
46
|
+
*/
|
|
47
|
+
export declare function assertPresentRealFile(p: string, label: string): void;
|
|
48
|
+
//# sourceMappingURL=project-fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-fs.d.ts","sourceRoot":"","sources":["../src/project-fs.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;AAEjD,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,IAAI,CAcN;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAeN;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAkBN;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,GAC3D,IAAI,CAoBN;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAqCN;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAiBpE"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-boundary filesystem helpers (mkdir / assert / package-asset probes).
|
|
3
|
+
* Untrusted open/copy/replace live in read-untrusted-file.ts.
|
|
4
|
+
*/
|
|
5
|
+
import fs from "node:fs";
|
|
6
|
+
import path from "node:path";
|
|
7
|
+
import { assertNotSymlink, resolveNofollowFlag, } from "./read-untrusted-file.js";
|
|
8
|
+
export { assertNotSymlink, resolveNofollowFlag };
|
|
9
|
+
/** Resolve project root; refuse empty/blank (path.resolve("") → cwd). */
|
|
10
|
+
export function resolveProjectRootOrThrow(projectRoot) {
|
|
11
|
+
if (typeof projectRoot !== "string" || projectRoot.trim() === "") {
|
|
12
|
+
throw new Error("projectRoot must be a non-empty string");
|
|
13
|
+
}
|
|
14
|
+
return path.resolve(projectRoot.trim());
|
|
15
|
+
}
|
|
16
|
+
/** After mkdir/resolve, ensure realpath stays under project root. */
|
|
17
|
+
export function assertRealpathInside(projectRoot, targetPath, label) {
|
|
18
|
+
const realRoot = fs.realpathSync(resolveProjectRootOrThrow(projectRoot));
|
|
19
|
+
const realTarget = fs.realpathSync(path.resolve(targetPath));
|
|
20
|
+
if (realTarget === realRoot)
|
|
21
|
+
return;
|
|
22
|
+
// path.relative handles cross-drive; only treat ".." / ".."+sep as escape —
|
|
23
|
+
// a child named "..evil" yields rel "..evil" and must remain allowed.
|
|
24
|
+
const rel = path.relative(realRoot, realTarget);
|
|
25
|
+
if (rel === ".." ||
|
|
26
|
+
rel.startsWith(`..${path.sep}`) ||
|
|
27
|
+
path.isAbsolute(rel)) {
|
|
28
|
+
throw new Error(`${label} realpath escapes the project root`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Parent of filePath must be a real in-project directory (no symlink). */
|
|
32
|
+
export function assertParentDirInProject(projectRoot, filePath, label) {
|
|
33
|
+
const dir = path.dirname(path.resolve(filePath));
|
|
34
|
+
assertNotSymlink(dir, label);
|
|
35
|
+
try {
|
|
36
|
+
if (!fs.lstatSync(dir).isDirectory()) {
|
|
37
|
+
throw new Error(`${label} is not a directory`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
const code = err?.code;
|
|
42
|
+
if (code === "ENOENT") {
|
|
43
|
+
throw new Error(`${label} is missing`);
|
|
44
|
+
}
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
assertRealpathInside(projectRoot, dir, label);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Written path must be a regular in-project file (no symlink / non-file).
|
|
51
|
+
* Does not unlink — callers that need fail-closed cleanup use
|
|
52
|
+
* assertWrittenInsideProject or handle pairs themselves.
|
|
53
|
+
*/
|
|
54
|
+
export function assertRegularFileInsideProject(projectRoot, filePath, label) {
|
|
55
|
+
let st;
|
|
56
|
+
try {
|
|
57
|
+
st = fs.lstatSync(filePath);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const code = err?.code;
|
|
61
|
+
if (code === "ENOENT") {
|
|
62
|
+
throw new Error(`${label} disappeared after write`);
|
|
63
|
+
}
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
if (st.isSymbolicLink()) {
|
|
67
|
+
throw new Error(`${label} is a symlink; refusing to open`);
|
|
68
|
+
}
|
|
69
|
+
if (!st.isFile()) {
|
|
70
|
+
throw new Error(`${label} is not a regular file`);
|
|
71
|
+
}
|
|
72
|
+
assertRealpathInside(projectRoot, filePath, label);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Post-write check: if a parent-dir symlink race wrote outside the project,
|
|
76
|
+
* unlink the escaped path (best-effort) and fail closed.
|
|
77
|
+
* Also refuses a raced symlink / non-file at filePath.
|
|
78
|
+
*/
|
|
79
|
+
export function assertWrittenInsideProject(projectRoot, filePath, label) {
|
|
80
|
+
try {
|
|
81
|
+
assertRegularFileInsideProject(projectRoot, filePath, label);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
try {
|
|
85
|
+
fs.unlinkSync(filePath);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
/* best-effort remove escaped write */
|
|
89
|
+
}
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Verify each path is a regular in-project file; on any failure unlink *all*
|
|
95
|
+
* listed paths (best-effort) then rethrow the first error — avoids torn pairs
|
|
96
|
+
* (e.g. vendor migration kept + runtime removed).
|
|
97
|
+
*/
|
|
98
|
+
export function assertPairInsideOrUnlinkAll(projectRoot, files) {
|
|
99
|
+
const verifyErrors = [];
|
|
100
|
+
for (const [dest, label] of files) {
|
|
101
|
+
try {
|
|
102
|
+
assertRegularFileInsideProject(projectRoot, dest, label);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
verifyErrors.push(err);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (verifyErrors.length > 0) {
|
|
109
|
+
for (const [dest] of files) {
|
|
110
|
+
try {
|
|
111
|
+
fs.unlinkSync(dest);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
/* best-effort remove escaped / torn pair */
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const first = verifyErrors[0];
|
|
118
|
+
throw first instanceof Error ? first : new Error(String(first));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* mkdir -p with symlink/file fail-closed.
|
|
123
|
+
* Also refuses symlink *parents* under projectRoot — recursive mkdir follows
|
|
124
|
+
* intermediate symlinks and would otherwise create dirs outside the project
|
|
125
|
+
* before a later assertRealpathInside can run.
|
|
126
|
+
* When projectRoot is set, verifies realpath after mkdir (closes check→mkdir race).
|
|
127
|
+
*/
|
|
128
|
+
export function mkdirRealDirSync(dirPath, label, projectRoot) {
|
|
129
|
+
const resolved = path.resolve(dirPath);
|
|
130
|
+
assertNotSymlink(resolved, label);
|
|
131
|
+
// If callers pass projectRoot, blank must throw — never silently skip bounds checks.
|
|
132
|
+
const root = projectRoot === undefined
|
|
133
|
+
? null
|
|
134
|
+
: resolveProjectRootOrThrow(projectRoot);
|
|
135
|
+
if (root) {
|
|
136
|
+
let parent = path.dirname(resolved);
|
|
137
|
+
while (parent.startsWith(root + path.sep)) {
|
|
138
|
+
assertNotSymlink(parent, label);
|
|
139
|
+
parent = path.dirname(parent);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
fs.mkdirSync(resolved, { recursive: true });
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
assertNotSymlink(resolved, label);
|
|
147
|
+
try {
|
|
148
|
+
if (!fs.lstatSync(resolved).isDirectory()) {
|
|
149
|
+
throw new Error(`${label} exists and is not a directory`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (inner) {
|
|
153
|
+
const code = inner?.code;
|
|
154
|
+
if (code === "ENOENT")
|
|
155
|
+
throw err;
|
|
156
|
+
throw inner;
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
assertNotSymlink(resolved, label);
|
|
161
|
+
if (root) {
|
|
162
|
+
assertRealpathInside(root, resolved, label);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Package-asset probe: present as a real regular file (lstat; not symlink).
|
|
167
|
+
* Prefer over existsSync — dangling links look missing; pointing links look present.
|
|
168
|
+
*/
|
|
169
|
+
export function isRealRegularFile(p) {
|
|
170
|
+
try {
|
|
171
|
+
return fs.lstatSync(p).isFile();
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/** Package-asset probe: present as a real directory (lstat; not symlink). */
|
|
178
|
+
export function isRealDirectory(p) {
|
|
179
|
+
try {
|
|
180
|
+
return fs.lstatSync(p).isDirectory();
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Require a real regular file at p (single lstat).
|
|
188
|
+
* Symlink / non-file / missing each get a distinct error — a planted link or
|
|
189
|
+
* directory must not be reported as merely "missing".
|
|
190
|
+
*/
|
|
191
|
+
export function assertPresentRealFile(p, label) {
|
|
192
|
+
let st;
|
|
193
|
+
try {
|
|
194
|
+
st = fs.lstatSync(p);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
const code = err?.code;
|
|
198
|
+
if (code === "ENOENT") {
|
|
199
|
+
throw new Error(`${label} is missing`);
|
|
200
|
+
}
|
|
201
|
+
throw err;
|
|
202
|
+
}
|
|
203
|
+
if (st.isSymbolicLink()) {
|
|
204
|
+
throw new Error(`${label} is a symlink; refusing to open`);
|
|
205
|
+
}
|
|
206
|
+
if (!st.isFile()) {
|
|
207
|
+
throw new Error(`${label} is not a regular file`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=project-fs.js.map
|