@det-acp/core 0.2.0 → 0.3.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.
Files changed (57) hide show
  1. package/README.md +332 -213
  2. package/dist/engine/action-registry.d.ts.map +1 -1
  3. package/dist/engine/action-registry.js +20 -0
  4. package/dist/engine/action-registry.js.map +1 -1
  5. package/dist/index.d.ts +11 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +11 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/tools/archive-extract.d.ts +45 -0
  10. package/dist/tools/archive-extract.d.ts.map +1 -0
  11. package/dist/tools/archive-extract.js +246 -0
  12. package/dist/tools/archive-extract.js.map +1 -0
  13. package/dist/tools/directory-create.d.ts +33 -0
  14. package/dist/tools/directory-create.d.ts.map +1 -0
  15. package/dist/tools/directory-create.js +145 -0
  16. package/dist/tools/directory-create.js.map +1 -0
  17. package/dist/tools/directory-list.d.ts +32 -0
  18. package/dist/tools/directory-list.d.ts.map +1 -0
  19. package/dist/tools/directory-list.js +114 -0
  20. package/dist/tools/directory-list.js.map +1 -0
  21. package/dist/tools/env-read.d.ts +31 -0
  22. package/dist/tools/env-read.d.ts.map +1 -0
  23. package/dist/tools/env-read.js +108 -0
  24. package/dist/tools/env-read.js.map +1 -0
  25. package/dist/tools/file-copy.d.ts +30 -0
  26. package/dist/tools/file-copy.d.ts.map +1 -0
  27. package/dist/tools/file-copy.js +170 -0
  28. package/dist/tools/file-copy.js.map +1 -0
  29. package/dist/tools/file-delete.d.ts +27 -0
  30. package/dist/tools/file-delete.d.ts.map +1 -0
  31. package/dist/tools/file-delete.js +143 -0
  32. package/dist/tools/file-delete.js.map +1 -0
  33. package/dist/tools/file-move.d.ts +30 -0
  34. package/dist/tools/file-move.d.ts.map +1 -0
  35. package/dist/tools/file-move.js +167 -0
  36. package/dist/tools/file-move.js.map +1 -0
  37. package/dist/tools/git-commit.d.ts +33 -0
  38. package/dist/tools/git-commit.d.ts.map +1 -0
  39. package/dist/tools/git-commit.js +176 -0
  40. package/dist/tools/git-commit.js.map +1 -0
  41. package/dist/tools/git-status.d.ts +29 -0
  42. package/dist/tools/git-status.d.ts.map +1 -0
  43. package/dist/tools/git-status.js +159 -0
  44. package/dist/tools/git-status.js.map +1 -0
  45. package/dist/tools/network-dns.d.ts +50 -0
  46. package/dist/tools/network-dns.d.ts.map +1 -0
  47. package/dist/tools/network-dns.js +122 -0
  48. package/dist/tools/network-dns.js.map +1 -0
  49. package/dist/types.d.ts +1 -1
  50. package/dist/types.d.ts.map +1 -1
  51. package/examples/coding-agent.policy.yaml +44 -0
  52. package/examples/data-analyst.policy.yaml +160 -0
  53. package/examples/devops-deploy.policy.yaml +68 -0
  54. package/examples/infrastructure-manager.policy.yaml +209 -0
  55. package/examples/security-audit.policy.yaml +152 -0
  56. package/examples/video-upscaler.policy.yaml +45 -0
  57. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"action-registry.d.ts","sourceRoot":"","sources":["../../src/engine/action-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG3E,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAkC;IAElD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAOpC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAcxE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAQtC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;CAKvC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAgBrE"}
