@indy2kro/agentenv 1.1.2 → 1.1.3

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.
Files changed (101) hide show
  1. package/dist/adapters/base.d.ts +1 -1
  2. package/dist/adapters/claude.d.ts +0 -4
  3. package/dist/adapters/claude.d.ts.map +1 -1
  4. package/dist/adapters/claude.js +5 -36
  5. package/dist/adapters/claude.js.map +1 -1
  6. package/dist/adapters/codex.d.ts.map +1 -1
  7. package/dist/adapters/codex.js +3 -8
  8. package/dist/adapters/codex.js.map +1 -1
  9. package/dist/adapters/copilot.d.ts.map +1 -1
  10. package/dist/adapters/copilot.js +3 -8
  11. package/dist/adapters/copilot.js.map +1 -1
  12. package/dist/adapters/detect.d.ts +8 -0
  13. package/dist/adapters/detect.d.ts.map +1 -1
  14. package/dist/adapters/detect.js +26 -7
  15. package/dist/adapters/detect.js.map +1 -1
  16. package/dist/adapters/opencode.d.ts.map +1 -1
  17. package/dist/adapters/opencode.js +3 -8
  18. package/dist/adapters/opencode.js.map +1 -1
  19. package/dist/adapters/rtk-delegation.d.ts +5 -2
  20. package/dist/adapters/rtk-delegation.d.ts.map +1 -1
  21. package/dist/adapters/rtk-delegation.js +48 -8
  22. package/dist/adapters/rtk-delegation.js.map +1 -1
  23. package/dist/adapters/vibe.d.ts.map +1 -1
  24. package/dist/adapters/vibe.js +2 -1
  25. package/dist/adapters/vibe.js.map +1 -1
  26. package/dist/adapters/windsurf.d.ts.map +1 -1
  27. package/dist/adapters/windsurf.js +2 -1
  28. package/dist/adapters/windsurf.js.map +1 -1
  29. package/dist/cli/json.d.ts +22 -0
  30. package/dist/cli/json.d.ts.map +1 -0
  31. package/dist/cli/json.js +17 -0
  32. package/dist/cli/json.js.map +1 -0
  33. package/dist/commands/apply.d.ts +5 -0
  34. package/dist/commands/apply.d.ts.map +1 -1
  35. package/dist/commands/apply.js +52 -15
  36. package/dist/commands/apply.js.map +1 -1
  37. package/dist/commands/completion.d.ts +4 -0
  38. package/dist/commands/completion.d.ts.map +1 -1
  39. package/dist/commands/completion.js +46 -5
  40. package/dist/commands/completion.js.map +1 -1
  41. package/dist/commands/config-edit.d.ts +0 -6
  42. package/dist/commands/config-edit.d.ts.map +1 -1
  43. package/dist/commands/config-edit.js +15 -9
  44. package/dist/commands/config-edit.js.map +1 -1
  45. package/dist/commands/setup.d.ts +15 -2
  46. package/dist/commands/setup.d.ts.map +1 -1
  47. package/dist/commands/setup.js +90 -31
  48. package/dist/commands/setup.js.map +1 -1
  49. package/dist/commands/status.d.ts +3 -0
  50. package/dist/commands/status.d.ts.map +1 -1
  51. package/dist/commands/status.js +36 -14
  52. package/dist/commands/status.js.map +1 -1
  53. package/dist/commands/uninstall.d.ts +7 -2
  54. package/dist/commands/uninstall.d.ts.map +1 -1
  55. package/dist/commands/uninstall.js +38 -13
  56. package/dist/commands/uninstall.js.map +1 -1
  57. package/dist/commands/update.d.ts.map +1 -1
  58. package/dist/commands/update.js +5 -4
  59. package/dist/commands/update.js.map +1 -1
  60. package/dist/commands/wizard.d.ts +2 -0
  61. package/dist/commands/wizard.d.ts.map +1 -1
  62. package/dist/commands/wizard.js +14 -2
  63. package/dist/commands/wizard.js.map +1 -1
  64. package/dist/config/schema.d.ts +3 -2
  65. package/dist/config/schema.d.ts.map +1 -1
  66. package/dist/config/schema.js +21 -6
  67. package/dist/config/schema.js.map +1 -1
  68. package/dist/config/scopes.d.ts +6 -0
  69. package/dist/config/scopes.d.ts.map +1 -1
  70. package/dist/config/scopes.js +8 -0
  71. package/dist/config/scopes.js.map +1 -1
  72. package/dist/generate/agentsmd.d.ts +9 -3
  73. package/dist/generate/agentsmd.d.ts.map +1 -1
  74. package/dist/generate/agentsmd.js +59 -15
  75. package/dist/generate/agentsmd.js.map +1 -1
  76. package/dist/integrations/superpowers.d.ts.map +1 -1
  77. package/dist/integrations/superpowers.js +15 -3
  78. package/dist/integrations/superpowers.js.map +1 -1
  79. package/dist/shell/detector.d.ts.map +1 -1
  80. package/dist/shell/detector.js +9 -0
  81. package/dist/shell/detector.js.map +1 -1
  82. package/dist/shell/shell-fix-state.d.ts +1 -1
  83. package/dist/shell/shell-fix-state.d.ts.map +1 -1
  84. package/dist/shell/shell-fix-state.js +3 -2
  85. package/dist/shell/shell-fix-state.js.map +1 -1
  86. package/dist/toolchain/mise.d.ts +15 -0
  87. package/dist/toolchain/mise.d.ts.map +1 -1
  88. package/dist/toolchain/mise.js +56 -4
  89. package/dist/toolchain/mise.js.map +1 -1
  90. package/dist/toolchain/rtk.d.ts.map +1 -1
  91. package/dist/toolchain/rtk.js +2 -0
  92. package/dist/toolchain/rtk.js.map +1 -1
  93. package/dist/ui/report.d.ts +13 -2
  94. package/dist/ui/report.d.ts.map +1 -1
  95. package/dist/ui/report.js +24 -4
  96. package/dist/ui/report.js.map +1 -1
  97. package/dist/utils/fs-retry.d.ts +11 -1
  98. package/dist/utils/fs-retry.d.ts.map +1 -1
  99. package/dist/utils/fs-retry.js +43 -4
  100. package/dist/utils/fs-retry.js.map +1 -1
  101. package/package.json +2 -1
