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.
Files changed (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/cli.d.ts +51 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +246 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/compile.d.ts +48 -0
  8. package/dist/commands/compile.d.ts.map +1 -0
  9. package/dist/commands/compile.js +228 -0
  10. package/dist/commands/compile.js.map +1 -0
  11. package/dist/commands/cron.d.ts +18 -0
  12. package/dist/commands/cron.d.ts.map +1 -0
  13. package/dist/commands/cron.js +95 -0
  14. package/dist/commands/cron.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +11 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +199 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/memory.d.ts +19 -0
  20. package/dist/commands/memory.d.ts.map +1 -0
  21. package/dist/commands/memory.js +213 -0
  22. package/dist/commands/memory.js.map +1 -0
  23. package/dist/commands/onboard.d.ts +31 -0
  24. package/dist/commands/onboard.d.ts.map +1 -0
  25. package/dist/commands/onboard.js +362 -0
  26. package/dist/commands/onboard.js.map +1 -0
  27. package/dist/commands/secret.d.ts +13 -0
  28. package/dist/commands/secret.d.ts.map +1 -0
  29. package/dist/commands/secret.js +109 -0
  30. package/dist/commands/secret.js.map +1 -0
  31. package/dist/commands/security.d.ts +16 -0
  32. package/dist/commands/security.d.ts.map +1 -0
  33. package/dist/commands/security.js +203 -0
  34. package/dist/commands/security.js.map +1 -0
  35. package/dist/commands/sync.d.ts +14 -0
  36. package/dist/commands/sync.d.ts.map +1 -0
  37. package/dist/commands/sync.js +84 -0
  38. package/dist/commands/sync.js.map +1 -0
  39. package/dist/compilers/agent-map.d.ts +34 -0
  40. package/dist/compilers/agent-map.d.ts.map +1 -0
  41. package/dist/compilers/agent-map.js +66 -0
  42. package/dist/compilers/agent-map.js.map +1 -0
  43. package/dist/compilers/base.d.ts +67 -0
  44. package/dist/compilers/base.d.ts.map +1 -0
  45. package/dist/compilers/base.js +183 -0
  46. package/dist/compilers/base.js.map +1 -0
  47. package/dist/compilers/claude.d.ts +26 -0
  48. package/dist/compilers/claude.d.ts.map +1 -0
  49. package/dist/compilers/claude.js +151 -0
  50. package/dist/compilers/claude.js.map +1 -0
  51. package/dist/compilers/cursor.d.ts +11 -0
  52. package/dist/compilers/cursor.d.ts.map +1 -0
  53. package/dist/compilers/cursor.js +52 -0
  54. package/dist/compilers/cursor.js.map +1 -0
  55. package/dist/compilers/index.d.ts +14 -0
  56. package/dist/compilers/index.d.ts.map +1 -0
  57. package/dist/compilers/index.js +14 -0
  58. package/dist/compilers/index.js.map +1 -0
  59. package/dist/compilers/openclaw.d.ts +12 -0
  60. package/dist/compilers/openclaw.d.ts.map +1 -0
  61. package/dist/compilers/openclaw.js +51 -0
  62. package/dist/compilers/openclaw.js.map +1 -0
  63. package/dist/cron/index.d.ts +10 -0
  64. package/dist/cron/index.d.ts.map +1 -0
  65. package/dist/cron/index.js +9 -0
  66. package/dist/cron/index.js.map +1 -0
  67. package/dist/cron/jobs/consolidate.d.ts +16 -0
  68. package/dist/cron/jobs/consolidate.d.ts.map +1 -0
  69. package/dist/cron/jobs/consolidate.js +61 -0
  70. package/dist/cron/jobs/consolidate.js.map +1 -0
  71. package/dist/cron/jobs/heartbeat.d.ts +11 -0
  72. package/dist/cron/jobs/heartbeat.d.ts.map +1 -0
  73. package/dist/cron/jobs/heartbeat.js +66 -0
  74. package/dist/cron/jobs/heartbeat.js.map +1 -0
  75. package/dist/cron/jobs/inbox-triage.d.ts +11 -0
  76. package/dist/cron/jobs/inbox-triage.d.ts.map +1 -0
  77. package/dist/cron/jobs/inbox-triage.js +85 -0
  78. package/dist/cron/jobs/inbox-triage.js.map +1 -0
  79. package/dist/cron/runner.d.ts +32 -0
  80. package/dist/cron/runner.d.ts.map +1 -0
  81. package/dist/cron/runner.js +69 -0
  82. package/dist/cron/runner.js.map +1 -0
  83. package/dist/cron/types.d.ts +21 -0
  84. package/dist/cron/types.d.ts.map +1 -0
  85. package/dist/cron/types.js +6 -0
  86. package/dist/cron/types.js.map +1 -0
  87. package/dist/generators/filesystem.d.ts +52 -0
  88. package/dist/generators/filesystem.d.ts.map +1 -0
  89. package/dist/generators/filesystem.js +155 -0
  90. package/dist/generators/filesystem.js.map +1 -0
  91. package/dist/generators/ignore.d.ts +38 -0
  92. package/dist/generators/ignore.d.ts.map +1 -0
  93. package/dist/generators/ignore.js +154 -0
  94. package/dist/generators/ignore.js.map +1 -0
  95. package/dist/generators/index.d.ts +14 -0
  96. package/dist/generators/index.d.ts.map +1 -0
  97. package/dist/generators/index.js +14 -0
  98. package/dist/generators/index.js.map +1 -0
  99. package/dist/generators/init.d.ts +37 -0
  100. package/dist/generators/init.d.ts.map +1 -0
  101. package/dist/generators/init.js +169 -0
  102. package/dist/generators/init.js.map +1 -0
  103. package/dist/generators/manifest.d.ts +31 -0
  104. package/dist/generators/manifest.d.ts.map +1 -0
  105. package/dist/generators/manifest.js +123 -0
  106. package/dist/generators/manifest.js.map +1 -0
  107. package/dist/generators/memory.d.ts +36 -0
  108. package/dist/generators/memory.d.ts.map +1 -0
  109. package/dist/generators/memory.js +106 -0
  110. package/dist/generators/memory.js.map +1 -0
  111. package/dist/generators/profiles.d.ts +22 -0
  112. package/dist/generators/profiles.d.ts.map +1 -0
  113. package/dist/generators/profiles.js +92 -0
  114. package/dist/generators/profiles.js.map +1 -0
  115. package/dist/generators/prompts.d.ts +24 -0
  116. package/dist/generators/prompts.d.ts.map +1 -0
  117. package/dist/generators/prompts.js +122 -0
  118. package/dist/generators/prompts.js.map +1 -0
  119. package/dist/generators/scaffold.d.ts +29 -0
  120. package/dist/generators/scaffold.d.ts.map +1 -0
  121. package/dist/generators/scaffold.js +90 -0
  122. package/dist/generators/scaffold.js.map +1 -0
  123. package/dist/index.d.ts +14 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +13 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/memory/confidence.d.ts +69 -0
  128. package/dist/memory/confidence.d.ts.map +1 -0
  129. package/dist/memory/confidence.js +125 -0
  130. package/dist/memory/confidence.js.map +1 -0
  131. package/dist/memory/episodic.d.ts +40 -0
  132. package/dist/memory/episodic.d.ts.map +1 -0
  133. package/dist/memory/episodic.js +139 -0
  134. package/dist/memory/episodic.js.map +1 -0
  135. package/dist/memory/index.d.ts +17 -0
  136. package/dist/memory/index.d.ts.map +1 -0
  137. package/dist/memory/index.js +17 -0
  138. package/dist/memory/index.js.map +1 -0
  139. package/dist/memory/parser.d.ts +73 -0
  140. package/dist/memory/parser.d.ts.map +1 -0
  141. package/dist/memory/parser.js +156 -0
  142. package/dist/memory/parser.js.map +1 -0
  143. package/dist/memory/procedural.d.ts +43 -0
  144. package/dist/memory/procedural.d.ts.map +1 -0
  145. package/dist/memory/procedural.js +126 -0
  146. package/dist/memory/procedural.js.map +1 -0
  147. package/dist/secrets/exfil-guard.d.ts +31 -0
  148. package/dist/secrets/exfil-guard.d.ts.map +1 -0
  149. package/dist/secrets/exfil-guard.js +51 -0
  150. package/dist/secrets/exfil-guard.js.map +1 -0
  151. package/dist/secrets/index.d.ts +8 -0
  152. package/dist/secrets/index.d.ts.map +1 -0
  153. package/dist/secrets/index.js +7 -0
  154. package/dist/secrets/index.js.map +1 -0
  155. package/dist/secrets/vault.d.ts +63 -0
  156. package/dist/secrets/vault.d.ts.map +1 -0
  157. package/dist/secrets/vault.js +163 -0
  158. package/dist/secrets/vault.js.map +1 -0
  159. package/dist/security/claude-compiler.d.ts +28 -0
  160. package/dist/security/claude-compiler.d.ts.map +1 -0
  161. package/dist/security/claude-compiler.js +66 -0
  162. package/dist/security/claude-compiler.js.map +1 -0
  163. package/dist/security/index.d.ts +7 -0
  164. package/dist/security/index.d.ts.map +1 -0
  165. package/dist/security/index.js +7 -0
  166. package/dist/security/index.js.map +1 -0
  167. package/dist/security/parser.d.ts +47 -0
  168. package/dist/security/parser.d.ts.map +1 -0
  169. package/dist/security/parser.js +136 -0
  170. package/dist/security/parser.js.map +1 -0
  171. package/dist/sync/index.d.ts +7 -0
  172. package/dist/sync/index.d.ts.map +1 -0
  173. package/dist/sync/index.js +6 -0
  174. package/dist/sync/index.js.map +1 -0
  175. package/dist/sync/sync.d.ts +46 -0
  176. package/dist/sync/sync.d.ts.map +1 -0
  177. package/dist/sync/sync.js +174 -0
  178. package/dist/sync/sync.js.map +1 -0
  179. package/dist/types/compiler.d.ts +81 -0
  180. package/dist/types/compiler.d.ts.map +1 -0
  181. package/dist/types/compiler.js +10 -0
  182. package/dist/types/compiler.js.map +1 -0
  183. package/dist/types/index.d.ts +15 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/dist/types/index.js +10 -0
  186. package/dist/types/index.js.map +1 -0
  187. package/dist/types/manifest.d.ts +112 -0
  188. package/dist/types/manifest.d.ts.map +1 -0
  189. package/dist/types/manifest.js +10 -0
  190. package/dist/types/manifest.js.map +1 -0
  191. package/dist/types/memory.d.ts +85 -0
  192. package/dist/types/memory.d.ts.map +1 -0
  193. package/dist/types/memory.js +20 -0
  194. package/dist/types/memory.js.map +1 -0
  195. package/dist/types/security.d.ts +67 -0
  196. package/dist/types/security.d.ts.map +1 -0
  197. package/dist/types/security.js +10 -0
  198. package/dist/types/security.js.map +1 -0
  199. package/dist/types/setup.d.ts +54 -0
  200. package/dist/types/setup.d.ts.map +1 -0
  201. package/dist/types/setup.js +9 -0
  202. package/dist/types/setup.js.map +1 -0
  203. package/dist/utils/fhs-mapping.d.ts +76 -0
  204. package/dist/utils/fhs-mapping.d.ts.map +1 -0
  205. package/dist/utils/fhs-mapping.js +189 -0
  206. package/dist/utils/fhs-mapping.js.map +1 -0
  207. package/package.json +58 -0
  208. package/templates/compilers/agent-map.md.hbs +36 -0
  209. package/templates/compilers/claude.md.hbs +95 -0
  210. package/templates/procedural/code-review.md +54 -0
  211. 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"}