hanoman 0.1.27 → 0.1.28
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/dist/build-info.json +3 -3
- package/dist/cli.js +98 -40
- package/dist/server.js +134 -76
- package/package.json +1 -1
- package/web/assets/{index-D6bmQt7Y.js → index-CJNgL7_5.js} +1543 -1543
- package/web/index.html +1 -1
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -7381,7 +7381,7 @@ var init_paths = __esm({
|
|
|
7381
7381
|
|
|
7382
7382
|
// ../runner/src/skills.ts
|
|
7383
7383
|
import { homedir as homedir2 } from "node:os";
|
|
7384
|
-
import { join as join2 } from "node:path";
|
|
7384
|
+
import { basename, dirname as dirname2, join as join2, resolve as resolve2 } from "node:path";
|
|
7385
7385
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
7386
7386
|
function agentSkillHome(agent, env = process.env, osHome = homedir2()) {
|
|
7387
7387
|
const own = (agent === "codex" ? env.HANOMAN_CODEX_HOME : env.HANOMAN_CLAUDE_HOME)?.trim();
|
|
@@ -7392,6 +7392,9 @@ function agentSkillHome(agent, env = process.env, osHome = homedir2()) {
|
|
|
7392
7392
|
}
|
|
7393
7393
|
return join2(osHome, agent === "codex" ? ".codex" : ".claude");
|
|
7394
7394
|
}
|
|
7395
|
+
function agentsSkillHome(env = process.env, osHome = homedir2()) {
|
|
7396
|
+
return env.HANOMAN_AGENTS_HOME?.trim() || join2(osHome, ".agents");
|
|
7397
|
+
}
|
|
7395
7398
|
function dirsIn(dir) {
|
|
7396
7399
|
try {
|
|
7397
7400
|
return readdirSync(dir, { withFileTypes: true }).filter((e) => (e.isDirectory() || e.isSymbolicLink()) && !e.name.startsWith(".")).map((e) => e.name);
|
|
@@ -7406,8 +7409,51 @@ function readJson(file) {
|
|
|
7406
7409
|
return null;
|
|
7407
7410
|
}
|
|
7408
7411
|
}
|
|
7409
|
-
function
|
|
7410
|
-
return
|
|
7412
|
+
function isSkillDir(dir) {
|
|
7413
|
+
return existsSync(join2(dir, "SKILL.md"));
|
|
7414
|
+
}
|
|
7415
|
+
function asSkill(dir, pkg, name = basename(dir)) {
|
|
7416
|
+
return { id: pkg ? `${pkg}:${name}` : name, name, pkg, dir };
|
|
7417
|
+
}
|
|
7418
|
+
function skillsUnder(dir, pkg, depth = 2) {
|
|
7419
|
+
const out = [];
|
|
7420
|
+
for (const name of dirsIn(dir)) {
|
|
7421
|
+
const sub = join2(dir, name);
|
|
7422
|
+
if (isSkillDir(sub)) out.push(asSkill(sub, pkg, name));
|
|
7423
|
+
else if (depth > 1) out.push(...skillsUnder(sub, pkg, depth - 1));
|
|
7424
|
+
}
|
|
7425
|
+
return out;
|
|
7426
|
+
}
|
|
7427
|
+
function manifestSkills(installPath, pkg) {
|
|
7428
|
+
for (const marker of [".claude-plugin", ".codex-plugin"]) {
|
|
7429
|
+
const j = readJson(join2(installPath, marker, "plugin.json"));
|
|
7430
|
+
const declared = j?.skills;
|
|
7431
|
+
if (!Array.isArray(declared)) continue;
|
|
7432
|
+
const out = [];
|
|
7433
|
+
for (const rel of declared) {
|
|
7434
|
+
if (typeof rel !== "string" || !rel) continue;
|
|
7435
|
+
const p = resolve2(installPath, rel);
|
|
7436
|
+
const dir = basename(p) === "SKILL.md" ? dirname2(p) : p;
|
|
7437
|
+
if (isSkillDir(dir)) out.push(asSkill(dir, pkg));
|
|
7438
|
+
}
|
|
7439
|
+
if (out.length) return out;
|
|
7440
|
+
}
|
|
7441
|
+
return [];
|
|
7442
|
+
}
|
|
7443
|
+
function pluginSkills(installPath, pkg) {
|
|
7444
|
+
const declared = manifestSkills(installPath, pkg);
|
|
7445
|
+
return declared.length ? declared : skillsUnder(join2(installPath, "skills"), pkg);
|
|
7446
|
+
}
|
|
7447
|
+
function lockPluginNames(agentsHome) {
|
|
7448
|
+
const out = /* @__PURE__ */ new Map();
|
|
7449
|
+
const j = readJson(join2(agentsHome, ".skill-lock.json"));
|
|
7450
|
+
const skills = j?.skills;
|
|
7451
|
+
if (!skills || typeof skills !== "object") return out;
|
|
7452
|
+
for (const [name, entry] of Object.entries(skills)) {
|
|
7453
|
+
const pkg = entry?.pluginName;
|
|
7454
|
+
if (typeof pkg === "string" && pkg.trim()) out.set(name, pkg.trim());
|
|
7455
|
+
}
|
|
7456
|
+
return out;
|
|
7411
7457
|
}
|
|
7412
7458
|
function splitPluginKey(key) {
|
|
7413
7459
|
const at = key.lastIndexOf("@");
|
|
@@ -7487,11 +7533,23 @@ function scanAgentSkills(agent, env = process.env, osHome = homedir2()) {
|
|
|
7487
7533
|
add(userDir, skillsUnder(userDir, null));
|
|
7488
7534
|
for (const r of [...manifestRoots(home), ...cacheRoots(home)]) {
|
|
7489
7535
|
if (disabled.has(`${r.pkg}@${r.marketplace}`)) continue;
|
|
7490
|
-
const
|
|
7491
|
-
const found = skillsUnder(dir, r.pkg);
|
|
7536
|
+
const found = pluginSkills(r.dir, r.pkg);
|
|
7492
7537
|
if (!found.length) continue;
|
|
7493
7538
|
packages.add(r.pkg);
|
|
7494
|
-
add(dir, found);
|
|
7539
|
+
add(join2(r.dir, "skills"), found);
|
|
7540
|
+
}
|
|
7541
|
+
if (agent === "codex") {
|
|
7542
|
+
const agentsHome = agentsSkillHome(env, osHome);
|
|
7543
|
+
const dir = join2(agentsHome, "skills");
|
|
7544
|
+
const names = lockPluginNames(agentsHome);
|
|
7545
|
+
const flat = skillsUnder(dir, null);
|
|
7546
|
+
const withPkg = flat.flatMap((s2) => {
|
|
7547
|
+
const pkg = names.get(s2.name);
|
|
7548
|
+
if (!pkg) return [s2];
|
|
7549
|
+
packages.add(pkg);
|
|
7550
|
+
return [asSkill(s2.dir, pkg, s2.name), s2];
|
|
7551
|
+
});
|
|
7552
|
+
add(dir, withPkg);
|
|
7495
7553
|
}
|
|
7496
7554
|
return { agent, home, roots, skills, packages: [...packages] };
|
|
7497
7555
|
}
|
|
@@ -7531,9 +7589,9 @@ var init_src2 = __esm({
|
|
|
7531
7589
|
});
|
|
7532
7590
|
|
|
7533
7591
|
// src/layout.ts
|
|
7534
|
-
import { join as join3, resolve as
|
|
7592
|
+
import { join as join3, resolve as resolve3 } from "node:path";
|
|
7535
7593
|
function resolveLayout(distDir2, exists) {
|
|
7536
|
-
const pkg =
|
|
7594
|
+
const pkg = resolve3(distDir2, "..");
|
|
7537
7595
|
if (exists(join3(pkg, "prisma", "schema.prisma"))) {
|
|
7538
7596
|
return {
|
|
7539
7597
|
root: pkg,
|
|
@@ -7542,7 +7600,7 @@ function resolveLayout(distDir2, exists) {
|
|
|
7542
7600
|
web: exists(join3(pkg, "web")) ? join3(pkg, "web") : null
|
|
7543
7601
|
};
|
|
7544
7602
|
}
|
|
7545
|
-
const repo =
|
|
7603
|
+
const repo = resolve3(distDir2, "../..");
|
|
7546
7604
|
if (exists(join3(repo, "server", "prisma", "schema.prisma"))) {
|
|
7547
7605
|
return {
|
|
7548
7606
|
root: repo,
|
|
@@ -7647,7 +7705,7 @@ __export(start_exports, {
|
|
|
7647
7705
|
import { spawn, execFileSync as execFileSync2 } from "node:child_process";
|
|
7648
7706
|
import { createRequire } from "node:module";
|
|
7649
7707
|
import { existsSync as existsSync2, mkdirSync, readdirSync as readdirSync2, statSync, chmodSync } from "node:fs";
|
|
7650
|
-
import { dirname as
|
|
7708
|
+
import { dirname as dirname3, join as join4, resolve as resolvePath } from "node:path";
|
|
7651
7709
|
import { fileURLToPath } from "node:url";
|
|
7652
7710
|
function parseStartArgs(argv) {
|
|
7653
7711
|
const out = { port: null, host: null, db: null, migrate: true };
|
|
@@ -7688,7 +7746,7 @@ function parseStartArgs(argv) {
|
|
|
7688
7746
|
return out;
|
|
7689
7747
|
}
|
|
7690
7748
|
function distDir() {
|
|
7691
|
-
return
|
|
7749
|
+
return dirname3(fileURLToPath(import.meta.url));
|
|
7692
7750
|
}
|
|
7693
7751
|
function runPrisma(args, dbUrl) {
|
|
7694
7752
|
const prismaCli = prismaCliPath(createRequire(import.meta.url).resolve);
|
|
@@ -7760,7 +7818,7 @@ function ensureSpawnHelpersExecutable(paths2, ops) {
|
|
|
7760
7818
|
function repairSpawnHelper(ctx) {
|
|
7761
7819
|
let ptyDir;
|
|
7762
7820
|
try {
|
|
7763
|
-
ptyDir =
|
|
7821
|
+
ptyDir = dirname3(createRequire(import.meta.url).resolve("node-pty/package.json"));
|
|
7764
7822
|
} catch {
|
|
7765
7823
|
return;
|
|
7766
7824
|
}
|
|
@@ -7823,7 +7881,7 @@ async function start(argv, ctx) {
|
|
|
7823
7881
|
let dbUrl;
|
|
7824
7882
|
try {
|
|
7825
7883
|
layout = resolveLayout(distDir(), existsSync2);
|
|
7826
|
-
dbUrl = opts.db ? `file:${resolvePath(opts.db)}` : resolveDbUrl(ctx.env,
|
|
7884
|
+
dbUrl = opts.db ? `file:${resolvePath(opts.db)}` : resolveDbUrl(ctx.env, dirname3(layout.schema));
|
|
7827
7885
|
} catch (e) {
|
|
7828
7886
|
ctx.stderr(`${e.message}
|
|
7829
7887
|
`);
|
|
@@ -7834,7 +7892,7 @@ async function start(argv, ctx) {
|
|
|
7834
7892
|
`);
|
|
7835
7893
|
const home = resolveHome(ctx.env);
|
|
7836
7894
|
mkdirSync(home, { recursive: true });
|
|
7837
|
-
mkdirSync(
|
|
7895
|
+
mkdirSync(dirname3(dbFilePath(dbUrl)), { recursive: true });
|
|
7838
7896
|
if (!existsSync2(layout.server)) {
|
|
7839
7897
|
ctx.stderr(`hanoman: bundle server tak ada di ${layout.server} \u2014 jalankan \`pnpm build\` dulu
|
|
7840
7898
|
`);
|
|
@@ -7920,7 +7978,7 @@ __export(doctor_exports, {
|
|
|
7920
7978
|
});
|
|
7921
7979
|
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
7922
7980
|
import { accessSync, constants, existsSync as existsSync3 } from "node:fs";
|
|
7923
|
-
import { dirname as
|
|
7981
|
+
import { dirname as dirname4 } from "node:path";
|
|
7924
7982
|
function doctorReport(p) {
|
|
7925
7983
|
const major = Number(/^v?(\d+)/.exec(p.node)?.[1] ?? 0);
|
|
7926
7984
|
const rows = [
|
|
@@ -7965,7 +8023,7 @@ async function doctor(_argv, ctx) {
|
|
|
7965
8023
|
let db;
|
|
7966
8024
|
try {
|
|
7967
8025
|
layout = resolveLayout(distDir(), existsSync3);
|
|
7968
|
-
db = dbFilePath(resolveDbUrl(ctx.env,
|
|
8026
|
+
db = dbFilePath(resolveDbUrl(ctx.env, dirname4(layout.schema)));
|
|
7969
8027
|
} catch (e) {
|
|
7970
8028
|
ctx.stderr(`${e.message}
|
|
7971
8029
|
`);
|
|
@@ -7974,7 +8032,7 @@ async function doctor(_argv, ctx) {
|
|
|
7974
8032
|
const home = resolveHome(ctx.env);
|
|
7975
8033
|
let homeWritable = false;
|
|
7976
8034
|
try {
|
|
7977
|
-
accessSync(existsSync3(home) ? home :
|
|
8035
|
+
accessSync(existsSync3(home) ? home : dirname4(home), constants.W_OK);
|
|
7978
8036
|
homeWritable = true;
|
|
7979
8037
|
} catch {
|
|
7980
8038
|
}
|
|
@@ -17379,14 +17437,14 @@ function inputRequiredRoundsExceededMessage(method, maxRounds) {
|
|
|
17379
17437
|
return `Multi-round-trip request '${method}' still required input after ${maxRounds} rounds (inputRequired.maxRounds)`;
|
|
17380
17438
|
}
|
|
17381
17439
|
function sleep(ms, signal) {
|
|
17382
|
-
return new Promise((
|
|
17440
|
+
return new Promise((resolve4, reject) => {
|
|
17383
17441
|
if (signal?.aborted) {
|
|
17384
17442
|
reject(signal.reason instanceof SdkError ? signal.reason : new SdkError(SdkErrorCode.RequestTimeout, String(signal.reason)));
|
|
17385
17443
|
return;
|
|
17386
17444
|
}
|
|
17387
17445
|
const timer = setTimeout(() => {
|
|
17388
17446
|
signal?.removeEventListener("abort", onAbort);
|
|
17389
|
-
|
|
17447
|
+
resolve4();
|
|
17390
17448
|
}, ms);
|
|
17391
17449
|
const onAbort = () => {
|
|
17392
17450
|
clearTimeout(timer);
|
|
@@ -19197,7 +19255,7 @@ var init_src_CX2iR2pK = __esm({
|
|
|
19197
19255
|
const flowStartedAt = Date.now();
|
|
19198
19256
|
let onAbort;
|
|
19199
19257
|
let cleanupMessageId;
|
|
19200
|
-
return new Promise((
|
|
19258
|
+
return new Promise((resolve4, reject) => {
|
|
19201
19259
|
const earlyReject = (error2) => {
|
|
19202
19260
|
reject(error2);
|
|
19203
19261
|
};
|
|
@@ -19265,7 +19323,7 @@ var init_src_CX2iR2pK = __esm({
|
|
|
19265
19323
|
}
|
|
19266
19324
|
if (decoded.kind === "invalid") return reject(decoded.error);
|
|
19267
19325
|
if (decoded.kind === "input_required") {
|
|
19268
|
-
if (options?.allowInputRequired === true) return
|
|
19326
|
+
if (options?.allowInputRequired === true) return resolve4(manualInputRequiredValue(decoded));
|
|
19269
19327
|
const flow = {
|
|
19270
19328
|
codec,
|
|
19271
19329
|
request,
|
|
@@ -19277,11 +19335,11 @@ var init_src_CX2iR2pK = __esm({
|
|
|
19277
19335
|
params
|
|
19278
19336
|
}, resultSchema, legOptions)
|
|
19279
19337
|
};
|
|
19280
|
-
return
|
|
19338
|
+
return resolve4(this._resolveNonCompleteResult(decoded, flow));
|
|
19281
19339
|
}
|
|
19282
19340
|
const result = decoded.result;
|
|
19283
19341
|
validateStandardSchema(resultSchema, result).then((parseResult) => {
|
|
19284
|
-
if (parseResult.success)
|
|
19342
|
+
if (parseResult.success) resolve4(parseResult.data);
|
|
19285
19343
|
else reject(new SdkError(SdkErrorCode.InvalidResult, `Invalid result for ${request.method}: ${parseResult.error}`));
|
|
19286
19344
|
}, reject);
|
|
19287
19345
|
});
|
|
@@ -22097,7 +22155,7 @@ var init_ajvProvider_CEoC_sr = __esm({
|
|
|
22097
22155
|
ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);
|
|
22098
22156
|
const schOrFunc = root.refs[ref];
|
|
22099
22157
|
if (schOrFunc) return schOrFunc;
|
|
22100
|
-
let _sch =
|
|
22158
|
+
let _sch = resolve4.call(this, root, ref);
|
|
22101
22159
|
if (_sch === void 0) {
|
|
22102
22160
|
const schema = (_a3 = root.localRefs) === null || _a3 === void 0 ? void 0 : _a3[ref];
|
|
22103
22161
|
const { schemaId } = this.opts;
|
|
@@ -22123,7 +22181,7 @@ var init_ajvProvider_CEoC_sr = __esm({
|
|
|
22123
22181
|
function sameSchemaEnv(s1, s2) {
|
|
22124
22182
|
return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
|
|
22125
22183
|
}
|
|
22126
|
-
function
|
|
22184
|
+
function resolve4(root, ref) {
|
|
22127
22185
|
let sch;
|
|
22128
22186
|
while (typeof (sch = this.refs[ref]) == "string") ref = sch;
|
|
22129
22187
|
return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);
|
|
@@ -22573,7 +22631,7 @@ var init_ajvProvider_CEoC_sr = __esm({
|
|
|
22573
22631
|
else if (typeof uri === "object") uri = parse4(serialize(uri, options), options);
|
|
22574
22632
|
return uri;
|
|
22575
22633
|
}
|
|
22576
|
-
function
|
|
22634
|
+
function resolve4(baseURI, relativeURI, options) {
|
|
22577
22635
|
const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
|
|
22578
22636
|
const resolved = resolveComponent(parse4(baseURI, schemelessOptions), parse4(relativeURI, schemelessOptions), schemelessOptions, true);
|
|
22579
22637
|
schemelessOptions.skipEscape = true;
|
|
@@ -22747,7 +22805,7 @@ var init_ajvProvider_CEoC_sr = __esm({
|
|
|
22747
22805
|
const fastUri = {
|
|
22748
22806
|
SCHEMES,
|
|
22749
22807
|
normalize,
|
|
22750
|
-
resolve:
|
|
22808
|
+
resolve: resolve4,
|
|
22751
22809
|
resolveComponent,
|
|
22752
22810
|
equal,
|
|
22753
22811
|
serialize,
|
|
@@ -28439,7 +28497,7 @@ var init_stdio = __esm({
|
|
|
28439
28497
|
}
|
|
28440
28498
|
send(message) {
|
|
28441
28499
|
if (this._closed) return Promise.reject(/* @__PURE__ */ new Error("StdioServerTransport is closed"));
|
|
28442
|
-
return new Promise((
|
|
28500
|
+
return new Promise((resolve4, reject) => {
|
|
28443
28501
|
const json = serializeMessage(message);
|
|
28444
28502
|
let settled = false;
|
|
28445
28503
|
const onError = (error2) => {
|
|
@@ -28454,14 +28512,14 @@ var init_stdio = __esm({
|
|
|
28454
28512
|
settled = true;
|
|
28455
28513
|
this._stdout.off("error", onError);
|
|
28456
28514
|
this._stdout.off("drain", onDrain);
|
|
28457
|
-
|
|
28515
|
+
resolve4();
|
|
28458
28516
|
};
|
|
28459
28517
|
this._stdout.once("error", onError);
|
|
28460
28518
|
if (this._stdout.write(json)) {
|
|
28461
28519
|
if (settled) return;
|
|
28462
28520
|
settled = true;
|
|
28463
28521
|
this._stdout.off("error", onError);
|
|
28464
|
-
|
|
28522
|
+
resolve4();
|
|
28465
28523
|
} else if (!settled) this._stdout.once("drain", onDrain);
|
|
28466
28524
|
});
|
|
28467
28525
|
}
|
|
@@ -28515,14 +28573,14 @@ var init_stdio = __esm({
|
|
|
28515
28573
|
*/
|
|
28516
28574
|
async whenRequestsAnswered(timeoutMs) {
|
|
28517
28575
|
if (this._closed || this._pendingRequests.size === 0) return true;
|
|
28518
|
-
return await new Promise((
|
|
28576
|
+
return await new Promise((resolve4) => {
|
|
28519
28577
|
const waiter = () => {
|
|
28520
28578
|
clearTimeout(timer);
|
|
28521
|
-
|
|
28579
|
+
resolve4(true);
|
|
28522
28580
|
};
|
|
28523
28581
|
const timer = setTimeout(() => {
|
|
28524
28582
|
this._drainWaiters = this._drainWaiters.filter((pending) => pending !== waiter);
|
|
28525
|
-
|
|
28583
|
+
resolve4(false);
|
|
28526
28584
|
}, timeoutMs);
|
|
28527
28585
|
this._drainWaiters.push(waiter);
|
|
28528
28586
|
});
|
|
@@ -28817,9 +28875,9 @@ async function mcp(argv, ctx) {
|
|
|
28817
28875
|
await handle.close();
|
|
28818
28876
|
return 0;
|
|
28819
28877
|
}
|
|
28820
|
-
await new Promise((
|
|
28821
|
-
process.stdin.once("close",
|
|
28822
|
-
process.stdin.once("end",
|
|
28878
|
+
await new Promise((resolve4) => {
|
|
28879
|
+
process.stdin.once("close", resolve4);
|
|
28880
|
+
process.stdin.once("end", resolve4);
|
|
28823
28881
|
});
|
|
28824
28882
|
return 0;
|
|
28825
28883
|
}
|
|
@@ -28857,7 +28915,7 @@ __export(migrate_pg_exports, {
|
|
|
28857
28915
|
parseMigrateArgs: () => parseMigrateArgs
|
|
28858
28916
|
});
|
|
28859
28917
|
import { existsSync as existsSync4 } from "node:fs";
|
|
28860
|
-
import { dirname as
|
|
28918
|
+
import { dirname as dirname5, resolve as resolvePath2 } from "node:path";
|
|
28861
28919
|
function coerceInt8(rows, fields, model) {
|
|
28862
28920
|
const cols = fields.filter((f) => f.dataTypeID === INT8_OID).map((f) => f.name);
|
|
28863
28921
|
if (!cols.length) return rows;
|
|
@@ -28925,7 +28983,7 @@ async function migratePg(argv, ctx) {
|
|
|
28925
28983
|
let dbUrl;
|
|
28926
28984
|
try {
|
|
28927
28985
|
layout = resolveLayout(distDir(), existsSync4);
|
|
28928
|
-
dbUrl = opts.to ? `file:${resolvePath2(opts.to)}` : resolveDbUrl(ctx.env,
|
|
28986
|
+
dbUrl = opts.to ? `file:${resolvePath2(opts.to)}` : resolveDbUrl(ctx.env, dirname5(layout.schema));
|
|
28929
28987
|
} catch (e) {
|
|
28930
28988
|
ctx.stderr(`${e.message}
|
|
28931
28989
|
`);
|
|
@@ -29392,7 +29450,7 @@ __export(pack_exports, {
|
|
|
29392
29450
|
default: () => pack
|
|
29393
29451
|
});
|
|
29394
29452
|
import { cpSync, existsSync as existsSync8, mkdirSync as mkdirSync2, readFileSync as readFileSync8, rmSync, writeFileSync as writeFileSync2 } from "node:fs";
|
|
29395
|
-
import { dirname as
|
|
29453
|
+
import { dirname as dirname6, join as join12 } from "node:path";
|
|
29396
29454
|
function depVersions(repo) {
|
|
29397
29455
|
const read = (p) => JSON.parse(readFileSync8(join12(repo, p), "utf8"));
|
|
29398
29456
|
const server = read("server/package.json"), cli = read("cli/package.json");
|
|
@@ -29442,7 +29500,7 @@ async function pack(argv, ctx) {
|
|
|
29442
29500
|
return 1;
|
|
29443
29501
|
}
|
|
29444
29502
|
const dest = join12(out, item.to);
|
|
29445
|
-
mkdirSync2(
|
|
29503
|
+
mkdirSync2(dirname6(dest), { recursive: true });
|
|
29446
29504
|
cpSync(item.from, dest, item.dir ? { recursive: true } : {});
|
|
29447
29505
|
}
|
|
29448
29506
|
writeFileSync2(join12(out, "bin/hanoman.mjs"), BIN_SHIM);
|