@@ -16,8 +16,19 @@ export declare function printValidation(report: ValidationReportView): void;
16
16
  * given "not applying" line and return false. Callers set the exit code.
17
17
  */
18
18
  export declare function reportValidation(report: ValidationReportView, notApplying: string): boolean;
19
- /** Apply/setup result tail: colorized messages, then themed errors. */
20
- export declare function printMessages(messages: string[], errors: string[]): void;
19
+ export interface TimelineEntry {
20
+ kind: 'message' | 'error';
21
+ text: string;
22
+ }
23
+ /** An error line that stays distinguishable without color (NO_COLOR, screen readers). */
24
+ export declare function formatErrorLine(error: string): string;
25
+ /**
26
+ * Apply/setup result tail: colorized messages and themed errors. With a
27
+ * `timeline` they are printed in the order the steps produced them, so a
28
+ * failure appears next to the step it belongs to; without one, messages come
29
+ * first and errors last. Errors always carry a glyph, not just red.
30
+ */
31
+ export declare function printMessages(messages: string[], errors: string[], timeline?: TimelineEntry[]): void;
21
32
  /**
22
33
  * Human duration for the end-of-run line: sub-second in whole milliseconds,
23
34
  * otherwise seconds to one decimal (or `Xm Ys` past a minute). Non-finite and
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/ui/report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAGlE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAO3F;AAED,uEAAuE;AACvE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAGxE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAKN"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/ui/report.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAGlE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAO3F;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,CAAC,EAAE,aAAa,EAAE,GACzB,IAAI,CAWN;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAKN"}
package/dist/ui/report.js CHANGED
@@ -1,4 +1,4 @@
1
- import { colorizeLine, theme } from './theme.js';
1
+ import { colorizeLine, failGlyph, theme } from './theme.js';
2
2
  import { resolveResultLine } from './output.js';
3
3
  /** The one config-path line every mutating command prints after resolving its file. */
4
4
  export function printConfigPath(configPath) {
@@ -23,12 +23,32 @@ export function reportValidation(report, notApplying) {
23
23
  }
24
24
  return true;
25
25
  }