1
+ {"version":3,"file":"action-registry.d.ts","sourceRoot":"","sources":["../../src/engine/action-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG3E,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAkC;IAElD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAOpC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI1C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAcxE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAQtC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;CAKvC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAoCrE"}
@@ -80,16 +80,36 @@ export class ActionRegistry {
80
80
  export async function createDefaultRegistry() {
81
81
  const { FileReadAdapter } = await import('../tools/file-read.js');
82
82
  const { FileWriteAdapter } = await import('../tools/file-write.js');
83
+ const { FileDeleteAdapter } = await import('../tools/file-delete.js');
84
+ const { FileMoveAdapter } = await import('../tools/file-move.js');
85
+ const { FileCopyAdapter } = await import('../tools/file-copy.js');
86
+ const { DirectoryListAdapter } = await import('../tools/directory-list.js');
87
+ const { DirectoryCreateAdapter } = await import('../tools/directory-create.js');
83
88
  const { CommandRunAdapter } = await import('../tools/command-run.js');
84
89
  const { HttpRequestAdapter } = await import('../tools/http-request.js');
85
90
  const { GitDiffAdapter, GitApplyAdapter } = await import('../tools/git.js');
91
+ const { GitCommitAdapter } = await import('../tools/git-commit.js');
92
+ const { GitStatusAdapter } = await import('../tools/git-status.js');
93
+ const { EnvReadAdapter } = await import('../tools/env-read.js');
94
+ const { NetworkDnsAdapter } = await import('../tools/network-dns.js');
95
+ const { ArchiveExtractAdapter } = await import('../tools/archive-extract.js');
86
96
  const registry = new ActionRegistry();
87
97
  registry.register(new FileReadAdapter());
88
98
  registry.register(new FileWriteAdapter());
99
+ registry.register(new FileDeleteAdapter());
100
+ registry.register(new FileMoveAdapter());
101
+ registry.register(new FileCopyAdapter());
102
+ registry.register(new DirectoryListAdapter());
103
+ registry.register(new DirectoryCreateAdapter());
89
104
  registry.register(new CommandRunAdapter());
90
105
  registry.register(new HttpRequestAdapter());
91
106
  registry.register(new GitDiffAdapter());
92
107
  registry.register(new GitApplyAdapter());
108
+ registry.register(new GitCommitAdapter());
109
+ registry.register(new GitStatusAdapter());
110
+ registry.register(new EnvReadAdapter());
111
+ registry.register(new NetworkDnsAdapter());
112
+ registry.register(new ArchiveExtractAdapter());
93
113
  return registry;
94
114
  }
95
115
  //# sourceMappingURL=action-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-registry.js","sourceRoot":"","sources":["../../src/engine/action-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,OAAoB;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,OAAsB,EAAE,MAAc;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,CAAC,kBAAkB,OAAO,CAAC,IAAI,kBAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1F,CAAC;QACJ,CAAC;QAED,kDAAkD;QAClD,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,oCAAoC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3G,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,sCAAsC;QACtC,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAClE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACpE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACtE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACxE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IAEzC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"action-registry.js","sourceRoot":"","sources":["../../src/engine/action-registry.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @example
7
7
  * ```typescript
8
- * import { AgentGateway } from 'deterministic-agent-control-protocol';
8
+ * import { AgentGateway } from '@det-acp/core';
9
9
  *
10
10
  * const gateway = await AgentGateway.create({ ledgerDir: './ledgers' });
11
11
  * const session = await gateway.createSession('./policy.yaml');
@@ -32,9 +32,19 @@ export { evaluateAction, evaluateSessionAction, assessRiskLevel } from './policy
32
32
  export { ToolAdapter } from './tools/base.js';
33
33
  export { FileReadAdapter } from './tools/file-read.js';
34
34
  export { FileWriteAdapter } from './tools/file-write.js';
35
+ export { FileDeleteAdapter } from './tools/file-delete.js';
36
+ export { FileMoveAdapter } from './tools/file-move.js';
37
+ export { FileCopyAdapter } from './tools/file-copy.js';
38
+ export { DirectoryListAdapter } from './tools/directory-list.js';
39
+ export { DirectoryCreateAdapter } from './tools/directory-create.js';
35
40
  export { CommandRunAdapter } from './tools/command-run.js';
36
41
  export { HttpRequestAdapter } from './tools/http-request.js';
37
42
  export { GitDiffAdapter, GitApplyAdapter } from './tools/git.js';
43
+ export { GitCommitAdapter } from './tools/git-commit.js';
44
+ export { GitStatusAdapter } from './tools/git-status.js';
45
+ export { EnvReadAdapter } from './tools/env-read.js';
46
+ export { NetworkDnsAdapter } from './tools/network-dns.js';
47
+ export { ArchiveExtractAdapter } from './tools/archive-extract.js';
38
48
  export { ActionRegistry, createDefaultRegistry } from './engine/action-registry.js';
39
49
  export { GateManager, createAutoApproveHandler } from './engine/gate.js';
40
50
  export { RollbackManager } from './rollback/manager.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGpF,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlF,YAAY,EAEV,MAAM,EACN,UAAU,EACV,eAAe,EACf,IAAI,EACJ,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,SAAS,EAET,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EAEZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EAEb,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EAEd,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACX,eAAe,EAEf,WAAW,EACX,YAAY,EACZ,YAAY,EAEZ,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG/F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGpF,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlF,YAAY,EAEV,MAAM,EACN,UAAU,EACV,eAAe,EACf,IAAI,EACJ,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,SAAS,EAET,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EAEZ,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EAEb,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EAEd,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACX,eAAe,EAEf,WAAW,EACX,YAAY,EACZ,YAAY,EAEZ,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @example
7
7
  * ```typescript
8
- * import { AgentGateway } from 'deterministic-agent-control-protocol';
8
+ * import { AgentGateway } from '@det-acp/core';
9
9
  *
10
10
  * const gateway = await AgentGateway.create({ ledgerDir: './ledgers' });
11
11
  * const session = await gateway.createSession('./policy.yaml');
@@ -36,9 +36,19 @@ export { evaluateAction, evaluateSessionAction, assessRiskLevel } from './policy
36
36
  export { ToolAdapter } from './tools/base.js';
37
37
  export { FileReadAdapter } from './tools/file-read.js';
38
38
  export { FileWriteAdapter } from './tools/file-write.js';
39
+ export { FileDeleteAdapter } from './tools/file-delete.js';
40
+ export { FileMoveAdapter } from './tools/file-move.js';
41
+ export { FileCopyAdapter } from './tools/file-copy.js';
42
+ export { DirectoryListAdapter } from './tools/directory-list.js';
43
+ export { DirectoryCreateAdapter } from './tools/directory-create.js';
39
44
  export { CommandRunAdapter } from './tools/command-run.js';
40
45
  export { HttpRequestAdapter } from './tools/http-request.js';
41
46
  export { GitDiffAdapter, GitApplyAdapter } from './tools/git.js';
47
+ export { GitCommitAdapter } from './tools/git-commit.js';
48
+ export { GitStatusAdapter } from './tools/git-status.js';
49
+ export { EnvReadAdapter } from './tools/env-read.js';
50
+ export { NetworkDnsAdapter } from './tools/network-dns.js';
51
+ export { ArchiveExtractAdapter } from './tools/archive-extract.js';
42
52
  // Action registry
43
53
  export { ActionRegistry, createDefaultRegistry } from './engine/action-registry.js';
44
54
  // Gate management
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAEvE,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAA6B,MAAM,qBAAqB,CAAC;AAEhF,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/F,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjE,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpF,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAExE,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAEvE,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAA6B,MAAM,qBAAqB,CAAC;AAEhF,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE/F,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpF,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAExE,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * archive:extract — Scoped archive extraction tool adapter.
3
+ *
4
+ * Extracts tar and zip archives within allowed path scopes.
5
+ * Both source archive and destination must be within policy scope.
6
+ * Rollback support: removes extracted files.
7
+ */
8
+ import { z } from 'zod';
9
+ import { ToolAdapter } from './base.js';
10
+ import type { DryRunResult, ExecutionContext, ExecutionResult, Policy, RollbackResult, ValidationResult } from '../types.js';
11
+ export declare const ArchiveExtractInputSchema: z.ZodObject<{
12
+ archive: z.ZodString;
13
+ destination: z.ZodString;
14
+ format: z.ZodOptional<z.ZodEnum<{
15
+ tar: "tar";
16
+ "tar.gz": "tar.gz";
17
+ "tar.bz2": "tar.bz2";
18
+ zip: "zip";
19
+ }>>;
20
+ timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
21
+ }, z.core.$strip>;
22
+ export type ArchiveExtractInput = z.infer<typeof ArchiveExtractInputSchema>;
23
+ export declare class ArchiveExtractAdapter extends ToolAdapter {
24
+ readonly name = "archive:extract";
25
+ readonly description = "Extract tar/zip archives within allowed path scopes";
26
+ readonly inputSchema: z.ZodObject<{
27
+ archive: z.ZodString;
28
+ destination: z.ZodString;
29
+ format: z.ZodOptional<z.ZodEnum<{
30
+ tar: "tar";
31
+ "tar.gz": "tar.gz";
32
+ "tar.bz2": "tar.bz2";
33
+ zip: "zip";
34
+ }>>;
35
+ timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
36
+ }, z.core.$strip>;
37
+ validate(input: unknown, policy: Policy): ValidationResult;
38
+ dryRun(input: Record<string, unknown>, _ctx: ExecutionContext): Promise<DryRunResult>;
39
+ execute(input: Record<string, unknown>, ctx: ExecutionContext): Promise<ExecutionResult>;
40
+ rollback(input: Record<string, unknown>, ctx: ExecutionContext): Promise<RollbackResult>;
41
+ private detectFormat;
42
+ private buildExtractCommand;
43
+ private listFilesRecursive;
44
+ }
45
+ //# sourceMappingURL=archive-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-extract.d.ts","sourceRoot":"","sources":["../../src/tools/archive-extract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EAEf,MAAM,EACN,cAAc,EACd,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,yBAAyB;;;;;;;;;;iBASpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,yDAAyD;IAC7E,QAAQ,CAAC,WAAW;;;;;;;;;;sBAA6B;IAEjD,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAyCpD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IA2BrF,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkFxF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgE9F,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,kBAAkB;CAmB3B"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * archive:extract — Scoped archive extraction tool adapter.
3
+ *
4
+ * Extracts tar and zip archives within allowed path scopes.
5
+ * Both source archive and destination must be within policy scope.
6
+ * Rollback support: removes extracted files.
7
+ */
8
+ import { execSync } from 'node:child_process';
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import crypto from 'node:crypto';
12
+ import { z } from 'zod';
13
+ import { ToolAdapter } from './base.js';
14
+ import { evaluateAction } from '../policy/evaluator.js';
15
+ export const ArchiveExtractInputSchema = z.object({
16
+ /** Path to the archive file */
17
+ archive: z.string().min(1, 'Archive path is required'),
18
+ /** Destination directory for extraction */
19
+ destination: z.string().min(1, 'Destination path is required'),
20
+ /** Archive format (auto-detected from extension if not specified) */
21
+ format: z.enum(['tar', 'tar.gz', 'tar.bz2', 'zip']).optional(),
22
+ /** Timeout in milliseconds */
23
+ timeout: z.number().positive().optional().default(60000),
24
+ });
25
+ export class ArchiveExtractAdapter extends ToolAdapter {
26
+ name = 'archive:extract';
27
+ description = 'Extract tar/zip archives within allowed path scopes';
28
+ inputSchema = ArchiveExtractInputSchema;
29
+ validate(input, policy) {
30
+ const parsed = ArchiveExtractInputSchema.safeParse(input);
31
+ if (!parsed.success) {
32
+ return {
33
+ verdict: 'deny',
34
+ tool: this.name,
35
+ reasons: parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`),
36
+ };
37
+ }
38
+ // Validate both archive (read) and destination (write) paths
39
+ const archiveResult = evaluateAction({ tool: this.name, input: { ...parsed.data, path: parsed.data.archive } }, policy);
40
+ if (archiveResult.verdict === 'deny') {
41
+ return {
42
+ ...archiveResult,
43
+ reasons: archiveResult.reasons.map((r) => `Archive: ${r}`),
44
+ };
45
+ }
46
+ const destResult = evaluateAction({ tool: this.name, input: { ...parsed.data, path: parsed.data.destination } }, policy);
47
+ if (destResult.verdict === 'deny') {
48
+ return {
49
+ ...destResult,
50
+ reasons: destResult.reasons.map((r) => `Destination: ${r}`),
51
+ };
52
+ }
53
+ // Return the more restrictive result
54
+ if (archiveResult.verdict === 'gate' || destResult.verdict === 'gate') {
55
+ return archiveResult.verdict === 'gate' ? archiveResult : destResult;
56
+ }
57
+ return archiveResult;
58
+ }
59
+ async dryRun(input, _ctx) {
60
+ const { archive, destination, format } = input;
61
+ const absArchive = path.resolve(archive);
62
+ const absDest = path.resolve(destination);
63
+ const warnings = [];
64
+ if (!fs.existsSync(absArchive)) {
65
+ warnings.push(`Archive does not exist: ${absArchive}`);
66
+ }
67
+ if (!fs.existsSync(absDest)) {
68
+ warnings.push(`Destination directory does not exist: ${absDest}`);
69
+ }
70
+ const detectedFormat = format ?? this.detectFormat(absArchive);
71
+ if (!detectedFormat) {
72
+ warnings.push(`Cannot detect archive format from extension: ${absArchive}`);
73
+ }
74
+ return {
75
+ tool: this.name,
76
+ wouldDo: `Extract ${absArchive} → ${absDest} (format: ${detectedFormat ?? 'unknown'})`,
77
+ estimatedChanges: [absDest],
78
+ warnings,
79
+ };
80
+ }
81
+ async execute(input, ctx) {
82
+ const start = Date.now();
83
+ const { archive, destination, format, timeout } = input;
84
+ const absArchive = path.resolve(archive);
85
+ const absDest = path.resolve(destination);
86
+ const artifacts = [];
87
+ try {
88
+ if (!fs.existsSync(absArchive)) {
89
+ return this.failure(`Archive does not exist: ${absArchive}`, Date.now() - start);
90
+ }
91
+ if (!fs.existsSync(absDest)) {
92
+ return this.failure(`Destination directory does not exist: ${absDest}`, Date.now() - start);
93
+ }
94
+ // Detect format
95
+ const archiveFormat = format ?? this.detectFormat(absArchive);
96
+ if (!archiveFormat) {
97
+ return this.failure(`Cannot detect archive format from extension: ${absArchive}`, Date.now() - start);
98
+ }
99
+ // List files before extraction to track what's new
100
+ const filesBefore = new Set(this.listFilesRecursive(absDest));
101
+ // Compute archive checksum
102
+ const archiveContent = fs.readFileSync(absArchive);
103
+ const archiveChecksum = crypto.createHash('sha256').update(archiveContent).digest('hex');
104
+ artifacts.push({
105
+ type: 'checksum',
106
+ value: `sha256:${archiveChecksum}`,
107
+ description: `Archive checksum: ${absArchive}`,
108
+ });
109
+ // Extract
110
+ const cmd = this.buildExtractCommand(archiveFormat, absArchive, absDest);
111
+ const output = execSync(cmd, {
112
+ cwd: absDest,
113
+ encoding: 'utf-8',
114
+ timeout,
115
+ });
116
+ // List files after extraction to determine what was extracted
117
+ const filesAfter = this.listFilesRecursive(absDest);
118
+ const extractedFiles = filesAfter.filter((f) => !filesBefore.has(f));
119
+ artifacts.push({
120
+ type: 'log',
121
+ value: `Extracted ${extractedFiles.length} files from ${absArchive} to ${absDest}`,
122
+ description: 'Extraction summary',
123
+ });
124
+ // Store rollback data
125
+ const rollbackKey = `archive:extract:${absArchive}:${absDest}`;
126
+ ctx.rollbackData[rollbackKey] = {
127
+ archive: absArchive,
128
+ destination: absDest,
129
+ extractedFiles,
130
+ };
131
+ ctx.budget.filesChanged += extractedFiles.length;
132
+ return this.success({
133
+ archive: absArchive,
134
+ destination: absDest,
135
+ format: archiveFormat,
136
+ filesExtracted: extractedFiles.length,
137
+ files: extractedFiles.slice(0, 100), // Limit for large archives
138
+ }, Date.now() - start, artifacts);
139
+ }
140
+ catch (err) {
141
+ return this.failure(err.message, Date.now() - start);
142
+ }
143
+ }
144
+ async rollback(input, ctx) {
145
+ const { archive, destination } = input;
146
+ const absArchive = path.resolve(archive);
147
+ const absDest = path.resolve(destination);
148
+ const rollbackKey = `archive:extract:${absArchive}:${absDest}`;
149
+ const rollbackData = ctx.rollbackData[rollbackKey];
150
+ if (!rollbackData) {
151
+ return {
152
+ tool: this.name,
153
+ success: false,
154
+ description: 'No rollback data available',
155
+ error: 'Rollback data not found — execute() may not have been called',
156
+ };
157
+ }
158
+ try {
159
+ let removed = 0;
160
+ // Remove extracted files in reverse order
161
+ for (const file of [...rollbackData.extractedFiles].reverse()) {
162
+ try {
163
+ if (fs.existsSync(file)) {
164
+ const stat = fs.statSync(file);
165
+ if (stat.isFile()) {
166
+ fs.unlinkSync(file);
167
+ removed++;
168
+ }
169
+ }
170
+ }
171
+ catch {
172
+ // Permission denied or file in use
173
+ }
174
+ }
175
+ // Try to remove empty directories that were created
176
+ for (const file of [...rollbackData.extractedFiles].reverse()) {
177
+ try {
178
+ const dir = path.dirname(file);
179
+ if (fs.existsSync(dir) && fs.readdirSync(dir).length === 0) {
180
+ fs.rmdirSync(dir);
181
+ }
182
+ }
183
+ catch {
184
+ // Not empty or permission denied
185
+ }
186
+ }
187
+ return {
188
+ tool: this.name,
189
+ success: true,
190
+ description: `Removed ${removed} extracted files from ${rollbackData.destination}`,
191
+ };
192
+ }
193
+ catch (err) {
194
+ return {
195
+ tool: this.name,
196
+ success: false,
197
+ description: `Failed to rollback archive extraction`,
198
+ error: err.message,
199
+ };
200
+ }
201
+ }
202
+ detectFormat(archivePath) {
203
+ const lower = archivePath.toLowerCase();
204
+ if (lower.endsWith('.tar.gz') || lower.endsWith('.tgz'))
205
+ return 'tar.gz';
206
+ if (lower.endsWith('.tar.bz2') || lower.endsWith('.tbz2'))
207
+ return 'tar.bz2';
208
+ if (lower.endsWith('.tar'))
209
+ return 'tar';
210
+ if (lower.endsWith('.zip'))
211
+ return 'zip';
212
+ return null;
213
+ }
214
+ buildExtractCommand(format, archivePath, destDir) {
215
+ switch (format) {
216
+ case 'tar':
217
+ return `tar xf "${archivePath}" -C "${destDir}"`;
218
+ case 'tar.gz':
219
+ return `tar xzf "${archivePath}" -C "${destDir}"`;
220
+ case 'tar.bz2':
221
+ return `tar xjf "${archivePath}" -C "${destDir}"`;
222
+ case 'zip':
223
+ return `unzip -o "${archivePath}" -d "${destDir}"`;
224
+ }
225
+ }
226
+ listFilesRecursive(dirPath) {
227
+ const files = [];
228
+ try {
229
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
230
+ for (const entry of entries) {
231
+ const fullPath = path.join(dirPath, entry.name);
232
+ if (entry.isDirectory()) {
233
+ files.push(...this.listFilesRecursive(fullPath));
234
+ }
235
+ else {
236
+ files.push(fullPath);
237
+ }
238
+ }
239
+ }
240
+ catch {
241
+ // Permission denied
242
+ }
243
+ return files;
244
+ }
245
+ }
246
+ //# sourceMappingURL=archive-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-extract.js","sourceRoot":"","sources":["../../src/tools/archive-extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * directory:create — Scoped directory creation tool adapter.
3
+ *
4
+ * Creates directories within allowed path scopes.
5
+ * Supports recursive creation (mkdir -p).
6
+ * Rollback support: removes created directories.
7
+ */
8
+ import { z } from 'zod';
9
+ import { ToolAdapter } from './base.js';
10
+ import type { DryRunResult, ExecutionContext, ExecutionResult, Policy, RollbackResult, ValidationResult } from '../types.js';
11
+ export declare const DirectoryCreateInputSchema: z.ZodObject<{
12
+ path: z.ZodString;
13
+ recursive: z.ZodDefault<z.ZodBoolean>;
14
+ }, z.core.$strip>;
15
+ export type DirectoryCreateInput = z.infer<typeof DirectoryCreateInputSchema>;
16
+ export declare class DirectoryCreateAdapter extends ToolAdapter {
17
+ readonly name = "directory:create";
18
+ readonly description = "Create a directory within allowed path scopes";
19
+ readonly inputSchema: z.ZodObject<{
20
+ path: z.ZodString;
21
+ recursive: z.ZodDefault<z.ZodBoolean>;
22
+ }, z.core.$strip>;
23
+ validate(input: unknown, policy: Policy): ValidationResult;
24
+ dryRun(input: Record<string, unknown>, _ctx: ExecutionContext): Promise<DryRunResult>;
25
+ execute(input: Record<string, unknown>, ctx: ExecutionContext): Promise<ExecutionResult>;
26
+ rollback(input: Record<string, unknown>, ctx: ExecutionContext): Promise<RollbackResult>;
27
+ /**
28
+ * Walk up from the target path and find which directories don't exist yet.
29
+ * Returns them in top-down order (parent first).
30
+ */
31
+ private findNewDirectories;
32
+ }
33
+ //# sourceMappingURL=directory-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-create.d.ts","sourceRoot":"","sources":["../../src/tools/directory-create.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,cAAc,EACd,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,0BAA0B;;;iBAIrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,qBAAa,sBAAuB,SAAQ,WAAW;IACrD,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,mDAAmD;IACvE,QAAQ,CAAC,WAAW;;;sBAA8B;IAElD,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAgBpD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAsBrF,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA8CxF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IA8C9F;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAa3B"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * directory:create — Scoped directory creation tool adapter.
3
+ *
4
+ * Creates directories within allowed path scopes.
5
+ * Supports recursive creation (mkdir -p).
6
+ * Rollback support: removes created directories.
7
+ */
8
+ import fs from 'node:fs';
9
+ import path from 'node:path';
10
+ import { z } from 'zod';
11
+ import { ToolAdapter } from './base.js';
12
+ import { evaluateAction } from '../policy/evaluator.js';
13
+ export const DirectoryCreateInputSchema = z.object({
14
+ path: z.string().min(1, 'Directory path is required'),
15
+ /** Create parent directories if they do not exist (like mkdir -p) */
16
+ recursive: z.boolean().default(true),
17
+ });
18
+ export class DirectoryCreateAdapter extends ToolAdapter {
19
+ name = 'directory:create';
20
+ description = 'Create a directory within allowed path scopes';
21
+ inputSchema = DirectoryCreateInputSchema;
22
+ validate(input, policy) {
23
+ const parsed = DirectoryCreateInputSchema.safeParse(input);
24
+ if (!parsed.success) {
25
+ return {
26
+ verdict: 'deny',
27
+ tool: this.name,
28
+ reasons: parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`),
29
+ };
30
+ }
31
+ return evaluateAction({ tool: this.name, input: parsed.data }, policy);
32
+ }
33
+ async dryRun(input, _ctx) {
34
+ const { path: dirPath, recursive } = input;
35
+ const absPath = path.resolve(dirPath);
36
+ const warnings = [];
37
+ if (fs.existsSync(absPath)) {
38
+ warnings.push(`Directory already exists: ${absPath}`);
39
+ }
40
+ else if (!recursive) {
41
+ const parent = path.dirname(absPath);
42
+ if (!fs.existsSync(parent)) {
43
+ warnings.push(`Parent directory does not exist: ${parent}. Set recursive: true to create.`);
44
+ }
45
+ }
46
+ return {
47
+ tool: this.name,
48
+ wouldDo: `Create directory: ${absPath}${recursive ? ' (recursive)' : ''}`,
49
+ estimatedChanges: [absPath],
50
+ warnings,
51
+ };
52
+ }
53
+ async execute(input, ctx) {
54
+ const start = Date.now();
55
+ const { path: dirPath, recursive } = input;
56
+ const absPath = path.resolve(dirPath);
57
+ try {
58
+ if (fs.existsSync(absPath)) {
59
+ const stat = fs.statSync(absPath);
60
+ if (stat.isDirectory()) {
61
+ return this.success({ path: absPath, created: false, reason: 'Directory already exists' }, Date.now() - start);
62
+ }
63
+ return this.failure(`Path exists but is not a directory: ${absPath}`, Date.now() - start);
64
+ }
65
+ // Track what directories are actually created for rollback
66
+ const createdDirs = this.findNewDirectories(absPath);
67
+ // Create the directory
68
+ fs.mkdirSync(absPath, { recursive });
69
+ // Store rollback data: the topmost directory that was actually created
70
+ const rollbackKey = `directory:create:${absPath}`;
71
+ ctx.rollbackData[rollbackKey] = {
72
+ createdDirs,
73
+ path: absPath,
74
+ };
75
+ return this.success({ path: absPath, created: true, createdDirs }, Date.now() - start, [
76
+ {
77
+ type: 'log',
78
+ value: `Created directory: ${absPath} (dirs created: ${createdDirs.length})`,
79
+ description: 'Directory creation record',
80
+ },
81
+ ]);
82
+ }
83
+ catch (err) {
84
+ return this.failure(err.message, Date.now() - start);
85
+ }
86
+ }
87
+ async rollback(input, ctx) {
88
+ const { path: dirPath } = input;
89
+ const absPath = path.resolve(dirPath);
90
+ const rollbackKey = `directory:create:${absPath}`;
91
+ const rollbackData = ctx.rollbackData[rollbackKey];
92
+ if (!rollbackData) {
93
+ return {
94
+ tool: this.name,
95
+ success: false,
96
+ description: 'No rollback data available',
97
+ error: 'Rollback data not found — execute() may not have been called',
98
+ };
99
+ }
100
+ try {
101
+ // Remove created directories in reverse order (deepest first)
102
+ const dirs = [...rollbackData.createdDirs].reverse();
103
+ for (const dir of dirs) {
104
+ if (fs.existsSync(dir)) {
105
+ try {
106
+ fs.rmdirSync(dir);
107
+ }
108
+ catch {
109
+ // Directory not empty — skip (may have been used by other operations)
110
+ }
111
+ }
112
+ }
113
+ return {
114
+ tool: this.name,
115
+ success: true,
116
+ description: `Removed created directories: ${dirs.join(', ')}`,
117
+ };
118
+ }
119
+ catch (err) {
120
+ return {
121
+ tool: this.name,
122
+ success: false,
123
+ description: `Failed to rollback directory creation`,
124
+ error: err.message,
125
+ };
126
+ }
127
+ }
128
+ /**
129
+ * Walk up from the target path and find which directories don't exist yet.
130
+ * Returns them in top-down order (parent first).
131
+ */
132
+ findNewDirectories(targetPath) {
133
+ const dirs = [];
134
+ let current = targetPath;
135
+ while (!fs.existsSync(current)) {
136
+ dirs.unshift(current);
137
+ const parent = path.dirname(current);
138
+ if (parent === current)
139
+ break; // Reached filesystem root
140
+ current = parent;
141
+ }
142
+ return dirs;
143
+ }
144
+ }
145
+ //# sourceMappingURL=directory-create.js.map