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,228 @@
1
+ /**
2
+ * `agentfs compile` command implementation.
3
+ *
4
+ * Reads `.agentos/manifest.yaml`, runs the appropriate compiler driver(s),
5
+ * always regenerates `AGENT-MAP.md`, and writes only files marked as managed
6
+ * (`output.managed === true`).
7
+ *
8
+ * Usage:
9
+ * ```
10
+ * agentfs compile # compile all agents from manifest
11
+ * agentfs compile claude # compile one agent only
12
+ * agentfs compile --dry-run # preview without writing
13
+ * agentfs compile claude --dry-run # preview for one agent
14
+ * ```
15
+ *
16
+ * @module commands/compile
17
+ */
18
+ import { buildCompileContext, writeOutputs } from '../compilers/base.js';
19
+ import { claudeCompiler } from '../compilers/claude.js';
20
+ import { openclawCompiler } from '../compilers/openclaw.js';
21
+ import { cursorCompiler } from '../compilers/cursor.js';
22
+ import { generateAgentsFile } from '../compilers/agent-map.js';
23
+ // ---------------------------------------------------------------------------
24
+ // Registry of all known compilers.
25
+ // ---------------------------------------------------------------------------
26
+ /** All compiler drivers supported by this release. */
27
+ const COMPILER_REGISTRY = {
28
+ claude: claudeCompiler,
29
+ openclaw: openclawCompiler,
30
+ cursor: cursorCompiler,
31
+ };
32
+ // ---------------------------------------------------------------------------
33
+ // Output helpers
34
+ // ---------------------------------------------------------------------------
35
+ /** Write to stdout. */
36
+ function print(line) {
37
+ process.stdout.write(line + '\n');
38
+ }
39
+ /** Write to stderr. */
40
+ function printErr(line) {
41
+ process.stderr.write(line + '\n');
42
+ }
43
+ /**
44
+ * Narrow a string to AgentRuntime.
45
+ *
46
+ * @param value - Candidate string from argv
47
+ * @returns true if `value` is a known AgentRuntime
48
+ */
49
+ function isAgentRuntime(value) {
50
+ return value === 'claude' || value === 'openclaw' || value === 'cursor';
51
+ }
52
+ /**
53
+ * Parse the argument vector passed to `compileCommand`.
54
+ *
55
+ * Accepts an optional positional agent name and a `--dry-run` flag in any
56
+ * position relative to the positional.
57
+ *
58
+ * @param args - Arguments after the `compile` subcommand token
59
+ * @returns Parsed compile args
60
+ */
61
+ function parseArgs(args) {
62
+ const dryRun = args.includes('--dry-run');
63
+ const positionals = args.filter((a) => !a.startsWith('--'));
64
+ const agentArg = positionals[0];
65
+ const agent = agentArg !== undefined && isAgentRuntime(agentArg) ? agentArg : undefined;
66
+ return { agent, dryRun };
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Summary printing
70
+ // ---------------------------------------------------------------------------
71
+ /**
72
+ * Print a human-readable compile summary to stdout.
73
+ *
74
+ * @param results - All CompileResult objects from agent drivers
75
+ * @param agentMapOutput - The AGENT-MAP.md output
76
+ * @param dryRun - Whether this was a preview run
77
+ */
78
+ function printSummary(results, agentMapOutput, dryRun) {
79
+ const verb = dryRun ? 'Would write' : 'Wrote';
80
+ const prefix = dryRun ? '[dry-run] ' : '';
81
+ print('');
82
+ print(`${prefix}AgentFS compile complete`);
83
+ print('');
84
+ for (const result of results) {
85
+ print(` Agent: ${result.agent}`);
86
+ for (const output of result.outputs) {
87
+ const managed = output.managed ? '' : ' (skipped — not managed)';
88
+ print(` ${verb}: ${output.path}${managed}`);
89
+ }
90
+ if (result.summary) {
91
+ print(` ${result.summary}`);
92
+ }
93
+ print('');
94
+ }
95
+ print(` ${verb}: ${agentMapOutput.path} (shared)`);
96
+ print('');
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Validation
100
+ // ---------------------------------------------------------------------------
101
+ /**
102
+ * Validate the compile context and return a list of warning messages.
103
+ *
104
+ * These are advisory only — warnings do not block compilation.
105
+ * Callers should print warnings to stderr before proceeding.
106
+ *
107
+ * @param context - The compile context to validate
108
+ * @returns Array of human-readable warning strings (empty if all clear)
109
+ */
110
+ export function validateContext(context) {
111
+ const warnings = [];
112
+ // Check that the identity init script has been filled in.
113
+ const identity = context.initScripts?.['00-identity.md'];
114
+ if (identity !== undefined && identity.includes('(to be filled)')) {
115
+ warnings.push('Warning: Identity not configured. Run `agentfs onboard` to set up your agent identity.');
116
+ }
117
+ // Check that a profile is defined in the manifest.
118
+ if (context.manifest?.agentos?.profile === undefined) {
119
+ warnings.push('Warning: No profile set in manifest.agentos.profile. Run `agentfs onboard` to configure.');
120
+ }
121
+ return warnings;
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Main command
125
+ // ---------------------------------------------------------------------------
126
+ /**
127
+ * Entry point for the `agentfs compile` subcommand.
128
+ *
129
+ * Orchestrates:
130
+ * 1. Building the compile context (reads manifest + init.d + memory).
131
+ * 2. Running the requested compiler driver(s).
132
+ * 3. Always generating AGENT-MAP.md.
133
+ * 4. Writing only outputs where `managed === true` (ownership protection).
134
+ * 5. Printing a human-readable summary.
135
+ *
136
+ * Ownership protection: this function never writes a file where
137
+ * `output.managed === false`. Unmanaged files are reported in the summary
138
+ * as skipped so callers can observe the decision.
139
+ *
140
+ * @param args - Arguments after the `compile` subcommand token
141
+ * (i.e. `process.argv.slice(3)` when called from the CLI)
142
+ * @returns 0 on success, 1 on error
143
+ */
144
+ export async function compileCommand(args) {
145
+ const { agent: targetAgent, dryRun } = parseArgs(args);
146
+ // Vault root is always the current working directory.
147
+ const vaultRoot = process.cwd();
148
+ // -------------------------------------------------------------------------
149
+ // Build compile context — fails fast if manifest.yaml is missing.
150
+ // -------------------------------------------------------------------------
151
+ let context;
152
+ try {
153
+ context = await buildCompileContext(vaultRoot, dryRun);
154
+ }
155
+ catch (err) {
156
+ const isNotFound = err !== null &&
157
+ typeof err === 'object' &&
158
+ err !== null &&
159
+ 'code' in err &&
160
+ err.code === 'ENOENT';
161
+ if (isNotFound) {
162
+ printErr('No AgentFS vault found. Run `npx create-agentfs` first.');
163
+ }
164
+ else {
165
+ printErr(`agentfs compile: failed to read manifest — ${err instanceof Error ? err.message : String(err)}`);
166
+ }
167
+ return 1;
168
+ }
169
+ // -------------------------------------------------------------------------
170
+ // Validate context — print warnings to stderr, never block compilation.
171
+ // -------------------------------------------------------------------------
172
+ for (const warning of validateContext(context)) {
173
+ printErr(warning);
174
+ }
175
+ // -------------------------------------------------------------------------
176
+ // Determine which compilers to run.
177
+ // -------------------------------------------------------------------------
178
+ let compilersToRun;
179
+ if (targetAgent !== undefined) {
180
+ // Single-agent mode: use the named compiler if it exists in the registry.
181
+ const compiler = COMPILER_REGISTRY[targetAgent];
182
+ if (compiler === undefined) {
183
+ printErr(`agentfs compile: no compiler found for agent '${targetAgent}'`);
184
+ return 1;
185
+ }
186
+ compilersToRun = [compiler];
187
+ }
188
+ else {
189
+ // All-agents mode: run compilers for every agent listed in the manifest.
190
+ const supportedAgents = context.manifest.agents.supported;
191
+ compilersToRun = supportedAgents
192
+ .map((name) => COMPILER_REGISTRY[name])
193
+ .filter((c) => c !== undefined);
194
+ if (compilersToRun.length === 0) {
195
+ printErr('agentfs compile: no supported compilers found for agents listed in manifest.');
196
+ return 1;
197
+ }
198
+ }
199
+ // -------------------------------------------------------------------------
200
+ // Run compilers and write outputs (managed files only).
201
+ // -------------------------------------------------------------------------
202
+ const results = [];
203
+ try {
204
+ for (const compiler of compilersToRun) {
205
+ const result = await compiler.compile(context);
206
+ results.push(result);
207
+ // Ownership protection — only write files AgentFS owns.
208
+ const managedOutputs = result.outputs.filter((o) => o.managed);
209
+ await writeOutputs(managedOutputs, vaultRoot, dryRun);
210
+ }
211
+ // -----------------------------------------------------------------------
212
+ // Always regenerate AGENT-MAP.md regardless of target agent.
213
+ // -----------------------------------------------------------------------
214
+ const agentMapOutput = await generateAgentsFile(context);
215
+ // AGENT-MAP.md is always managed — no extra guard needed, but we respect
216
+ // the contract anyway for consistency.
217
+ if (agentMapOutput.managed) {
218
+ await writeOutputs([agentMapOutput], vaultRoot, dryRun);
219
+ }
220
+ printSummary(results, agentMapOutput, dryRun);
221
+ return 0;
222
+ }
223
+ catch (err) {
224
+ printErr(`agentfs compile: unexpected error — ${err instanceof Error ? err.message : String(err)}`);
225
+ return 1;
226
+ }
227
+ }
228
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `agentfs cron` command implementation.
3
+ *
4
+ * Subcommands:
5
+ * agentfs cron list — list all registered cron jobs
6
+ * agentfs cron run <job> — run a specific job
7
+ * agentfs cron run-all — run all registered jobs
8
+ *
9
+ * @module commands/cron
10
+ */
11
+ /**
12
+ * Entry point for the `agentfs cron` subcommand.
13
+ *
14
+ * @param args - Arguments after the `cron` subcommand token
15
+ * @returns 0 on success, 1 on error
16
+ */
17
+ export declare function cronCommand(args: string[]): Promise<number>;
18
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/commands/cron.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDjE"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * `agentfs cron` command implementation.
3
+ *
4
+ * Subcommands:
5
+ * agentfs cron list — list all registered cron jobs
6
+ * agentfs cron run <job> — run a specific job
7
+ * agentfs cron run-all — run all registered jobs
8
+ *
9
+ * @module commands/cron
10
+ */
11
+ import { CRON_REGISTRY, runCronJob, runAllCronJobs } from '../cron/index.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Output helpers
14
+ // ---------------------------------------------------------------------------
15
+ function print(line) {
16
+ process.stdout.write(line + '\n');
17
+ }
18
+ function printErr(line) {
19
+ process.stderr.write(line + '\n');
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Main
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Entry point for the `agentfs cron` subcommand.
26
+ *
27
+ * @param args - Arguments after the `cron` subcommand token
28
+ * @returns 0 on success, 1 on error
29
+ */
30
+ export async function cronCommand(args) {
31
+ const vaultRoot = process.cwd();
32
+ const action = args[0];
33
+ if (action === undefined || action === '--help' || action === '-h') {
34
+ printCronUsage();
35
+ return 0;
36
+ }
37
+ if (action === 'list') {
38
+ print('');
39
+ print('Registered Cron Jobs');
40
+ print('═'.repeat(50));
41
+ for (const [key, job] of Object.entries(CRON_REGISTRY)) {
42
+ print(` ${key.padEnd(20)} ${job.description}`);
43
+ }
44
+ print('');
45
+ return 0;
46
+ }
47
+ if (action === 'run') {
48
+ const jobName = args[1];
49
+ if (!jobName) {
50
+ printErr('agentfs cron run: job name required');
51
+ printCronUsage();
52
+ return 1;
53
+ }
54
+ const result = await runCronJob(jobName, vaultRoot);
55
+ if (result.success) {
56
+ print(`✓ ${result.message}`);
57
+ }
58
+ else {
59
+ printErr(`✗ ${result.message}`);
60
+ }
61
+ return result.success ? 0 : 1;
62
+ }
63
+ if (action === 'run-all') {
64
+ const results = await runAllCronJobs(vaultRoot);
65
+ let hasFailure = false;
66
+ print('');
67
+ print('Cron Run Results');
68
+ print('═'.repeat(50));
69
+ for (const result of results) {
70
+ const icon = result.success ? '✓' : '✗';
71
+ print(` ${icon} [${result.job}] ${result.message}`);
72
+ if (!result.success)
73
+ hasFailure = true;
74
+ }
75
+ print('');
76
+ return hasFailure ? 1 : 0;
77
+ }
78
+ printErr(`agentfs cron: unknown action '${action}'`);
79
+ printCronUsage();
80
+ return 1;
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Usage
84
+ // ---------------------------------------------------------------------------
85
+ function printCronUsage() {
86
+ print('');
87
+ print('Usage: agentfs cron <action>');
88
+ print('');
89
+ print('Actions:');
90
+ print(' list List all registered cron jobs');
91
+ print(' run <job> Run a specific cron job');
92
+ print(' run-all Run all registered cron jobs');
93
+ print('');
94
+ }
95
+ //# sourceMappingURL=cron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/commands/cron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `agentfs doctor` command — Story 12.1.
3
+ * `agentfs migrate` command — Story 12.2.
4
+ * `agentfs triage` command — Story 12.3.
5
+ *
6
+ * @module commands/doctor
7
+ */
8
+ export declare function doctorCommand(_args: string[]): Promise<number>;
9
+ export declare function triageCommand(_args: string[]): Promise<number>;
10
+ export declare function migrateCommand(_args: string[]): Promise<number>;
11
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8EpE;AAMD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCpE;AAoBD,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDrE"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * `agentfs doctor` command — Story 12.1.
3
+ * `agentfs migrate` command — Story 12.2.
4
+ * `agentfs triage` command — Story 12.3.
5
+ *
6
+ * @module commands/doctor
7
+ */
8
+ import fs from 'node:fs/promises';
9
+ import path from 'node:path';
10
+ import { scanForInjections, readSecurityPolicy } from '../security/parser.js';
11
+ function print(line) {
12
+ process.stdout.write(line + '\n');
13
+ }
14
+ export async function doctorCommand(_args) {
15
+ const vaultRoot = process.cwd();
16
+ const checks = [];
17
+ // Check 1: .agentos/ exists
18
+ try {
19
+ await fs.access(path.join(vaultRoot, '.agentos'));
20
+ checks.push({ name: 'AgentFS directory', passed: true, message: '.agentos/ exists' });
21
+ }
22
+ catch {
23
+ checks.push({ name: 'AgentFS directory', passed: false, message: '.agentos/ not found' });
24
+ }
25
+ // Check 2: manifest.yaml exists
26
+ try {
27
+ await fs.access(path.join(vaultRoot, '.agentos/manifest.yaml'));
28
+ checks.push({ name: 'Manifest', passed: true, message: 'manifest.yaml found' });
29
+ }
30
+ catch {
31
+ checks.push({ name: 'Manifest', passed: false, message: 'manifest.yaml not found' });
32
+ }
33
+ // Check 3: init.d/ exists
34
+ try {
35
+ await fs.access(path.join(vaultRoot, '.agentos/init.d'));
36
+ checks.push({ name: 'Init scripts', passed: true, message: 'init.d/ exists' });
37
+ }
38
+ catch {
39
+ checks.push({ name: 'Init scripts', passed: false, message: 'init.d/ not found' });
40
+ }
41
+ // Check 4: memory directory exists
42
+ try {
43
+ await fs.access(path.join(vaultRoot, '.agentos/memory'));
44
+ checks.push({ name: 'Memory system', passed: true, message: 'memory/ exists' });
45
+ }
46
+ catch {
47
+ checks.push({ name: 'Memory system', passed: false, message: 'memory/ not found' });
48
+ }
49
+ // Check 5: Security policy
50
+ const policy = await readSecurityPolicy(vaultRoot);
51
+ checks.push({
52
+ name: 'Security policy',
53
+ passed: true,
54
+ message: `Mode: ${policy.default_mode}, ${policy.input_validation.scan_on_read.length} injection patterns`,
55
+ });
56
+ // Check 6: Scan compiled outputs for injection
57
+ try {
58
+ const claudeMd = await fs.readFile(path.join(vaultRoot, 'CLAUDE.md'), 'utf8');
59
+ const injections = scanForInjections(claudeMd, policy);
60
+ checks.push({
61
+ name: 'CLAUDE.md injection scan',
62
+ passed: injections.length === 0,
63
+ message: injections.length === 0 ? 'Clean' : `${injections.length} pattern(s) detected`,
64
+ });
65
+ }
66
+ catch {
67
+ checks.push({ name: 'CLAUDE.md injection scan', passed: true, message: 'Not compiled yet (skipped)' });
68
+ }
69
+ // Print results
70
+ print('');
71
+ print('AgentFS Doctor');
72
+ print('═'.repeat(50));
73
+ let failures = 0;
74
+ for (const check of checks) {
75
+ const icon = check.passed ? '✓' : '✗';
76
+ print(` ${icon} ${check.name}: ${check.message}`);
77
+ if (!check.passed)
78
+ failures++;
79
+ }
80
+ print('');
81
+ if (failures === 0) {
82
+ print(' All checks passed! Vault is healthy.');
83
+ }
84
+ else {
85
+ print(` ${failures} check(s) failed. Run \`agentfs init\` to fix.`);
86
+ }
87
+ print('');
88
+ return failures > 0 ? 1 : 0;
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Triage command — Story 12.3
92
+ // ---------------------------------------------------------------------------
93
+ export async function triageCommand(_args) {
94
+ const vaultRoot = process.cwd();
95
+ const inboxDir = path.join(vaultRoot, 'Inbox');
96
+ let files;
97
+ try {
98
+ const entries = await fs.readdir(inboxDir);
99
+ files = entries.filter((f) => f.endsWith('.md'));
100
+ }
101
+ catch {
102
+ print('No Inbox/ directory found. Nothing to triage.');
103
+ return 0;
104
+ }
105
+ if (files.length === 0) {
106
+ print('Inbox is empty. Nothing to triage.');
107
+ return 0;
108
+ }
109
+ print('');
110
+ print('Inbox Triage');
111
+ print('═'.repeat(50));
112
+ for (const file of files) {
113
+ const content = await fs.readFile(path.join(inboxDir, file), 'utf8');
114
+ const suggestion = suggestFromContent(content, file);
115
+ print(` 📄 ${file}`);
116
+ print(` → Suggested: ${suggestion}`);
117
+ print('');
118
+ }
119
+ print(' Use `mv` to move files to their suggested locations.');
120
+ print(' (Automatic moving is disabled by design — user must confirm.)');
121
+ print('');
122
+ return 0;
123
+ }
124
+ function suggestFromContent(content, filename) {
125
+ const lower = content.toLowerCase();
126
+ if (lower.includes('project') || lower.includes('sprint'))
127
+ return 'Projects/';
128
+ if (lower.includes('daily') || lower.includes('journal') || lower.includes('standup'))
129
+ return 'Daily/';
130
+ if (lower.includes('resource') || lower.includes('reference') || lower.includes('documentation'))
131
+ return 'Resources/';
132
+ if (lower.includes('meeting') || lower.includes('decision'))
133
+ return 'Decisions/';
134
+ // Check filename patterns
135
+ if (/^\d{4}-\d{2}-\d{2}/.test(filename))
136
+ return 'Daily/';
137
+ return 'Resources/ (default)';
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Migrate command — Story 12.2
141
+ // ---------------------------------------------------------------------------
142
+ export async function migrateCommand(_args) {
143
+ const vaultRoot = process.cwd();
144
+ // Check if already has .agentos
145
+ try {
146
+ await fs.access(path.join(vaultRoot, '.agentos'));
147
+ print('This vault already has .agentos/. Use `agentfs doctor` to check health.');
148
+ return 0;
149
+ }
150
+ catch {
151
+ // Expected — no .agentos yet
152
+ }
153
+ // Analyze existing vault
154
+ print('');
155
+ print('Migration Analysis');
156
+ print('═'.repeat(50));
157
+ let totalFiles = 0;
158
+ let mdFiles = 0;
159
+ let hasGit = false;
160
+ let hasOmc = false;
161
+ let hasClaude = false;
162
+ try {
163
+ const files = await fs.readdir(vaultRoot, { recursive: true });
164
+ for (const file of files) {
165
+ totalFiles++;
166
+ if (String(file).endsWith('.md'))
167
+ mdFiles++;
168
+ }
169
+ }
170
+ catch {
171
+ // Can't enumerate
172
+ }
173
+ try {
174
+ await fs.access(path.join(vaultRoot, '.git'));
175
+ hasGit = true;
176
+ }
177
+ catch { /* */ }
178
+ try {
179
+ await fs.access(path.join(vaultRoot, '.omc'));
180
+ hasOmc = true;
181
+ }
182
+ catch { /* */ }
183
+ try {
184
+ await fs.access(path.join(vaultRoot, 'CLAUDE.md'));
185
+ hasClaude = true;
186
+ }
187
+ catch { /* */ }
188
+ print(` Total files: ${totalFiles}`);
189
+ print(` Markdown files: ${mdFiles}`);
190
+ print(` Git repo: ${hasGit ? 'yes' : 'no'}`);
191
+ print(` OpenClaw config: ${hasOmc ? 'yes' : 'no'}`);
192
+ print(` CLAUDE.md: ${hasClaude ? 'yes' : 'no'}`);
193
+ print('');
194
+ print(' To migrate, run: agentfs init');
195
+ print(' This will create .agentos/ without modifying existing files.');
196
+ print('');
197
+ return 0;
198
+ }
199
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `agentfs memory` command implementation.
3
+ *
4
+ * Subcommands:
5
+ * agentfs memory show — display semantic memory with confidence
6
+ * agentfs memory show episodic [date] — display episodic entries
7
+ * agentfs memory show procedural [name]— display procedural skills
8
+ * agentfs memory consolidate — run manual consolidation
9
+ *
10
+ * @module commands/memory
11
+ */
12
+ /**
13
+ * Entry point for the `agentfs memory` subcommand.
14
+ *
15
+ * @param args - Arguments after the `memory` subcommand token
16
+ * @returns 0 on success, 1 on error
17
+ */
18
+ export declare function memoryCommand(args: string[]): Promise<number>;
19
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuMH;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BnE"}