26
- /** Apply/setup result tail: colorized messages, then themed errors. */
27
- export function printMessages(messages, errors) {
26
+ /** An error line that stays distinguishable without color (NO_COLOR, screen readers). */
27
+ export function formatErrorLine(error) {
28
+ const glyph = failGlyph();
29
+ return error.trimStart().startsWith(glyph) ? error : `${glyph} ${error}`;
30
+ }
31
+ /**
32
+ * Apply/setup result tail: colorized messages and themed errors. With a
33
+ * `timeline` they are printed in the order the steps produced them, so a
34
+ * failure appears next to the step it belongs to; without one, messages come
35
+ * first and errors last. Errors always carry a glyph, not just red.
36
+ */
37
+ export function printMessages(messages, errors, timeline) {
38
+ const printError = (error) => console.error(theme.fail(formatErrorLine(error)));
39
+ if (timeline && timeline.length > 0) {
40
+ for (const entry of timeline) {
41
+ if (entry.kind === 'error')
42
+ printError(entry.text);
43
+ else
44
+ console.log(colorizeLine(entry.text));
45
+ }
46
+ return;
47
+ }
28
48
  for (const message of messages)
29
49
  console.log(colorizeLine(message));
30
50
  for (const error of errors)
31
- console.error(theme.fail(error));
51
+ printError(error);
32
52
  }
33
53
  /**
34
54
  * Human duration for the end-of-run line: sub-second in whole milliseconds,
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/ui/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAYhD,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,MAA4B;IAC1D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IACtF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA4B,EAAE,WAAmB;IAChF,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,MAAgB;IAChE,KAAK,MAAM,OAAO,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,KAAK,YAAY,GAAG,EAAE,GAAG,CAAC;AACnE,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,YAAY,CAAC,QAAwB,EAAE,EAAU;IAC/D,OAAO,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,OAAO,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,QAAwB,EACxB,QAAgB,EAChB,OAAgB,EAChB,SAAkB;IAElB,OAAO,CAAC,GAAG,CAAC,KAAK,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/ui/report.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,12 @@ export interface RetryFs {
17
17
  writeFileSync: (filePath: string, content: string) => void;
18
18
  statSize: (filePath: string) => number | null;
19
19
  }
20
+ /**
21
+ * Write to a sibling temp file, then rename over the target, so an interrupted
22
+ * write can never leave a truncated file. Writes through a symlink (dotfile
23
+ * managers) to its real target and keeps the existing file's mode.
24
+ */
25
+ export declare function atomicWriteFileSync(filePath: string, content: string): void;
20
26
  export declare const defaultRetryFs: RetryFs;
21
27
  export interface WriteRetryOptions {
22
28
  /** Max write attempts (default 5). */
@@ -47,8 +53,12 @@ export declare function writeFileWithRetry(filePath: string, content: string, op
47
53
  * `filePath` doesn't exist yet (nothing to back up: this is a fresh file
48
54
  * agentenv is creating, not modifying). Backing up is advisory: a failure
49
55
  * here (e.g. a locked filesystem) must never block the real write.
56
+ * Returns the backup path when one was just created (so callers can tell the
57
+ * user), otherwise null.
50
58
  */
51
- export declare function backupBeforeFirstEdit(filePath: string): void;
59
+ export declare function backupBeforeFirstEdit(filePath: string): string | null;
60
+ /** Where backupBeforeFirstEdit() keeps the pre-agentenv copy of `filePath`. */
61
+ export declare function backupPathFor(filePath: string): string;
52
62
  export interface WriteVerifyResult {
53
63
  success: boolean;
54
64
  message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fs-retry.d.ts","sourceRoot":"","sources":["../../src/utils/fs-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,MAAM,WAAW,OAAO;IACtB,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,eAAO,MAAM,cAAc,EAAE,OAS5B,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK3D;AAOD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,EAC5B,MAAM,GAAE,OAAwB,GAC/B,IAAI,CAcN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAS5D;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,EAC5B,MAAM,GAAE,OAAwB,GAC/B,iBAAiB,CAwBnB"}
1
+ {"version":3,"file":"fs-retry.d.ts","sourceRoot":"","sources":["../../src/utils/fs-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,OAAO;IACtB,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAwB3E;AAED,eAAO,MAAM,cAAc,EAAE,OAS5B,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAKD,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK3D;AAOD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,EAC5B,MAAM,GAAE,OAAwB,GAC/B,IAAI,CAcN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,EAC5B,MAAM,GAAE,OAAwB,GAC/B,iBAAiB,CAwBnB"}
@@ -14,8 +14,39 @@
14
14
  * real filesystem.
15
15
  */
16
16
  import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ /**
19
+ * Write to a sibling temp file, then rename over the target, so an interrupted
20
+ * write can never leave a truncated file. Writes through a symlink (dotfile
21
+ * managers) to its real target and keeps the existing file's mode.
22
+ */
23
+ export function atomicWriteFileSync(filePath, content) {
24
+ let target = filePath;
25
+ let mode;
26
+ try {
27
+ target = fs.realpathSync(filePath);
28
+ mode = fs.statSync(target).mode & 0o777;
29
+ }
30
+ catch {
31
+ // Target doesn't exist yet: write it fresh.
32
+ }
33
+ const tmp = path.join(path.dirname(target), `.${path.basename(target)}.agentenv-${process.pid}-${Date.now()}.tmp`);
34
+ try {
35
+ fs.writeFileSync(tmp, content, mode === undefined ? undefined : { mode });
36
+ fs.renameSync(tmp, target);
37
+ }
38
+ catch (err) {
39
+ try {
40
+ fs.rmSync(tmp, { force: true });
41
+ }
42
+ catch {
43
+ // best effort
44
+ }
45
+ throw err;
46
+ }
47
+ }
17
48
  export const defaultRetryFs = {
18
- writeFileSync: (filePath, content) => fs.writeFileSync(filePath, content),
49
+ writeFileSync: atomicWriteFileSync,
19
50
  statSize: (filePath) => {
20
51
  try {
21
52
  return fs.statSync(filePath).size;
@@ -75,20 +106,28 @@ export function writeFileWithRetry(filePath, content, opts = {}, fsImpl = defaul
75
106
  * `filePath` doesn't exist yet (nothing to back up: this is a fresh file
76
107
  * agentenv is creating, not modifying). Backing up is advisory: a failure
77
108
  * here (e.g. a locked filesystem) must never block the real write.
109
+ * Returns the backup path when one was just created (so callers can tell the
110
+ * user), otherwise null.
78
111
  */
79
112
  export function backupBeforeFirstEdit(filePath) {
80
113
  try {
81
114
  if (!fs.existsSync(filePath))
82
- return;
83
- const backupPath = `${filePath}.agentenv-backup`;
115
+ return null;
116
+ const backupPath = backupPathFor(filePath);
84
117
  if (fs.existsSync(backupPath))
85
- return;
118
+ return null;
86
119
  fs.copyFileSync(filePath, backupPath);
120
+ return backupPath;
87
121
  }
88
122
  catch {
89
123
  // Advisory only — never block the real write on a failed backup.
124
+ return null;
90
125
  }
91
126
  }
127
+ /** Where backupBeforeFirstEdit() keeps the pre-agentenv copy of `filePath`. */
128
+ export function backupPathFor(filePath) {
129
+ return `${filePath}.agentenv-backup`;
130
+ }
92
131
  /**
93
132
  * Write `content` and confirm it persisted: the file must exist after the
94
133
  * write, and, for non-empty content, be non-empty. Any mismatch is reported as
@@ -1 +1 @@
1
- {"version":3,"file":"fs-retry.js","sourceRoot":"","sources":["../../src/utils/fs-retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-retry.js","sourceRoot":"","sources":["../../src/utils/fs-retry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indy2kro/agentenv",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "CLI for configuring a consistent, capable shell environment for AI coding agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,6 +28,7 @@
28
28
  "dev": "ts-node-dev src/index.ts",
29
29
  "test": "npm run build && cd dist && node --test",
30
30
  "test:coverage": "npm run build && cd dist && node --experimental-test-coverage --test-coverage-lines=80 --test-coverage-branches=75 --test-coverage-functions=80 --test",
31
+ "test:coverage:files": "npm run build && node scripts/check-coverage.mjs",
31
32
  "smoke": "npm run build && node scripts/smoke.mjs",
32
33
  "smoke:real": "npm run build && node scripts/smoke.mjs --real",
33
34
  "lint": "eslint src --max-warnings 0",