@det-acp/core 0.2.1 → 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 +94 -32
  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 +1 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Forks](https://img.shields.io/github/forks/elliot35/deterministic-agent-control-protocol?style=flat)](https://github.com/elliot35/deterministic-agent-control-protocol/network/members)
5
5
  [![Contributors](https://img.shields.io/github/contributors/elliot35/deterministic-agent-control-protocol?style=flat)](https://github.com/elliot35/deterministic-agent-control-protocol/graphs/contributors)
6
6
  [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
7
- [![npm version](https://img.shields.io/npm/v/deterministic-agent-control-protocol)](https://www.npmjs.com/package/deterministic-agent-control-protocol)
7
+ [![npm version](https://img.shields.io/npm/v/@det-acp/core)](https://www.npmjs.com/package/@det-acp/core)
8
8
  ![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?logo=typescript&logoColor=white)
9
9
  ![Node.js](https://img.shields.io/badge/-Node.js-339933?logo=node.js&logoColor=white)
10
10
 
@@ -68,7 +68,7 @@ The protocol **does not execute** actions itself. It evaluates them against a po
68
68
  ### Install
69
69
 
70
70
  ```bash
71
- npm install deterministic-agent-control-protocol
71
+ npm i @det-acp/core
72
72
  ```
73
73
 
74
74
  ### Set Up Governance (One Command)
@@ -139,7 +139,7 @@ session:
139
139
  ### Use as a Library
140
140
 
141
141
  ```typescript
142
- import { AgentGateway } from 'deterministic-agent-control-protocol';
142
+ import { AgentGateway } from '@det-acp/core';
143
143
 
144
144
  const gateway = await AgentGateway.create({
145
145
  ledgerDir: './ledgers',
@@ -204,11 +204,14 @@ For any MCP-compatible agent not listed above, see [MCP Proxy (General)](#mcp-pr
204
204
 
205
205
  Production-ready policies in `examples/` — usable out of the box:
206
206
 
207
- | Policy | File | Use Case |
208
- |--------|------|----------|
209
- | Coding Agent | [`coding-agent.policy.yaml`](examples/coding-agent.policy.yaml) | AI coding agents operating on a project |
210
- | DevOps Deploy | [`devops-deploy.policy.yaml`](examples/devops-deploy.policy.yaml) | Deployment agents that build, test, and deploy code |
211
- | Video Upscaler | [`video-upscaler.policy.yaml`](examples/video-upscaler.policy.yaml) | Media processing agents running upscaling pipelines |
207
+ | Policy | File | Use Case | Tools Used |
208
+ |--------|------|----------|------------|
209
+ | Coding Agent | [`coding-agent.policy.yaml`](examples/coding-agent.policy.yaml) | AI coding agents operating on a project | 13 tools |
210
+ | DevOps Deploy | [`devops-deploy.policy.yaml`](examples/devops-deploy.policy.yaml) | Deployment agents that build, test, and deploy code | 16 tools |
211
+ | Video Upscaler | [`video-upscaler.policy.yaml`](examples/video-upscaler.policy.yaml) | Media processing agents running upscaling pipelines | 11 tools |
212
+ | Data Analyst | [`data-analyst.policy.yaml`](examples/data-analyst.policy.yaml) | Data analysis agents processing datasets and generating reports | 12 tools |
213
+ | Security Audit | [`security-audit.policy.yaml`](examples/security-audit.policy.yaml) | Security scanning agents auditing code and dependencies | 11 tools |
214
+ | Infrastructure Manager | [`infrastructure-manager.policy.yaml`](examples/infrastructure-manager.policy.yaml) | Infrastructure management agents handling IaC, deployments, and monitoring | 16 tools |
212
215
 
213
216
  > Validate any policy with: `npx det-acp validate ./policy.yaml`
214
217
 
@@ -343,12 +346,30 @@ graph TB
343
346
  end
344
347
 
345
348
  subgraph Tools["Tool Adapters"]
346
- FR["file:read"]
347
- FW["file:write"]
348
- CR["command:run"]
349
- HR["http:request"]
350
- GD["git:diff"]
351
- GA["git:apply"]
349
+ subgraph FileTools["File Operations"]
350
+ FR["file:read"]
351
+ FW["file:write"]
352
+ FD["file:delete"]
353
+ FM["file:move"]
354
+ FC["file:copy"]
355
+ end
356
+ subgraph DirTools["Directory Operations"]
357
+ DL["directory:list"]
358
+ DC["directory:create"]
359
+ end
360
+ subgraph GitTools["Git Operations"]
361
+ GD["git:diff"]
362
+ GA["git:apply"]
363
+ GC["git:commit"]
364
+ GS["git:status"]
365
+ end
366
+ subgraph NetTools["Network & System"]
367
+ CR["command:run"]
368
+ HR["http:request"]
369
+ ND["network:dns"]
370
+ ER["env:read"]
371
+ AE["archive:extract"]
372
+ end
352
373
  end
353
374
 
354
375
  MCPProxy --> Gateway
@@ -364,12 +385,10 @@ graph TB
364
385
  SessionMgr --> GateMgr
365
386
  SessionMgr --> Ledger
366
387
 
367
- ActionReg --> FR
368
- ActionReg --> FW
369
- ActionReg --> CR
370
- ActionReg --> HR
371
- ActionReg --> GD
372
- ActionReg --> GA
388
+ ActionReg --> FileTools
389
+ ActionReg --> DirTools
390
+ ActionReg --> GitTools
391
+ ActionReg --> NetTools
373
392
 
374
393
  Rollback --> ActionReg
375
394
  Rollback --> Ledger
@@ -485,14 +504,51 @@ See [examples/](examples/) for complete policy files.
485
504
 
486
505
  ## Built-in Tool Adapters
487
506
 
488
- | Tool | Description |
489
- |------|-------------|
490
- | `file:read` | Read files within scoped paths |
491
- | `file:write` | Write files with backup for rollback |
492
- | `command:run` | Execute allow-listed binaries with timeout |
493
- | `http:request` | HTTP requests to allow-listed domains |
494
- | `git:diff` | Get git diff output |
495
- | `git:apply` | Apply git patches with stash-based rollback |
507
+ ### File Operations
508
+
509
+ | Tool | Description | Rollback |
510
+ |------|-------------|----------|
511
+ | `file:read` | Read files within scoped paths | N/A (read-only) |
512
+ | `file:write` | Write files with backup for rollback | Restores previous content |
513
+ | `file:delete` | Delete files within scoped paths | Restores file from backup |
514
+ | `file:move` | Move/rename files within scoped paths | Moves file back to original location |
515
+ | `file:copy` | Copy files within scoped paths | Removes copied file |
516
+
517
+ ### Directory Operations
518
+
519
+ | Tool | Description | Rollback |
520
+ |------|-------------|----------|
521
+ | `directory:list` | List files and directories within scoped paths | N/A (read-only) |
522
+ | `directory:create` | Create directories within scoped paths | Removes created directories |
523
+
524
+ ### Command Execution
525
+
526
+ | Tool | Description | Rollback |
527
+ |------|-------------|----------|
528
+ | `command:run` | Execute allow-listed binaries with timeout | Compensation actions |
529
+
530
+ ### Git Operations
531
+
532
+ | Tool | Description | Rollback |
533
+ |------|-------------|----------|
534
+ | `git:diff` | Get git diff output | N/A (read-only) |
535
+ | `git:apply` | Apply git patches with stash-based rollback | `git checkout . && git stash pop` |
536
+ | `git:commit` | Stage and commit changes | `git reset --soft HEAD~1` |
537
+ | `git:status` | Get working tree status | N/A (read-only) |
538
+
539
+ ### Network & HTTP
540
+
541
+ | Tool | Description | Rollback |
542
+ |------|-------------|----------|
543
+ | `http:request` | HTTP requests to allow-listed domains | Compensation actions |
544
+ | `network:dns` | DNS lookups for allow-listed domains | N/A (read-only) |
545
+
546
+ ### Environment & System
547
+
548
+ | Tool | Description | Rollback |
549
+ |------|-------------|----------|
550
+ | `env:read` | Read environment variables with auto-redaction of secrets | N/A (read-only) |
551
+ | `archive:extract` | Extract tar/zip archives within scoped paths | Removes extracted files |
496
552
 
497
553
  ---
498
554
 
@@ -501,12 +557,16 @@ See [examples/](examples/) for complete policy files.
501
557
  Extend the `ToolAdapter` base class to add your own tools:
502
558
 
503
559
  ```typescript
504
- import { ToolAdapter } from 'deterministic-agent-control-protocol';
560
+ import { ToolAdapter } from '@det-acp/core';
561
+ import { z } from 'zod';
505
562
 
506
563
  class MyCustomTool extends ToolAdapter {
507
- name = 'custom:mytool';
508
- description = 'My custom tool';
509
- inputSchema = z.object({ /* ... */ });
564
+ readonly name = 'custom:mytool';
565
+ readonly description = 'My custom tool';
566
+ readonly inputSchema = z.object({
567
+ target: z.string().min(1),
568
+ options: z.record(z.string()).optional(),
569
+ });
510
570
 
511
571
  validate(input, policy) { /* ... */ }
512
572
  async dryRun(input, ctx) { /* ... */ }
@@ -518,6 +578,8 @@ class MyCustomTool extends ToolAdapter {
518
578
  gateway.getRegistry().register(new MyCustomTool());
519
579
  ```
520
580
 
581
+ Every tool adapter follows the execution lifecycle: **validate** -> **dryRun** -> **(gate check)** -> **execute** -> **verify**. Each step is recorded in the evidence ledger.
582
+
521
583
  ---
522
584
 
523
585
  ## Development
@@ -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":"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,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAClE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAClE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC5E,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAChF,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;IAC5E,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACpE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACpE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACtE,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAE9E,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,eAAe,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;IAChD,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;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IAE/C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
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":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAWxD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,+BAA+B;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;IACtD,2CAA2C;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,8BAA8B,CAAC;IAC9D,qEAAqE;IACrE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9D,8BAA8B;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACzD,CAAC,CAAC;AAIH,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IAC3C,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,qDAAqD,CAAC;IACpE,WAAW,GAAG,yBAAyB,CAAC;IAEjD,QAAQ,CAAC,KAAc,EAAE,MAAc;QACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC7E,CAAC;QACJ,CAAC;QAED,6DAA6D;QAC7D,MAAM,aAAa,GAAG,cAAc,CAClC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EACzE,MAAM,CACP,CAAC;QACF,IAAI,aAAa,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACrC,OAAO;gBACL,GAAG,aAAa;gBAChB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;aAC3D,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAC/B,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAC7E,MAAM,CACP,CAAC;QACF,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAClC,OAAO;gBACL,GAAG,UAAU;gBACb,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;aAC5D,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,IAAI,aAAa,CAAC,OAAO,KAAK,MAAM,IAAI,UAAU,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACtE,OAAO,aAAa,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;QACvE,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAA8B,EAAE,IAAsB;QACjE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,KAA4B,CAAC;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,WAAW,UAAU,MAAM,OAAO,aAAa,cAAc,IAAI,SAAS,GAAG;YACtF,gBAAgB,EAAE,CAAC,OAAO,CAAC;YAC3B,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAA8B,EAAE,GAAqB;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAA4B,CAAC;QAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAwB,EAAE,CAAC;QAE1C,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,2BAA2B,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YACnF,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,yCAAyC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YAC9F,CAAC;YAED,gBAAgB;YAChB,MAAM,aAAa,GAAG,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,OAAO,CACjB,gDAAgD,UAAU,EAAE,EAC5D,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CACnB,CAAC;YACJ,CAAC;YAED,mDAAmD;YACnD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YAE9D,2BAA2B;YAC3B,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEzF,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,UAAU,eAAe,EAAE;gBAClC,WAAW,EAAE,qBAAqB,UAAU,EAAE;aAC/C,CAAC,CAAC;YAEH,UAAU;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,GAAG,EAAE,OAAO;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO;aACR,CAAC,CAAC;YAEH,8DAA8D;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAErE,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,aAAa,cAAc,CAAC,MAAM,eAAe,UAAU,OAAO,OAAO,EAAE;gBAClF,WAAW,EAAE,oBAAoB;aAClC,CAAC,CAAC;YAEH,sBAAsB;YACtB,MAAM,WAAW,GAAG,mBAAmB,UAAU,IAAI,OAAO,EAAE,CAAC;YAC/D,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG;gBAC9B,OAAO,EAAE,UAAU;gBACnB,WAAW,EAAE,OAAO;gBACpB,cAAc;aACf,CAAC;YAEF,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,cAAc,CAAC,MAAM,CAAC;YAEjD,OAAO,IAAI,CAAC,OAAO,CACjB;gBACE,OAAO,EAAE,UAAU;gBACnB,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE,aAAa;gBACrB,cAAc,EAAE,cAAc,CAAC,MAAM;gBACrC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,2BAA2B;aACjE,EACD,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAClB,SAAS,CACV,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,OAAO,CAAE,GAAa,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAA8B,EAAE,GAAqB;QAClE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAA4B,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,mBAAmB,UAAU,IAAI,OAAO,EAAE,CAAC;QAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,WAAW,CAIpC,CAAC;QAEd,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,4BAA4B;gBACzC,KAAK,EAAE,8DAA8D;aACtE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,0CAA0C;YAC1C,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxB,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC/B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;4BAClB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;4BACpB,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,mCAAmC;gBACrC,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC3D,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACpB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;YACH,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,WAAW,OAAO,yBAAyB,YAAY,CAAC,WAAW,EAAE;aACnF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,uCAAuC;gBACpD,KAAK,EAAG,GAAa,CAAC,OAAO;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,WAAmB;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,QAAQ,CAAC;QACzE,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5E,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB,CACzB,MAA4C,EAC5C,WAAmB,EACnB,OAAe;QAEf,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,WAAW,WAAW,SAAS,OAAO,GAAG,CAAC;YACnD,KAAK,QAAQ;gBACX,OAAO,YAAY,WAAW,SAAS,OAAO,GAAG,CAAC;YACpD,KAAK,SAAS;gBACZ,OAAO,YAAY,WAAW,SAAS,OAAO,GAAG,CAAC;YACpD,KAAK,KAAK;gBACR,OAAO,aAAa,WAAW,SAAS,OAAO,GAAG,CAAC;QACvD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,OAAe;QACxC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}