@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.
- package/README.md +94 -32
- package/dist/engine/action-registry.d.ts.map +1 -1
- package/dist/engine/action-registry.js +20 -0
- package/dist/engine/action-registry.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/archive-extract.d.ts +45 -0
- package/dist/tools/archive-extract.d.ts.map +1 -0
- package/dist/tools/archive-extract.js +246 -0
- package/dist/tools/archive-extract.js.map +1 -0
- package/dist/tools/directory-create.d.ts +33 -0
- package/dist/tools/directory-create.d.ts.map +1 -0
- package/dist/tools/directory-create.js +145 -0
- package/dist/tools/directory-create.js.map +1 -0
- package/dist/tools/directory-list.d.ts +32 -0
- package/dist/tools/directory-list.d.ts.map +1 -0
- package/dist/tools/directory-list.js +114 -0
- package/dist/tools/directory-list.js.map +1 -0
- package/dist/tools/env-read.d.ts +31 -0
- package/dist/tools/env-read.d.ts.map +1 -0
- package/dist/tools/env-read.js +108 -0
- package/dist/tools/env-read.js.map +1 -0
- package/dist/tools/file-copy.d.ts +30 -0
- package/dist/tools/file-copy.d.ts.map +1 -0
- package/dist/tools/file-copy.js +170 -0
- package/dist/tools/file-copy.js.map +1 -0
- package/dist/tools/file-delete.d.ts +27 -0
- package/dist/tools/file-delete.d.ts.map +1 -0
- package/dist/tools/file-delete.js +143 -0
- package/dist/tools/file-delete.js.map +1 -0
- package/dist/tools/file-move.d.ts +30 -0
- package/dist/tools/file-move.d.ts.map +1 -0
- package/dist/tools/file-move.js +167 -0
- package/dist/tools/file-move.js.map +1 -0
- package/dist/tools/git-commit.d.ts +33 -0
- package/dist/tools/git-commit.d.ts.map +1 -0
- package/dist/tools/git-commit.js +176 -0
- package/dist/tools/git-commit.js.map +1 -0
- package/dist/tools/git-status.d.ts +29 -0
- package/dist/tools/git-status.d.ts.map +1 -0
- package/dist/tools/git-status.js +159 -0
- package/dist/tools/git-status.js.map +1 -0
- package/dist/tools/network-dns.d.ts +50 -0
- package/dist/tools/network-dns.d.ts.map +1 -0
- package/dist/tools/network-dns.js +122 -0
- package/dist/tools/network-dns.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/examples/coding-agent.policy.yaml +44 -0
- package/examples/data-analyst.policy.yaml +160 -0
- package/examples/devops-deploy.policy.yaml +68 -0
- package/examples/infrastructure-manager.policy.yaml +209 -0
- package/examples/security-audit.policy.yaml +152 -0
- package/examples/video-upscaler.policy.yaml +45 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://github.com/elliot35/deterministic-agent-control-protocol/network/members)
|
|
5
5
|
[](https://github.com/elliot35/deterministic-agent-control-protocol/graphs/contributors)
|
|
6
6
|
[](LICENSE)
|
|
7
|
-
[](https://www.npmjs.com/package/@det-acp/core)
|
|
8
8
|

|
|
9
9
|

|
|
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
|
|
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 '
|
|
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
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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 -->
|
|
368
|
-
ActionReg -->
|
|
369
|
-
ActionReg -->
|
|
370
|
-
ActionReg -->
|
|
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
|
-
|
|
489
|
-
|
|
490
|
-
|
|
|
491
|
-
|
|
492
|
-
| `
|
|
493
|
-
| `
|
|
494
|
-
| `
|
|
495
|
-
| `
|
|
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 '
|
|
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,
|
|
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;
|
|
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 '
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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 '
|
|
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;
|
|
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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"}
|