create-agentfs 0.1.1
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/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/cli.d.ts +51 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +246 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/compile.d.ts +48 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +228 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/cron.d.ts +18 -0
- package/dist/commands/cron.d.ts.map +1 -0
- package/dist/commands/cron.js +95 -0
- package/dist/commands/cron.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +199 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/memory.d.ts +19 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +213 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/onboard.d.ts +31 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +362 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/secret.d.ts +13 -0
- package/dist/commands/secret.d.ts.map +1 -0
- package/dist/commands/secret.js +109 -0
- package/dist/commands/secret.js.map +1 -0
- package/dist/commands/security.d.ts +16 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +203 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/sync.d.ts +14 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +84 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/compilers/agent-map.d.ts +34 -0
- package/dist/compilers/agent-map.d.ts.map +1 -0
- package/dist/compilers/agent-map.js +66 -0
- package/dist/compilers/agent-map.js.map +1 -0
- package/dist/compilers/base.d.ts +67 -0
- package/dist/compilers/base.d.ts.map +1 -0
- package/dist/compilers/base.js +183 -0
- package/dist/compilers/base.js.map +1 -0
- package/dist/compilers/claude.d.ts +26 -0
- package/dist/compilers/claude.d.ts.map +1 -0
- package/dist/compilers/claude.js +151 -0
- package/dist/compilers/claude.js.map +1 -0
- package/dist/compilers/cursor.d.ts +11 -0
- package/dist/compilers/cursor.d.ts.map +1 -0
- package/dist/compilers/cursor.js +52 -0
- package/dist/compilers/cursor.js.map +1 -0
- package/dist/compilers/index.d.ts +14 -0
- package/dist/compilers/index.d.ts.map +1 -0
- package/dist/compilers/index.js +14 -0
- package/dist/compilers/index.js.map +1 -0
- package/dist/compilers/openclaw.d.ts +12 -0
- package/dist/compilers/openclaw.d.ts.map +1 -0
- package/dist/compilers/openclaw.js +51 -0
- package/dist/compilers/openclaw.js.map +1 -0
- package/dist/cron/index.d.ts +10 -0
- package/dist/cron/index.d.ts.map +1 -0
- package/dist/cron/index.js +9 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/jobs/consolidate.d.ts +16 -0
- package/dist/cron/jobs/consolidate.d.ts.map +1 -0
- package/dist/cron/jobs/consolidate.js +61 -0
- package/dist/cron/jobs/consolidate.js.map +1 -0
- package/dist/cron/jobs/heartbeat.d.ts +11 -0
- package/dist/cron/jobs/heartbeat.d.ts.map +1 -0
- package/dist/cron/jobs/heartbeat.js +66 -0
- package/dist/cron/jobs/heartbeat.js.map +1 -0
- package/dist/cron/jobs/inbox-triage.d.ts +11 -0
- package/dist/cron/jobs/inbox-triage.d.ts.map +1 -0
- package/dist/cron/jobs/inbox-triage.js +85 -0
- package/dist/cron/jobs/inbox-triage.js.map +1 -0
- package/dist/cron/runner.d.ts +32 -0
- package/dist/cron/runner.d.ts.map +1 -0
- package/dist/cron/runner.js +69 -0
- package/dist/cron/runner.js.map +1 -0
- package/dist/cron/types.d.ts +21 -0
- package/dist/cron/types.d.ts.map +1 -0
- package/dist/cron/types.js +6 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/generators/filesystem.d.ts +52 -0
- package/dist/generators/filesystem.d.ts.map +1 -0
- package/dist/generators/filesystem.js +155 -0
- package/dist/generators/filesystem.js.map +1 -0
- package/dist/generators/ignore.d.ts +38 -0
- package/dist/generators/ignore.d.ts.map +1 -0
- package/dist/generators/ignore.js +154 -0
- package/dist/generators/ignore.js.map +1 -0
- package/dist/generators/index.d.ts +14 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +14 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/init.d.ts +37 -0
- package/dist/generators/init.d.ts.map +1 -0
- package/dist/generators/init.js +169 -0
- package/dist/generators/init.js.map +1 -0
- package/dist/generators/manifest.d.ts +31 -0
- package/dist/generators/manifest.d.ts.map +1 -0
- package/dist/generators/manifest.js +123 -0
- package/dist/generators/manifest.js.map +1 -0
- package/dist/generators/memory.d.ts +36 -0
- package/dist/generators/memory.d.ts.map +1 -0
- package/dist/generators/memory.js +106 -0
- package/dist/generators/memory.js.map +1 -0
- package/dist/generators/profiles.d.ts +22 -0
- package/dist/generators/profiles.d.ts.map +1 -0
- package/dist/generators/profiles.js +92 -0
- package/dist/generators/profiles.js.map +1 -0
- package/dist/generators/prompts.d.ts +24 -0
- package/dist/generators/prompts.d.ts.map +1 -0
- package/dist/generators/prompts.js +122 -0
- package/dist/generators/prompts.js.map +1 -0
- package/dist/generators/scaffold.d.ts +29 -0
- package/dist/generators/scaffold.d.ts.map +1 -0
- package/dist/generators/scaffold.js +90 -0
- package/dist/generators/scaffold.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/confidence.d.ts +69 -0
- package/dist/memory/confidence.d.ts.map +1 -0
- package/dist/memory/confidence.js +125 -0
- package/dist/memory/confidence.js.map +1 -0
- package/dist/memory/episodic.d.ts +40 -0
- package/dist/memory/episodic.d.ts.map +1 -0
- package/dist/memory/episodic.js +139 -0
- package/dist/memory/episodic.js.map +1 -0
- package/dist/memory/index.d.ts +17 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +17 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/parser.d.ts +73 -0
- package/dist/memory/parser.d.ts.map +1 -0
- package/dist/memory/parser.js +156 -0
- package/dist/memory/parser.js.map +1 -0
- package/dist/memory/procedural.d.ts +43 -0
- package/dist/memory/procedural.d.ts.map +1 -0
- package/dist/memory/procedural.js +126 -0
- package/dist/memory/procedural.js.map +1 -0
- package/dist/secrets/exfil-guard.d.ts +31 -0
- package/dist/secrets/exfil-guard.d.ts.map +1 -0
- package/dist/secrets/exfil-guard.js +51 -0
- package/dist/secrets/exfil-guard.js.map +1 -0
- package/dist/secrets/index.d.ts +8 -0
- package/dist/secrets/index.d.ts.map +1 -0
- package/dist/secrets/index.js +7 -0
- package/dist/secrets/index.js.map +1 -0
- package/dist/secrets/vault.d.ts +63 -0
- package/dist/secrets/vault.d.ts.map +1 -0
- package/dist/secrets/vault.js +163 -0
- package/dist/secrets/vault.js.map +1 -0
- package/dist/security/claude-compiler.d.ts +28 -0
- package/dist/security/claude-compiler.d.ts.map +1 -0
- package/dist/security/claude-compiler.js +66 -0
- package/dist/security/claude-compiler.js.map +1 -0
- package/dist/security/index.d.ts +7 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +7 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/parser.d.ts +47 -0
- package/dist/security/parser.d.ts.map +1 -0
- package/dist/security/parser.js +136 -0
- package/dist/security/parser.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +6 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/sync.d.ts +46 -0
- package/dist/sync/sync.d.ts.map +1 -0
- package/dist/sync/sync.js +174 -0
- package/dist/sync/sync.js.map +1 -0
- package/dist/types/compiler.d.ts +81 -0
- package/dist/types/compiler.d.ts.map +1 -0
- package/dist/types/compiler.js +10 -0
- package/dist/types/compiler.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifest.d.ts +112 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +10 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types/memory.d.ts +85 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +20 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/security.d.ts +67 -0
- package/dist/types/security.d.ts.map +1 -0
- package/dist/types/security.js +10 -0
- package/dist/types/security.js.map +1 -0
- package/dist/types/setup.d.ts +54 -0
- package/dist/types/setup.d.ts.map +1 -0
- package/dist/types/setup.js +9 -0
- package/dist/types/setup.js.map +1 -0
- package/dist/utils/fhs-mapping.d.ts +76 -0
- package/dist/utils/fhs-mapping.d.ts.map +1 -0
- package/dist/utils/fhs-mapping.js +189 -0
- package/dist/utils/fhs-mapping.js.map +1 -0
- package/package.json +58 -0
- package/templates/compilers/agent-map.md.hbs +36 -0
- package/templates/compilers/claude.md.hbs +95 -0
- package/templates/procedural/code-review.md +54 -0
- package/templates/procedural/debugging.md +52 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentfs secret` command implementation.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* agentfs secret add <name> — add encrypted secret (Story 8.2)
|
|
6
|
+
* agentfs secret remove <name> — remove secret
|
|
7
|
+
* agentfs secret list — list secret names (never values)
|
|
8
|
+
* agentfs secret rotate <name> — re-encrypt with new value
|
|
9
|
+
*
|
|
10
|
+
* @module commands/secret
|
|
11
|
+
*/
|
|
12
|
+
import { addSecret, removeSecret, listSecrets, rotateSecret, } from '../secrets/vault.js';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Output helpers
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
function print(line) {
|
|
17
|
+
process.stdout.write(line + '\n');
|
|
18
|
+
}
|
|
19
|
+
function printErr(line) {
|
|
20
|
+
process.stderr.write(line + '\n');
|
|
21
|
+
}
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Main
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
export async function secretCommand(args) {
|
|
26
|
+
const vaultRoot = process.cwd();
|
|
27
|
+
const action = args[0];
|
|
28
|
+
if (action === undefined || action === '--help' || action === '-h') {
|
|
29
|
+
printSecretUsage();
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
if (action === 'add') {
|
|
33
|
+
const name = args[1];
|
|
34
|
+
const value = args[2];
|
|
35
|
+
if (!name || !value) {
|
|
36
|
+
printErr('agentfs secret add: requires <name> <value>');
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
await addSecret(vaultRoot, name, value);
|
|
40
|
+
print(`✓ Secret '${name}' added. Reference: \${{secret:${name}}}`);
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
if (action === 'remove') {
|
|
44
|
+
const name = args[1];
|
|
45
|
+
if (!name) {
|
|
46
|
+
printErr('agentfs secret remove: requires <name>');
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
const removed = await removeSecret(vaultRoot, name);
|
|
50
|
+
if (removed) {
|
|
51
|
+
print(`✓ Secret '${name}' removed.`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
printErr(`Secret '${name}' not found.`);
|
|
55
|
+
return 1;
|
|
56
|
+
}
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
if (action === 'list') {
|
|
60
|
+
const names = await listSecrets(vaultRoot);
|
|
61
|
+
if (names.length === 0) {
|
|
62
|
+
print('No secrets stored.');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
print('');
|
|
66
|
+
print('Stored Secrets');
|
|
67
|
+
print('═'.repeat(50));
|
|
68
|
+
for (const name of names) {
|
|
69
|
+
print(` 🔑 ${name}`);
|
|
70
|
+
}
|
|
71
|
+
print('');
|
|
72
|
+
print(` Total: ${names.length} secret(s)`);
|
|
73
|
+
print('');
|
|
74
|
+
}
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
if (action === 'rotate') {
|
|
78
|
+
const name = args[1];
|
|
79
|
+
const newValue = args[2];
|
|
80
|
+
if (!name || !newValue) {
|
|
81
|
+
printErr('agentfs secret rotate: requires <name> <new-value>');
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
84
|
+
const rotated = await rotateSecret(vaultRoot, name, newValue);
|
|
85
|
+
if (rotated) {
|
|
86
|
+
print(`✓ Secret '${name}' rotated.`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
printErr(`Secret '${name}' not found.`);
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
printErr(`agentfs secret: unknown action '${action}'`);
|
|
95
|
+
printSecretUsage();
|
|
96
|
+
return 1;
|
|
97
|
+
}
|
|
98
|
+
function printSecretUsage() {
|
|
99
|
+
print('');
|
|
100
|
+
print('Usage: agentfs secret <action>');
|
|
101
|
+
print('');
|
|
102
|
+
print('Actions:');
|
|
103
|
+
print(' add <name> <value> Add an encrypted secret');
|
|
104
|
+
print(' remove <name> Remove a secret');
|
|
105
|
+
print(' list List secret names (not values)');
|
|
106
|
+
print(' rotate <name> <val> Rotate (re-encrypt) a secret');
|
|
107
|
+
print('');
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/commands/secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentfs security` command implementation.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* agentfs security show — display current policy
|
|
6
|
+
* agentfs security mode <mode> — set enforcement mode (Story 7.5)
|
|
7
|
+
* agentfs security compile — compile to native settings (Story 7.2)
|
|
8
|
+
* agentfs security scan <file> — scan file for injections (Story 7.3)
|
|
9
|
+
* agentfs security add <name> — add composable module (Story 7.4)
|
|
10
|
+
* agentfs security remove <name> — remove composable module
|
|
11
|
+
* agentfs security list — list active security modules
|
|
12
|
+
*
|
|
13
|
+
* @module commands/security
|
|
14
|
+
*/
|
|
15
|
+
export declare function securityCommand(args: string[]): Promise<number>;
|
|
16
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/commands/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsCH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAkKrE"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentfs security` command implementation.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* agentfs security show — display current policy
|
|
6
|
+
* agentfs security mode <mode> — set enforcement mode (Story 7.5)
|
|
7
|
+
* agentfs security compile — compile to native settings (Story 7.2)
|
|
8
|
+
* agentfs security scan <file> — scan file for injections (Story 7.3)
|
|
9
|
+
* agentfs security add <name> — add composable module (Story 7.4)
|
|
10
|
+
* agentfs security remove <name> — remove composable module
|
|
11
|
+
* agentfs security list — list active security modules
|
|
12
|
+
*
|
|
13
|
+
* @module commands/security
|
|
14
|
+
*/
|
|
15
|
+
import fs from 'node:fs/promises';
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import { readSecurityPolicy, writeSecurityPolicy, scanForInjections, } from '../security/parser.js';
|
|
18
|
+
import { compileClaudeSecurity } from '../security/claude-compiler.js';
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Output helpers
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
function print(line) {
|
|
23
|
+
process.stdout.write(line + '\n');
|
|
24
|
+
}
|
|
25
|
+
function printErr(line) {
|
|
26
|
+
process.stderr.write(line + '\n');
|
|
27
|
+
}
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Security modes
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
const VALID_MODES = ['enforce', 'complain', 'disabled'];
|
|
32
|
+
function isSecurityMode(value) {
|
|
33
|
+
return VALID_MODES.includes(value);
|
|
34
|
+
}
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Main
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
export async function securityCommand(args) {
|
|
39
|
+
const vaultRoot = process.cwd();
|
|
40
|
+
const action = args[0];
|
|
41
|
+
if (action === undefined || action === '--help' || action === '-h') {
|
|
42
|
+
printSecurityUsage();
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
if (action === 'show') {
|
|
46
|
+
const policy = await readSecurityPolicy(vaultRoot);
|
|
47
|
+
print('');
|
|
48
|
+
print('Security Policy');
|
|
49
|
+
print('═'.repeat(50));
|
|
50
|
+
print(` Mode: ${policy.default_mode}`);
|
|
51
|
+
print(` Version: ${policy.version}`);
|
|
52
|
+
print('');
|
|
53
|
+
print(' File Access:');
|
|
54
|
+
print(` Allow write: ${policy.file_access.allow_write.join(', ')}`);
|
|
55
|
+
print(` Ask write: ${policy.file_access.ask_write.join(', ')}`);
|
|
56
|
+
print(` Deny read: ${policy.file_access.deny_read.join(', ')}`);
|
|
57
|
+
print(` Deny write: ${policy.file_access.deny_write.join(', ')}`);
|
|
58
|
+
print('');
|
|
59
|
+
print(' Input Validation:');
|
|
60
|
+
print(` Enabled: ${policy.input_validation.enabled}`);
|
|
61
|
+
print(` Patterns: ${policy.input_validation.scan_on_read.length}`);
|
|
62
|
+
print(` Action: ${policy.input_validation.action}`);
|
|
63
|
+
print('');
|
|
64
|
+
print(' Commands:');
|
|
65
|
+
print(` Blocked: ${policy.commands.blocked.join(', ')}`);
|
|
66
|
+
print(` Ask before: ${policy.commands.ask_before.join(', ')}`);
|
|
67
|
+
print('');
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
if (action === 'mode') {
|
|
71
|
+
const mode = args[1];
|
|
72
|
+
if (!mode || !isSecurityMode(mode)) {
|
|
73
|
+
printErr(`agentfs security mode: expected one of ${VALID_MODES.join(', ')}`);
|
|
74
|
+
return 1;
|
|
75
|
+
}
|
|
76
|
+
const policy = await readSecurityPolicy(vaultRoot);
|
|
77
|
+
policy.default_mode = mode;
|
|
78
|
+
await writeSecurityPolicy(vaultRoot, policy);
|
|
79
|
+
print(`Security mode set to: ${mode}`);
|
|
80
|
+
// Trigger recompile
|
|
81
|
+
await compileClaudeSecurity(vaultRoot, policy);
|
|
82
|
+
print('Security rules recompiled.');
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
if (action === 'compile') {
|
|
86
|
+
const policy = await readSecurityPolicy(vaultRoot);
|
|
87
|
+
const dryRun = args.includes('--dry-run');
|
|
88
|
+
const settings = await compileClaudeSecurity(vaultRoot, policy, dryRun);
|
|
89
|
+
const prefix = dryRun ? '[dry-run] ' : '';
|
|
90
|
+
print(`${prefix}Compiled security policy to .claude/settings.json`);
|
|
91
|
+
print(` Deny rules: ${settings.permissions?.deny?.length ?? 0}`);
|
|
92
|
+
print(` Ask rules: ${settings.permissions?.ask?.length ?? 0}`);
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
if (action === 'scan') {
|
|
96
|
+
const filePath = args[1];
|
|
97
|
+
if (!filePath) {
|
|
98
|
+
printErr('agentfs security scan: file path required');
|
|
99
|
+
return 1;
|
|
100
|
+
}
|
|
101
|
+
const policy = await readSecurityPolicy(vaultRoot);
|
|
102
|
+
let content;
|
|
103
|
+
try {
|
|
104
|
+
content = await fs.readFile(path.resolve(filePath), 'utf8');
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
printErr(`Cannot read file: ${filePath}`);
|
|
108
|
+
return 1;
|
|
109
|
+
}
|
|
110
|
+
const matches = scanForInjections(content, policy);
|
|
111
|
+
if (matches.length === 0) {
|
|
112
|
+
print('✓ No injection patterns detected.');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
print(`⚠ Found ${matches.length} injection pattern(s):`);
|
|
116
|
+
for (const match of matches) {
|
|
117
|
+
print(` - "${match}"`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return 0;
|
|
121
|
+
}
|
|
122
|
+
if (action === 'list') {
|
|
123
|
+
// List active security modules (in .agentos/security/modules/)
|
|
124
|
+
const modulesDir = path.join(vaultRoot, '.agentos/security/modules');
|
|
125
|
+
try {
|
|
126
|
+
const files = await fs.readdir(modulesDir);
|
|
127
|
+
const modules = files.filter((f) => f.endsWith('.yaml')).map((f) => f.replace('.yaml', ''));
|
|
128
|
+
if (modules.length === 0) {
|
|
129
|
+
print('No security modules active.');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
print('Active security modules:');
|
|
133
|
+
for (const m of modules) {
|
|
134
|
+
print(` 🛡️ ${m}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
print('No security modules active.');
|
|
140
|
+
}
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
if (action === 'add') {
|
|
144
|
+
const moduleName = args[1];
|
|
145
|
+
if (!moduleName) {
|
|
146
|
+
printErr('agentfs security add: module name required');
|
|
147
|
+
return 1;
|
|
148
|
+
}
|
|
149
|
+
const modulesDir = path.join(vaultRoot, '.agentos/security/modules');
|
|
150
|
+
await fs.mkdir(modulesDir, { recursive: true });
|
|
151
|
+
// Story 13.3: Simulate npm package installation for domain modules
|
|
152
|
+
const isNpmPackage = moduleName.startsWith('agentfs-security-');
|
|
153
|
+
const safeName = isNpmPackage ? moduleName.replace('agentfs-security-', '') : moduleName;
|
|
154
|
+
const modulePath = path.join(modulesDir, `${safeName}.yaml`);
|
|
155
|
+
let stub = '';
|
|
156
|
+
if (isNpmPackage) {
|
|
157
|
+
print(`Simulating installation of npm package: ${moduleName}...`);
|
|
158
|
+
stub = `# Security module: ${moduleName} (Community)\n# Managed by npm.\nrules: []\n`;
|
|
159
|
+
print(`✓ Installed and merged community module: ${moduleName}`);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
stub = `# Security module: ${safeName}\n# Add your custom security rules here.\nrules: []\n`;
|
|
163
|
+
print(`Added security module: ${safeName}`);
|
|
164
|
+
}
|
|
165
|
+
await fs.writeFile(modulePath, stub, 'utf8');
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
if (action === 'remove') {
|
|
169
|
+
const moduleName = args[1];
|
|
170
|
+
if (!moduleName) {
|
|
171
|
+
printErr('agentfs security remove: module name required');
|
|
172
|
+
return 1;
|
|
173
|
+
}
|
|
174
|
+
const modulePath = path.join(vaultRoot, '.agentos/security/modules', `${moduleName}.yaml`);
|
|
175
|
+
try {
|
|
176
|
+
await fs.unlink(modulePath);
|
|
177
|
+
print(`Removed security module: ${moduleName}`);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
printErr(`Module not found: ${moduleName}`);
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
printErr(`agentfs security: unknown action '${action}'`);
|
|
186
|
+
printSecurityUsage();
|
|
187
|
+
return 1;
|
|
188
|
+
}
|
|
189
|
+
function printSecurityUsage() {
|
|
190
|
+
print('');
|
|
191
|
+
print('Usage: agentfs security <action>');
|
|
192
|
+
print('');
|
|
193
|
+
print('Actions:');
|
|
194
|
+
print(' show Display current security policy');
|
|
195
|
+
print(' mode <mode> Set mode (enforce/complain/disabled)');
|
|
196
|
+
print(' compile [--dry-run] Compile policy to native rules');
|
|
197
|
+
print(' scan <file> Scan file for injection patterns');
|
|
198
|
+
print(' add <module> Add a composable security module');
|
|
199
|
+
print(' remove <module> Remove a security module');
|
|
200
|
+
print(' list List active security modules');
|
|
201
|
+
print('');
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/commands/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentfs sync` / `agentfs import` command implementations.
|
|
3
|
+
*
|
|
4
|
+
* @module commands/sync
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Entry point for `agentfs import` subcommand.
|
|
8
|
+
*/
|
|
9
|
+
export declare function importCommand(args: string[]): Promise<number>;
|
|
10
|
+
/**
|
|
11
|
+
* Entry point for `agentfs sync` subcommand.
|
|
12
|
+
*/
|
|
13
|
+
export declare function syncCommand(args: string[]): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyCjE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `agentfs sync` / `agentfs import` command implementations.
|
|
3
|
+
*
|
|
4
|
+
* @module commands/sync
|
|
5
|
+
*/
|
|
6
|
+
import { importFromOmc, exportToOmc, detectDrift } from '../sync/index.js';
|
|
7
|
+
function print(line) {
|
|
8
|
+
process.stdout.write(line + '\n');
|
|
9
|
+
}
|
|
10
|
+
function printErr(line) {
|
|
11
|
+
process.stderr.write(line + '\n');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Entry point for `agentfs import` subcommand.
|
|
15
|
+
*/
|
|
16
|
+
export async function importCommand(args) {
|
|
17
|
+
const vaultRoot = process.cwd();
|
|
18
|
+
const target = args[0];
|
|
19
|
+
if (target === undefined || target === '--help') {
|
|
20
|
+
print('');
|
|
21
|
+
print('Usage: agentfs import <source>');
|
|
22
|
+
print('');
|
|
23
|
+
print('Sources:');
|
|
24
|
+
print(' memory Import facts from .omc/project-memory.json');
|
|
25
|
+
print('');
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
if (target === 'memory') {
|
|
29
|
+
const result = await importFromOmc(vaultRoot);
|
|
30
|
+
if (result.errors.length > 0) {
|
|
31
|
+
for (const err of result.errors) {
|
|
32
|
+
printErr(` ✗ ${err}`);
|
|
33
|
+
}
|
|
34
|
+
if (result.imported === 0 && result.skipped === 0)
|
|
35
|
+
return 1;
|
|
36
|
+
}
|
|
37
|
+
print(`✓ Import complete: ${result.imported} imported, ${result.skipped} skipped.`);
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
printErr(`agentfs import: unknown source '${target}'`);
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Entry point for `agentfs sync` subcommand.
|
|
45
|
+
*/
|
|
46
|
+
export async function syncCommand(args) {
|
|
47
|
+
const vaultRoot = process.cwd();
|
|
48
|
+
const action = args[0];
|
|
49
|
+
if (action === '--help' || action === '-h') {
|
|
50
|
+
print('');
|
|
51
|
+
print('Usage: agentfs sync [action]');
|
|
52
|
+
print('');
|
|
53
|
+
print('Actions:');
|
|
54
|
+
print(' (none) Check drift between compiled outputs and manifest');
|
|
55
|
+
print(' push Export canonical memory to .omc/ format');
|
|
56
|
+
print('');
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
if (action === 'push') {
|
|
60
|
+
const count = await exportToOmc(vaultRoot);
|
|
61
|
+
if (count === 0) {
|
|
62
|
+
print('No semantic memory to export.');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
print(`✓ Exported ${count} entries to .omc/project-memory.json`);
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
// Default: drift detection
|
|
70
|
+
const managedFiles = ['CLAUDE.md', 'AGENTS.md'];
|
|
71
|
+
const results = await detectDrift(vaultRoot, managedFiles);
|
|
72
|
+
print('');
|
|
73
|
+
print('Drift Detection');
|
|
74
|
+
print('═'.repeat(50));
|
|
75
|
+
for (const r of results) {
|
|
76
|
+
const status = r.currentHash === 'MISSING' ? '❌ missing' : '✓ present';
|
|
77
|
+
print(` ${status} ${r.file}`);
|
|
78
|
+
}
|
|
79
|
+
print('');
|
|
80
|
+
print('Tip: Run `agentfs compile` to regenerate managed files.');
|
|
81
|
+
print('');
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENT-MAP.md generator — shared across all agent runtimes.
|
|
3
|
+
*
|
|
4
|
+
* Reads the agent-map.md.hbs template and renders it from the current
|
|
5
|
+
* CompileContext. The output is a single managed file at the vault root
|
|
6
|
+
* (`AGENT-MAP.md`) that gives any agent a unified view of the vault layout,
|
|
7
|
+
* active modules, and boot sequence.
|
|
8
|
+
*
|
|
9
|
+
* This is intentionally NOT an AgentCompiler because it belongs to no single
|
|
10
|
+
* agent — every compile run (for any target agent) should regenerate it.
|
|
11
|
+
*
|
|
12
|
+
* @module compilers/agent-map
|
|
13
|
+
*/
|
|
14
|
+
import type { CompileContext, CompileOutput } from '../types/index.js';
|
|
15
|
+
/**
|
|
16
|
+
* Render AGENTS.md from the current compile context.
|
|
17
|
+
*
|
|
18
|
+
* Reads `templates/compilers/agent-map.md.hbs` relative to this module's
|
|
19
|
+
* location (ESM-safe), compiles it with Handlebars, and returns a single
|
|
20
|
+
* managed CompileOutput at path `AGENTS.md`.
|
|
21
|
+
*
|
|
22
|
+
* The template data is built directly from `context.manifest`, exposing:
|
|
23
|
+
* - `vault` — name, owner
|
|
24
|
+
* - `agentos` — profile
|
|
25
|
+
* - `agents` — primary, supported array
|
|
26
|
+
* - `paths` — FhsPaths object (rendered as a table by the `pathTable` helper)
|
|
27
|
+
* - `boot` — sequence array
|
|
28
|
+
* - `modules` — optional active module list
|
|
29
|
+
*
|
|
30
|
+
* @param context - Compile context built by `buildCompileContext`
|
|
31
|
+
* @returns A single CompileOutput for AGENTS.md (managed: true)
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateAgentsFile(context: CompileContext): Promise<CompileOutput>;
|
|
34
|
+
//# sourceMappingURL=agent-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-map.d.ts","sourceRoot":"","sources":["../../src/compilers/agent-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAY,MAAM,mBAAmB,CAAC;AAGjF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAsCxF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENT-MAP.md generator — shared across all agent runtimes.
|
|
3
|
+
*
|
|
4
|
+
* Reads the agent-map.md.hbs template and renders it from the current
|
|
5
|
+
* CompileContext. The output is a single managed file at the vault root
|
|
6
|
+
* (`AGENT-MAP.md`) that gives any agent a unified view of the vault layout,
|
|
7
|
+
* active modules, and boot sequence.
|
|
8
|
+
*
|
|
9
|
+
* This is intentionally NOT an AgentCompiler because it belongs to no single
|
|
10
|
+
* agent — every compile run (for any target agent) should regenerate it.
|
|
11
|
+
*
|
|
12
|
+
* @module compilers/agent-map
|
|
13
|
+
*/
|
|
14
|
+
import fs from 'node:fs/promises';
|
|
15
|
+
import { compileTemplate } from './base.js';
|
|
16
|
+
/**
|
|
17
|
+
* Render AGENTS.md from the current compile context.
|
|
18
|
+
*
|
|
19
|
+
* Reads `templates/compilers/agent-map.md.hbs` relative to this module's
|
|
20
|
+
* location (ESM-safe), compiles it with Handlebars, and returns a single
|
|
21
|
+
* managed CompileOutput at path `AGENTS.md`.
|
|
22
|
+
*
|
|
23
|
+
* The template data is built directly from `context.manifest`, exposing:
|
|
24
|
+
* - `vault` — name, owner
|
|
25
|
+
* - `agentos` — profile
|
|
26
|
+
* - `agents` — primary, supported array
|
|
27
|
+
* - `paths` — FhsPaths object (rendered as a table by the `pathTable` helper)
|
|
28
|
+
* - `boot` — sequence array
|
|
29
|
+
* - `modules` — optional active module list
|
|
30
|
+
*
|
|
31
|
+
* @param context - Compile context built by `buildCompileContext`
|
|
32
|
+
* @returns A single CompileOutput for AGENTS.md (managed: true)
|
|
33
|
+
*/
|
|
34
|
+
export async function generateAgentsFile(context) {
|
|
35
|
+
// Resolve template path relative to this file — ESM-safe.
|
|
36
|
+
const templateUrl = new URL('../../templates/compilers/agent-map.md.hbs', import.meta.url);
|
|
37
|
+
const templateSource = await fs.readFile(templateUrl, 'utf-8');
|
|
38
|
+
const template = compileTemplate(templateSource);
|
|
39
|
+
const { manifest } = context;
|
|
40
|
+
// Build the data object that maps to the template's {{variable}} references.
|
|
41
|
+
const data = {
|
|
42
|
+
vault: {
|
|
43
|
+
name: manifest.vault.name,
|
|
44
|
+
owner: manifest.vault.owner,
|
|
45
|
+
},
|
|
46
|
+
agentos: {
|
|
47
|
+
profile: manifest.agentos.profile,
|
|
48
|
+
},
|
|
49
|
+
agents: {
|
|
50
|
+
primary: manifest.agents.primary,
|
|
51
|
+
supported: manifest.agents.supported,
|
|
52
|
+
},
|
|
53
|
+
paths: manifest.paths,
|
|
54
|
+
boot: {
|
|
55
|
+
sequence: manifest.boot.sequence,
|
|
56
|
+
},
|
|
57
|
+
modules: manifest.modules ?? [],
|
|
58
|
+
};
|
|
59
|
+
const content = template(data);
|
|
60
|
+
return {
|
|
61
|
+
path: 'AGENTS.md',
|
|
62
|
+
content,
|
|
63
|
+
managed: true,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=agent-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-map.js","sourceRoot":"","sources":["../../src/compilers/agent-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAuB;IAC9D,0DAA0D;IAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,4CAA4C,EAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAEjD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,6EAA6E;IAC7E,MAAM,IAAI,GAA2B;QACnC,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK;SAC5B;QACD,OAAO,EAAE;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO;SAClC;QACD,MAAM,EAAE;YACN,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;YAChC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;SACrC;QACD,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE;YACJ,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;SACjC;QACD,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;KAChC,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE/B,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO;QACP,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base compiler utilities — shared by all agent drivers.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to read manifest, load init.d scripts,
|
|
5
|
+
* read memory files, register Handlebars helpers, and write outputs.
|
|
6
|
+
*
|
|
7
|
+
* @module compilers/base
|
|
8
|
+
*/
|
|
9
|
+
import type { Manifest, CompileContext, CompileOutput } from '../types/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Read and parse `.agentos/manifest.yaml`.
|
|
12
|
+
*
|
|
13
|
+
* @param vaultRoot - Root directory of the vault
|
|
14
|
+
* @returns Parsed Manifest object
|
|
15
|
+
* @throws If manifest.yaml doesn't exist or is invalid YAML
|
|
16
|
+
*/
|
|
17
|
+
export declare function readManifest(vaultRoot: string): Promise<Manifest>;
|
|
18
|
+
/**
|
|
19
|
+
* Read all init.d/ scripts, keyed by filename.
|
|
20
|
+
*
|
|
21
|
+
* @param vaultRoot - Root directory of the vault
|
|
22
|
+
* @returns Map of filename → content
|
|
23
|
+
*/
|
|
24
|
+
export declare function readInitScripts(vaultRoot: string): Promise<Record<string, string>>;
|
|
25
|
+
/**
|
|
26
|
+
* Read semantic memory content.
|
|
27
|
+
*
|
|
28
|
+
* @param vaultRoot - Root directory of the vault
|
|
29
|
+
* @returns File content or null if not found
|
|
30
|
+
*/
|
|
31
|
+
export declare function readSemanticMemory(vaultRoot: string): Promise<string | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Read corrections memory content.
|
|
34
|
+
*
|
|
35
|
+
* @param vaultRoot - Root directory of the vault
|
|
36
|
+
* @returns File content or null if not found
|
|
37
|
+
*/
|
|
38
|
+
export declare function readCorrections(vaultRoot: string): Promise<string | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Build a complete CompileContext from a vault root.
|
|
41
|
+
*
|
|
42
|
+
* Reads manifest, init scripts, and memory in parallel.
|
|
43
|
+
*
|
|
44
|
+
* @param vaultRoot - Root directory of the vault
|
|
45
|
+
* @param dryRun - Whether to preview without writing
|
|
46
|
+
* @returns Complete context for compiler drivers
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildCompileContext(vaultRoot: string, dryRun?: boolean): Promise<CompileContext>;
|
|
49
|
+
/** Register custom Handlebars helpers used by all templates. */
|
|
50
|
+
export declare function registerHelpers(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Compile a Handlebars template string.
|
|
53
|
+
*
|
|
54
|
+
* @param source - Handlebars template source
|
|
55
|
+
* @returns Compiled template function
|
|
56
|
+
*/
|
|
57
|
+
export declare function compileTemplate(source: string): HandlebarsTemplateDelegate;
|
|
58
|
+
/**
|
|
59
|
+
* Write compile outputs to disk (or skip in dry-run mode).
|
|
60
|
+
*
|
|
61
|
+
* @param outputs - Files to write
|
|
62
|
+
* @param vaultRoot - Root directory
|
|
63
|
+
* @param dryRun - If true, don't write anything
|
|
64
|
+
* @returns List of paths that were written (or would be written)
|
|
65
|
+
*/
|
|
66
|
+
export declare function writeOutputs(outputs: CompileOutput[], vaultRoot: string, dryRun: boolean): Promise<string[]>;
|
|
67
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/compilers/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAIvE;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgBxF;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMlF;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAM/E;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,UAAQ,GACb,OAAO,CAAC,cAAc,CAAC,CASzB;AAMD,gEAAgE;AAChE,wBAAgB,eAAe,IAAI,IAAI,CAgDtC;AASD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,0BAA0B,CAE1E;AAMD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,aAAa,EAAE,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBnB"}
|