@warpgogol/forge 0.12.1 → 0.13.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/AGENTS.md +8 -6
- package/dist/os/mission/handlers/archive.d.ts.map +1 -1
- package/dist/os/mission/handlers/archive.js +3 -1
- package/dist/os/mission/handlers/archive.js.map +1 -1
- package/dist/os/session/handlers/save.d.ts.map +1 -1
- package/dist/os/session/handlers/save.js +16 -4
- package/dist/os/session/handlers/save.js.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +6 -4
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -1
- package/dist/src/migration-adapters/git-utils.d.ts.map +1 -1
- package/dist/src/migration-adapters/git-utils.js +14 -4
- package/dist/src/migration-adapters/git-utils.js.map +1 -1
- package/dist/src/utils/fs-trash-sync.d.ts +2 -0
- package/dist/src/utils/fs-trash-sync.d.ts.map +1 -0
- package/dist/src/utils/fs-trash-sync.js +34 -0
- package/dist/src/utils/fs-trash-sync.js.map +1 -0
- package/dist/src/utils/fs-trash.d.ts +2 -0
- package/dist/src/utils/fs-trash.d.ts.map +1 -0
- package/dist/src/utils/fs-trash.js +24 -0
- package/dist/src/utils/fs-trash.js.map +1 -0
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -0
- package/dist/src/utils/index.js.map +1 -1
- package/package.json +3 -2
package/AGENTS.md
CHANGED
|
@@ -30,7 +30,7 @@ Portable governance skills and command modules extracted from site-kernel (RFC-0
|
|
|
30
30
|
|
|
31
31
|
When archiving terminal artifacts, prefer the `docs.archive` umbrella command over individual `rfc.archive`, `adr.archive`, `plan.archive`, `audit.archive`, `session.archive`, `mission.archive` commands. The umbrella command runs all six in sequence and prevents leaving audits/plans/sessions/missions unarchived when the operator's intent is to clean up all terminal artifacts. Use individual commands only when the operator explicitly asks for a single domain (e.g. "archive only RFCs").
|
|
32
32
|
|
|
33
|
-
- **Post-rename cleanup for `fs.rename` on watched directories:** When an archive handler uses `fs.rename` to move a directory that an IDE or file watcher is tracking (e.g. mission workpiece with an open `.astro/` cache), the watcher may recreate stale cache at the source path after the rename completes. Always add a post-rename cleanup check
|
|
33
|
+
- **Post-rename cleanup for `fs.rename` on watched directories:** When an archive handler uses `fs.rename` to move a directory that an IDE or file watcher is tracking (e.g. mission workpiece with an open `.astro/` cache), the watcher may recreate stale cache at the source path after the rename completes. Always add a post-rename cleanup check using `trashPath` from `utils/fs-trash.ts`: `if (existsSync(sourcePath)) { await trashPath(sourcePath); }` after the `fs.rename` call. See `os/mission/handlers/archive.ts` `moveMissionDir` for the reference implementation.
|
|
34
34
|
|
|
35
35
|
## Skills
|
|
36
36
|
|
|
@@ -283,12 +283,14 @@ To publish a new version of `@warpgogol/forge` to NPM:
|
|
|
283
283
|
|
|
284
284
|
1. Bump `version` in `packages/forge/package.json` (semver: minor for new skills/features, patch for fixes).
|
|
285
285
|
2. Bump `forge.syncedVersion` in `forge.yaml` to match.
|
|
286
|
-
3. Run `pnpm --filter @warpgogol/forge
|
|
287
|
-
4.
|
|
288
|
-
5. Run `pnpm --filter @warpgogol/forge publish --access public` — publishes to `@warpgogol/forge` on npmjs.org. **Do NOT use `npm publish`** — it fails during `prepublishOnly` because `tsc` cannot resolve workspace dependencies (`@warpgogol/share/fs`, `@warpgogol/fingerprint`) outside the pnpm workspace context. `pnpm publish` handles workspace dependencies correctly.
|
|
289
|
-
6. Commit version bumps: `git add packages/forge/package.json forge.yaml && git commit -m "release: @warpgogol/forge@<version>"`.
|
|
286
|
+
3. Run `pnpm --filter @warpgogol/forge publish --access public --no-git-checks` — publishes to `@warpgogol/forge` on npmjs.org.
|
|
287
|
+
4. Commit version bumps: `git add packages/forge/package.json forge.yaml && git commit -m "release: @warpgogol/forge@<version>"`.
|
|
290
288
|
|
|
291
|
-
The `prepublishOnly` script runs `clean → build → publish-check` automatically
|
|
289
|
+
The `prepublishOnly` script runs `clean → build → publish-check → strip-workspace-deps` automatically. **`strip-workspace-deps.mjs`** removes `@warpgogol/*` `workspace:*` dependencies from `package.json` before publish — these packages are not on npm and would make the published package uninstallable. The `postpublish` script restores the original `package.json` via `git checkout -- ./package.json`.
|
|
290
|
+
|
|
291
|
+
**Do NOT use `npm publish`** — it fails during `prepublishOnly` because `tsc` cannot resolve workspace dependencies (`@warpgogol/share/fs`, `@warpgogol/fingerprint`) outside the pnpm workspace context. `pnpm publish` handles workspace dependencies correctly.
|
|
292
|
+
|
|
293
|
+
**Workspace deps must use dynamic imports.** `@warpgogol/*` packages that are not published to npm MUST be imported via dynamic `import()` (see `os/core/handlers/workspace-deps.ts`), never static `import`. Static imports would fail at runtime when forge is installed standalone from npm. The `workspace-deps.ts` helper caches the dynamic import and throws a clear error message if the packages are missing.
|
|
292
294
|
|
|
293
295
|
### `.npmrc` token precedence
|
|
294
296
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,aAAa,CAAC;AAiErB,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,CA2LnD"}
|
|
@@ -15,12 +15,14 @@ archive subdirectories back to missions/.
|
|
|
15
15
|
<CHANGE_SUMMARY>
|
|
16
16
|
<item>RFC-0573: implement mission.archive command.</item>
|
|
17
17
|
<item>RFC-0573: extract moveMissionDir helper to eliminate Phase 1/2 duplication.</item>
|
|
18
|
+
<item>Replace fs.rm with trashPath for post-rename cleanup (trash bin for LLM-initiated deletions).</item>
|
|
18
19
|
</CHANGE_SUMMARY>
|
|
19
20
|
*/
|
|
20
21
|
import fs from "node:fs/promises";
|
|
21
22
|
import { existsSync } from "node:fs";
|
|
22
23
|
import path from "node:path";
|
|
23
24
|
import { parse as parseYaml } from "yaml";
|
|
25
|
+
import { trashPath } from "../../../src/utils/fs-trash.js";
|
|
24
26
|
import { MISSIONS_DIR, ARCHIVE_DIR_NAME, MISSION_TERMINAL_STATUSES, } from "../types.js";
|
|
25
27
|
async function readMissionState(missionDir) {
|
|
26
28
|
const manifestPath = path.join(missionDir, "mission.yaml");
|
|
@@ -60,7 +62,7 @@ async function moveMissionDir(sourcePath, targetPath, targetParentDir, missionId
|
|
|
60
62
|
// directories (e.g. .astro/) at the source path after the rename.
|
|
61
63
|
// Remove the resurrected source so it doesn't leave orphan directories.
|
|
62
64
|
if (existsSync(sourcePath)) {
|
|
63
|
-
await
|
|
65
|
+
await trashPath(sourcePath);
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../../os/mission/handlers/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AA2HrB,wBAAsB,cAAc,CAClC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,GAAG;IAAE,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAAC,CA0LjF"}
|
|
@@ -12,6 +12,7 @@ Deterministic only — no LLM/intelligent annotation (that is fo-session-save sk
|
|
|
12
12
|
</MODULE_CONTRACT>
|
|
13
13
|
<CHANGE_SUMMARY>
|
|
14
14
|
<item>RFC-0537: implement session.save command handler.</item>
|
|
15
|
+
<item>Replace fs.unlink with trashPath for raw file deletion (trash bin for LLM-initiated deletions).</item>
|
|
15
16
|
</CHANGE_SUMMARY>
|
|
16
17
|
*/
|
|
17
18
|
import fs from "node:fs/promises";
|
|
@@ -19,6 +20,7 @@ import path from "node:path";
|
|
|
19
20
|
import { createHash } from "node:crypto";
|
|
20
21
|
import YAML from "yaml";
|
|
21
22
|
import { parseAtif, messagesToTranscriptMarkdown } from "../atif-parser.js";
|
|
23
|
+
import { trashPath } from "../../../src/utils/fs-trash.js";
|
|
22
24
|
import { SESSION_DIR, SESSION_RAW_SUBDIR, } from "../types.js";
|
|
23
25
|
const RFC_PATTERN = /\bRFC-\d{4}\b/g;
|
|
24
26
|
const FILE_PATH_PATTERN = /\b(?:packages|docs|services|systems|tools|scripts)\/[^\s"'`<>|]+/g;
|
|
@@ -26,8 +28,14 @@ const COMMIT_HASH_PATTERN = /\b[0-9a-f]{7,40}\b/g;
|
|
|
26
28
|
const COMMAND_PATTERN = /\b(?:session|rfc|adr|plan|audit|docs|mission|forge|compass|werkstatt|spec|naming|workflow|bordbuch|sternsystem|release)\.\w+/g;
|
|
27
29
|
const TYPE_INDICATORS = [
|
|
28
30
|
{ type: "grilling", patterns: [/grilling/i, /\/grilling/i, /fo-idea.*plan/i] },
|
|
29
|
-
{
|
|
30
|
-
|
|
31
|
+
{
|
|
32
|
+
type: "mission",
|
|
33
|
+
patterns: [/mission\.open/i, /mission\.materialize/i, /mission\.reconcile/i, /mission\.close/i],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: "implementation",
|
|
37
|
+
patterns: [/rfc\.implement\.stamp/i, /implement:\s/i, /fo-idea-implement/i],
|
|
38
|
+
},
|
|
31
39
|
{ type: "review", patterns: [/fo-review/i, /review:\s/i] },
|
|
32
40
|
{ type: "fix", patterns: [/fo-fix/i, /fix:\s/i] },
|
|
33
41
|
];
|
|
@@ -134,7 +142,11 @@ export async function runSessionSave(input, context) {
|
|
|
134
142
|
catch {
|
|
135
143
|
throw new Error(`Raw file not found: ${rawFileFlag}`);
|
|
136
144
|
}
|
|
137
|
-
rawFiles = [
|
|
145
|
+
rawFiles = [
|
|
146
|
+
path.isAbsolute(rawFileFlag)
|
|
147
|
+
? path.relative(rawDirPath, resolvedPath)
|
|
148
|
+
: rawFileFlag.replace(`${SESSION_DIR}/${SESSION_RAW_SUBDIR}/`, ""),
|
|
149
|
+
];
|
|
138
150
|
}
|
|
139
151
|
else {
|
|
140
152
|
try {
|
|
@@ -224,7 +236,7 @@ export async function runSessionSave(input, context) {
|
|
|
224
236
|
// Delete raw file unless --keep-raw
|
|
225
237
|
if (!keepRaw) {
|
|
226
238
|
try {
|
|
227
|
-
await
|
|
239
|
+
await trashPath(rawFilePath);
|
|
228
240
|
}
|
|
229
241
|
catch (err) {
|
|
230
242
|
if (err.code !== "ENOENT") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../../os/session/handlers/save.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"werkstatt-lock-recover.d.ts","sourceRoot":"","sources":["../../../../os/werkstatt/handlers/werkstatt-lock-recover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"werkstatt-lock-recover.d.ts","sourceRoot":"","sources":["../../../../os/werkstatt/handlers/werkstatt-lock-recover.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAgFD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC,CA6DvD"}
|
|
@@ -10,11 +10,13 @@ Classifies and cleans stale locks and staging artifacts (RFC-0362 §8).</purpose
|
|
|
10
10
|
<CHANGE_SUMMARY>
|
|
11
11
|
<item>RFC-0362: initial lock.recover command handler.</item>
|
|
12
12
|
<item>RFC-0556: moved from @warpgogol/site-kernel-handoff to @warpgogol/forge for autonomous mode.</item>
|
|
13
|
+
<item>Replace fs.unlink/fs.rm with trashPath for artifact cleanup (trash bin for LLM-initiated deletions).</item>
|
|
13
14
|
</CHANGE_SUMMARY>
|
|
14
15
|
*/
|
|
15
16
|
import fs from "node:fs/promises";
|
|
16
17
|
import { existsSync } from "node:fs";
|
|
17
18
|
import path from "node:path";
|
|
19
|
+
import { trashPath } from "../../../src/utils/fs-trash.js";
|
|
18
20
|
import { readAllLocks, removeStaleLock, acquireLock, releaseLock } from "./lock.js";
|
|
19
21
|
function flagString(input, key) {
|
|
20
22
|
const v = input.flags[key];
|
|
@@ -41,8 +43,8 @@ async function classifyArtifacts(workspaceRoot, purge) {
|
|
|
41
43
|
if (entry.endsWith(".tmp")) {
|
|
42
44
|
if (purge) {
|
|
43
45
|
try {
|
|
44
|
-
await
|
|
45
|
-
recovered.push({ artifact: relPath, action: "
|
|
46
|
+
await trashPath(entryPath);
|
|
47
|
+
recovered.push({ artifact: relPath, action: "trashed-tmp" });
|
|
46
48
|
}
|
|
47
49
|
catch (err) {
|
|
48
50
|
failed.push({ artifact: relPath, error: err.message });
|
|
@@ -55,8 +57,8 @@ async function classifyArtifacts(workspaceRoot, purge) {
|
|
|
55
57
|
else if (entry.includes(".staging-")) {
|
|
56
58
|
if (purge) {
|
|
57
59
|
try {
|
|
58
|
-
await
|
|
59
|
-
recovered.push({ artifact: relPath, action: "
|
|
60
|
+
await trashPath(entryPath);
|
|
61
|
+
recovered.push({ artifact: relPath, action: "trashed-staging" });
|
|
60
62
|
}
|
|
61
63
|
catch (err) {
|
|
62
64
|
failed.push({ artifact: relPath, error: err.message });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"werkstatt-lock-recover.js","sourceRoot":"","sources":["../../../../os/werkstatt/handlers/werkstatt-lock-recover.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"werkstatt-lock-recover.js","sourceRoot":"","sources":["../../../../os/werkstatt/handlers/werkstatt-lock-recover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../../src/migration-adapters/git-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../../src/migration-adapters/git-utils.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,IAAI,CAsCN"}
|
|
@@ -8,26 +8,36 @@
|
|
|
8
8
|
</MODULE_CONTRACT>
|
|
9
9
|
<CHANGE_SUMMARY>
|
|
10
10
|
<item>RFC-0547: extract shared postSetup git logic from duplicated adapter implementations.</item>
|
|
11
|
+
<item>Replace fs.rmSync with trashSync for patch directory cleanup (trash bin for LLM-initiated deletions).</item>
|
|
11
12
|
</CHANGE_SUMMARY>
|
|
12
13
|
*/
|
|
13
14
|
import fs from "node:fs";
|
|
14
15
|
import path from "node:path";
|
|
15
16
|
import { execFileSync } from "node:child_process";
|
|
17
|
+
import { trashSync } from "../utils/fs-trash-sync.js";
|
|
16
18
|
export function runPostSetup(sourceDir, targetDir, analysis) {
|
|
17
19
|
const gitDir = path.join(targetDir, ".git");
|
|
18
20
|
if (analysis.gitHistory) {
|
|
19
21
|
try {
|
|
20
22
|
const patchDir = path.join(targetDir, ".forge-migration-patches");
|
|
21
23
|
fs.mkdirSync(patchDir, { recursive: true });
|
|
22
|
-
execFileSync("git", ["-C", sourceDir, "format-patch", "--all", "-o", patchDir], {
|
|
24
|
+
execFileSync("git", ["-C", sourceDir, "format-patch", "--all", "-o", patchDir], {
|
|
25
|
+
stdio: "pipe",
|
|
26
|
+
});
|
|
23
27
|
execFileSync("git", ["init"], { cwd: targetDir, stdio: "pipe" });
|
|
24
|
-
const patches = fs
|
|
28
|
+
const patches = fs
|
|
29
|
+
.readdirSync(patchDir)
|
|
30
|
+
.filter((f) => f.endsWith(".patch"))
|
|
31
|
+
.sort();
|
|
25
32
|
if (patches.length > 0) {
|
|
26
33
|
for (const patch of patches) {
|
|
27
|
-
execFileSync("git", ["am", path.join(patchDir, patch)], {
|
|
34
|
+
execFileSync("git", ["am", path.join(patchDir, patch)], {
|
|
35
|
+
cwd: targetDir,
|
|
36
|
+
stdio: "pipe",
|
|
37
|
+
});
|
|
28
38
|
}
|
|
29
39
|
}
|
|
30
|
-
|
|
40
|
+
trashSync(patchDir);
|
|
31
41
|
return;
|
|
32
42
|
}
|
|
33
43
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../../src/migration-adapters/git-utils.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../../src/migration-adapters/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;EAYE;AAEF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,MAAM,UAAU,YAAY,CAC1B,SAAiB,EACjB,SAAiB,EACjB,QAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;YAClE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;gBAC9E,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,EAAE;iBACf,WAAW,CAAC,QAAQ,CAAC;iBACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACnC,IAAI,EAAE,CAAC;YACV,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE;wBACtD,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,MAAM;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,SAAS,CAAC,QAAQ,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,uEAAuE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC1H,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-trash-sync.d.ts","sourceRoot":"","sources":["../../../src/utils/fs-trash-sync.ts"],"names":[],"mappings":"AAkBA,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAkBlD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>Synchronous trash-can deletion — shells out to `trash-put` (trash-cli)
|
|
4
|
+
on Linux/macOS and PowerShell Recycle Bin on Windows. Used by synchronous
|
|
5
|
+
code paths that cannot use the async `trash` npm package.</purpose>
|
|
6
|
+
<non-goals>
|
|
7
|
+
<item>Do not use for async code paths — use trashPath from fs-trash.ts instead.</item>
|
|
8
|
+
<item>Requires `trash-put` (trash-cli) installed on Linux/macOS. On Windows, uses PowerShell Recycle Bin API (no external binary needed).</item>
|
|
9
|
+
</non-goals>
|
|
10
|
+
</MODULE_CONTRACT>
|
|
11
|
+
<CHANGE_SUMMARY>
|
|
12
|
+
<item>Initial implementation: sync wrapper for `trash-put` (Linux/macOS) and PowerShell Recycle Bin (Windows).</item>
|
|
13
|
+
</CHANGE_SUMMARY>
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, statSync } from "node:fs";
|
|
16
|
+
import { execFileSync } from "node:child_process";
|
|
17
|
+
export function trashSync(targetPath) {
|
|
18
|
+
if (!existsSync(targetPath))
|
|
19
|
+
return;
|
|
20
|
+
if (process.platform === "win32") {
|
|
21
|
+
const isDir = statSync(targetPath).isDirectory();
|
|
22
|
+
const method = isDir ? "DeleteDirectory" : "DeleteFile";
|
|
23
|
+
const escaped = targetPath.replace(/'/g, "''");
|
|
24
|
+
execFileSync("powershell", [
|
|
25
|
+
"-NoProfile",
|
|
26
|
+
"-Command",
|
|
27
|
+
`Add-Type -AssemblyName Microsoft.VisualBasic; [Microsoft.VisualBasic.FileIO.FileSystem]::${method}('${escaped}', 'OnlyErrorDialogs', 'SendToRecycleBin')`,
|
|
28
|
+
], { stdio: "pipe" });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
execFileSync("trash-put", [targetPath], { stdio: "pipe" });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=fs-trash-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-trash-sync.js","sourceRoot":"","sources":["../../../src/utils/fs-trash-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;EAaE;AAEF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,SAAS,CAAC,UAAkB;IAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC;QACxD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/C,YAAY,CACV,YAAY,EACZ;YACE,YAAY;YACZ,UAAU;YACV,4FAA4F,MAAM,KAAK,OAAO,4CAA4C;SAC3J,EACD,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-trash.d.ts","sourceRoot":"","sources":["../../../src/utils/fs-trash.ts"],"names":[],"mappings":"AAoBA,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>Trash-can deletion primitive — moves files/directories to the OS
|
|
4
|
+
trash/recycle bin instead of permanently deleting them. Uses the `trash`
|
|
5
|
+
npm package which implements the FreeDesktop.org Trash specification on
|
|
6
|
+
Linux (no external `trash-put` binary required) and the Recycle Bin on
|
|
7
|
+
Windows.</purpose>
|
|
8
|
+
<non-goals>
|
|
9
|
+
<item>Do not implement trash eviction or retention policies — the OS manages that.</item>
|
|
10
|
+
<item>Do not use for ephemeral cleanup (lock files, temp files, atomic write leftovers) — those are system-internal and should use fs.unlink directly.</item>
|
|
11
|
+
</non-goals>
|
|
12
|
+
</MODULE_CONTRACT>
|
|
13
|
+
<CHANGE_SUMMARY>
|
|
14
|
+
<item>Initial implementation: wraps npm `trash` package with glob disabled for safe path handling.</item>
|
|
15
|
+
</CHANGE_SUMMARY>
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync } from "node:fs";
|
|
18
|
+
import trash from "trash";
|
|
19
|
+
export async function trashPath(targetPath) {
|
|
20
|
+
if (!existsSync(targetPath))
|
|
21
|
+
return;
|
|
22
|
+
await trash(targetPath, { glob: false });
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=fs-trash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-trash.js","sourceRoot":"","sources":["../../../src/utils/fs-trash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO;IACpC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -4,4 +4,6 @@ export { GENERATED_MARKER, hasGeneratedMarker, stripGeneratedMarker, buildGenera
|
|
|
4
4
|
export { toKebabCase } from "./string-utils.ts";
|
|
5
5
|
export { collectFiles, fileExists, type CollectFilesOptions } from "./fs.ts";
|
|
6
6
|
export { byteHash } from "./hash.ts";
|
|
7
|
+
export { trashPath } from "./fs-trash.ts";
|
|
8
|
+
export { trashSync } from "./fs-trash-sync.ts";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/src/utils/index.js
CHANGED
|
@@ -16,4 +16,6 @@ export { GENERATED_MARKER, hasGeneratedMarker, stripGeneratedMarker, buildGenera
|
|
|
16
16
|
export { toKebabCase } from "./string-utils.js";
|
|
17
17
|
export { collectFiles, fileExists } from "./fs.js";
|
|
18
18
|
export { byteHash } from "./hash.js";
|
|
19
|
+
export { trashPath } from "./fs-trash.js";
|
|
20
|
+
export { trashSync } from "./fs-trash-sync.js";
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,eAAe,EAA+B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,GAG/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;EAWE;AAEF,OAAO,EAAE,eAAe,EAA+B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,GAG/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warpgogol/forge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -131,6 +131,7 @@
|
|
|
131
131
|
],
|
|
132
132
|
"dependencies": {
|
|
133
133
|
"@aws-sdk/client-s3": "^3.700.0",
|
|
134
|
+
"trash": "^10.1.1",
|
|
134
135
|
"yaml": "^2.9.0",
|
|
135
136
|
"zod": "^4.4.3"
|
|
136
137
|
},
|
|
@@ -141,7 +142,7 @@
|
|
|
141
142
|
"vitest": "^4.1.10"
|
|
142
143
|
},
|
|
143
144
|
"engines": {
|
|
144
|
-
"node": ">=
|
|
145
|
+
"node": ">=20.0.0"
|
|
145
146
|
},
|
|
146
147
|
"publishConfig": {
|
|
147
148
|
"access": "public"
|